iii-directory
v0.5.0Engine 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
Batch-read skill bodies by iii:// URI or bare skill path
how-toWhen to use
Call directory::skills::fetch-skill whenever you need the body of
one or more skill resources — skill markdown, the auto-rendered skills
index, or the output of a function exposed as a section URI. It's the
canonical read tool for the iii-directory worker; everything else
(directory::skills::list, iii://directory/skills, the system-prompt
skills bootstrap) ultimately funnels through it.
Reach for it when:
- You hit an
iii://...link inside another skill and need its contents inlined. - You want the rendered skills index (
iii://directory/skills) to bootstrap an agent's awareness of every available skill. - You want to call a function and treat the response as a markdown
section rather than as JSON (
iii://fn///...).
The batch form (uris: [...]) is the right call when you have a known
set of links to load up-front — it does one round trip per call and
joins the bodies for you.
Inputs
Each entry may be either a full iii:// URI or a bare skill path (the
id returned by directory::skills::list). Bare paths are
auto-prefixed with iii:// so callers don't have to repeat the scheme.
Single entry:
{ "uri": "iii://agent-memory/observe" }or, equivalently, a bare path:
{ "uri": "agent-memory/observe" }Batched:
{ "uris": [
"iii://directory/skills",
"agent-memory",
"agent-memory/observe",
"iii://fn/agent-memory/health"
] }When both uri and uris are provided, uris wins (matches the TS
reference implementation). Empty / blank entries are dropped; a string
that contains :// but does not start with iii:// is rejected.
URI shapes accepted:
| URI | Resolves to |
|---|---|
iii://directory/skills |
Auto-rendered tree-shaped index of every fs-backed skill. |
iii://{id} |
Body of . Any depth. First segment may not be fn. |
iii://fn/{a}/{b}/.../{leaf} |
Trigger function a::b::...::leaf with {} and serve its output as text. |
Outputs
A plain markdown string. When multiple URIs are passed, sections are
wrapped as # {uri}\n\n{body} and joined with \n\n---\n\n.
# iii://agent-memory
## agent-memory router
- [`agent-memory`](iii://agent-memory)
- [`mem::observe`](iii://agent-memory/observe) — record an event
---
# iii://agent-memory/observe
# How to observe
...There's no JSON envelope; downstream callers should treat the body as
opaque markdown and only inspect / split on the \n\n---\n\n boundary
when they passed multiple URIs.
Worked example
Bootstrap an agent on every root skill in one round trip:
{ "uris": ["iii://directory/skills", "agent-memory", "shell"] }Inline a function-backed section URI from a how-to:
{ "uri": "iii://fn/agent-memory/health" }Related
directory::skills::list— discover the ids that resolve viaiii://{id}(or pass to this function as bare paths).directory::skills::download— populateskills_folderso there's something to fetch.directory::engine::functions::info— for the structured view of one function (schemas + how_guide + related_skills) instead of a rawiii://fn/...body.