iii-directory
v0.5.1Engine introspection (functions / triggers / workers), workers registry proxy, and filesystem-backed skill + prompt reader.
- macOS: arm64 · x64
- Linux: arm64 · armv7 · x64
- Windows: arm64 · x64 · x86
skill doc
Enumerate every skill on disk with title and description
how-toWhen to use
Call directory::skills::list when you need an enumeration of every
markdown skill the iii-directory worker is currently serving from its
skills_folder. One row per file (recursive **/*.md, prompts/
segments excluded), sorted lex by id. Each row already carries the
H1 title and first-paragraph description so a picker / table-of-
contents UI doesn't need a follow-up directory::skills::get per row.
This is the single "what's on disk?" call. Use it when:
- You want to verify a
directory::skills::downloadactually wrote what you expect. - You're building a picker / autocomplete UI and need a flat list of ids + labels rather than bodies.
- You want to discover root-level skill ids (no
/) to bootstrap a system prompt. - You want to render an indented tree client-side (depth =
id.matches('/').count()).
Inputs
{}No parameters. The worker scans skills_folder on every call and
reads each body to populate title + description — file edits are
visible immediately, no caching.
Outputs
{
"skills": [
{
"id": "agent-memory/observe",
"title": "How to observe",
"description": "Record an event in agent memory.",
"bytes": 1234,
"modified_at": "2026-05-01T12:34:56+00:00"
}
]
}idis the relative path underskills_folderwith.mdstripped (e.g.agent-memory/observe.md→agent-memory/observe). Same stringdirectory::skills::getaccepts.titleis the first# H1line in the body, falling back toidwhen the file has no H1.descriptionis the first non-heading paragraph, empty when the file has only headings.bytesis the on-disk file size (raw, including frontmatter).modified_atis the file's mtime as RFC 3339 (empty if the FS doesn't expose it).
Rows are sorted lexicographically by id.
Worked example
After directory::skills::download {worker: "agent-memory"} (defaults
to tag: "latest"):
{}Returns one entry per markdown file the registry shipped under
, each with title + description
already populated.
To render a tree-shaped picker, walk the rows in order and indent each
by 2 * id.matches('/').count() spaces — the lex-sort already places
each child immediately after its parent.
Related
directory::skills::get— read one body by id (returns the sameid/title/description/modified_atplusbody).directory::skills::download— populateskills_folderfrom the registry or a GitHub repo.