The Tool nodes folio-assistant-core declares in its tools graph — one instance’s slice of every instance’s tools.

A skill states a capability generically: what an actor needs to know to perform a task. A Tool is one concrete way to exercise it, with an installation, an invocation and typed inputs and outputs. One skill may be satisfied by several tools, and one tool may satisfy several skills.

They are separate graphs and this is the tools one. The relation between them is satisfies, and it runs from a tool to a skill — this tool is one way to do that, never this skill is a tool.

How they are invoked, and installed

A tool may declare more than one invocation, so these do not sum to the total.

invocationtools
shell12
installationtools
none12

Does every satisfies name a skill that exists?

Yes — all 9 skills named across 12 tools resolve to a skill document in this checkout. A satisfies pointing at nothing would be a tool advertising a capability the graph cannot locate.

Every tool

toolwhat it doesinvokedsatisfiesi/o
bibliography-page
Bibliography page
Render every reference in the checkout (each declared references directory’s folio-reference/v1 nodes and each catalogue directory’s Dublin Core records) as the bibliography page and one page per sub-graph, each with its BibTeX, CSL-JSON, RIS and Dublin Core JSON-LD exports and a per-reference export, at the route of the visualiser core declares for it.shellgraph-rendering2 in / 1 out
block-actions
Block edit and feedback links
Each labelled block’s links back to where it can be changed: [edit] opens the block’s Markdown source in GitHub’s editor on main, and [feedback] opens a new GitHub issue about the block, from the folio’s .github/ISSUE_TEMPLATE/block-feedback.yml when it has one (prefilling only the fields it declares: block, section, source, page, url) or as a plain issue whose body carries the same facts. The document build draws these on every block; this Tool prints them as JSON for one block or all. Governed by the block-actions skill (bean uphx, REQ-17).shellblock-actions5 in / 1 out
dublin-core-render
Dublin Core renderings
Render every folio-dublin-core/v1 record a catalogue item names as Dublin Core XML (qualified DC, per DCMI’s XML guidelines) and as JSON-LD bound to DCMI Metadata Terms. Both are written into the instance’s published root (<instanceRoot>/dublin-core/<stem>.dc.xml and .dc.jsonld), so the site mount publishes them beside the item pages. Deterministic. --check fails on a missing, stale or orphaned rendering. Governed by the dublin-core-renderings skill (bean 7eak).shelldublin-core-renderings2 in / 1 out
folio-changeset
Folio ChangeSet
What changed in a folio between two git refs, block by block: each block added, removed, or changed — and for a changed block, every aspect that applies (renamed, prose, manifest, moved). Keyed on the block label, which the id-unique / id-stable QA criteria guard, not on file paths.shelldiff
staging-review
5 in / 1 out
folio-review-comment-move
Move a review comment’s status
A review-process task moves one review-comment/1.0.0 todo’s status (address, send back, resolve, adjudicate, withdraw) through transition(), which refuses any move the named BPMN task may not make. The comment is written to the folio’s todos graph (its declared todo-feedback directory) and, with --commit, committed to the edit-set’s FEATURE branch. Refused on the base branch and on a detached HEAD.shellreview-comments9 in / 1 out
folio-review-comments
Folio review comments
Ingest a pull request’s tagged conversation comments (block: <label> on the first line) into review-comment/1.0.0 todos, and write them as review-comments.json. Idempotent over its previous output, whose statuses it keeps. Re-anchors every comment against the head’s blocks, following renamedFrom, and orphans a comment whose block is gone rather than dropping it.shellreview-comments10 in / 1 out
folio-review-coverage
Folio review coverage
Compute the two facts content-change-review.bpmn’s coverage gate (GW_Covered) reads: uncoveredBlocks, the changed blocks with no reviewer verdict on their CURRENT hash, and openDefects. Reads a preview’s changeset.json, blocks.json and review-comments.json. With --commit, writes the ingested folio-review-verdict/v1 verdicts into the todos graph’s declared review-verdicts directory and commits them to the edit-set’s FEATURE branch; refused on the base branch and a detached HEAD. Prints the facts as JSON on stdout.shellreview-comments7 in / 1 out
glossary-build
Glossary build
Build a paper’s glossary index from its manifests and render the LaTeX. --check reports drift instead of writing, comparing everything except the generated timestamp so a re-run is not mistaken for a change.shelldocument-intake2 in / 1 out
glossary-page
Glossary page
Render every declared glossary — authored SKOS schemes, the swimlane ledger and the terms extracted from knowledge-graph assets — as the glossary page and one page per asset type, at the route of the visualiser core declares for it.shellgraph-rendering2 in / 1 out
l1-coverage
L1 extraction coverage
Of the normative sentences in a publication (the closed marker list of smart-kg’s docs/COVERAGE.md §1), count how many an L1 extraction CAPTURED, how many are EXCLUDED for a fixed-list reason a person signed off, and how many are UNACCOUNTED — per page and in total. Writes the contract’s §4 report and exits non-zero below 100% accounted-for. Issue #2405 FR-009.shelll1-coverage4 in / 1 out
tabular-csv
CSV tabular metadata
Read a delimited text file into a folio-tabular-csvw/v1 record: one table, its columns and their CSVW datatypes, each measured or explicitly undetermined. Routing is by content, never by extension: the first rows must agree on one field count of two or more, under exactly one of , ; TAB \|. A CSV’s fac:anchor sheet and cell are a determined null. Governed by the tabular-metadata skill (bean eief).shelltabular-metadata3 in / 1 out
tabular-xlsx
Spreadsheet tabular metadata
Read a workbook into a folio-tabular-csvw/v1 record, one CSVW table per rectangular block of cells. Blocks are split on empty rows, then on empty columns, so several tables on one sheet are found, each anchored at its real top-left cell (fac:anchor: sheet, A1 cell, row, column). Dates are read through the number formats in styles.xml, not misread as integer serials. A malformed part is refused rather than half-read. No new dependency: ZIP via node:zlib, SpreadsheetML via fast-xml-parser. Governed by the tabular-metadata skill (bean eief).shelltabular-metadata3 in / 1 out

folio-assistant — code under the Apache License 2.0, documentation under CC BY 3.0. Generated schema and API references are rebuilt from source on every push to main.

deployed b08c961 · 2026-10-23T23:11:09Z