skip to content
$worker

iii-directory

v1.2.15

Engine introspection, workers registry proxy, filesystem-backed skills, system prompts, and agent profiles, plus lexical function search with a conditional pre-generate hint.

iiiverified
2,916 installs25 in 7d1 today
install
$iii trigger compose::add worker=iii-directory@1.2.15
  • macOS: arm64
  • Linux: arm64 · armv7 · x64
  • Windows: arm64 · x64

exact versions are immutable; binary and bundle artifacts are digest-pinned.

functions

31

directory::__on_worker_added

function

Internal: auto-download skills on worker add event.

request
  • workerstring
response
  • okbooleanrequired

directory::agents::create

function

Create a new agent profile at <agents_folder>/<id>.md from full-file markdown (frontmatter with a non-empty `name`, emoji-only `logo`, optional `skills:` filter and `functions:` list of engine function ids to pre-load into sessions; the body is the system prompt and may be empty). Rejects ids or paths that already exist; a bundled id is shadowed.

request
  • contentstringrequired

    Full file content, frontmatter included; `name` is required, the body is the system prompt and may be empty.

  • idstringrequired

    New profile id, used as the file stem; lowercase ASCII, digits, `-` and `_` only, and not already taken.

response
  • bytesinteger· uintrequiredmin 0

    Bytes written.

  • descriptionstringrequired
  • idstringrequired
  • logostring
  • modified_atstringrequired

    File mtime after the write, RFC 3339.

  • namestringrequired

    Display name parsed from the (new) frontmatter.

directory::agents::delete

function

Delete one existing agent profile's markdown file by id. Deleting the local shadow of a bundled profile falls back to the bundled copy; profiles that extend it stop resolving until fixed.

request
  • idstringrequired

    Existing agent profile id, as returned by `directory::agents::list`.

response
  • idstringrequired

directory::agents::functions::add

function

Add preloaded functions to one existing agent profile: appends the given engine function ids (e.g. `coder::tree`) to the profile's own `functions:` list — the contracts the harness pre-loads into the system prompt of every new session running as this profile. Ids already present are kept once; the rest of the file is untouched. Editing a bundled profile creates the local file that shadows it.

request
  • functionsstring[]required

    Engine function ids (e.g. `coder::tree`), verbatim, one per entry.

  • idstringrequired

    Existing agent profile id, as returned by `directory::agents::list`.

response
  • addedstring[]required

    Ids this call actually added (already-present ids are not repeated).

  • bytesinteger· uintrequiredmin 0

    Bytes on disk after the call.

  • functionsstring[]required

    The profile's OWN `functions:` list after the write (not resolved through `extends`), in file order.

  • idstringrequired
  • modified_atstringrequired

    File mtime after the call, RFC 3339.

  • removedstring[]required

    Ids this call actually removed (absent ids are ignored).

  • unchangedbooleanrequired

    True when the request changed nothing; the file was not rewritten.

directory::agents::functions::remove

function

Remove preloaded functions from one existing agent profile: drops the given engine function ids from the profile's own `functions:` list (ids not present are ignored); the rest of the file is untouched. Only the profile's OWN list is edited; ids inherited through `extends` stay (the resolved list is the union of the chain) and are removed on the parent.

request
  • functionsstring[]required

    Engine function ids (e.g. `coder::tree`), verbatim, one per entry.

  • idstringrequired

    Existing agent profile id, as returned by `directory::agents::list`.

response
  • addedstring[]required

    Ids this call actually added (already-present ids are not repeated).

  • bytesinteger· uintrequiredmin 0

    Bytes on disk after the call.

  • functionsstring[]required

    The profile's OWN `functions:` list after the write (not resolved through `extends`), in file order.

  • idstringrequired
  • modified_atstringrequired

    File mtime after the call, RFC 3339.

  • removedstring[]required

    Ids this call actually removed (absent ids are ignored).

  • unchangedbooleanrequired

    True when the request changed nothing; the file was not rewritten.

directory::agents::get

function

Fetch one agent profile by id: the system prompt resolved through its `extends` chain, display fields, preloaded `skills` (skill ids whose bodies the harness pre-loads into the session prompt) plus `unknown_skills`, preloaded `functions` (engine function ids the harness pre-loads into the session prompt) plus `unknown_functions`, model, reasoning_effort, and `inheritance_error` when the chain does not resolve. Pass raw: true for the exact on-disk file to edit with directory::agents::update.

request
  • idstringrequired
  • rawboolean

    When true, also return the exact on-disk file (frontmatter included) as `raw`, ready for directory::agents::update.

response
  • builtinbooleanrequired

    Bundled with the worker, no file behind it (see `list`).

  • colorstring

    Harness subagent color token (closed set, validated at write time); `null` = neutral.

  • descriptionstringrequired
  • extendsstring

    Parent profile id (`extends:`), as declared; `null` = none.

  • functionsstring[]required

    Preloaded functions, resolved through `extends` (the nearest profile with a non-empty list): engine function ids whose contracts the harness pre-loads into the system prompt of every session running as this profile, so the model calls them without discovery or a contract lookup. Empty = none.

  • iconstring

    Harness subagent icon token (closed set, validated at write time); `null` = caller picks.

  • idstringrequired
  • inheritance_errorstring

    Set when the `extends` chain does not resolve (unknown parent, loop, deeper than 8): `system_prompt` and the inherited fields then come from this file alone, `raw` still round-trips so the chain can be fixed, and the harness refuses to run the profile meanwhile.

  • logostring
  • modelstring

    Model id for sessions using this profile, resolved through `extends`; `null` = the send decides. Served verbatim — resolution against the live model catalog happens where it is used.

  • modified_atstringrequired

    File mtime as RFC 3339; empty for a bundled profile.

  • namestringrequired
  • rawstring

    FULL on-disk file content (this profile's own file, ancestors excluded). Present only when the request set `raw: true`.

  • reasoning_effortstring

    Provider-native reasoning effort paired with `model`, resolved through `extends`; `null` = the model/provider default. Served verbatim and validated at use time.

  • skillsstring[]required

    Preloaded skills, resolved through `extends` (the union of the chain's lists, root first): skill ids whose bodies the harness pre-loads into the system prompt of every session running as this profile. Empty = none. Never a filter on the skills index.

  • system_promptstringrequired

    The RESOLVED identity: every ancestor's body root-first, then this file's body, frontmatter stripped, joined by a blank line; blank bodies are skipped, so a profile with no prompt of its own serves its parent chain unchanged and a prompt-less profile without `extends` serves `""`. A profile that has a body and no `extends` serves that body verbatim.

  • unknown_functionsstring[]required

    `functions` entries the engine does not currently know (not registered right now, or a typo). Warnings — the profile still loads and the harness skips them; an empty list also results when the engine could not be asked.

  • unknown_skillsstring[]required

    `skills` entries that resolve to no currently visible skill. Warnings — the agent profile still loads and the harness renders them as unavailable.

directory::agents::list

function

List agent profiles (id, name, description, logo, icon, color, model, reasoning_effort, skill_count, function_count, extends, modified_at) from the agents folder plus the bundled ones (`builtin: true`). Inherited fields resolve through `extends`; skill_count null means no preloaded skills, function_count counts the preloaded functions (contracts injected into new sessions).

request
empty object
response
  • agentsobject[]required
    • builtinbooleanrequired

      Bundled with the worker, no file behind it: editing it creates the local file (which then shadows this entry); there is nothing to delete.

    • colorstring

      Harness subagent color token for display identities; `null` = neutral.

    • descriptionstringrequired
    • extendsstring

      Parent profile id (`extends:`), as declared; `null` = none.

    • function_countinteger· uintrequiredmin 0

      Number of preloaded functions (contracts the harness pre-loads into the session prompt), resolved through `extends`; `0` = none.

    • iconstring

      Harness subagent icon token for spawn display identities; `null` = caller picks.

    • idstringrequired

      Flat agent profile id (the file stem) — what `harness::send { options: { agent } }` will take.

    • inheritance_errorstring

      Set when the `extends` chain does not resolve (unknown parent, loop, too deep): the row carries the profile's own fields only, and the harness refuses to run it until the chain is fixed.

    • logostring

      Emoji logo, `null` when the agent profile has none.

    • modelstring

      Model id for sessions using this profile, resolved through `extends`; `null` = the send decides.

    • modified_atstringrequired

      File mtime as RFC 3339; empty for a bundled profile.

    • namestringrequired

      Display name from frontmatter (`name:`).

    • reasoning_effortstring

      Provider-native reasoning effort paired with `model`, resolved through `extends`; `null` = the model/provider default.

    • skill_countinteger· uintmin 0

      Number of preloaded skills (bodies the harness pre-loads into the session prompt), resolved through `extends`; `null` = none.

directory::agents::update

function

Overwrite one existing agent profile with full-file markdown (frontmatter with a non-empty `name`, emoji-only `logo`, optional `skills:` and `functions:` lists; the body is the system prompt and may be empty). Updating a bundled profile creates a local file that shadows it. To change only the preloaded functions, prefer directory::agents::functions::add / remove.

request
  • contentstringrequired

    FULL new file content, frontmatter block included — the string `directory::agents::get { raw: true }` returns, edited.

  • idstringrequired

    Existing agent profile id, as returned by `directory::agents::list`.

response
  • bytesinteger· uintrequiredmin 0

    Bytes written.

  • descriptionstringrequired
  • idstringrequired
  • logostring
  • modified_atstringrequired

    File mtime after the write, RFC 3339.

  • namestringrequired

    Display name parsed from the (new) frontmatter.

directory::engine::functions::info

function

Read full detail for one engine function: schemas, owning worker, and registered triggers that target it. Proxies to the engine's native engine::functions::info.

request
  • function_idstringrequired

    Fully-qualified function id on the bus (e.g. `sandbox::create`).

response
  • descriptionstring
  • function_idstringrequired
  • metadataunknown
  • registered_triggersobject[]required
    • configunknownrequired
    • idstringrequired
    • trigger_typestringrequired
  • request_schemaunknown
  • response_schemaunknown
  • worker_namestring

directory::hint-preview

function

Internal: the exact search-hint text per exposure mode, for the configuration UI.

request
empty object
response
  • agent_triggerstringrequired
  • nativestringrequired

directory::on-config-change

function

Internal: reload tunable iii-directory settings from the authoritative configuration when it changes.

request
empty object
response
  • okbooleanrequired

directory::on-functions-change

function

Internal: refresh the search catalog after the engine function set changes.

request
  • eventstring
response
  • okbooleanrequired

directory::pre-generate

function

Internal: inject the conditional search hint into one harness generation.

request
  • depthinteger· uint32requiredmin 0
  • generateobjectrequired
    • exposeall of

      How the harness exposes functions to the model for this generation. Absent on harnesses that predate the field, which only ever exposed through agent_trigger by default.

      all of (1)
      variant 1
      one of (2)
      variant 1
      valuestringenum: agent_trigger, native
      variant 2
      valuestringenum: other
    • functions_generationinteger· uint64requiredmin 0
    • messagesunknown[]required
    • system_promptstringrequired
    • toolsobject[]required
      • descriptionstringrequired
      • namestringrequired
      • parametersunknownrequired
  • session_idstringrequired
  • stepinteger· uint64requiredmin 0
  • turn_idstringrequired
response
  • annotationsobjectrequired
    • directoryobjectrequired
      • dataobjectrequired

        The durable transcript row for one hook pass. Coarse by design: outcome, reason, and counts only — no prompts, messages, tool contracts, session ids, or timings ever leave the hook.

        … expand 4 nested
        • allowed_functionsinteger· uint64requiredmin 0
        • functions_generationinteger· uint64requiredmin 0
        • outcomestringrequiredenum: hint_injected, skipped
        • reasonany of
          … expand 2 nested
          any of (2)
          variant 1
          valuestringenum: search_unavailable, already_searched, narrow_surface, already_operating, task_guided, hint_already_sent
          variant 2
          valuenull
      • summarystringrequired
      • typestringrequired
      • versioninteger· uint8requiredmin 0
  • decisionstringrequired
  • mutationsany of
    any of (2)
    variant 1
    • append_messagesunknown[]required

      Ephemeral tail messages for this generation only. The hint rides here rather than as a system-prompt mutation: the system prompt is the provider's first input item, and a once-per-turn append there invalidated the entire prompt-cache prefix twice per turn.

    variant 2
    valuenull

directory::registry::workers::info

function

Preview one registry worker before installing: envelope (version, kind, dependencies, config), its public function and trigger names with descriptions, and skill file paths. Schemas are omitted — install, then read contracts with engine::functions::info. Pass `readme: true` for the README prose; `version` or `tag` (default tag "latest").

request
  • namestringrequired

    Worker name in the registry (e.g. `"resend"`).

  • readmeboolean

    Include the README markdown (10–25 KB for most workers). Off by default: the card is for judging fit before `compose::add`; the README is for setup prose and examples.

  • tagstring
  • versionstring

    Mutually exclusive with `tag`. If neither is provided we fall back to `tag: "latest"`.

response
  • api_referenceobjectrequired
    • functionsobject[]
      • descriptionstring
      • metadataunknown
      • namestringrequired
      • request_schemaunknown
      • response_schemaunknown
    • triggersobject[]
      • descriptionstring
      • invocation_schemaunknown
      • metadataunknown
      • namestringrequired
      • return_schemaunknown
  • readmestring
  • skills_treeobjectrequired
    • skillsobject[]
      • pathstringrequired
  • workerall ofrequired

    Same shape as `directory::registry::workers::list` rows (and the engine's `engine::workers::list` rows for the shared core fields).

    all of (1)
    variant 1
    • authorany of
      … expand 2 nested
      any of (2)
      variant 1
      • namestring
      • pfpstring

        Profile picture URL. `null` when the author hasn't uploaded one.

      • verifiedboolean
      variant 2
      valuenull
    • configunknown

      Free-form runtime configuration block from the publish payload.

    • dependenciesobject[]
      … expand 2 nested
      • namestringrequired
      • versionstringrequired
    • descriptionstring
    • imagestring

      Container image tag, populated only for `type=image` workers.

    • namestringrequired
    • repostring
    • supported_targetsstring[]
    • total_downloadsinteger· uint64min 0
    • typestring

      Worker kind — `binary`, `image`, or `engine`.

    • versionstring

      Latest published version (worker-list) or the resolved version (worker-info, when called with `version` / `tag`).

directory::registry::workers::list

function

List workers from the public registry, optionally filtered by fuzzy `search` (default order: downloads). Cursor-paginated: pass back `pagination.next_cursor` as `cursor`.

request
  • cursorstring

    Cursor from a previous call's `pagination.next_cursor`; omit for the first page.

  • searchstring

    Optional free-text query, fuzzy-matched by the registry; omitted means ordered by downloads.

response
  • paginationobjectrequired

    Pagination envelope returned alongside a worker-list page. Mirrors the OpenAPI `Pagination` schema.

    • has_moreboolean
    • next_cursorstring

      Opaque cursor for the next page. `null` on the last page.

    • page_sizeinteger· uint32min 0

      Server-authored page size. The client cannot override this.

  • workersobject[]required
    • authorany of
      any of (2)
      variant 1
      • namestring
      • pfpstring

        Profile picture URL. `null` when the author hasn't uploaded one.

      • verifiedboolean
      variant 2
      valuenull
    • configunknown

      Free-form runtime configuration block from the publish payload.

    • dependenciesobject[]
      • namestringrequired
      • versionstringrequired
    • descriptionstring
    • imagestring

      Container image tag, populated only for `type=image` workers.

    • namestringrequired
    • repostring
    • supported_targetsstring[]
    • total_downloadsinteger· uint64min 0
    • typestring

      Worker kind — `binary`, `image`, or `engine`.

    • versionstring

      Latest published version (worker-list) or the resolved version (worker-info, when called with `version` / `tag`).

directory::search_functions

function

Search available functions for the unmet external capabilities of a step (usually one to six, at most eighteen per call); returns compact function-id candidates grouped by worker.

request
  • capabilitiesstring[]requiredmin 1 chars · min 1 items

    Non-empty capability searches derived from the goal and current execution state, usually one to six and at most eighteen per call (searched in batches of six). For one search at each decision point, include all unmet external capabilities once. Exclude intrinsic reasoning, summarization, planning, or formatting, and do not repeat needs already represented or satisfied. Requests to summarize provided text or content are ignored. Write every entry in English, translating non-English user requests while preserving proper names, URLs, and function IDs.

response
  • guidancestringrequired
  • installableobject[]required

    Matching workers from the private registry. Their functions are NOT callable until the worker is installed.

    • descriptionstringrequired
    • functionsobject[]required

      Compact candidates only. If the remaining task needs these functions, reuse their IDs and fetch the required contracts through `engine::functions::info`.

      • descriptionstringrequired

        First description sentence, capped at 160 bytes.

      • function_idstringrequired
    • installall ofrequired

      The `compose::add` target and payload; agent-trigger callers add `description`.

      all of (1)
      variant 1
      • functionstringrequired
      • payloadunknownrequired
    • namestringrequired
    • versionstringrequired
  • latency_msnumber· doublerequired
  • workersobject[]required
    • functionsobject[]required
      • descriptionstringrequired

        First description sentence, capped at 160 bytes.

      • function_idstringrequired
    • namespacestringrequired

directory::skills::create

function

Create a new skill at <skills_folder>/<id>.md from full-file markdown (frontmatter optional, non-empty body). Rejects ids or paths that already exist, including system-installed skills. Use directory::skills::update to edit existing skills.

request
  • contentstringrequired

    Full file content, frontmatter optional; only the size cap and a non-empty body are enforced.

  • idstringrequired

    New skill id, used as the file path under skills_folder (`/`-separated segments of `[a-z0-9_-]`), not already taken.

response
  • bytesinteger· uintrequiredmin 0

    Bytes written.

  • function_idstring

    Frontmatter `function_id:` of the content, `null` when absent.

  • idstringrequired

    The created skill's id (normalized form of the input id).

  • modified_atstringrequired

    File mtime after the write, RFC 3339.

  • titlestringrequired

    Title resolved from the content (frontmatter `title:`, then `name:`, then body H1, then the id) — what `list` rows will show.

  • typestring

    Frontmatter `type:` of the content, `null` when absent.

directory::skills::delete

function

Delete one existing skill's markdown file by id (same id forms as directory::skills::get); refuses read-only system-installed skills.

request
  • idstringrequired

    Existing skill id — the same forms `directory::skills::get` accepts (bare id, `<id>.md`, `SKILL(S).md`, `iii://<id>`).

response
  • idstringrequired

    Id of the skill whose file was removed — the RESOLVED on-disk id (e.g. `ns/index` for input `ns`), not the input form.

directory::skills::download

function

Download skills into skills_folder from exactly one source: {repo, skill, branch?} clones a GitHub skill folder; {worker, version?|tag?} pulls from the workers registry. Prefer the explicit download_from_registry / download_from_repo.

request
  • branchstring

    Source A: branch to clone. Defaults to `"main"`. Pass `"master"` (or any other branch name) for repos whose default branch is not `main`.

  • repostring

    Source A: GitHub repo URL. Pair with `skill`.

  • skillstring

    Source A: subfolder under `skills/` inside the repo. Doubles as the destination namespace inside `skills_folder`.

  • tagstring

    Registry tag to pull (default `latest`); mutually exclusive with `version`.

  • versionstring

    Source B: explicit semver to pull. Mutually exclusive with `tag`.

  • workerstring

    Source B: workers registry name. Pair with exactly one of `version` / `tag`.

response
  • agents_writtenstring[]required
  • namespacestringrequired
  • skills_writtenstring[]required
  • sourceunknownrequired
  • system_prompts_writtenstring[]required

directory::skills::download_from_registry

function

Download one worker's directory bundle from the workers registry into skills_folder. `worker` is required; pass `version` (exact semver) or `tag` (default "latest"), not both. Files are overwritten file-by-file.

request
  • tagstring

    Registry tag to pull (e.g. `"latest"`). Mutually exclusive with `version`. Defaults to `"latest"` when neither is provided.

  • versionstring

    Explicit semver to pull. Mutually exclusive with `tag`.

  • workerstringrequired

    Worker name in the registry (e.g. `"shell"`).

response
  • agents_writtenstring[]required
  • namespacestringrequired
  • skills_writtenstring[]required
  • sourceunknownrequired
  • system_prompts_writtenstring[]required

directory::skills::download_from_repo

function

Download one skill folder from a GitHub repo into skills_folder: `repo` (https/ssh/git@ URL) and `skill` (subfolder under `skills/`, also the destination namespace) are required; `branch` defaults to "main".

request
  • branchstring

    Branch to clone. Defaults to `"main"`.

  • repostringrequired

    GitHub repo URL (validated: https / ssh / git@ only).

  • skillstringrequired

    Subfolder under `skills/` inside the repo. Doubles as the destination namespace inside `skills_folder`.

response
  • agents_writtenstring[]required
  • namespacestringrequired
  • skills_writtenstring[]required
  • sourceunknownrequired
  • system_prompts_writtenstring[]required

directory::skills::get

function

Fetch one skill by id and return its raw markdown body plus id, title, type, function_id, and modified_at. A worker overview is addressed by the bare worker name; `<id>.md` and `iii://<id>` forms are accepted. On a miss, D110 names the closest ids.

request
  • idstringrequired

    Skill id as returned by directory::skills::list (e.g. `directory/skills/list`); `<id>.md` and `iii://<id>` forms are accepted.

  • rawboolean

    When true, also return the exact on-disk file (frontmatter included) as `raw`, ready for directory::skills::update.

response
  • bodystringrequired

    Raw markdown body (post-frontmatter) from disk. Note: there is no `description` field. `description` is the body's first paragraph, which is already inside `body` — every caller asking for the body would otherwise pay for the prefix twice. Use `directory::skills::list` rows when you want the teaser without the full body.

  • disable_model_invocationbooleanrequired

    Whether model-facing indexes should omit this skill from invocation candidates.

  • function_idstring

    Frontmatter `function_id:` when present — the canonical bus function id this skill documents (e.g. `sandbox::create`). The response's `id` field is the SKILL path on disk; `function_id` is what the agent should pass to `agent_trigger`. `null` when the skill isn't 1:1 with a single function.

  • idstringrequired
  • modified_atstringrequired

    File mtime as RFC 3339.

  • pathstringrequired

    Absolute on-disk path of the skill file. Its parent directory is the skill's base directory — where payload the body references by relative path (`scripts/`, `reference/`, agent-skills convention) lives. Only meaningful to callers sharing this worker's filesystem (shell/file tools on the same machine).

  • rawstring

    FULL on-disk file content (frontmatter block included). Present only when the request set `raw: true`. This is the exact string to hand back to `directory::skills::update`; fallback notes that `get` may prepend to `body` are never added here.

  • titlestringrequired

    Frontmatter `title:` when present and non-empty, otherwise the first `# H1` line in the body, otherwise the bare `id`.

  • typestring

    Frontmatter `type:` (e.g. `index`, `how-to`, `reference`). `null` when the file has no frontmatter or omits the key.

directory::skills::index

function

Read a per-worker overview: one markdown block per installed worker (title, first paragraph, and the directory::skills::get call for the reference). For per-skill rows use directory::skills::list.

request
empty object
response
  • bodystringrequired

    Rendered markdown document — one short `## <title>` block per installed worker (each worker's root overview doc, whether or not it declares frontmatter `type: index`), carrying the worker's first-paragraph overview and a `directory::skills::get` call to read the full reference. Sorted lex by id.

  • workers_countinteger· uintrequiredmin 0

    Number of worker entries rendered (i.e. the count of worker overview rows that survived the filter). Cheap sanity check that doesn't require re-parsing the body.

directory::skills::list

function

List skills, one row per skill (id, title, type, function_id, description, bytes, modified_at). Filters: `search` (substring on id/title/description), `prefix` (worker namespace), `type`; `include_description: false` for lighter rows. Pass a row's `function_id`, not its `id`, to agent_trigger.

request
  • include_descriptionboolean

    When `false`, the response omits the first-paragraph `description` field on every row. Useful for token-light pickers that only need `id` + `title` + `type`. Default `true`.

  • prefixstring

    Exact prefix match against `id`. Combine with `search` to scope a fuzzy match to one worker namespace, e.g. `prefix: "sandbox/"`.

  • searchstring

    Case-insensitive substring match against `id`, `title`, and (when `include_description` is true) the first body paragraph. Omitted rows are filtered out cheaply on the FsSkill { id } pass before the per-file frontmatter read, so a narrowed list is dramatically cheaper for the caller than the unfiltered one.

  • typestring

    Exact match against the frontmatter `type:` field (`index`, `how-to`, `reference`, ...). `null` for entries with no frontmatter `type:`.

response
  • skillsobject[]required
    • bytesinteger· uintrequiredmin 0
    • descriptionstringrequired

      First paragraph of the body, empty when the file has only headings. Also empty when the caller passed `list { include_description: false }` for a token-light row.

    • disable_model_invocationbooleanrequired

      Whether model-facing indexes should omit this skill from invocation candidates.

    • function_idstring

      Frontmatter `function_id:` when present — the canonical bus function id this skill documents (e.g. `sandbox::create`). The row's `id` field is the SKILL path on disk (e.g. `sandbox/skills/sandbox/create`); `function_id` is what an agent should pass to `agent_trigger`. `null` for skills that aren't 1:1 with a single function (index/reference).

    • idstringrequired
    • modified_atstringrequired

      File mtime as RFC 3339 (best effort; empty if unavailable).

    • titlestringrequired

      Frontmatter `title:` when present and non-empty, otherwise the first `# H1` line in the body, otherwise the bare `id`.

    • typestring

      Frontmatter `type:` (e.g. `index`, `how-to`, `reference`). `null` when the file has no frontmatter or omits the key.

directory::skills::update

function

Overwrite one existing skill with full-file markdown (pass back the `raw` from directory::skills::get { raw: true }, edited). Never creates files; refuses read-only system-installed skills.

request
  • contentstringrequired

    FULL new file content, frontmatter block included — the string `directory::skills::get { raw: true }` returns, edited.

  • idstringrequired

    Skill id to overwrite (same forms directory::skills::get accepts); the file must already exist.

response
  • bytesinteger· uintrequiredmin 0

    Bytes written.

  • function_idstring

    Frontmatter `function_id:` of the new content, `null` when absent.

  • idstringrequired

    The id that was updated (normalized form of the input id).

  • modified_atstringrequired

    File mtime after the write, RFC 3339.

  • titlestringrequired

    Title resolved from the NEW content (frontmatter `title:`, then body H1, then the id) — what `list` rows will now show.

  • typestring

    Frontmatter `type:` of the new content, `null` when absent.

directory::system-prompts::create

function

Create a new system prompt at <skills_folder>/system-prompts/<name>.md from full-file markdown (non-empty frontmatter `description` required; a declared `name` must match). Rejects names or paths that already exist.

request
  • contentstringrequired

    Full file content, frontmatter included; `description` is required and a declared `name` must match.

  • namestringrequired

    New system prompt name, used as the file stem; same charset as listed names and not already taken.

response
  • bytesinteger· uintrequiredmin 0

    Bytes written.

  • descriptionstringrequired

    Description parsed from the frontmatter.

  • modified_atstringrequired

    File mtime after the write, RFC 3339.

  • namestringrequired

    The created system prompt's name (as requested).

directory::system-prompts::delete

function

Permanently delete one EXISTING filesystem-backed system prompt by name. Resolves against the same merged scan as directory::system-prompts::list, removes only that prompt's markdown file, and fans out directory::system-prompts::on-change with { op: "delete" }.

request
  • namestringrequired

    Existing system prompt name, as returned by `directory::system-prompts::list`.

response
  • namestringrequired

    Name of the system prompt whose file was removed.

directory::system-prompts::get

function

Fetch one system prompt by name — a filesystem-backed entry, or a worker-bundled one (`builtin: true`) when no local file shadows it. Returns the raw markdown body plus name, description, and modified_at — no envelope, no templating.

request
  • namestringrequired
  • rawboolean

    When `true`, the response includes the full on-disk file content (frontmatter included) as `raw`, ready for `directory::system-prompts::update`.

response
  • bodystringrequired
  • builtinbooleanrequired

    Served from the copy bundled with the worker (no local file yet): an update creates the local file.

  • descriptionstringrequired
  • modified_atstringrequired
  • namestringrequired
  • rawstring

directory::system-prompts::list

function

List system prompts (name, description, modified_at) from skills_folder's `system-prompts/` plus the ones bundled with this worker (`builtin: true` until a local file shadows one).

request
empty object
response
  • promptsobject[]required
    • builtinbooleanrequired

      Bundled with the worker, no file behind it: editing it creates the local file (which then shadows this entry); there is nothing to delete.

    • descriptionstringrequired
    • modified_atstringrequired
    • namestringrequired

directory::system-prompts::update

function

Overwrite one existing system prompt with full-file markdown; the frontmatter must keep a non-empty `description`. Updating a bundled prompt (`builtin: true`) creates a local file that shadows it. Returns the effective name (frontmatter `name:` wins over the file stem).

request
  • contentstringrequired

    Full file content, frontmatter included; `description` must stay non-empty.

  • namestringrequired

    System prompt name to overwrite, as listed; a bundled prompt (`builtin: true`) is copied to a local file first.

response
  • bytesinteger· uintrequiredmin 0

    Bytes written.

  • descriptionstringrequired

    Description parsed from the new frontmatter.

  • modified_atstringrequired

    File mtime after the write, RFC 3339.

  • namestringrequired

    The system prompt's EFFECTIVE name after the write: the new frontmatter `name:` when declared, otherwise the file stem. Differs from the input name when the update renames the system prompt.

iii-directory::ui-content

function

Serve the iii-directory worker's injected console UI assets (content function for its console:script / console:style triggers).

request
  • pathstringrequired

    The asset path from the trigger config (e.g. `state/page.js`).

response
  • contentstringrequired

    The asset source, verbatim.

  • content_typestringrequired

    MIME type the console should serve the asset with.

triggers

3

directory::agents::on-change

trigger

Fires after a directory::skills::download that wrote at least one agent profile, or a directory::agents::update, create, or delete. Also fires with { op: "external" } when a watched agents file changes on disk outside this worker.

invocation
valueunknown
return
valueunknown

directory::skills::on-change

trigger

Fires after a directory::skills::download that wrote at least one skill markdown file, or a directory::skills::update, create, or delete. Also fires with { op: "external" } when a watched skills root changes on disk outside this worker — including the read-only agents skills root, when that root exists at startup.

invocation
valueunknown
return
valueunknown

directory::system-prompts::on-change

trigger

Fires after a directory::skills::download that wrote at least one system prompt, or a directory::system-prompts::update, create, or delete. Also fires with { op: "external" } when a watched system-prompts root changes on disk outside this worker.

invocation
valueunknown
return
valueunknown