Skip to content
Registry

iii-directory

v1.2.3

Engine introspection, workers registry proxy, filesystem-backed skills, system prompts, and agent profiles, kit install and update with reviewed plans, plus function search ranked by the judge worker (falling back to local hybrid/lexical) with a conditional pre-generate hint.

Install

bash
iii trigger compose::add worker=iii-directory@1.2.3

Run in your project with the iii engine running. Exact versions are immutable and digest-pinned.

iii-directory

Workers registry HTTP proxy and filesystem-backed skill + prompt reader for the iii engine. Every public function sits under a single directory::* namespace, split into five surfaces (all MCP-agnostic):

Surface What clients see When to use it
Skills (directory::skills::*) Enriched listing via directory::skills::list ({ id, title, type, description, bytes, modified_at } per row), a single-skill reader directory::skills::get { id } returning { id, title, type, description, path, body, modified_at }, and directory::skills::index which renders a short per-worker overview document (one ## </code> + first paragraph + <code class="readme-inline-code">read more</code> link per <code class="readme-inline-code">type: index</code> skill). Authored by <code class="readme-inline-code">create</code>, edited by <code class="readme-inline-code">update</code>, removed by <code class="readme-inline-code">delete</code>. <code class="readme-inline-code">title</code> prefers the YAML frontmatter <code class="readme-inline-code">title:</code> (then <code class="readme-inline-code">name:</code>) over the body H1; <code class="readme-inline-code">type</code> is lifted from frontmatter <code class="readme-inline-code">type:</code> (e.g. <code class="readme-inline-code">index</code>, <code class="readme-inline-code">how-to</code>, <code class="readme-inline-code">reference</code>) and serialised as <code class="readme-inline-code">null</code> when absent. System-installed agent skills under the read-only <code class="readme-inline-code">agents_skills_folder</code> are served too (see <a href="#on-disk-layout">On-disk layout</a>).</td> <td>Orientation: "when and why to use my worker's tools"</td> </tr> <tr> <td><strong>Prompts</strong> (<code class="readme-inline-code">directory::prompts::*</code>)</td> <td>Command templates listed by <code class="readme-inline-code">directory::prompts::list</code>, read by <code class="readme-inline-code">get</code>, authored by <code class="readme-inline-code">create</code>, edited by <code class="readme-inline-code">update</code>. Stored under any <code class="readme-inline-code">prompts/</code> path segment; <code class="readme-inline-code">create</code> writes <code class="readme-inline-code"><skills_folder>/prompts/<name>.md</code>.</td> <td>Parametric command templates the <em>user</em> invokes</td> </tr> <tr> <td><strong>System prompts</strong> (<code class="readme-inline-code">directory::system-prompts::*</code>)</td> <td>Identity prompts with the same four verbs and the same response shapes as Prompts — including the <code class="readme-inline-code">prompts</code> field name on <code class="readme-inline-code">list</code>. Stored under any <code class="readme-inline-code">system-prompts/</code> path segment; <code class="readme-inline-code">create</code> writes <code class="readme-inline-code"><skills_folder>/system-prompts/<name>.md</code>.</td> <td>What the chat's system-prompt picker offers as an identity prompt (enrich or replace)</td> </tr> <tr> <td><strong>Search</strong> (<code class="readme-inline-code">directory::search_functions</code>)</td> <td>One natural-language query → the API reference of only the relevant functions (installed, plus installable registry workers under <code class="readme-inline-code">installable</code>), with a conditional pre-generate hint pointing agents at it.</td> <td>"Which functions do I call for this task?"</td> </tr> <tr> <td><strong>Registry</strong> (<code class="readme-inline-code">directory::registry::*</code>)</td> <td>HTTP proxy over <code class="readme-inline-code">api.workers.iii.dev</code> with <code class="readme-inline-code">workers::{list,info}</code>. Rows share the core <code class="readme-inline-code">name</code> / <code class="readme-inline-code">description</code> / <code class="readme-inline-code">version</code> fields with the engine's <code class="readme-inline-code">engine::workers::list</code> and add publication metadata (<code class="readme-inline-code">type</code>, <code class="readme-inline-code">config</code>, <code class="readme-inline-code">supported_targets</code>, <code class="readme-inline-code">total_downloads</code>, <code class="readme-inline-code">dependencies</code>, optional <code class="readme-inline-code">image</code>). <code class="readme-inline-code">workers::list</code> is cursor-paginated with a server-authored page size.</td> <td>"What's published in the public registry?"</td> </tr> </tbody></table> <p>Engine introspection (functions / triggers / registered triggers / workers) is served by the engine natively at <code class="readme-inline-code">engine::functions::*</code>, <code class="readme-inline-code">engine::triggers::*</code>, <code class="readme-inline-code">engine::registered-triggers::*</code>, and <code class="readme-inline-code">engine::workers::*</code>. Call the engine ids directly. One wrapper survives for callers that can only reach the <code class="readme-inline-code">directory::</code> namespace: <code class="readme-inline-code">directory::engine::functions::info</code> proxies a single function's schema (see its row below).</p> <p>Skills and prompts are sourced from a single configured folder on disk (<code class="readme-inline-code">skills_folder</code>). Writes are the <strong><code class="readme-inline-code">directory::skills::download*</code></strong> functions, which pull markdown into <code class="readme-inline-code">skills_folder</code> from either the <a href="https://workers.iii.dev">workers registry</a> or a GitHub repo, plus the per-kind single-file editors — <code class="readme-inline-code">directory::skills::{create,update,delete}</code>, <code class="readme-inline-code">directory::prompts::{create,update,delete}</code> and <code class="readme-inline-code">directory::system-prompts::{create,update,delete}</code>. Once downloaded, files belong to the developer — edit them however you want, in the editor of your choice: a change made directly on disk fires the matching <code class="readme-inline-code">on-change</code> with <code class="readme-inline-code">op: "external"</code> (see <a href="#custom-trigger-types">Custom trigger types</a>).</p> <p><code class="readme-inline-code">directory::registry::workers::*</code> and the engine's <code class="readme-inline-code">engine::workers::*</code> share the core <code class="readme-inline-code">name</code> / <code class="readme-inline-code">description</code> / <code class="readme-inline-code">version</code> fields so a parser that touches only those keys works against either surface; the registry view also surfaces publication metadata (<code class="readme-inline-code">type</code>, <code class="readme-inline-code">config</code>, <code class="readme-inline-code">supported_targets</code>, <code class="readme-inline-code">total_downloads</code>, <code class="readme-inline-code">dependencies</code>, optional <code class="readme-inline-code">image</code>) and the engine view adds runtime / connection state.</p> <h2 id="table-of-contents" class="scroll-mt-20">Table of contents</h2> <ol> <li><a href="#install">Install</a></li> <li><a href="#configuration">Configuration</a></li> <li><a href="#quickstart-download-some-skills">Quickstart: download some skills</a></li> <li><a href="#on-disk-layout">On-disk layout</a></li> <li><a href="#skill-ids">Skill ids</a></li> <li><a href="#functions">Functions</a></li> <li><a href="#function-search--pre-generate-hint">Function search & pre-generate hint</a></li> <li><a href="#custom-trigger-types">Custom trigger types</a></li> <li><a href="#local-development--testing">Local development & testing</a></li> <li><a href="#migration-from-skills-v02x">Migration from skills v0.2.x</a></li> </ol> <hr> <h2 id="install" class="scroll-mt-20">Install</h2> <pre class="shiki shiki-themes min-light vesper" style="--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#FFC799">iii</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> worker</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> add</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> iii-directory</span></span></code></pre><p><code class="readme-inline-code">iii worker add</code> fetches the binary, writes a config block into <code class="readme-inline-code">~/.iii/config.yaml</code>, and the engine starts the worker the next time it boots.</p> <hr> <h2 id="skills" class="scroll-mt-20">Skills</h2> <p>Install the <code class="readme-inline-code">iii-directory</code> agent skill for Claude Code, Cursor, and 30+ other agents:</p> <pre class="shiki shiki-themes min-light vesper" style="--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#FFC799">npx</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> skills</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> add</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> iii-hq/workers</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --skill</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> iii-directory</span></span></code></pre><p>Browse or install every worker skill at once:</p> <pre class="shiki shiki-themes min-light vesper" style="--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#FFC799">npx</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> skills</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> add</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> iii-hq/workers</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --list</span></span> <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#FFC799">npx</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> skills</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> add</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> iii-hq/workers</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --all</span></span></code></pre><hr> <h2 id="configuration" class="scroll-mt-20">Configuration</h2> <p>Runtime settings live in the <strong><code class="readme-inline-code">configuration</code> worker</strong> under id <strong><code class="readme-inline-code">iii-directory</code></strong> (the same pattern <code class="readme-inline-code">database</code> and <code class="readme-inline-code">storage</code> use). At boot the worker registers its JSON Schema, reads the live value via <code class="readme-inline-code">configuration::get</code> (the configuration worker env-expands <code class="readme-inline-code">${VAR}</code>), and binds a <code class="readme-inline-code">configuration</code> trigger so it re-fetches on change.</p> <p>Persisted values default to <code class="readme-inline-code">./data/configuration/iii-directory.yaml</code> (fs adapter). Edit that file directly, call <code class="readme-inline-code">configuration::set id=iii-directory</code>, or use the console Workers tab — all three propagate without a redeploy.</p> <h3 id="fields" class="scroll-mt-20">Fields</h3> <pre class="shiki shiki-themes min-light vesper" style="--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010" tabindex="0"><code><span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># TOPOLOGY — changing any of these requires a worker restart.</span></span> <span class="line"><span style="--shiki-light:#D32F2F;--shiki-dark:#FFC799">skills_folder</span><span style="--shiki-light:#D32F2F;--shiki-dark:#FFF">:</span><span style="--shiki-light:#22863A;--shiki-dark:#99FFE4"> ~/.iii/skills</span><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"> # read/write root for skills + prompts</span></span> <span class="line"><span style="--shiki-light:#D32F2F;--shiki-dark:#FFC799">local_skills_folder</span><span style="--shiki-light:#D32F2F;--shiki-dark:#FFF">:</span><span style="--shiki-light:#22863A;--shiki-dark:#99FFE4"> ./.iii/skills</span><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"> # project-scoped overrides (whole-namespace local-wins)</span></span> <span class="line"><span style="--shiki-light:#D32F2F;--shiki-dark:#FFC799">agents_skills_folder</span><span style="--shiki-light:#D32F2F;--shiki-dark:#FFF">:</span><span style="--shiki-light:#22863A;--shiki-dark:#99FFE4"> ~/.agents/skills</span><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"> # READ-ONLY system-installed agent skills (shallow <skill>/SKILL.md scan)</span></span> <span class="line"><span style="--shiki-light:#D32F2F;--shiki-dark:#FFC799">auto_download</span><span style="--shiki-light:#D32F2F;--shiki-dark:#FFF">:</span><span style="--shiki-light:#1976D2;--shiki-dark:#FFC799"> true</span><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"> # subscribe to worker-add + run the boot reconcile</span></span> <span class="line"></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># TUNABLE — hot-reload live on `configuration:updated`.</span></span> <span class="line"><span style="--shiki-light:#D32F2F;--shiki-dark:#FFC799">registry_url</span><span style="--shiki-light:#D32F2F;--shiki-dark:#FFF">:</span><span style="--shiki-light:#22863A;--shiki-dark:#99FFE4"> https://api.workers.iii.dev</span><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"> # workers registry base URL</span></span> <span class="line"><span style="--shiki-light:#D32F2F;--shiki-dark:#FFC799">download_timeout_ms</span><span style="--shiki-light:#D32F2F;--shiki-dark:#FFF">:</span><span style="--shiki-light:#1976D2;--shiki-dark:#FFC799"> 60000</span><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"> # per git-clone / HTTP request timeout (ms)</span></span> <span class="line"><span style="--shiki-light:#D32F2F;--shiki-dark:#FFC799">registry_cache_ttl_ms</span><span style="--shiki-light:#D32F2F;--shiki-dark:#FFF">:</span><span style="--shiki-light:#1976D2;--shiki-dark:#FFC799"> 60000</span><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"> # in-process TTL for registry::workers::* responses</span></span> <span class="line"><span style="--shiki-light:#D32F2F;--shiki-dark:#FFC799">filter_unregistered</span><span style="--shiki-light:#D32F2F;--shiki-dark:#FFF">:</span><span style="--shiki-light:#1976D2;--shiki-dark:#FFC799"> true</span><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"> # hide skills whose namespace isn't an installed worker</span></span> <span class="line"><span style="--shiki-light:#D32F2F;--shiki-dark:#FFC799">inject_hint</span><span style="--shiki-light:#D32F2F;--shiki-dark:#FFF">:</span><span style="--shiki-light:#1976D2;--shiki-dark:#FFC799"> true</span><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"> # bind the directory::pre-generate search-hint hook</span></span> <span class="line"><span style="--shiki-light:#D32F2F;--shiki-dark:#FFC799">hint_min_workers</span><span style="--shiki-light:#D32F2F;--shiki-dark:#FFF">:</span><span style="--shiki-light:#1976D2;--shiki-dark:#FFC799"> 2</span><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"> # minimum surface width before the hint fires (0 = always)</span></span> <span class="line"><span style="--shiki-light:#D32F2F;--shiki-dark:#FFC799">registry_search</span><span style="--shiki-light:#D32F2F;--shiki-dark:#FFF">:</span><span style="--shiki-light:#1976D2;--shiki-dark:#FFC799"> true</span><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"> # include installable registry workers in every search</span></span></code></pre><p>The <code class="readme-inline-code">skills_folder</code> is created on first download if it doesn't exist.</p> <h3 id="zero-config-default-seed" class="scroll-mt-20">Zero-config default + seed</h3> <p>With no seed and no stored value the worker uses built-in defaults (<code class="readme-inline-code">skills_folder: ~/.iii/skills</code>, <code class="readme-inline-code">registry_url: https://api.workers.iii.dev</code>). Pass <code class="readme-inline-code">--config <path></code> to supply a YAML seed: when present and no value is stored yet, its contents become <code class="readme-inline-code">initial_value</code> on <code class="readme-inline-code">configuration::register</code> (see <a href="config.yaml.example"><code class="readme-inline-code">config.yaml.example</code></a>). Engine-managed deployments inline the config under the worker entry; the engine delivers it via <code class="readme-inline-code">--config</code>.</p> <h3 id="hot-reload" class="scroll-mt-20">Hot reload</h3> <p>On <code class="readme-inline-code">configuration::set</code> (or an external edit to the persisted file), the worker re-fetches the authoritative value. Tunable changes apply in place and the registry caches are cleared so a repointed <code class="readme-inline-code">registry_url</code> takes effect immediately. Topology changes (<code class="readme-inline-code">skills_folder</code> / <code class="readme-inline-code">local_skills_folder</code> / <code class="readme-inline-code">agents_skills_folder</code> / <code class="readme-inline-code">auto_download</code>) are refused with a "restart required" log; the previous configuration is kept until the worker restarts.</p> <p>Both folder settings are also watch roots, and the watcher creates each one at boot if it is missing (so a fresh install is watched rather than silently unwatched until the next restart). <code class="readme-inline-code">agents_skills_folder</code> is a watch root too, but only when it already exists — the worker never creates (or writes) anything under it. Install your first agents skill while the worker is running and that root stays unwatched until the next restart: reads still serve it, since every read re-scans disk, but the live <code class="readme-inline-code">external</code> doorbell is missing until then. <code class="readme-inline-code">local_skills_folder</code> defaults to the CWD-relative <code class="readme-inline-code">./.iii/skills</code>, so expect an empty <code class="readme-inline-code">.iii/skills</code> directory to appear in whatever working directory the engine launches the worker from. An empty local root shadows nothing. Because both are restart-required, the watch roots are fixed for the process lifetime.</p> <hr> <h2 id="quickstart-download-some-skills" class="scroll-mt-20">Quickstart: download some skills</h2> <pre class="shiki shiki-themes min-light vesper" style="--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010" tabindex="0"><code><span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># Pull a specific worker's skills + prompts at a fixed semver from</span></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># the registry. Files land under `<skills_folder>/agent-memory/`.</span></span> <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#FFC799">iii</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> trigger</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --function-id=directory::skills::download</span><span style="--shiki-light:#24292EFF;--shiki-dark:#A0A0A0"> \</span></span> <span class="line"><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --payload=</span><span style="--shiki-light:#22863A;--shiki-dark:#99FFE4">'{"worker": "agent-memory", "version": "1.2.3"}'</span></span> <span class="line"></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># Same, but always fetch whatever's tagged `latest` (also the default</span></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># when neither version nor tag is given).</span></span> <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#FFC799">iii</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> trigger</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --function-id=directory::skills::download</span><span style="--shiki-light:#24292EFF;--shiki-dark:#A0A0A0"> \</span></span> <span class="line"><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --payload=</span><span style="--shiki-light:#22863A;--shiki-dark:#99FFE4">'{"worker": "agent-memory"}'</span></span> <span class="line"></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># Pull a single subfolder out of a public GitHub repo via</span></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># `git clone --depth 1 --branch main`. Files land under</span></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># `<skills_folder>/frontend-design/`. The `branch` field defaults to</span></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># `main`; pass `"master"` for older repos that haven't migrated.</span></span> <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#FFC799">iii</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> trigger</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --function-id=directory::skills::download</span><span style="--shiki-light:#24292EFF;--shiki-dark:#A0A0A0"> \</span></span> <span class="line"><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --payload=</span><span style="--shiki-light:#22863A;--shiki-dark:#99FFE4">'{</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#99FFE4"> "repo": "https://github.com/anthropics/skills",</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#99FFE4"> "skill": "frontend-design"</span></span> <span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#99FFE4"> }'</span></span></code></pre><p>The response is <code class="readme-inline-code">{ namespace, skills_written, prompts_written, system_prompts_written, source }</code> where <code class="readme-inline-code">skills_written</code>, <code class="readme-inline-code">prompts_written</code>, and <code class="readme-inline-code">system_prompts_written</code> are arrays of relative paths / prompt names that were materialised in this run.</p> <p>After every successful download the worker fires the <code class="readme-inline-code">directory::skills::on-change</code>, <code class="readme-inline-code">directory::prompts::on-change</code>, and/or <code class="readme-inline-code">directory::system-prompts::on-change</code> trigger types so that subscribers like the <a href="https://github.com/iii-hq/workers/tree/main/mcp"><code class="readme-inline-code">mcp</code></a> worker can forward MCP <code class="readme-inline-code">notifications/list_changed</code> to their clients.</p> <hr> <h2 id="on-disk-layout" class="scroll-mt-20">On-disk layout</h2> <p>The worker assumes a fixed layout under <code class="readme-inline-code">skills_folder</code>:</p> <pre><code>skills_folder/ <namespace>/ # one folder per `directory::skills::download` namespace index.md # → iii://<namespace>/index contacts.md # → iii://<namespace>/contacts emails/send-email.md # → iii://<namespace>/emails/send-email prompts/ # ← magic marker for command templates send-email.md # ← MCP slash-command (needs YAML frontmatter) triage.md system-prompts/ # ← magic marker for system prompts reviewer.md # ← identity prompt (needs YAML frontmatter) prompts/ # top level works too — the marker is the quick-note.md # segment, not its depth system-prompts/ # ← where system-prompts::create writes pirate.md</code></pre><p>A second, READ-ONLY root — <code class="readme-inline-code">agents_skills_folder</code> (default <code class="readme-inline-code">~/.agents/skills</code>) — serves system-installed agent skills. It is scanned <strong>shallowly</strong>: only <code class="readme-inline-code"><skill-dir>/SKILL.md</code> becomes an entry (id <code class="readme-inline-code"><skill-dir>/index</code>, displayed as <code class="readme-inline-code"><skill-dir></code>); a skill's <code class="readme-inline-code">reference/</code>, <code class="readme-inline-code">scripts/</code>, or other support payload is never listed. A missing directory is silently empty. These skills bypass <code class="readme-inline-code">filter_unregistered</code> (their namespaces are skills, not workers), stay out of <code class="readme-inline-code">directory::skills::index</code> (a per-WORKER surface), and are refused by <code class="readme-inline-code">update</code>/<code class="readme-inline-code">delete</code> — edit them with their owning tool, or copy one into <code class="readme-inline-code">skills_folder</code> on disk to fork it. Precedence is <code class="readme-inline-code">local_skills_folder</code> > <code class="readme-inline-code">skills_folder</code> > <code class="readme-inline-code">agents_skills_folder</code>, namespace-wise: a top-level namespace directory in a higher root shadows the same namespace below.</p> <p>A few rules:</p> <ul> <li><strong>Skill ids</strong> are the relative path under <code class="readme-inline-code">skills_folder</code> with <code class="readme-inline-code">.md</code> stripped. Each segment must satisfy <code class="readme-inline-code">[a-z0-9_-]{1,64}</code>.</li> <li><strong>Skill frontmatter is optional.</strong> When present, the reader honours three keys: <code class="readme-inline-code">title:</code> (used by <code class="readme-inline-code">directory::skills::list</code> and <code class="readme-inline-code">directory::skills::get</code> in preference to a body <code class="readme-inline-code"># H1</code>), <code class="readme-inline-code">name:</code> (title fallback when <code class="readme-inline-code">title:</code> is absent — the <code class="readme-inline-code">~/.agents/skills</code> convention), and <code class="readme-inline-code">type:</code> (free-form classifier surfaced verbatim on both responses). Any other YAML keys are ignored.</li> <li><strong>Prompts</strong> live under any <code class="readme-inline-code">*/prompts/*.md</code> path. They must start with a YAML frontmatter block declaring at least <code class="readme-inline-code">description</code>; <code class="readme-inline-code">name</code> is optional and overrides the file-stem default.</li> <li><strong>System prompts</strong> live under any <code class="readme-inline-code">*/system-prompts/*.md</code> path, with the same frontmatter rule as prompts (<code class="readme-inline-code">description</code> required, <code class="readme-inline-code">name</code> optional). A path carrying both a <code class="readme-inline-code">prompts</code> and a <code class="readme-inline-code">system-prompts</code> segment, in either order, is a system prompt — <code class="readme-inline-code">system-prompts</code> wins precedence so every path classifies as exactly one kind.</li> <li><strong>What a system prompt can do, by design.</strong> The console's chat picker can send a selected system prompt with <code class="readme-inline-code">system_prompt_strategy: "override"</code>, which replaces the harness's built-in identity prompt with that file's body verbatim. Files reach <code class="readme-inline-code">system-prompts/</code> either by local authoring or via <code class="readme-inline-code">directory::skills::download</code> from a git repo or the registry, so a downloaded bundle can supply one. This is an accepted property, not a hole: it takes a deliberate selection in the UI, the same UI already accepts arbitrary typed text, and the operator owns <code class="readme-inline-code">skills_folder</code>. Worth knowing before you point <code class="readme-inline-code">skills_folder</code> at a directory other people can write to.</li> <li>Files anywhere else (i.e. <em>not</em> in a <code class="readme-inline-code">prompts/</code> or <code class="readme-inline-code">system-prompts/</code> segment) are skills.</li> </ul> <p>The download function namespaces by source:</p> <table> <thead> <tr> <th>Source</th> <th>Destination</th> </tr> </thead> <tbody><tr> <td><code class="readme-inline-code">repo=URL skill=NAME branch?=main</code></td> <td><code class="readme-inline-code"><skills_folder>/<NAME>/...</code></td> </tr> <tr> <td><code class="readme-inline-code">worker=NAME version=…</code></td> <td><code class="readme-inline-code"><skills_folder>/<NAME>/...</code></td> </tr> <tr> <td><code class="readme-inline-code">worker=NAME tag=…</code> (default <code class="readme-inline-code">tag=latest</code>)</td> <td><code class="readme-inline-code"><skills_folder>/<NAME>/...</code></td> </tr> </tbody></table> <p>Re-pulling the same source overwrites files <strong>file-by-file</strong> — existing siblings outside the response set are preserved (so hand-edited additions survive a re-pull).</p> <hr> <h2 id="skill-ids" class="scroll-mt-20">Skill ids</h2> <p>Skills are addressed by their relative path under <code class="readme-inline-code">skills_folder</code> with <code class="readme-inline-code">.md</code> stripped — e.g. <code class="readme-inline-code"><skills_folder>/agent-memory/observe.md</code> → id <code class="readme-inline-code">"agent-memory/observe"</code>. The same string is what <code class="readme-inline-code">directory::skills::list</code> returns and what <code class="readme-inline-code">directory::skills::get</code> expects in <code class="readme-inline-code">{ "id": ... }</code>. The legacy <code class="readme-inline-code">iii://{id}</code> link form is still accepted on <code class="readme-inline-code">get</code> (the prefix is auto-stripped), but the worker no longer parses any other <code class="readme-inline-code">iii://</code> URI shape — bodies are read solely by id, and the auto-rendered tree-shaped index that previous releases served at <code class="readme-inline-code">iii://directory/skills</code> is gone. Consumers that want a tree-shaped picker iterate <code class="readme-inline-code">list</code> rows themselves and indent by <code class="readme-inline-code">id.matches('/').count()</code>.</p> <hr> <h2 id="functions" class="scroll-mt-20">Functions</h2> <p>Twenty-two functions, all under <code class="readme-inline-code">directory::*</code>. All registrations are namespace-clean; this worker is intentionally agnostic to MCP and any other adapter.</p> <h3 id="directoryskills-filesystem-reader-editor" class="scroll-mt-20"><code class="readme-inline-code">directory::skills::*</code> (filesystem reader + editor)</h3> <table> <thead> <tr> <th>Function ID</th> <th>Description</th> </tr> </thead> <tbody><tr> <td><code class="readme-inline-code">directory::skills::download</code></td> <td>Pull markdown into <code class="readme-inline-code">skills_folder</code>. Flexible alias accepting either source set: <code class="readme-inline-code">{repo, skill, branch?}</code> (defaults <code class="readme-inline-code">branch=main</code>) or <code class="readme-inline-code">{worker, version?|tag?}</code> (defaults <code class="readme-inline-code">tag=latest</code>). Prefer the two explicit forms below so the source is unambiguous.</td> </tr> <tr> <td><code class="readme-inline-code">directory::skills::download_from_repo</code></td> <td>Repo-only form: <code class="readme-inline-code">{repo, skill, branch?}</code>. Copies one skill folder out of a GitHub repo, classifying each written file as a skill, a command template (<code class="readme-inline-code">prompts/</code>), or a system prompt (<code class="readme-inline-code">system-prompts/</code>).</td> </tr> <tr> <td><code class="readme-inline-code">directory::skills::download_from_registry</code></td> <td>Registry-only form: <code class="readme-inline-code">{worker, version?|tag?}</code>. Installs a published worker's bundle from <code class="readme-inline-code">api.workers.iii.dev</code>.</td> </tr> <tr> <td><code class="readme-inline-code">directory::skills::list</code></td> <td>Enriched listing of every fs-backed skill: <code class="readme-inline-code">{ id, title, type, description, bytes, modified_at }</code> per row. <code class="readme-inline-code">title</code> prefers the YAML frontmatter <code class="readme-inline-code">title:</code> over the body H1, <code class="readme-inline-code">type</code> is lifted from frontmatter <code class="readme-inline-code">type:</code> (<code class="readme-inline-code">null</code> when absent), and <code class="readme-inline-code">description</code> is the first paragraph of the body — so consumers can render a picker without a follow-up <code class="readme-inline-code">get</code> per row.</td> </tr> <tr> <td><code class="readme-inline-code">directory::skills::get</code></td> <td>Fetch one skill by id. Returns <code class="readme-inline-code">{ id, title, type, description, path, body, modified_at }</code> — same shape <code class="readme-inline-code">directory::skills::list</code> rows use, plus the raw markdown <code class="readme-inline-code">body</code> and the absolute on-disk <code class="readme-inline-code">path</code> (its parent directory is the skill's base directory, where payload like <code class="readme-inline-code">scripts/</code> and <code class="readme-inline-code">reference/</code> lives — meaningful only to callers on this worker's machine). Same title-resolution and <code class="readme-inline-code">type</code> precedence as <code class="readme-inline-code">list</code>. Accepts a bare id or the same id prefixed with <code class="readme-inline-code">iii://</code>. Pass <code class="readme-inline-code">raw: true</code> to additionally get the FULL on-disk file (frontmatter included) as <code class="readme-inline-code">raw</code> — the round-trip form <code class="readme-inline-code">update</code> takes.</td> </tr> <tr> <td><code class="readme-inline-code">directory::skills::update</code></td> <td>Overwrite one EXISTING skill file with new full-file content: <code class="readme-inline-code">{ id, content }</code> where <code class="readme-inline-code">content</code> is the edited <code class="readme-inline-code">raw</code> from <code class="readme-inline-code">get { raw: true }</code>. Validated against the read invariants (size cap, non-empty body after frontmatter); atomic write; fans out <code class="readme-inline-code">directory::skills::on-change</code> with <code class="readme-inline-code">op: "update"</code>. Never creates files (use <code class="readme-inline-code">create</code>). Refuses read-only system-installed skills under <code class="readme-inline-code">agents_skills_folder</code> (<code class="readme-inline-code">D116</code>).</td> </tr> <tr> <td><code class="readme-inline-code">directory::skills::create</code></td> <td>Create a NEW skill file at <code class="readme-inline-code"><skills_folder>/<id>.md</code> from full-file content: <code class="readme-inline-code">{ id, content }</code>. Frontmatter is optional (same rules as <code class="readme-inline-code">update</code>: size cap, non-empty body). Refuses an <code class="readme-inline-code">id</code> that already resolves in the visible set — including the <code class="readme-inline-code"><id></code> → <code class="readme-inline-code"><id>/index</code> overview alias and system-installed agents skills — or a target path that already exists on disk (<code class="readme-inline-code">D114</code>); an <code class="readme-inline-code">id</code> in a namespace reserved by a system-installed agents skill (<code class="readme-inline-code">D115</code>); and, while <code class="readme-inline-code">filter_unregistered</code> is on, an <code class="readme-inline-code">id</code> the visibility filter would immediately hide (<code class="readme-inline-code">D115</code>). Atomic write; fans out <code class="readme-inline-code">directory::skills::on-change</code> with <code class="readme-inline-code">op: "create"</code>. Returns the same shape as <code class="readme-inline-code">update</code>.</td> </tr> <tr> <td><code class="readme-inline-code">directory::skills::delete</code></td> <td>Permanently remove one EXISTING skill file by <code class="readme-inline-code">{ id }</code> (same id forms as <code class="readme-inline-code">get</code>). Resolves against the same visible set as <code class="readme-inline-code">list</code>/<code class="readme-inline-code">get</code>, refuses read-only system-installed skills under <code class="readme-inline-code">agents_skills_folder</code> (<code class="readme-inline-code">D116</code>), removes the file plus any parent directories left empty (so a deleted namespace can't keep shadowing a lower-precedence root), and fans out <code class="readme-inline-code">directory::skills::on-change</code> with <code class="readme-inline-code">op: "delete"</code>. Returns <code class="readme-inline-code">{ id }</code> (the resolved on-disk id).</td> </tr> <tr> <td><code class="readme-inline-code">directory::skills::index</code></td> <td>Render one short markdown entry per installed worker (skills with frontmatter <code class="readme-inline-code">type: index</code>). Returns <code class="readme-inline-code">{ body, workers_count }</code> where <code class="readme-inline-code">body</code> is a ready-to-paste page: <code class="readme-inline-code"># Skills index</code>, then one <code class="readme-inline-code">## <worker title></code> heading + the worker's first overview paragraph + a <code class="readme-inline-code">Read iii://<ns>/index</code> pointer the agent can follow with <code class="readme-inline-code">directory::skills::get</code>. Token-light by design; use <code class="readme-inline-code">directory::skills::list</code> for per-skill rows.</td> </tr> </tbody></table> <h3 id="directoryprompts-filesystem-reader-editor" class="scroll-mt-20"><code class="readme-inline-code">directory::prompts::*</code> (filesystem reader + editor)</h3> <table> <thead> <tr> <th>Function ID</th> <th>Description</th> </tr> </thead> <tbody><tr> <td><code class="readme-inline-code">directory::prompts::list</code></td> <td>Metadata-only listing of every fs-backed prompt.</td> </tr> <tr> <td><code class="readme-inline-code">directory::prompts::get</code></td> <td>Fetch one prompt's body + <code class="readme-inline-code">{name, description, modified_at}</code>. Plain shape, no envelope. Pass <code class="readme-inline-code">raw: true</code> to additionally get the FULL on-disk file (frontmatter included) as <code class="readme-inline-code">raw</code>.</td> </tr> <tr> <td><code class="readme-inline-code">directory::prompts::update</code></td> <td>Overwrite one EXISTING prompt file with new full-file content: <code class="readme-inline-code">{ name, content }</code>. The frontmatter must keep a non-empty <code class="readme-inline-code">description</code> (and a valid <code class="readme-inline-code">name</code> when declared) — the same rules the scanner enforces. Atomic write; fans out <code class="readme-inline-code">directory::prompts::on-change</code> with <code class="readme-inline-code">op: "update"</code>. Returns the prompt's effective name after the write.</td> </tr> <tr> <td><code class="readme-inline-code">directory::prompts::create</code></td> <td>Create a NEW command-template prompt file at <code class="readme-inline-code"><skills_folder>/prompts/<name>.md</code> from full-file content: <code class="readme-inline-code">{ name, content }</code>, where <code class="readme-inline-code">content</code> is the FULL file including frontmatter. The frontmatter must carry a non-empty <code class="readme-inline-code">description</code> (and a <code class="readme-inline-code">name</code> matching the request, when declared) — the same rules <code class="readme-inline-code">update</code> enforces. Refuses a <code class="readme-inline-code">name</code> that already exists anywhere in the merged command-prompt scan, and a target path that already exists on disk even if the scanner would skip it. Atomic write; fans out <code class="readme-inline-code">directory::prompts::on-change</code> with <code class="readme-inline-code">op: "create"</code>. Returns <code class="readme-inline-code">{ name, description, bytes, modified_at }</code>.</td> </tr> <tr> <td><code class="readme-inline-code">directory::prompts::delete</code></td> <td>Permanently remove one EXISTING command-template prompt file by <code class="readme-inline-code">{ name }</code>. Resolves against the same merged scan as <code class="readme-inline-code">list</code>/<code class="readme-inline-code">get</code>, fans out <code class="readme-inline-code">directory::prompts::on-change</code> with <code class="readme-inline-code">op: "delete"</code>, and returns <code class="readme-inline-code">{ name }</code>.</td> </tr> </tbody></table> <h3 id="directorysystem-prompts-filesystem-reader-editor" class="scroll-mt-20"><code class="readme-inline-code">directory::system-prompts::*</code> (filesystem reader + editor)</h3> <table> <thead> <tr> <th>Function ID</th> <th>Description</th> </tr> </thead> <tbody><tr> <td><code class="readme-inline-code">directory::system-prompts::list</code></td> <td>Metadata-only listing of every fs-backed system prompt.</td> </tr> <tr> <td><code class="readme-inline-code">directory::system-prompts::get</code></td> <td>Fetch one system prompt's body + <code class="readme-inline-code">{name, description, modified_at}</code>. Plain shape, no envelope. Pass <code class="readme-inline-code">raw: true</code> to additionally get the FULL on-disk file (frontmatter included) as <code class="readme-inline-code">raw</code>.</td> </tr> <tr> <td><code class="readme-inline-code">directory::system-prompts::update</code></td> <td>Overwrite one EXISTING system prompt file with new full-file content: <code class="readme-inline-code">{ name, content }</code>. The frontmatter must keep a non-empty <code class="readme-inline-code">description</code> (and a valid <code class="readme-inline-code">name</code> when declared) — the same rules the scanner enforces. Atomic write; fans out <code class="readme-inline-code">directory::system-prompts::on-change</code> with <code class="readme-inline-code">op: "update"</code>. Returns the system prompt's effective name after the write.</td> </tr> <tr> <td><code class="readme-inline-code">directory::system-prompts::create</code></td> <td>Create a NEW system prompt file at <code class="readme-inline-code"><skills_folder>/system-prompts/<name>.md</code> from full-file content: <code class="readme-inline-code">{ name, content }</code>, where <code class="readme-inline-code">content</code> is the FULL file including frontmatter. The frontmatter must carry a non-empty <code class="readme-inline-code">description</code> (and a <code class="readme-inline-code">name</code> matching the request, when declared) — the same rules <code class="readme-inline-code">update</code> enforces. Refuses a <code class="readme-inline-code">name</code> that already exists anywhere in the merged system-prompt scan, and a target path that already exists on disk even if the scanner would skip it. Atomic write; fans out <code class="readme-inline-code">directory::system-prompts::on-change</code> with <code class="readme-inline-code">op: "create"</code>. Returns <code class="readme-inline-code">{ name, description, bytes, modified_at }</code>.</td> </tr> <tr> <td><code class="readme-inline-code">directory::system-prompts::delete</code></td> <td>Permanently remove one EXISTING system prompt file by <code class="readme-inline-code">{ name }</code>. Resolves against the same merged scan as <code class="readme-inline-code">list</code>/<code class="readme-inline-code">get</code>, fans out <code class="readme-inline-code">directory::system-prompts::on-change</code> with <code class="readme-inline-code">op: "delete"</code>, and returns <code class="readme-inline-code">{ name }</code>.</td> </tr> </tbody></table> <h3 id="engine-introspection-native-plus-one-wrapper" class="scroll-mt-20">Engine introspection (native, plus one wrapper)</h3> <p>Engine introspection is served natively; call these ids directly — every one takes the same filters (<code class="readme-inline-code">prefix</code>, <code class="readme-inline-code">search</code>, <code class="readme-inline-code">worker</code>, <code class="readme-inline-code">include_internal</code> where applicable). One wrapper is kept for callers whose policy only admits the <code class="readme-inline-code">directory::</code> namespace:</p> <table> <thead> <tr> <th>Function ID</th> <th>Description</th> </tr> </thead> <tbody><tr> <td><code class="readme-inline-code">directory::engine::functions::info</code></td> <td>Thin proxy to <code class="readme-inline-code">engine::functions::info</code> for a single <code class="readme-inline-code">function_id</code>: request/response schemas, metadata, and registered triggers. The one <code class="readme-inline-code">directory::engine::*</code> helper that still exists — reach for it only when you cannot call <code class="readme-inline-code">engine::*</code> directly.</td> </tr> </tbody></table> <p>The native ids:</p> <table> <thead> <tr> <th>Function ID</th> <th>Description</th> </tr> </thead> <tbody><tr> <td><code class="readme-inline-code">engine::functions::list</code></td> <td>List functions registered with the engine.</td> </tr> <tr> <td><code class="readme-inline-code">engine::functions::info</code></td> <td>Single-function detail: schemas, owning worker.</td> </tr> <tr> <td><code class="readme-inline-code">engine::triggers::list</code></td> <td>List trigger TYPES (the providers, e.g. <code class="readme-inline-code">http</code>, <code class="readme-inline-code">cron</code>).</td> </tr> <tr> <td><code class="readme-inline-code">engine::triggers::info</code></td> <td>Single trigger-type detail: configuration schema, return schema.</td> </tr> <tr> <td><code class="readme-inline-code">engine::registered-triggers::list</code></td> <td>List trigger INSTANCES (subscriber rows).</td> </tr> <tr> <td><code class="readme-inline-code">engine::registered-triggers::info</code></td> <td>Single registered-trigger detail.</td> </tr> <tr> <td><code class="readme-inline-code">engine::workers::list</code></td> <td>List workers with an open engine WS connection. Daemon-managed providers (<code class="readme-inline-code">http</code>, <code class="readme-inline-code">cron</code>, <code class="readme-inline-code">state</code>) won't appear — call <code class="readme-inline-code">worker::list</code> from the supervisor to see those.</td> </tr> <tr> <td><code class="readme-inline-code">engine::workers::info</code></td> <td>One worker's detail by <code class="readme-inline-code">name</code>.</td> </tr> </tbody></table> <h3 id="directoryregistry-workers-registry-http-proxy" class="scroll-mt-20"><code class="readme-inline-code">directory::registry::*</code> (workers registry HTTP proxy)</h3> <table> <thead> <tr> <th>Function ID</th> <th>Description</th> </tr> </thead> <tbody><tr> <td><code class="readme-inline-code">directory::registry::workers::list</code></td> <td>Browse / search published workers in <code class="readme-inline-code">api.workers.iii.dev</code>. Optional free-text <code class="readme-inline-code">search</code> (matched fuzzy by <code class="readme-inline-code">pg_trgm</code>) and opaque <code class="readme-inline-code">cursor</code> for pagination; page size is server-authored. Response is <code class="readme-inline-code">{ workers: [...], pagination: { next_cursor, has_more, page_size } }</code>. Shares the core <code class="readme-inline-code">name</code> / <code class="readme-inline-code">description</code> / <code class="readme-inline-code">version</code> fields with the engine's <code class="readme-inline-code">engine::workers::list</code>.</td> </tr> <tr> <td><code class="readme-inline-code">directory::registry::workers::info</code></td> <td>Full registry detail for one worker. Fans out two parallel registry calls — <code class="readme-inline-code">GET /w/{slug}</code> for the worker envelope (publication metadata + readme + functions + triggers) and <code class="readme-inline-code">GET /w/{slug}/skills</code> for the skills/prompts tree — and merges them into <code class="readme-inline-code">{ worker, readme, api_reference, skills_tree }</code>. The user-facing input still accepts <code class="readme-inline-code">version:</code> (semver) or <code class="readme-inline-code">tag:</code> (e.g. <code class="readme-inline-code">latest</code>); both go on the wire as <code class="readme-inline-code">?version=…</code>.</td> </tr> </tbody></table> <p>Both <code class="readme-inline-code">directory::registry::*</code> responses are cached in-process for <code class="readme-inline-code">registry_cache_ttl_ms</code> (default 60s).</p> <p>There is <strong>no</strong> <code class="readme-inline-code">directory::skills::register</code> / <code class="readme-inline-code">directory::prompts::register</code> — see <a href="#migration-from-skills-v02x">Migration</a> below.</p> <hr> <h2 id="function-search-pre-generate-hint" class="scroll-mt-20">Function search & pre-generate hint</h2> <p>One-shot lexical function search over the live engine catalog, absorbed from the former <code class="readme-inline-code">discovery</code> worker. One natural-language query returns the API reference of only the relevant functions, grouped by worker in rank order — the model's next step is calling them directly instead of walking the engine catalog with <code class="readme-inline-code">engine::functions::list</code>/<code class="readme-inline-code">info</code>.</p> <table> <thead> <tr> <th>Function</th> <th>Kind</th> <th>What it does</th> </tr> </thead> <tbody><tr> <td><code class="readme-inline-code">directory::search_functions</code></td> <td>public</td> <td><code class="readme-inline-code">{ query }</code> → <code class="readme-inline-code">{ guidance, workers[], installable[]?, latency_ms }</code>: BM25 rank over the live engine catalog (at most 3 workers / 12 contracts) plus matching NOT-installed registry workers under <code class="readme-inline-code">installable</code>.</td> </tr> <tr> <td><code class="readme-inline-code">directory::pre-generate</code></td> <td>internal hook</td> <td>Injects the conditional search hint into a harness generation (at most once per session).</td> </tr> <tr> <td><code class="readme-inline-code">directory::on-functions-change</code></td> <td>internal</td> <td>Refreshes the search catalog on the engine's functions-available push.</td> </tr> <tr> <td><code class="readme-inline-code">directory::hint-preview</code></td> <td>internal</td> <td>The exact hint text per exposure mode, for the configuration UI.</td> </tr> </tbody></table> <p>Ranking pipeline:</p> <ol> <li><strong>Corpus</strong>: the live engine catalog (boot snapshot + push refresh), slimmed to name + first description sentence + argument names. <code class="readme-inline-code">engine::</code> ids, functions published with <code class="readme-inline-code">metadata.internal</code>, and the search itself never participate — the worker's own public <code class="readme-inline-code">directory::*</code> functions are searchable like any other capability.</li> <li><strong>Scoring</strong>: Okapi BM25 (k1 1.2, b 0.75) with the function name indexed at 3× weight, camelCase segmentation (<code class="readme-inline-code">presignUrl</code> → presign + url), a 22-word grammatical stoplist, conservative plural folding, JSON-key stripping from the query, and a two-distinct-terms minimum match.</li> <li><strong>Multi-intent queries</strong>: clauses split on list punctuation and "and" (only when both sides keep two informative terms) are ranked on their own leaders with a fair share of the function cap.</li> <li><strong>Pruning</strong>: coverage-aware function floor (≥50% of the leader AND full term coverage or ≥85% score) drops same-worker family riders; a namespace-level floor (40% of the leader) drops trailing workers.</li> <li><strong>Registry search</strong> (<code class="readme-inline-code">registry_search</code>, default on): every call also consults the public workers registry in-process (full query, then informative terms, all concurrent; verified authors only; candidates merged round-robin across query variants) and returns up to 2 workers / 6 contracts that WOULD match if installed, with <code class="readme-inline-code">worker::add</code> guidance.</li> <li><strong>Session memory</strong> (keyed by caller-supplied OTel baggage, fail-open): repeat queries omit contracts already delivered; two consecutive empty answers widen the next one to single-term matches.</li> </ol> <p>The pre-generate hook appends one <code class="readme-inline-code"><discovery_assist></code> block pointing the model at <code class="readme-inline-code">search_functions</code> — at most once per session, and only when every gate clears: the function is callable in the surface, no search result is in the window yet, the surface spans at least <code class="readme-inline-code">hint_min_workers</code> distinct workers, the current task (from the latest user message) has no real function results yet, and it does not already name a callable function id. Measured on 26 pre-existing e2e scenarios: an unconditional hint <em>induces</em> redundant discovery on guided tasks (up to +110% tokens); the gates are what make default-on affordable. The hook's transcript annotations (<code class="readme-inline-code">origin.directory</code>) carry only coarse outcome/reason and counts.</p> <p>Knobs (<code class="readme-inline-code">inject_hint</code>, <code class="readme-inline-code">hint_min_workers</code>, <code class="readme-inline-code">registry_search</code>) live in the <code class="readme-inline-code">iii-directory</code> configuration entry and hot-apply — see Configuration.</p> <h2 id="custom-trigger-types" class="scroll-mt-20">Custom trigger types</h2> <table> <thead> <tr> <th>Trigger type</th> <th>Fires when</th> <th>Payload to subscribers</th> </tr> </thead> <tbody><tr> <td><code class="readme-inline-code">directory::skills::on-change</code></td> <td>After a <code class="readme-inline-code">directory::skills::download</code> that wrote at least one skill markdown file, a <code class="readme-inline-code">directory::skills::update</code>, <code class="readme-inline-code">create</code>, or <code class="readme-inline-code">delete</code>, or external (file pasted/edited/deleted directly on disk — including under <code class="readme-inline-code">agents_skills_folder</code>)</td> <td>download: <code class="readme-inline-code">{ "op": "download", "namespace": "<ns>", "source": "repo" | "registry" }</code>; update/create/delete: <code class="readme-inline-code">{ "op": "<operation>", "namespace": "<ns>", "id": "<id>" }</code>; external (file pasted/edited/deleted directly on disk): <code class="readme-inline-code">{ "op": "external" }</code></td> </tr> <tr> <td><code class="readme-inline-code">directory::prompts::on-change</code></td> <td>After a <code class="readme-inline-code">directory::skills::download</code> that wrote at least one prompt markdown file, a <code class="readme-inline-code">directory::prompts::update</code>, <code class="readme-inline-code">create</code>, <code class="readme-inline-code">delete</code>, or external (file pasted/edited/deleted directly on disk)</td> <td>download: <code class="readme-inline-code">{ "op": "download", "namespace": "<ns>", "source": "repo" | "registry" }</code>; update/create/delete: <code class="readme-inline-code">{ "op": "<operation>", "name": "<name>" }</code>; external (file pasted/edited/deleted directly on disk): <code class="readme-inline-code">{ "op": "external" }</code></td> </tr> <tr> <td><code class="readme-inline-code">directory::system-prompts::on-change</code></td> <td>After a <code class="readme-inline-code">directory::skills::download</code> that wrote at least one system prompt markdown file, a <code class="readme-inline-code">directory::system-prompts::update</code>, <code class="readme-inline-code">create</code>, <code class="readme-inline-code">delete</code>, or external file change</td> <td>download: <code class="readme-inline-code">{ "op": "download", "namespace": "<ns>", "source": "repo" | "registry" }</code>; update/create/delete: <code class="readme-inline-code">{ "op": "<operation>", "name": "<name>" }</code>; external: <code class="readme-inline-code">{ "op": "external" }</code></td> </tr> </tbody></table> <p>Dispatches are fire-and-forget (Void), so the write path doesn't block on downstream latency.</p> <p>The <code class="readme-inline-code">external</code> op comes from a filesystem watch over <code class="readme-inline-code">skills_folder</code>, <code class="readme-inline-code">local_skills_folder</code>, and (when it already exists) the read-only <code class="readme-inline-code">agents_skills_folder</code>. It is a doorbell, not a ledger: every read re-scans disk, so a missed event costs a stale open view until the next call, never data. A burst coalesces into one event per kind, and this worker's own writes are suppressed — a <code class="readme-inline-code">create</code> or <code class="readme-inline-code">update</code> sends its precise op and never an extra <code class="readme-inline-code">external</code>.</p> <p><strong>Loop hazard for subscribers.</strong> Suppression covers writes made <em>through this worker</em>. A subscriber that reacts to <code class="readme-inline-code">{ "op": "external" }</code> by writing <code class="readme-inline-code">.md</code> files under <code class="readme-inline-code">skills_folder</code> by some other route — a shell or coder worker, a script — is not suppressed and will re-trigger itself. Either write through <code class="readme-inline-code">directory::*::update</code> / <code class="readme-inline-code">create</code>, or make the reaction idempotent and gated.</p> <hr> <h2 id="local-development-testing" class="scroll-mt-20">Local development & testing</h2> <h3 id="run-from-source" class="scroll-mt-20">Run from source</h3> <pre class="shiki shiki-themes min-light vesper" style="--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010" tabindex="0"><code><span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># --config is an optional YAML seed (see config.yaml.example); omit it to</span></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># rely on the value stored in the `configuration` worker (or built-in defaults).</span></span> <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#FFC799">cargo</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> run</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --release</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --url</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> ws://127.0.0.1:49134</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --config</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> ./config.yaml.example</span></span></code></pre><h3 id="tests" class="scroll-mt-20">Tests</h3> <pre class="shiki shiki-themes min-light vesper" style="--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010" tabindex="0"><code><span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># Fast, offline — exercises the pure helpers (markdown / id validators</span></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># / fs source) without needing an iii engine.</span></span> <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#FFC799">cargo</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> test</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --lib</span></span> <span class="line"></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># Full BDD suite — requires an iii engine on ws://127.0.0.1:49134</span></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># (or III_ENGINE_WS_URL). The git-backed download scenarios spin up</span></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># a local fixture repo via `git init`; the registry-backed scenarios</span></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># point a wiremock server at the worker's `registry_url` config.</span></span> <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#FFC799">cargo</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> test</span></span> <span class="line"></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># One feature group at a time. Available tags:</span></span> <span class="line"><span style="--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94"># @engine @read @prompts @download @download_repo @download_registry</span></span> <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#FFC799">cargo</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> test</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --test</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> bdd</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> --tags</span><span style="--shiki-light:#2B5581;--shiki-dark:#99FFE4"> @download</span></span></code></pre><p>The BDD harness lives under <a href="tests/">tests/</a>. Feature files mirror the modules in <a href="src/functions/">src/functions/</a>. Step definitions under <a href="tests/steps/">tests/steps/</a> drive each feature through the same <code class="readme-inline-code">iii.trigger</code> path the production binary uses.</p> </div></div></section></div><aside class="flex min-w-0 flex-col gap-y-6 @4xl:col-start-2 @4xl:row-start-2 @4xl:self-start"><dl class="grid grid-cols-2 gap-x-6"><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2"><dt class="text-[13px] text-muted-foreground">Repository</dt><dd class="min-w-0 text-foreground"><a href="https://github.com/iii-hq/workers" target="_blank" rel="noreferrer" class="inline-flex max-w-full items-center gap-x-2 text-[14px] font-medium transition-colors duration-150 hover:text-brand"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 2.69922C6.762 2.69922 2.5 6.96122 2.5 12.1992C2.5 16.3252 5.24 20.0532 9.164 21.2662C9.324 21.3182 9.498 21.2822 9.627 21.1762C9.757 21.0702 9.825 20.9062 9.809 20.7392C9.669 19.3462 10.47 17.8702 10.812 17.5162C10.944 17.3812 10.988 17.1822 10.925 17.0042C10.862 16.8252 10.704 16.6962 10.516 16.6732C8.725 16.4452 7.067 15.8372 7.067 12.9472C7.063 12.2282 7.337 11.5412 7.836 11.0122C7.968 10.8732 8.009 10.6712 7.941 10.4922C7.75 9.98722 7.729 9.42222 7.877 8.90022C8.168 8.94822 8.731 9.11922 9.608 9.70522C9.728 9.78622 9.877 9.80722 10.015 9.77222C11.312 9.42422 12.682 9.42422 13.979 9.77222C14.116 9.80722 14.266 9.78622 14.386 9.70522C15.27 9.11422 15.835 8.94522 16.115 8.89622C16.264 9.42022 16.245 9.98622 16.054 10.4932C15.986 10.6732 16.027 10.8752 16.16 11.0132C16.654 11.5332 16.927 12.2172 16.927 12.9382C16.927 15.8772 15.273 16.4642 13.486 16.6612C13.296 16.6812 13.135 16.8092 13.071 16.9882C13.006 17.1682 13.049 17.3692 13.182 17.5062C13.512 17.8472 14.321 19.3622 14.185 20.7502C14.168 20.9172 14.236 21.0812 14.367 21.1862C14.457 21.2612 14.569 21.2992 14.682 21.2992C14.732 21.2992 14.783 21.2912 14.832 21.2752C18.82 20.0202 21.5 16.3732 21.5 12.1992C21.5 6.96122 17.238 2.69922 12 2.69922Z"></path></svg><span class="truncate">iii-hq/workers</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right size-3.5 shrink-0 text-muted-foreground" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2"><dt class="text-[13px] text-muted-foreground">Weekly installs</dt><dd class="min-w-0 text-foreground"><span class="font-[550] tabular-nums text-[24px] tracking-[-0.03em]">815</span><div role="img" aria-label="Daily installs over the last 7 completed days: 67, 114, 150, 79, 287, 83, 35" class="relative min-w-0 mt-3"><svg viewBox="0 0 340 52" aria-hidden="true" class="block h-auto w-full overflow-visible text-foreground"><defs><linearGradient id="installs-_R_k9sav5ubspb_" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" stop-color="currentColor" stop-opacity="0.16"></stop><stop offset="100%" stop-color="currentColor" stop-opacity="0"></stop></linearGradient><linearGradient id="installs-_R_k9sav5ubspb_-fade" x1="0" y1="0" x2="1" y2="0"><stop offset="0%" stop-color="white" stop-opacity="0"></stop><stop offset="25%" stop-color="white" stop-opacity="1"></stop></linearGradient><mask id="installs-_R_k9sav5ubspb_-mask"><rect width="340" height="52" fill="url(#installs-_R_k9sav5ubspb_-fade)"></rect></mask></defs><path d="M4.00,41.67 C22.44,39.06 40.89,36.14 59.33,33.83 C77.78,31.53 96.22,27.83 114.67,27.83 C133.11,27.83 151.56,39.67 170.00,39.67 C188.44,39.67 206.89,5.00 225.33,5.00 C243.78,5.00 262.22,32.00 280.67,39.00 C299.11,46.00 317.56,44.33 336.00,47.00 L336,52 L4,52 Z" fill="url(#installs-_R_k9sav5ubspb_)" mask="url(#installs-_R_k9sav5ubspb_-mask)" style="opacity:0;transition:opacity 500ms cubic-bezier(0.2, 0.8, 0.3, 1) 200ms"></path><line x1="0" x2="0" y1="0" y2="52" stroke="currentColor" stroke-width="1" stroke-dasharray="2 2" style="opacity:0;translate:336px 0;transition:opacity 150ms cubic-bezier(0.2, 0.8, 0.3, 1), translate 180ms cubic-bezier(0.2, 0.8, 0.3, 1)"></line><path d="M4.00,41.67 C22.44,39.06 40.89,36.14 59.33,33.83 C77.78,31.53 96.22,27.83 114.67,27.83 C133.11,27.83 151.56,39.67 170.00,39.67 C188.44,39.67 206.89,5.00 225.33,5.00 C243.78,5.00 262.22,32.00 280.67,39.00 C299.11,46.00 317.56,44.33 336.00,47.00" pathLength="1" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 1.1" style="stroke-dashoffset:1.05;transition:stroke-dashoffset 650ms cubic-bezier(0.2, 0.8, 0.3, 1)"></path><g style="translate:336px 47px;transition:translate 180ms cubic-bezier(0.2, 0.8, 0.3, 1)"><circle r="3.25" fill="var(--background)" stroke="currentColor" stroke-width="1.5" class="origin-center [transform-box:fill-box]" style="scale:0;transition:scale 250ms cubic-bezier(0.34, 1.56, 0.64, 1) 550ms"></circle></g></svg></div></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Version</dt><dd class="min-w-0 text-foreground"><span class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums block truncate">v<!-- -->1.2.3</span></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">License</dt><dd class="min-w-0 text-foreground"><span class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums block truncate">Apache-2.0</span></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Total installs</dt><dd class="min-w-0 text-foreground"><span class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums">5,957</span></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Type</dt><dd class="min-w-0 text-foreground"><span class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums block truncate">binary</span></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Functions</dt><dd class="min-w-0 text-foreground"><a class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand" href="/registry/workers/iii-directory?version=1.2.3&tab=api">29</a></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Triggers</dt><dd class="min-w-0 text-foreground"><a class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand" href="/registry/workers/iii-directory?version=1.2.3&tab=api">3</a></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Skills</dt><dd class="min-w-0 text-foreground"><a class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand" href="/registry/workers/iii-directory?version=1.2.3&tab=skills">3</a></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Dependencies</dt><dd class="min-w-0 text-foreground"><a class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand" href="/registry/workers/iii-directory?version=1.2.3&tab=deps">1</a></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Last publish</dt><dd class="min-w-0 text-foreground"><time dateTime="2026-08-20T19:21:13.143Z" title="2026-08-20T19:21:13.143Z" class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums block truncate">2mo ago</time></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2"><dt class="text-[13px] text-muted-foreground">Platforms</dt><dd class="min-w-0 text-foreground"><ul aria-label="Supported platforms" class="flex flex-wrap items-center gap-2 mt-1"><li title="macOS: arm64, x64" class="inline-flex items-center rounded-md border border-line bg-background font-mono text-muted-foreground h-8 gap-x-2 px-2.5 text-[13px]"><img alt="" aria-hidden="true" loading="lazy" width="209" height="256" decoding="async" data-nimg="1" class="shrink-0 opacity-80 [filter:brightness(0)] dark:[filter:brightness(0)_invert(1)] h-3.5 w-auto" style="color:transparent" src="/registry/icons/apple_dark.svg?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC"/><span class="sr-only">macOS<!-- -->: </span><span class="tabular-nums">arm64 · x64</span></li><li title="Linux: arm64, armv7, x64" class="inline-flex items-center rounded-md border border-line bg-background font-mono text-muted-foreground h-8 gap-x-2 px-2.5 text-[13px]"><img alt="" aria-hidden="true" loading="lazy" width="256" height="295" decoding="async" data-nimg="1" class="shrink-0 opacity-80 [filter:brightness(0)] dark:[filter:brightness(0)_invert(1)] h-3.5 w-auto" style="color:transparent" src="/registry/icons/linux.svg?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC"/><span class="sr-only">Linux<!-- -->: </span><span class="tabular-nums">arm64 · armv7 · x64</span></li><li title="Windows: arm64, x64, x86" class="inline-flex items-center rounded-md border border-line bg-background font-mono text-muted-foreground h-8 gap-x-2 px-2.5 text-[13px]"><img alt="" aria-hidden="true" loading="lazy" width="88" height="88" decoding="async" data-nimg="1" class="shrink-0 opacity-80 [filter:brightness(0)] dark:[filter:brightness(0)_invert(1)] h-3.5 w-auto" style="color:transparent" src="/registry/icons/windows.svg?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC"/><span class="sr-only">Windows<!-- -->: </span><span class="tabular-nums">arm64 · x64 · x86</span></li></ul></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2"><dt class="text-[13px] text-muted-foreground">Author</dt><dd class="min-w-0 text-foreground"><span class="inline-flex min-w-0 items-center gap-x-2"><img src="https://iii.dev/docs/_mintlify/favicons/motiadev/AFkVbz_UcSL_5jsm/_generated/favicon/apple-touch-icon.png" alt="" class="size-5 shrink-0 rounded-full border border-line object-cover"/><span class="truncate text-[13px] font-medium text-foreground">iii</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" fill="currentColor" focusable="false" class="size-3.5 shrink-0 text-verified" aria-label="Verified author"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.5837 10.5577L11.5107 14.6327C11.3697 14.7737 11.1787 14.8527 10.9797 14.8527C10.7807 14.8527 10.5897 14.7737 10.4497 14.6327L8.47274 12.6527C8.18075 12.3587 8.18075 11.8837 8.47375 11.5907C8.76775 11.2987 9.24174 11.2997 9.53475 11.5917L10.9807 13.0407L14.5227 9.49667C14.8157 9.20367 15.2907 9.20367 15.5837 9.49667C15.8767 9.78967 15.8767 10.2647 15.5837 10.5577ZM20.7037 10.0857L20.0047 9.38667C19.6857 9.06667 19.5107 8.64067 19.5107 8.18967V7.18967C19.5107 5.70067 18.2987 4.48967 16.8107 4.48967H15.8087C15.3557 4.48967 14.9307 4.31467 14.6127 3.99667L13.9017 3.28667C12.8447 2.23867 11.1327 2.24367 10.0837 3.29767L9.38674 3.99667C9.06574 4.31567 8.64075 4.49067 8.18875 4.49067H7.18775C5.71675 4.49167 4.51675 5.67567 4.48975 7.14167C4.48874 7.15767 4.48775 7.17367 4.48775 7.19067V8.18767C4.48775 8.63967 4.31275 9.06467 3.99375 9.38367L3.28575 10.0927C3.28475 10.0957 3.28175 10.0967 3.27975 10.0987C2.23475 11.1567 2.24375 12.8687 3.29675 13.9117L3.99575 14.6127C4.31375 14.9317 4.48975 15.3557 4.48975 15.8077V16.8127C4.48975 18.3007 5.69975 19.5117 7.18775 19.5117H8.18675C8.63975 19.5127 9.06475 19.6877 9.38275 20.0047L10.0957 20.7157C10.6037 21.2207 11.2777 21.4987 11.9947 21.4987H12.0067C12.7277 21.4957 13.4037 21.2117 13.9097 20.7027L14.6107 20.0027C14.9257 19.6887 15.3617 19.5087 15.8067 19.5087H16.8127C18.2977 19.5087 19.5087 18.2997 19.5117 16.8127V15.8097C19.5117 15.3587 19.6867 14.9337 20.0037 14.6147L20.7147 13.9037C21.7647 12.8477 21.7587 11.1347 20.7037 10.0857Z"></path></svg></span></dd></div></dl><section id="used-in-kits" aria-labelledby="used-in-kits-title" class="overflow-hidden rounded-xl border border-line bg-paper scroll-mt-20"><div class="flex min-h-11 items-center justify-between gap-x-3 border-b border-line px-4"><span id="used-in-kits-title" class="font-mono text-[10px] uppercase tracking-[0.08em] text-muted-foreground">Used in <!-- -->1<!-- --> <!-- -->kit</span></div><ul class="flex flex-col p-2"><li><a class="group flex items-start gap-x-3 rounded-lg px-2 py-2 transition-colors duration-150 hover:bg-code focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand" href="/registry/kits/iii/deepwork"><span class="grid size-8 shrink-0 place-items-center rounded-[9px] border border-line bg-background"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" fill="currentColor" focusable="false" aria-hidden="true" class="shrink-0 text-foreground size-3.5"><g transform="translate(2 2)"><path d="M5.9199,11.4697 C7.3299,11.4697 8.4599,12.6107 8.4599,14.0307 L8.4599,14.0307 L8.4599,17.4397 C8.4599,18.8497 7.3299,19.9997 5.9199,19.9997 L5.9199,19.9997 L2.5399,19.9997 C1.1399,19.9997 -0.0001,18.8497 -0.0001,17.4397 L-0.0001,17.4397 L-0.0001,14.0307 C-0.0001,12.6107 1.1399,11.4697 2.5399,11.4697 L2.5399,11.4697 Z M17.46,11.4697 C18.86,11.4697 20,12.6107 20,14.0307 L20,14.0307 L20,17.4397 C20,18.8497 18.86,19.9997 17.46,19.9997 L17.46,19.9997 L14.08,19.9997 C12.67,19.9997 11.54,18.8497 11.54,17.4397 L11.54,17.4397 L11.54,14.0307 C11.54,12.6107 12.67,11.4697 14.08,11.4697 L14.08,11.4697 Z M5.9199,-9.32587341e-14 C7.3299,-9.32587341e-14 8.4599,1.15 8.4599,2.561 L8.4599,2.561 L8.4599,5.97 C8.4599,7.39 7.3299,8.53 5.9199,8.53 L5.9199,8.53 L2.5399,8.53 C1.1399,8.53 -0.0001,7.39 -0.0001,5.97 L-0.0001,5.97 L-0.0001,2.561 C-0.0001,1.15 1.1399,-9.32587341e-14 2.5399,-9.32587341e-14 L2.5399,-9.32587341e-14 Z M17.46,-9.32587341e-14 C18.86,-9.32587341e-14 20,1.15 20,2.561 L20,2.561 L20,5.97 C20,7.39 18.86,8.53 17.46,8.53 L17.46,8.53 L14.08,8.53 C12.67,8.53 11.54,7.39 11.54,5.97 L11.54,5.97 L11.54,2.561 C11.54,1.15 12.67,-9.32587341e-14 14.08,-9.32587341e-14 L14.08,-9.32587341e-14 Z"></path></g></svg></span><span class="min-w-0 flex flex-col gap-y-0.5"><span class="truncate text-[13px] font-medium text-foreground"><span class="text-muted-foreground">iii<!-- -->/</span>deepwork</span><span class="font-mono text-[13px] tabular-nums text-muted-foreground">v<!-- -->0.4.3<!-- --> · <!-- -->6<!-- --> <!-- -->profiles</span></span></a></li></ul></section><section class="shrink-0 overflow-hidden rounded-xl border border-line bg-paper scroll-mt-20"><div class="flex min-h-11 items-center justify-between gap-x-3 border-b border-line px-4"><span class="font-mono text-[10px] uppercase tracking-[0.08em] text-muted-foreground">api</span></div><div class="flex flex-col p-0 gap-y-0"><div class="flex flex-col gap-y-5 p-4"><div class="flex flex-col gap-y-2"><div class="flex items-baseline justify-between font-mono text-[10px] uppercase tracking-[0.08em] text-muted-foreground"><span>functions</span><span class="tabular-nums">29</span></div><ul class="-mx-2 flex flex-col"><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::__on_worker_added">directory::__on_worker_added</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::engine::functions::info">directory::engine::functions::info</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::hint-preview">directory::hint-preview</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::on-config-change">directory::on-config-change</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::on-functions-change">directory::on-functions-change</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::pre-generate">directory::pre-generate</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::prompts::create">directory::prompts::create</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::prompts::delete">directory::prompts::delete</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::prompts::get">directory::prompts::get</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::prompts::list">directory::prompts::list</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::prompts::update">directory::prompts::update</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::registry::workers::info">directory::registry::workers::info</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::registry::workers::list">directory::registry::workers::list</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::search_functions">directory::search_functions</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::skills::create">directory::skills::create</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::skills::delete">directory::skills::delete</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::skills::download">directory::skills::download</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::skills::download_from_registry">directory::skills::download_from_registry</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::skills::download_from_repo">directory::skills::download_from_repo</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::skills::get">directory::skills::get</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::skills::index">directory::skills::index</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::skills::list">directory::skills::list</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::skills::update">directory::skills::update</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::system-prompts::create">directory::system-prompts::create</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::system-prompts::delete">directory::system-prompts::delete</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::system-prompts::get">directory::system-prompts::get</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::system-prompts::list">directory::system-prompts::list</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-directory::system-prompts::update">directory::system-prompts::update</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#fn-iii-directory::ui-content">iii-directory::ui-content</a></li></ul></div><div class="flex flex-col gap-y-2"><div class="flex items-baseline justify-between font-mono text-[10px] uppercase tracking-[0.08em] text-muted-foreground"><span>triggers</span><span class="tabular-nums">3</span></div><ul class="-mx-2 flex flex-col"><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#trigger-directory::prompts::on-change">directory::prompts::on-change</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#trigger-directory::skills::on-change">directory::skills::on-change</a></li><li><a class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand text-muted-foreground hover:bg-code hover:text-foreground" href="/registry/workers/iii-directory?tab=api&version=1.2.3#trigger-directory::system-prompts::on-change">directory::system-prompts::on-change</a></li></ul></div></div></div></section></aside></div></div></div><!--$--><!--/$--></main></div></div><footer class="border-t border-line bg-background text-foreground"><div class="mx-auto max-w-[1280px] px-9 pt-16 max-sm:px-[22px] max-sm:pt-11"><div class="grid grid-cols-[minmax(0,1fr)_minmax(0,1.4fr)] gap-20 max-[900px]:grid-cols-1 max-[900px]:gap-10"><div><a href="https://iii.dev" aria-label="iii home" class="inline-flex size-7 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground"><svg viewBox="0 0 1075.74 1075.74" aria-hidden="true" focusable="false" class="block shrink-0 size-full" fill="currentColor"><rect x="0" y="0.05" width="268.94" height="268.94"></rect><rect x="403.4" y="0.05" width="268.94" height="268.94"></rect><rect x="806.81" y="0.05" width="268.94" height="268.94"></rect><rect x="0" y="403.45" width="268.94" height="672.24"></rect><rect x="403.4" y="403.45" width="268.94" height="672.24"></rect><rect x="806.81" y="403.45" width="268.94" height="672.24"></rect></svg></a><p class="mt-[18px] max-w-[340px] text-[15px] leading-[1.65] text-muted-foreground">A next-generation software system.<br/>Workers. Triggers. Functions.</p><p class="mt-2 max-w-[340px] text-[13px] leading-[1.65] text-muted-foreground">Pronounced<!-- --> <span class="text-foreground">"three eye"</span></p></div><nav aria-label="Footer" class="grid grid-cols-3 gap-8 max-sm:grid-cols-2 max-sm:gap-x-4 max-sm:gap-y-6"><div><h3 class="mb-3 text-[13px] font-medium tracking-[0.06em] text-muted-foreground uppercase">Product</h3><ul class="list-none p-0"><li><a href="https://iii.dev/docs" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground"><span>Docs</span></a></li><li><a href="https://iii.dev/docs/quickstart" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground"><span>Quickstart</span></a></li><li><a href="/registry" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground"><span>Worker registry</span></a></li><li><a href="https://iii.dev/roadmap" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground"><span>Roadmap</span></a></li><li><a href="https://iii.dev/manifesto" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground"><span>Manifesto</span></a></li><li><a href="https://iii.dev/blog" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground"><span>Blog</span></a></li></ul></div><div><h3 class="mb-3 text-[13px] font-medium tracking-[0.06em] text-muted-foreground uppercase">Community</h3><ul class="list-none p-0"><li><a href="https://github.com/iii-hq/iii" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 2.69922C6.762 2.69922 2.5 6.96122 2.5 12.1992C2.5 16.3252 5.24 20.0532 9.164 21.2662C9.324 21.3182 9.498 21.2822 9.627 21.1762C9.757 21.0702 9.825 20.9062 9.809 20.7392C9.669 19.3462 10.47 17.8702 10.812 17.5162C10.944 17.3812 10.988 17.1822 10.925 17.0042C10.862 16.8252 10.704 16.6962 10.516 16.6732C8.725 16.4452 7.067 15.8372 7.067 12.9472C7.063 12.2282 7.337 11.5412 7.836 11.0122C7.968 10.8732 8.009 10.6712 7.941 10.4922C7.75 9.98722 7.729 9.42222 7.877 8.90022C8.168 8.94822 8.731 9.11922 9.608 9.70522C9.728 9.78622 9.877 9.80722 10.015 9.77222C11.312 9.42422 12.682 9.42422 13.979 9.77222C14.116 9.80722 14.266 9.78622 14.386 9.70522C15.27 9.11422 15.835 8.94522 16.115 8.89622C16.264 9.42022 16.245 9.98622 16.054 10.4932C15.986 10.6732 16.027 10.8752 16.16 11.0132C16.654 11.5332 16.927 12.2172 16.927 12.9382C16.927 15.8772 15.273 16.4642 13.486 16.6612C13.296 16.6812 13.135 16.8092 13.071 16.9882C13.006 17.1682 13.049 17.3692 13.182 17.5062C13.512 17.8472 14.321 19.3622 14.185 20.7502C14.168 20.9172 14.236 21.0812 14.367 21.1862C14.457 21.2612 14.569 21.2992 14.682 21.2992C14.732 21.2992 14.783 21.2912 14.832 21.2752C18.82 20.0202 21.5 16.3732 21.5 12.1992C21.5 6.96122 17.238 2.69922 12 2.69922Z"></path></svg><span>GitHub</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li><li><a href="https://discord.gg/iiidev" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.4919 12.798C10.4928 12.7793 10.4916 12.7606 10.489 12.7421C10.4613 12.5469 10.4514 12.347 10.3951 12.1599C10.1841 11.4539 9.74808 10.9469 9.00608 10.7969C8.29208 10.6539 7.71308 10.9269 7.28508 11.5059C6.70508 12.2879 6.76108 13.4529 7.40208 14.1859C8.09108 14.9729 9.21108 14.9939 9.92408 14.2269C10.2967 13.8258 10.4673 13.3434 10.4919 12.798ZM17.1383 12.7812C17.1389 12.7644 17.1379 12.7475 17.1357 12.7308C17.1132 12.5616 17.1039 12.3878 17.0601 12.2239C16.8721 11.5239 16.4651 11.0089 15.7441 10.8189C15.1071 10.6509 14.5481 10.8339 14.0951 11.3089C13.3501 12.0899 13.3461 13.4249 14.0781 14.2169C14.7981 14.9939 15.9331 14.9789 16.6201 14.1779C16.9636 13.7773 17.1191 13.306 17.1383 12.7812ZM17.0985 17.278C17.2735 17.1939 17.3406 16.9478 17.1827 16.8346C17.0669 16.7515 16.9741 16.7834 16.7571 16.8759C13.5891 18.2239 10.4191 18.2099 7.24908 16.8849C7.02096 16.7895 6.93273 16.7517 6.82128 16.8227C6.65302 16.93 6.71802 17.1898 6.89748 17.277C7.23862 17.4429 7.58015 17.609 7.93832 17.7829C8.09958 17.8613 8.15678 18.0626 8.06083 18.214C7.77618 18.6633 7.49507 19.108 7.20508 19.5459C7.17408 19.5919 7.04108 19.6069 6.97208 19.5859C5.25708 19.0449 3.67108 18.2459 2.22008 17.1829C2.14608 17.1289 2.08208 17.0159 2.07408 16.9239C1.74508 13.2929 2.51308 9.90588 4.35508 6.75988C5.05808 5.55888 5.05608 5.53788 6.55408 5.06188C7.34208 4.81188 8.15408 4.63988 8.95308 4.42288C9.12908 4.37588 9.21708 4.42788 9.28708 4.58688C9.37508 4.78388 9.50608 4.96388 9.57408 5.16688C9.65508 5.40888 9.77908 5.46588 10.0301 5.42988C11.4051 5.23188 12.7811 5.26188 14.1551 5.44288C14.2295 5.45351 14.3008 5.4087 14.3344 5.34142C14.4633 5.08312 14.5955 4.82606 14.7171 4.56288C14.7801 4.42488 14.8581 4.38688 15.0111 4.41588C16.3001 4.65988 17.5471 5.03488 18.7421 5.57688C18.8641 5.63288 18.9861 5.73388 19.0601 5.84488C20.4731 7.95488 21.4261 10.2489 21.8121 12.7659C22.0241 14.1449 22.0491 15.5309 21.9241 16.9189C21.9151 17.0179 21.8391 17.1399 21.7561 17.1989C20.3161 18.2439 18.7501 19.0439 17.0491 19.5739C16.9661 19.5999 16.8091 19.5849 16.7731 19.5309C16.4849 19.0998 16.2096 18.6599 15.9282 18.2116C15.8329 18.0598 15.8907 17.8587 16.0522 17.781C16.4087 17.6095 16.7514 17.4448 17.0985 17.278Z"></path></svg><span>Discord</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li><li><a href="https://x.com/iiidevs" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path transform="translate(1.5 1.5) scale(0.875)" d="M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z"></path></svg><span>Twitter / X</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li><li><a href="https://www.linkedin.com/company/iii-dev" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path fill-rule="evenodd" clip-rule="evenodd" d="M5.4 2.5h13.2a2.9 2.9 0 0 1 2.9 2.9v13.2a2.9 2.9 0 0 1-2.9 2.9H5.4a2.9 2.9 0 0 1-2.9-2.9V5.4a2.9 2.9 0 0 1 2.9-2.9Zm2.33 7.1H5.6v7.9h2.13V9.6ZM6.67 6.1a1.24 1.24 0 1 0 0 2.48 1.24 1.24 0 0 0 0-2.48Zm11.73 7.1c0-2.26-1.21-3.31-2.82-3.31-1.3 0-1.88.72-2.21 1.22V9.6H11.2c.03.6 0 7.9 0 7.9h2.17v-4.41c0-.24.02-.47.09-.64.19-.47.62-.96 1.35-.96.95 0 1.33.73 1.33 1.79v4.22h2.26V13.2Z"></path></svg><span>LinkedIn</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li></ul></div><div><h3 class="mb-3 text-[13px] font-medium tracking-[0.06em] text-muted-foreground uppercase">Ask about iii</h3><ul class="list-none p-0"><li><a href="https://chatgpt.com/?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service." class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"></path></svg><span>ChatGPT</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li><li><a href="https://claude.ai/new?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service." class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path d="m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z"></path></svg><span>Claude</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li><li><a href="https://www.perplexity.ai/search?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service." class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path d="M22.3977 7.0896h-2.3106V.0676l-7.5094 6.3542V.1577h-1.1554v6.1966L4.4904 0v7.0896H1.6023v10.3976h2.8882V24l6.932-6.3591v6.2005h1.1554v-6.0469l6.9318 6.1807v-6.4879h2.8882V7.0896zm-3.4657-4.531v4.531h-5.355l5.355-4.531zm-13.2862.0676 4.8691 4.4634H5.6458V2.6262zM2.7576 16.332V8.245h7.8476l-6.1149 6.1147v1.9723H2.7576zm2.8882 5.0404v-3.8852h.0001v-2.6488l5.7763-5.7764v7.0111l-5.7764 5.2993zm7.0212-7.0212v-7.0111l5.7764 5.7764v2.6488h.0001v3.8852l-5.7765-5.2993zm8.9765 2.0444h-1.9727l-6.1149-6.1147h8.0876v6.1147z"></path></svg><span>Perplexity</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li><li><a href="https://grok.com/?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service." class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path d="M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815"></path></svg><span>Grok</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li></ul></div></nav></div><div class="mt-13 border-t border-line py-[22px] text-[13px] text-muted-foreground max-sm:mt-9"><p class="flex items-center gap-2">© <!-- -->2026<!-- --> Motia LLC<!-- --> <span aria-hidden="true">·</span> <a href="https://iii.dev/privacy-policy" class="hover:text-foreground focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground">Privacy</a></p></div></div></footer><div data-slot="dialog-header" class="flex flex-col gap-2 sr-only"><h2 id="base-ui-_R_2v9b_" data-slot="dialog-title" class="font-heading text-base leading-none font-medium">Search the registry</h2><p id="base-ui-_R_4v9b_" data-slot="dialog-description" class="text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground">Find workers, kits and executables, or jump to a page.</p></div><script src="/registry/_next/static/chunks/06o3ty5hs.tzu.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n3:I[90280,[\"/registry/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0f8jgu0hu0~vn.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"default\"]\n4:I[69616,[\"/registry/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0f8jgu0hu0~vn.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"default\"]\n6:I[51557,[\"/registry/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0f8jgu0hu0~vn.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[51557,[\"/registry/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0f8jgu0hu0~vn.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"ViewportBoundary\"]\nc:I[51557,[\"/registry/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0f8jgu0hu0~vn.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"MetadataBoundary\"]\ne:I[50609,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0w_agc1b2gf-n.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"default\"]\n:HL[\"/registry/_next/static/chunks/0qh42370pyoqz.css?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"style\"]\n:HL[\"/registry/_next/static/chunks/0.-bsgr3_7ked.css?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"style\"]\n:HL[\"/registry/_next/static/media/797e433ab948586e-s.p.08e28id.o-okb.woff2?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/registry/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"workers\",\"iii-directory?version=1.2.3\"],\"q\":\"?version=1.2.3\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"workers\",{\"children\":[[\"slug\",\"iii-directory\",\"d\",null],{\"children\":[\"__PAGE__?{\\\"version\\\":\\\"1.2.3\\\"}\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/registry/_next/static/chunks/0qh42370pyoqz.css?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/registry/_next/static/chunks/0.-bsgr3_7ked.css?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"async\":true,\"nonce\":\"$undefined\"}]],\"$L2\"]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[\"$L5\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/registry/_next/static/chunks/0jm9zdrfsajnq.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$@9\"]},null,false,\"$@9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/registry/_next/static/chunks/0qh42370pyoqz.css?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/registry/_next/static/chunks/0.-bsgr3_7ked.css?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":false,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"f:[]\n9:\"$Wf\"\nb:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"11:I[77792,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"Providers\"]\n12:I[84148,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"SiteHeader\"]\n13:I[92439,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0jm9zdrfsajnq.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"Link\"]\n10:[\"$\",\"iframe\",null,{\"src\":\"https://www.googletagmanager.com/ns.html?id=GTM-N8DCTFB8\",\"height\":\"0\",\"width\":\"0\",\"style\":{\"display\":\"none\",\"visibility\":\"hidden\"},\"title\":\"Google Tag Manager\"}]\n"])</script><script>self.__next_f.push([1,"2:[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"antialiased inter_fe8b9d92-module__LINzvG__variable geist_mono_8d43a2aa-module__8Li5zG__variable\",\"data-theme\":\"light\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"bg-background text-foreground font-sans min-h-full flex flex-col\",\"children\":[[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n try {\\n var stored = localStorage.getItem('iii-theme');\\n if (stored === 'dark' || stored === 'light') {\\n document.documentElement.dataset.theme = stored;\\n } else {\\n document.documentElement.dataset.theme = 'light';\\n }\\n } catch (_) {\\n document.documentElement.dataset.theme = 'light';\\n }\\n\"}}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\n j=d.createElement(s),dl=l!='dataLayer'?'\u0026l='+l:'';j.async=true;j.src=\\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\\n })(window,document,'script','dataLayer','GTM-N8DCTFB8');\\n\"}}]],[\"$\",\"noscript\",null,{\"children\":\"$10\"}],[\"$\",\"a\",null,{\"href\":\"#main-content\",\"className\":\"sr-only focus:not-sr-only focus:fixed focus:top-3 focus:left-3 focus:z-[60] focus:rounded-lg focus:bg-foreground focus:px-3 focus:py-2 focus:text-sm focus:font-medium focus:text-background\",\"children\":\"Skip to content\"}],[\"$\",\"$L11\",null,{\"basePath\":\"/registry\",\"children\":[[\"$\",\"$L12\",null,{\"stats\":{\"stars\":\"18,848\",\"members\":\"2.4k\",\"starsCount\":18848,\"membersCount\":2405}}],[\"$\",\"div\",null,{\"className\":\"mx-auto w-full max-w-7xl has-[.registry-home]:max-w-none @container flex-1 bg-bg flex flex-col\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex-1 overflow-x-clip flex flex-col\",\"children\":[\"$\",\"main\",null,{\"id\":\"main-content\",\"className\":\"flex-1\",\"tabIndex\":-1,\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"page-transition flex flex-1 flex-col\",\"children\":[[\"$\",\"header\",null,{\"className\":\"flex items-end justify-between flex-wrap gap-x-8 gap-y-5 px-[22px] pt-12 sm:px-9 sm:pt-16 pb-0 sm:pb-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-3 font-mono text-[10px] leading-[normal] uppercase tracking-[0.08em] text-muted-foreground\",\"children\":\"error / not found\"}],[\"$\",\"div\",null,{\"className\":\"flex items-center flex-wrap gap-x-3 gap-y-2\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-[32px] sm:text-[40px] font-[550] leading-[1.1] tracking-[-0.04em] text-foreground text-balance\",\"children\":[\"$\",\"span\",null,{\"className\":\"block text-[64px] leading-none tracking-[-0.05em] tabular-nums sm:text-[88px]\",\"children\":\"404\"}]}],\"$undefined\",null]}],[\"$\",\"p\",null,{\"className\":\"mt-4 max-w-[60ch] text-[15px] leading-[1.7] text-muted-foreground text-pretty\",\"children\":\"This page isn’t in the registry. It may have been renamed, or never published.\"}]]}],null]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-3 px-[22px] pt-8 pb-24 sm:px-9 sm:pb-32\",\"children\":[[\"$\",\"$L13\",null,{\"href\":\"/\",\"className\":\"inline-flex items-center justify-center gap-x-2 whitespace-nowrap rounded-xl font-medium transition-[background-color,color,border-color,opacity,transform] duration-150 ease-out focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand disabled:pointer-events-none disabled:opacity-50 select-none active:scale-[0.96] motion-reduce:active:scale-100 [\u0026_svg]:size-3.5 [\u0026_svg]:shrink-0 bg-foreground text-background hover:opacity-[0.88] h-10 px-4 text-[14px]\",\"children\":\"Back to the registry\"}],[\"$\",\"$L13\",null,{\"href\":\"/search\",\"className\":\"inline-flex items-center justify-center gap-x-2 whitespace-nowrap rounded-xl font-medium transition-[background-color,color,border-color,opacity,transform] duration-150 ease-out focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand disabled:pointer-events-none disabled:opacity-50 select-none active:scale-[0.96] motion-reduce:active:scale-100 [\u0026_svg]:size-3.5 [\u0026_svg]:shrink-0 border border-line bg-background text-foreground hover:border-[color-mix(in_srgb,var(--foreground)_22%,var(--line))] hover:bg-paper h-10 px-4 text-[14px]\",\"children\":[\"$L14\",\"Search\"]}]]}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}],\"$L15\"]}]]}]}]\n"])</script><script>self.__next_f.push([1,"16:I[41074,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0jm9zdrfsajnq.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"default\"]\n14:[\"$\",\"$L16\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"m21 21-4.34-4.34\",\"key\":\"14j7rj\"}],[\"circle\",{\"cx\":\"11\",\"cy\":\"11\",\"r\":\"8\",\"key\":\"4ej97u\"}]],\"className\":\"lucide-search\",\"aria-hidden\":\"true\"}]\n"])</script><script>self.__next_f.push([1,"15:[\"$\",\"footer\",null,{\"className\":\"border-t border-line bg-background text-foreground\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-[1280px] px-9 pt-16 max-sm:px-[22px] max-sm:pt-11\",\"children\":[[\"$\",\"div\",null,{\"className\":\"grid grid-cols-[minmax(0,1fr)_minmax(0,1.4fr)] gap-20 max-[900px]:grid-cols-1 max-[900px]:gap-10\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"a\",null,{\"href\":\"https://iii.dev\",\"aria-label\":\"iii home\",\"className\":\"inline-flex size-7 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":[\"$\",\"svg\",null,{\"viewBox\":\"0 0 1075.74 1075.74\",\"aria-hidden\":\"true\",\"focusable\":\"false\",\"className\":\"block shrink-0 size-full\",\"fill\":\"currentColor\",\"children\":[[\"$\",\"rect\",\"0\",{\"x\":0,\"y\":0.05,\"width\":268.94,\"height\":268.94}],[\"$\",\"rect\",\"403.4\",{\"x\":403.4,\"y\":0.05,\"width\":268.94,\"height\":268.94}],[\"$\",\"rect\",\"806.81\",{\"x\":806.81,\"y\":0.05,\"width\":268.94,\"height\":268.94}],[\"$\",\"rect\",\"stem-0\",{\"x\":0,\"y\":403.45,\"width\":268.94,\"height\":672.24}],[\"$\",\"rect\",\"stem-403.4\",{\"x\":403.4,\"y\":403.45,\"width\":268.94,\"height\":672.24}],[\"$\",\"rect\",\"stem-806.81\",{\"x\":806.81,\"y\":403.45,\"width\":268.94,\"height\":672.24}]]}]}],[\"$\",\"p\",null,{\"className\":\"mt-[18px] max-w-[340px] text-[15px] leading-[1.65] text-muted-foreground\",\"children\":[\"A next-generation software system.\",[\"$\",\"br\",null,{}],\"Workers. Triggers. Functions.\"]}],[\"$\",\"p\",null,{\"className\":\"mt-2 max-w-[340px] text-[13px] leading-[1.65] text-muted-foreground\",\"children\":[\"Pronounced\",\" \",[\"$\",\"span\",null,{\"className\":\"text-foreground\",\"children\":\"\\\"three eye\\\"\"}]]}]]}],[\"$\",\"nav\",null,{\"aria-label\":\"Footer\",\"className\":\"grid grid-cols-3 gap-8 max-sm:grid-cols-2 max-sm:gap-x-4 max-sm:gap-y-6\",\"children\":[[\"$\",\"div\",\"Product\",{\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-3 text-[13px] font-medium tracking-[0.06em] text-muted-foreground uppercase\",\"children\":\"Product\"}],[\"$\",\"ul\",null,{\"className\":\"list-none p-0\",\"children\":[[\"$\",\"li\",\"Docs\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://iii.dev/docs\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":[null,[\"$\",\"span\",null,{\"children\":\"Docs\"}],null]}]}],[\"$\",\"li\",\"Quickstart\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://iii.dev/docs/quickstart\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":[null,[\"$\",\"span\",null,{\"children\":\"Quickstart\"}],null]}]}],[\"$\",\"li\",\"Worker registry\",{\"children\":[\"$\",\"a\",null,{\"href\":\"/registry\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":[null,[\"$\",\"span\",null,{\"children\":\"Worker registry\"}],null]}]}],[\"$\",\"li\",\"Roadmap\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://iii.dev/roadmap\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":[null,[\"$\",\"span\",null,{\"children\":\"Roadmap\"}],null]}]}],[\"$\",\"li\",\"Manifesto\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://iii.dev/manifesto\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":[null,[\"$\",\"span\",null,{\"children\":\"Manifesto\"}],null]}]}],\"$L17\"]}]]}],\"$L18\",\"$L19\"]}]]}],\"$L1a\"]}]}]\n"])</script><script>self.__next_f.push([1,"17:[\"$\",\"li\",\"Blog\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://iii.dev/blog\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":[null,[\"$\",\"span\",null,{\"children\":\"Blog\"}],null]}]}]\n1b:T4c4,M12 2.69922C6.762 2.69922 2.5 6.96122 2.5 12.1992C2.5 16.3252 5.24 20.0532 9.164 21.2662C9.324 21.3182 9.498 21.2822 9.627 21.1762C9.757 21.0702 9.825 20.9062 9.809 20.7392C9.669 19.3462 10.47 17.8702 10.812 17.5162C10.944 17.3812 10.988 17.1822 10.925 17.0042C10.862 16.8252 10.704 16.6962 10.516 16.6732C8.725 16.4452 7.067 15.8372 7.067 12.9472C7.063 12.2282 7.337 11.5412 7.836 11.0122C7.968 10.8732 8.009 10.6712 7.941 10.4922C7.75 9.98722 7.729 9.42222 7.877 8.90022C8.168 8.94822 8.731 9.11922 9.608 9.70522C9.728 9.78622 9.877 9.80722 10.015 9.77222C11.312 9.42422 12.682 9.42422 13.979 9.77222C14.116 9.80722 14.266 9.78622 14.386 9.70522C15.27 9.11422 15.835 8.94522 16.115 8.89622C16.264 9.42022 16.245 9.98622 16.054 10.4932C15.986 10.6732 16.027 10.8752 16.16 11.0132C16.654 11.5332 16.927 12.2172 16.927 12.9382C16.927 15.8772 15.273 16.4642 13.486 16.6612C13.296 16.6812 13.135 16.8092 13.071 16.9882C13.006 17.1682 13.049 17.3692 13.182 17.5062C13.512 17.8472 14.321 19.3622 14.185 20.7502C14.168 20.9172 14.236 21.0812 14.367 21.1862C14.457 21.2612 14.569 21.2992 14.682 21.2992C14.732 21.2992 14.783 21.2912 14.832 21.2752C18.82 20.0202 21.5 16.3732 21.5 12.1992C21.5 6.96122 17.238 2.69922 12 2.69922Z1c:T894,"])</script><script>self.__next_f.push([1,"M10.4919 12.798C10.4928 12.7793 10.4916 12.7606 10.489 12.7421C10.4613 12.5469 10.4514 12.347 10.3951 12.1599C10.1841 11.4539 9.74808 10.9469 9.00608 10.7969C8.29208 10.6539 7.71308 10.9269 7.28508 11.5059C6.70508 12.2879 6.76108 13.4529 7.40208 14.1859C8.09108 14.9729 9.21108 14.9939 9.92408 14.2269C10.2967 13.8258 10.4673 13.3434 10.4919 12.798ZM17.1383 12.7812C17.1389 12.7644 17.1379 12.7475 17.1357 12.7308C17.1132 12.5616 17.1039 12.3878 17.0601 12.2239C16.8721 11.5239 16.4651 11.0089 15.7441 10.8189C15.1071 10.6509 14.5481 10.8339 14.0951 11.3089C13.3501 12.0899 13.3461 13.4249 14.0781 14.2169C14.7981 14.9939 15.9331 14.9789 16.6201 14.1779C16.9636 13.7773 17.1191 13.306 17.1383 12.7812ZM17.0985 17.278C17.2735 17.1939 17.3406 16.9478 17.1827 16.8346C17.0669 16.7515 16.9741 16.7834 16.7571 16.8759C13.5891 18.2239 10.4191 18.2099 7.24908 16.8849C7.02096 16.7895 6.93273 16.7517 6.82128 16.8227C6.65302 16.93 6.71802 17.1898 6.89748 17.277C7.23862 17.4429 7.58015 17.609 7.93832 17.7829C8.09958 17.8613 8.15678 18.0626 8.06083 18.214C7.77618 18.6633 7.49507 19.108 7.20508 19.5459C7.17408 19.5919 7.04108 19.6069 6.97208 19.5859C5.25708 19.0449 3.67108 18.2459 2.22008 17.1829C2.14608 17.1289 2.08208 17.0159 2.07408 16.9239C1.74508 13.2929 2.51308 9.90588 4.35508 6.75988C5.05808 5.55888 5.05608 5.53788 6.55408 5.06188C7.34208 4.81188 8.15408 4.63988 8.95308 4.42288C9.12908 4.37588 9.21708 4.42788 9.28708 4.58688C9.37508 4.78388 9.50608 4.96388 9.57408 5.16688C9.65508 5.40888 9.77908 5.46588 10.0301 5.42988C11.4051 5.23188 12.7811 5.26188 14.1551 5.44288C14.2295 5.45351 14.3008 5.4087 14.3344 5.34142C14.4633 5.08312 14.5955 4.82606 14.7171 4.56288C14.7801 4.42488 14.8581 4.38688 15.0111 4.41588C16.3001 4.65988 17.5471 5.03488 18.7421 5.57688C18.8641 5.63288 18.9861 5.73388 19.0601 5.84488C20.4731 7.95488 21.4261 10.2489 21.8121 12.7659C22.0241 14.1449 22.0491 15.5309 21.9241 16.9189C21.9151 17.0179 21.8391 17.1399 21.7561 17.1989C20.3161 18.2439 18.7501 19.0439 17.0491 19.5739C16.9661 19.5999 16.8091 19.5849 16.7731 19.5309C16.4849 19.0998 16.2096 18.6599 15.9282 18.2116C15.8329 18.0598 15.8907 17.8587 16.0522 17.781C16.4087 17.6095 16.7514 17.4448 17.0985 17.278Z"])</script><script>self.__next_f.push([1,"18:[\"$\",\"div\",\"Community\",{\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-3 text-[13px] font-medium tracking-[0.06em] text-muted-foreground uppercase\",\"children\":\"Community\"}],[\"$\",\"ul\",null,{\"className\":\"list-none p-0\",\"children\":[[\"$\",\"li\",\"GitHub\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://github.com/iii-hq/iii\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"$1b\"}]}],[\"$\",\"span\",null,{\"children\":\"GitHub\"}],[\"$\",\"$L16\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M7 7h10v10\",\"key\":\"1tivn9\"}],[\"path\",{\"d\":\"M7 17 17 7\",\"key\":\"1vkiza\"}]],\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]]}]}],[\"$\",\"li\",\"Discord\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://discord.gg/iiidev\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"$1c\"}]}],\"$L1d\",\"$L1e\"]}]}],\"$L1f\",\"$L20\"]}]]}]\n"])</script><script>self.__next_f.push([1,"21:T5b4,"])</script><script>self.__next_f.push([1,"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"])</script><script>self.__next_f.push([1,"19:[\"$\",\"div\",\"Ask about iii\",{\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-3 text-[13px] font-medium tracking-[0.06em] text-muted-foreground uppercase\",\"children\":\"Ask about iii\"}],[\"$\",\"ul\",null,{\"className\":\"list-none p-0\",\"children\":[[\"$\",\"li\",\"ChatGPT\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://chatgpt.com/?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service.\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"d\":\"$21\"}]}],[\"$\",\"span\",null,{\"children\":\"ChatGPT\"}],[\"$\",\"$L16\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$18:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]]}]}],[\"$\",\"li\",\"Claude\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://claude.ai/new?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service.\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":\"$L22\"}],\"$L23\",\"$L24\"]}]}],\"$L25\",\"$L26\"]}]]}]\n"])</script><script>self.__next_f.push([1,"1a:[\"$\",\"div\",null,{\"className\":\"mt-13 border-t border-line py-[22px] text-[13px] text-muted-foreground max-sm:mt-9\",\"children\":[\"$\",\"p\",null,{\"className\":\"flex items-center gap-2\",\"children\":[\"© \",2026,\" Motia LLC\",\" \",[\"$\",\"span\",null,{\"aria-hidden\":\"true\",\"children\":\"·\"}],\" \",[\"$\",\"a\",null,{\"href\":\"https://iii.dev/privacy-policy\",\"className\":\"hover:text-foreground focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":\"Privacy\"}]]}]}]\n"])</script><script>self.__next_f.push([1,"28:I[18418,[\"/registry/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0f8jgu0hu0~vn.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"IconMark\"]\n1d:[\"$\",\"span\",null,{\"children\":\"Discord\"}]\n1e:[\"$\",\"$L16\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$18:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]\n1f:[\"$\",\"li\",\"Twitter / X\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://x.com/iiidevs\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"transform\":\"translate(1.5 1.5) scale(0.875)\",\"d\":\"M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z\"}]}],[\"$\",\"span\",null,{\"children\":\"Twitter / X\"}],[\"$\",\"$L16\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$18:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]]}]}]\n20:[\"$\",\"li\",\"LinkedIn\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://www.linkedin.com/company/iii-dev\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"M5.4 2.5h13.2a2.9 2.9 0 0 1 2.9 2.9v13.2a2.9 2.9 0 0 1-2.9 2.9H5.4a2.9 2.9 0 0 1-2.9-2.9V5.4a2.9 2.9 0 0 1 2.9-2.9Zm2.33 7.1H5.6v7.9h2.13V9.6ZM6.67 6.1a1.24 1.24 0 1 0 0 2.48 1.24 1.24 0 0 0 0-2.48Zm11.73 7.1c0-2.26-1.21-3.31-2.82-3.31-1.3 0-1.88.72-2.21 1.22V9.6H11.2c.03.6 0 7.9 0 7.9h2.17v-4.41c0-.24.02-.47.09-.64.19-.47.62-.96 1.35-.96.95 0 1.33.73 1.33 1.79v4.22h2.26V13.2Z\"}]}],[\"$\",\"span\",null,{\"children\":\"LinkedIn\"}],[\"$\",\"$L16\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$18:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]]}]}]\n27:T713,"])</script><script>self.__next_f.push([1,"m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z"])</script><script>self.__next_f.push([1,"22:[\"$\",\"path\",null,{\"d\":\"$27\"}]\n23:[\"$\",\"span\",null,{\"children\":\"Claude\"}]\n24:[\"$\",\"$L16\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$18:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]\n"])</script><script>self.__next_f.push([1,"25:[\"$\",\"li\",\"Perplexity\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://www.perplexity.ai/search?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service.\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"d\":\"M22.3977 7.0896h-2.3106V.0676l-7.5094 6.3542V.1577h-1.1554v6.1966L4.4904 0v7.0896H1.6023v10.3976h2.8882V24l6.932-6.3591v6.2005h1.1554v-6.0469l6.9318 6.1807v-6.4879h2.8882V7.0896zm-3.4657-4.531v4.531h-5.355l5.355-4.531zm-13.2862.0676 4.8691 4.4634H5.6458V2.6262zM2.7576 16.332V8.245h7.8476l-6.1149 6.1147v1.9723H2.7576zm2.8882 5.0404v-3.8852h.0001v-2.6488l5.7763-5.7764v7.0111l-5.7764 5.2993zm7.0212-7.0212v-7.0111l5.7764 5.7764v2.6488h.0001v3.8852l-5.7765-5.2993zm8.9765 2.0444h-1.9727l-6.1149-6.1147h8.0876v6.1147z\"}]}],[\"$\",\"span\",null,{\"children\":\"Perplexity\"}],[\"$\",\"$L16\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$18:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]]}]}]\n"])</script><script>self.__next_f.push([1,"26:[\"$\",\"li\",\"Grok\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://grok.com/?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service.\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"d\":\"M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815\"}]}],[\"$\",\"span\",null,{\"children\":\"Grok\"}],[\"$\",\"$L16\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$18:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]]}]}]\n"])</script><script>self.__next_f.push([1,"8:null\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"title\",\"0\",{\"children\":\"iii-directory worker · iii Registry\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Engine introspection, workers registry proxy, filesystem-backed skills, system prompts, and agent profiles, kit install and update with reviewed plans, plus…\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"iii Registry\"}],[\"$\",\"meta\",\"3\",{\"name\":\"publisher\",\"content\":\"iii\"}],[\"$\",\"meta\",\"4\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"5\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"link\",\"6\",{\"rel\":\"canonical\",\"href\":\"https://iii.dev/registry/workers/iii-directory\"}],[\"$\",\"link\",\"7\",{\"rel\":\"alternate\",\"type\":\"text/markdown\",\"href\":\"https://iii.dev/registry/workers/iii-directory.md\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:title\",\"content\":\"iii-directory worker · iii Registry\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:description\",\"content\":\"Engine introspection, workers registry proxy, filesystem-backed skills, system prompts, and agent profiles, kit install and update with reviewed plans, plus…\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:url\",\"content\":\"https://iii.dev/registry/workers/iii-directory\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:site_name\",\"content\":\"iii Registry\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image\",\"content\":\"https://iii.dev/registry/workers/iii-directory/opengraph-image?b747c5eeb0667fcb\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:image:alt\",\"content\":\"An iii worker on the iii Registry\"}],[\"$\",\"meta\",\"18\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:site\",\"content\":\"@iiidevs\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:creator\",\"content\":\"@iiidevs\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:title\",\"content\":\"iii-directory worker · iii Registry\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:description\",\"content\":\"Engine introspection, workers registry proxy, filesystem-backed skills, system prompts, and agent profiles, kit install and update with reviewed plans, plus…\"}],[\"$\",\"meta\",\"24\",{\"name\":\"twitter:image\",\"content\":\"https://iii.dev/registry/workers/iii-directory/opengraph-image?b747c5eeb0667fcb\"}],[\"$\",\"meta\",\"25\",{\"name\":\"twitter:image:alt\",\"content\":\"An iii worker on the iii Registry\"}],[\"$\",\"meta\",\"26\",{\"name\":\"twitter:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"27\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"28\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"29\",{\"rel\":\"icon\",\"href\":\"/registry/favicon.ico\",\"sizes\":\"48x48\"}],[\"$\",\"link\",\"30\",{\"rel\":\"icon\",\"href\":\"/registry/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"31\",{\"rel\":\"apple-touch-icon\",\"href\":\"/registry/apple-touch-icon.png\",\"sizes\":\"180x180\"}],[\"$\",\"$L28\",\"32\",{}]]\n"])</script><script>self.__next_f.push([1,"29:T7b4,"])</script><script>self.__next_f.push([1,"{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"ItemPage\",\"@id\":\"https://iii.dev/registry/workers/iii-directory#page\",\"url\":\"https://iii.dev/registry/workers/iii-directory\",\"name\":\"iii-directory · iii Registry\",\"isPartOf\":{\"@id\":\"https://iii.dev/registry#website\"},\"breadcrumb\":{\"@id\":\"https://iii.dev/registry/workers/iii-directory#breadcrumb\"},\"mainEntity\":{\"@id\":\"https://iii.dev/registry/workers/iii-directory#subject\"}},{\"@type\":\"SoftwareApplication\",\"@id\":\"https://iii.dev/registry/workers/iii-directory#subject\",\"name\":\"iii-directory\",\"description\":\"Engine introspection, workers registry proxy, filesystem-backed skills, system prompts, and agent profiles, kit install and update with reviewed plans, plus function search ranked by the judge worker (falling back to local hybrid/lexical) with a conditional pre-generate hint.\",\"url\":\"https://iii.dev/registry/workers/iii-directory\",\"applicationCategory\":\"DeveloperApplication\",\"applicationSubCategory\":\"iii worker\",\"softwareVersion\":\"1.2.3\",\"operatingSystem\":\"macOS, Linux, Windows\",\"softwareRequirements\":\"iii engine\",\"keywords\":\"agents, directory, functions, introspect, kits, registry, search, skills\",\"license\":\"Apache-2.0\",\"isAccessibleForFree\":true,\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"USD\"},\"interactionStatistic\":{\"@type\":\"InteractionCounter\",\"interactionType\":\"https://schema.org/DownloadAction\",\"userInteractionCount\":5957},\"author\":{\"@id\":\"https://iii.dev/#organization\"},\"subjectOf\":{\"@type\":\"SoftwareSourceCode\",\"codeRepository\":\"https://github.com/iii-hq/workers\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://iii.dev/registry/workers/iii-directory#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"iii Registry\",\"item\":\"https://iii.dev/registry\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Workers\",\"item\":\"https://iii.dev/registry/workers\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"iii-directory\",\"item\":\"https://iii.dev/registry/workers/iii-directory\"}]}]}"])</script><script>self.__next_f.push([1,"5:[\"$\",\"div\",null,{\"className\":\"page-transition\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$29\"}}],[\"$\",\"header\",null,{\"className\":\"flex items-end justify-between flex-wrap gap-x-8 gap-y-5 px-[22px] pt-12 sm:px-9 sm:pt-16 pb-6 sm:pb-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-3 font-mono text-[10px] leading-[normal] uppercase tracking-[0.08em] text-muted-foreground\",\"children\":[\"$\",\"nav\",null,{\"aria-label\":\"Breadcrumb\",\"className\":\"flex items-center gap-x-1.5\",\"children\":[[\"$\",\"$L13\",null,{\"href\":\"/\",\"className\":\"transition-colors duration-150 hover:text-foreground\",\"children\":\"Registry\"}],[\"$\",\"span\",null,{\"aria-hidden\":true,\"children\":\"/\"}],[\"$\",\"$L13\",null,{\"href\":\"/workers\",\"className\":\"transition-colors duration-150 hover:text-foreground\",\"children\":\"Workers\"}]]}]}],[\"$\",\"div\",null,{\"className\":\"flex items-center flex-wrap gap-x-3 gap-y-2\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-[32px] sm:text-[40px] font-[550] leading-[1.1] tracking-[-0.04em] text-foreground text-balance\",\"children\":\"iii-directory\"}],\"$undefined\",[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center gap-1.5 rounded-md bg-code px-2 font-mono text-[13px] tabular-nums text-muted-foreground\",\"children\":\"v1.2.3\"}]]}],[\"$\",\"p\",null,{\"className\":\"mt-4 max-w-[60ch] text-[15px] leading-[1.7] text-muted-foreground text-pretty\",\"children\":\"Engine introspection, workers registry proxy, filesystem-backed skills, system prompts, and agent profiles, kit install and update with reviewed plans, plus function search ranked by the judge worker (falling back to local hybrid/lexical) with a conditional pre-generate hint.\"}]]}],null]}],\"$L2a\",\"$L2b\"]}]\n"])</script><script>self.__next_f.push([1,"2f:I[21158,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0jm9zdrfsajnq.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"InstallPanel\"]\n30:I[84938,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0jm9zdrfsajnq.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"PageTabs\"]\n"])</script><script>self.__next_f.push([1,"2a:[\"$\",\"div\",null,{\"className\":\"flex flex-col gap-y-5 px-[22px] pb-10 sm:px-9 sm:pb-12\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-x-2.5 gap-y-2 text-[13px] text-muted-foreground\",\"children\":[[\"$\",\"span\",\"0\",{\"className\":\"contents\",\"children\":[null,[\"$\",\"span\",\"license\",{\"className\":\"inline-block first-letter:uppercase\",\"children\":[\"license: \",\"Apache-2.0\"]}]]}],[\"$\",\"span\",\"1\",{\"className\":\"contents\",\"children\":[[\"$\",\"span\",null,{\"aria-hidden\":true,\"className\":\"text-[color-mix(in_srgb,var(--muted-foreground)_55%,transparent)] max-sm:hidden\",\"children\":\"·\"}],[\"$\",\"time\",\"published\",{\"dateTime\":\"2026-08-20T19:21:13.143Z\",\"title\":\"2026-08-20T19:21:13.143Z\",\"className\":\"tabular-nums\",\"children\":[\"Published \",\"2mo ago\"]}]]}],[\"$\",\"span\",\"2\",{\"className\":\"contents\",\"children\":[[\"$\",\"span\",null,{\"aria-hidden\":true,\"className\":\"text-[color-mix(in_srgb,var(--muted-foreground)_55%,transparent)] max-sm:hidden\",\"children\":\"·\"}],[\"$\",\"a\",\"kits\",{\"href\":\"#used-in-kits\",\"className\":\"transition-colors duration-150 hover:text-foreground\",\"children\":[\"Used in\",\" \",[\"$\",\"strong\",null,{\"className\":\"font-medium tabular-nums text-foreground\",\"children\":1}],\" \",\"kit\"]}]]}],[\"$\",\"span\",\"3\",{\"className\":\"contents\",\"children\":[[\"$\",\"span\",null,{\"aria-hidden\":true,\"className\":\"text-[color-mix(in_srgb,var(--muted-foreground)_55%,transparent)] max-sm:hidden\",\"children\":\"·\"}],[\"$\",\"span\",\"tags\",{\"className\":\"flex flex-wrap items-center gap-1.5\",\"children\":[[\"$\",\"$L13\",\"agents\",{\"href\":\"/search?tag=agents\",\"className\":\"rounded-md transition-opacity duration-150 hover:opacity-80 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center rounded-md bg-[color-mix(in_srgb,var(--foreground)_6%,transparent)] px-2 font-mono text-[13px] lowercase text-muted-foreground\",\"children\":\"agents\"}]}],[\"$\",\"$L13\",\"directory\",{\"href\":\"/search?tag=directory\",\"className\":\"rounded-md transition-opacity duration-150 hover:opacity-80 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center rounded-md bg-[color-mix(in_srgb,var(--foreground)_6%,transparent)] px-2 font-mono text-[13px] lowercase text-muted-foreground\",\"children\":\"directory\"}]}],[\"$\",\"$L13\",\"functions\",{\"href\":\"/search?tag=functions\",\"className\":\"rounded-md transition-opacity duration-150 hover:opacity-80 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center rounded-md bg-[color-mix(in_srgb,var(--foreground)_6%,transparent)] px-2 font-mono text-[13px] lowercase text-muted-foreground\",\"children\":\"functions\"}]}],[\"$\",\"$L13\",\"introspect\",{\"href\":\"/search?tag=introspect\",\"className\":\"rounded-md transition-opacity duration-150 hover:opacity-80 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center rounded-md bg-[color-mix(in_srgb,var(--foreground)_6%,transparent)] px-2 font-mono text-[13px] lowercase text-muted-foreground\",\"children\":\"introspect\"}]}],[\"$\",\"$L13\",\"kits\",{\"href\":\"/search?tag=kits\",\"className\":\"rounded-md transition-opacity duration-150 hover:opacity-80 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center rounded-md bg-[color-mix(in_srgb,var(--foreground)_6%,transparent)] px-2 font-mono text-[13px] lowercase text-muted-foreground\",\"children\":\"kits\"}]}],[\"$\",\"$L13\",\"registry\",{\"href\":\"/search?tag=registry\",\"className\":\"rounded-md transition-opacity duration-150 hover:opacity-80 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\"children\":\"$L2c\"}],\"$L2d\",\"$L2e\"]}]]}]]}],null,null,false,false]}]\n"])</script><script>self.__next_f.push([1,"32:T4c4,M12 2.69922C6.762 2.69922 2.5 6.96122 2.5 12.1992C2.5 16.3252 5.24 20.0532 9.164 21.2662C9.324 21.3182 9.498 21.2822 9.627 21.1762C9.757 21.0702 9.825 20.9062 9.809 20.7392C9.669 19.3462 10.47 17.8702 10.812 17.5162C10.944 17.3812 10.988 17.1822 10.925 17.0042C10.862 16.8252 10.704 16.6962 10.516 16.6732C8.725 16.4452 7.067 15.8372 7.067 12.9472C7.063 12.2282 7.337 11.5412 7.836 11.0122C7.968 10.8732 8.009 10.6712 7.941 10.4922C7.75 9.98722 7.729 9.42222 7.877 8.90022C8.168 8.94822 8.731 9.11922 9.608 9.70522C9.728 9.78622 9.877 9.80722 10.015 9.77222C11.312 9.42422 12.682 9.42422 13.979 9.77222C14.116 9.80722 14.266 9.78622 14.386 9.70522C15.27 9.11422 15.835 8.94522 16.115 8.89622C16.264 9.42022 16.245 9.98622 16.054 10.4932C15.986 10.6732 16.027 10.8752 16.16 11.0132C16.654 11.5332 16.927 12.2172 16.927 12.9382C16.927 15.8772 15.273 16.4642 13.486 16.6612C13.296 16.6812 13.135 16.8092 13.071 16.9882C13.006 17.1682 13.049 17.3692 13.182 17.5062C13.512 17.8472 14.321 19.3622 14.185 20.7502C14.168 20.9172 14.236 21.0812 14.367 21.1862C14.457 21.2612 14.569 21.2992 14.682 21.2992C14.732 21.2992 14.783 21.2912 14.832 21.2752C18.82 20.0202 21.5 16.3732 21.5 12.1992C21.5 6.96122 17.238 2.69922 12 2.69922Z"])</script><script>self.__next_f.push([1,"2b:[\"$\",\"div\",null,{\"className\":\"px-[22px] pb-16 sm:px-9\",\"children\":[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 gap-x-12 gap-y-8 @4xl:grid-cols-[minmax(0,1fr)_360px] @4xl:grid-rows-[auto_1fr]\",\"children\":[[\"$\",\"section\",null,{\"aria-label\":\"Install\",\"className\":\"flex min-w-0 flex-col gap-y-3 @4xl:col-start-2 @4xl:row-start-1\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-[15px] font-[550] tracking-[-0.01em] text-foreground\",\"children\":\"Install\"}],[\"$\",\"$L2f\",null,{\"command\":\"iii trigger compose::add worker=iii-directory@1.2.3\",\"html\":\"\u003cpre class=\\\"shiki shiki-themes min-light vesper\\\" style=\\\"--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010\\\" tabindex=\\\"0\\\"\u003e\u003ccode\u003e\u003cspan class=\\\"line\\\"\u003e\u003cspan style=\\\"--shiki-light:#6F42C1;--shiki-dark:#FFC799\\\"\u003eiii\u003c/span\u003e\u003cspan style=\\\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\\\"\u003e trigger\u003c/span\u003e\u003cspan style=\\\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\\\"\u003e compose::add\u003c/span\u003e\u003cspan style=\\\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\\\"\u003e worker=iii-directory@1.2.3\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\",\"workerName\":\"iii-directory\",\"version\":\"1.2.3\",\"kind\":\"worker\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] leading-[1.6] text-pretty text-muted-foreground\",\"children\":\"Run in your project with the iii engine running. Exact versions are immutable and digest-pinned.\"}]]}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex flex-col gap-y-8 @4xl:col-start-1 @4xl:row-span-2 @4xl:row-start-1\",\"children\":[[\"$\",\"$L30\",null,{\"slug\":\"iii-directory\",\"activeTab\":\"readme\",\"version\":\"1.2.3\",\"basePath\":\"/workers\",\"tabs\":\"$undefined\"}],[false,[\"$\",\"section\",null,{\"aria-label\":\"Readme\",\"children\":\"$L31\"}]],false,false,false,false,false,false]}],[\"$\",\"aside\",null,{\"className\":\"flex min-w-0 flex-col gap-y-6 @4xl:col-start-2 @4xl:row-start-2 @4xl:self-start\",\"children\":[[\"$\",\"dl\",null,{\"className\":\"grid grid-cols-2 gap-x-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Repository\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://github.com/iii-hq/workers\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex max-w-full items-center gap-x-2 text-[14px] font-medium transition-colors duration-150 hover:text-brand\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"$32\"}]}],\"$L33\",\"$L34\"]}]}]]}],\"$L35\",\"$L36\",\"$L37\",\"$L38\",\"$L39\",\"$L3a\",\"$L3b\",\"$L3c\",\"$L3d\",null,\"$L3e\",null,\"$L3f\"]}],\"$L40\",\"$L41\"]}]]}]}]\n"])</script><script>self.__next_f.push([1,"42:I[56877,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0jm9zdrfsajnq.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"InstallsChart\"]\n43:I[33516,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0jm9zdrfsajnq.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"Image\"]\n46:I[42794,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0jm9zdrfsajnq.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"SummaryList\"]\n:HL[\"https://iii.dev/docs/_mintlify/favicons/motiadev/AFkVbz_UcSL_5jsm/_generated/favicon/apple-touch-icon.png\",\"image\"]\n2c:[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center rounded-md bg-[color-mix(in_srgb,var(--foreground)_6%,transparent)] px-2 font-mono text-[13px] lowercase text-muted-foreground\",\"children\":\"registry\"}]\n2d:[\"$\",\"$L13\",\"search\",{\"href\":\"/search?tag=search\",\"className\":\"rounded-md transition-opacity duration-150 hover:opacity-80 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center rounded-md bg-[color-mix(in_srgb,var(--foreground)_6%,transparent)] px-2 font-mono text-[13px] lowercase text-muted-foreground\",\"children\":\"search\"}]}]\n2e:[\"$\",\"$L13\",\"skills\",{\"href\":\"/search?tag=skills\",\"className\":\"rounded-md transition-opacity duration-150 hover:opacity-80 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center rounded-md bg-[color-mix(in_srgb,var(--foreground)_6%,transparent)] px-2 font-mono text-[13px] lowercase text-muted-foreground\",\"children\":\"skills\"}]}]\n33:[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"iii-hq/workers\"}]\n34:[\"$\",\"$L16\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$18:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right size-3.5 shrink-0 text-muted-foreground\",\"aria-hidden\":true}]\n35:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Weekly installs\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-[550] tabular-nums text-[24px] tracking-[-0.03em]\",\"children\":\"815\"}],[\"$\",\"$L42\",null,{\"series\":[67,114,150,79,287,83,35],\"width\":340,\"height\":52,\"className\":\"mt-3\"}]]}]]}]\n36:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Version\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"span\",null,{\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums block truncate\",\"children\":[\"v\",\"1.2.3\"]}]}]]}]\n37:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"License\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"span\",null,{\"className\":\"text-[16px] font-[550] leading-tight trackin"])</script><script>self.__next_f.push([1,"g-[-0.02em] tabular-nums block truncate\",\"children\":\"Apache-2.0\"}]}]]}]\n38:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Total installs\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"span\",null,{\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums\",\"children\":\"5,957\"}]}]]}]\n39:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Type\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"span\",null,{\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums block truncate\",\"children\":\"binary\"}]}]]}]\n3a:[[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Functions\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"$L13\",null,{\"href\":\"/workers/iii-directory?version=1.2.3\u0026tab=api\",\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand\",\"children\":\"29\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Triggers\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"$L13\",null,{\"href\":\"/workers/iii-directory?version=1.2.3\u0026tab=api\",\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand\",\"children\":\"3\"}]}]]}]]\n3b:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Skills\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"$L13\",null,{\"href\":\"/workers/iii-directory?version=1.2.3\u0026tab=skills\",\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand\",\"children\":\"3\"}]}]]}]\n3c:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Dependencies\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"$L13\",null,{\"href\":\"/workers/iii-directory?version=1.2.3\u0026tab=deps\",\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand\",\"children\":\"1\"}]}]]}]\n3d:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Last publish\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"time\",null,{\"dateTime\":\"2026-08-20T19:21:13.143Z\",\"title\":\"2026-08-20T19:21:13.143Z\",\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums block truncate\",\"children\":\"2mo ago\"}]}]]}]\n"])</script><script>self.__next_f.push([1,"3e:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Platforms\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"ul\",null,{\"aria-label\":\"Supported platforms\",\"className\":\"flex flex-wrap items-center gap-2 mt-1\",\"children\":[[\"$\",\"li\",\"apple\",{\"title\":\"macOS: arm64, x64\",\"className\":\"inline-flex items-center rounded-md border border-line bg-background font-mono text-muted-foreground h-8 gap-x-2 px-2.5 text-[13px]\",\"children\":[[\"$\",\"$L43\",null,{\"src\":\"/registry/icons/apple_dark.svg\",\"alt\":\"\",\"aria-hidden\":true,\"width\":209,\"height\":256,\"className\":\"shrink-0 opacity-80 [filter:brightness(0)] dark:[filter:brightness(0)_invert(1)] h-3.5 w-auto\"}],[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":[\"macOS\",\": \"]}],[\"$\",\"span\",null,{\"className\":\"tabular-nums\",\"children\":\"arm64 · x64\"}]]}],[\"$\",\"li\",\"linux\",{\"title\":\"Linux: arm64, armv7, x64\",\"className\":\"inline-flex items-center rounded-md border border-line bg-background font-mono text-muted-foreground h-8 gap-x-2 px-2.5 text-[13px]\",\"children\":[[\"$\",\"$L43\",null,{\"src\":\"/registry/icons/linux.svg\",\"alt\":\"\",\"aria-hidden\":true,\"width\":256,\"height\":295,\"className\":\"shrink-0 opacity-80 [filter:brightness(0)] dark:[filter:brightness(0)_invert(1)] h-3.5 w-auto\"}],[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":[\"Linux\",\": \"]}],[\"$\",\"span\",null,{\"className\":\"tabular-nums\",\"children\":\"arm64 · armv7 · x64\"}]]}],[\"$\",\"li\",\"windows\",{\"title\":\"Windows: arm64, x64, x86\",\"className\":\"inline-flex items-center rounded-md border border-line bg-background font-mono text-muted-foreground h-8 gap-x-2 px-2.5 text-[13px]\",\"children\":[[\"$\",\"$L43\",null,{\"src\":\"/registry/icons/windows.svg\",\"alt\":\"\",\"aria-hidden\":true,\"width\":88,\"height\":88,\"className\":\"shrink-0 opacity-80 [filter:brightness(0)] dark:[filter:brightness(0)_invert(1)] h-3.5 w-auto\"}],[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":[\"Windows\",\": \"]}],[\"$\",\"span\",null,{\"className\":\"tabular-nums\",\"children\":\"arm64 · x64 · x86\"}]]}]]}]}]]}]\n"])</script><script>self.__next_f.push([1,"44:T5da,"])</script><script>self.__next_f.push([1,"M15.5837 10.5577L11.5107 14.6327C11.3697 14.7737 11.1787 14.8527 10.9797 14.8527C10.7807 14.8527 10.5897 14.7737 10.4497 14.6327L8.47274 12.6527C8.18075 12.3587 8.18075 11.8837 8.47375 11.5907C8.76775 11.2987 9.24174 11.2997 9.53475 11.5917L10.9807 13.0407L14.5227 9.49667C14.8157 9.20367 15.2907 9.20367 15.5837 9.49667C15.8767 9.78967 15.8767 10.2647 15.5837 10.5577ZM20.7037 10.0857L20.0047 9.38667C19.6857 9.06667 19.5107 8.64067 19.5107 8.18967V7.18967C19.5107 5.70067 18.2987 4.48967 16.8107 4.48967H15.8087C15.3557 4.48967 14.9307 4.31467 14.6127 3.99667L13.9017 3.28667C12.8447 2.23867 11.1327 2.24367 10.0837 3.29767L9.38674 3.99667C9.06574 4.31567 8.64075 4.49067 8.18875 4.49067H7.18775C5.71675 4.49167 4.51675 5.67567 4.48975 7.14167C4.48874 7.15767 4.48775 7.17367 4.48775 7.19067V8.18767C4.48775 8.63967 4.31275 9.06467 3.99375 9.38367L3.28575 10.0927C3.28475 10.0957 3.28175 10.0967 3.27975 10.0987C2.23475 11.1567 2.24375 12.8687 3.29675 13.9117L3.99575 14.6127C4.31375 14.9317 4.48975 15.3557 4.48975 15.8077V16.8127C4.48975 18.3007 5.69975 19.5117 7.18775 19.5117H8.18675C8.63975 19.5127 9.06475 19.6877 9.38275 20.0047L10.0957 20.7157C10.6037 21.2207 11.2777 21.4987 11.9947 21.4987H12.0067C12.7277 21.4957 13.4037 21.2117 13.9097 20.7027L14.6107 20.0027C14.9257 19.6887 15.3617 19.5087 15.8067 19.5087H16.8127C18.2977 19.5087 19.5087 18.2997 19.5117 16.8127V15.8097C19.5117 15.3587 19.6867 14.9337 20.0037 14.6147L20.7147 13.9037C21.7647 12.8477 21.7587 11.1347 20.7037 10.0857Z"])</script><script>self.__next_f.push([1,"3f:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Author\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex min-w-0 items-center gap-x-2\",\"children\":[[\"$\",\"img\",null,{\"src\":\"https://iii.dev/docs/_mintlify/favicons/motiadev/AFkVbz_UcSL_5jsm/_generated/favicon/apple-touch-icon.png\",\"alt\":\"\",\"className\":\"size-5 shrink-0 rounded-full border border-line object-cover\"}],[\"$\",\"span\",null,{\"className\":\"truncate text-[13px] font-medium text-foreground\",\"children\":\"iii\"}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 24 24\",\"width\":\"1em\",\"height\":\"1em\",\"fill\":\"currentColor\",\"focusable\":\"false\",\"aria-hidden\":\"$undefined\",\"className\":\"size-3.5 shrink-0 text-verified\",\"aria-label\":\"Verified author\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"$44\"}]}]]}]}]]}]\n45:T4a7,M5.9199,11.4697 C7.3299,11.4697 8.4599,12.6107 8.4599,14.0307 L8.4599,14.0307 L8.4599,17.4397 C8.4599,18.8497 7.3299,19.9997 5.9199,19.9997 L5.9199,19.9997 L2.5399,19.9997 C1.1399,19.9997 -0.0001,18.8497 -0.0001,17.4397 L-0.0001,17.4397 L-0.0001,14.0307 C-0.0001,12.6107 1.1399,11.4697 2.5399,11.4697 L2.5399,11.4697 Z M17.46,11.4697 C18.86,11.4697 20,12.6107 20,14.0307 L20,14.0307 L20,17.4397 C20,18.8497 18.86,19.9997 17.46,19.9997 L17.46,19.9997 L14.08,19.9997 C12.67,19.9997 11.54,18.8497 11.54,17.4397 L11.54,17.4397 L11.54,14.0307 C11.54,12.6107 12.67,11.4697 14.08,11.4697 L14.08,11.4697 Z M5.9199,-9.32587341e-14 C7.3299,-9.32587341e-14 8.4599,1.15 8.4599,2.561 L8.4599,2.561 L8.4599,5.97 C8.4599,7.39 7.3299,8.53 5.9199,8.53 L5.9199,8.53 L2.5399,8.53 C1.1399,8.53 -0.0001,7.39 -0.0001,5.97 L-0.0001,5.97 L-0.0001,2.561 C-0.0001,1.15 1.1399,-9.32587341e-14 2.5399,-9.32587341e-14 L2.5399,-9.32587341e-14 Z M17.46,-9.32587341e-14 C18.86,-9.32587341e-14 20,1.15 20,2.561 L20,2.561 L20,5.97 C20,7.39 18.86,8.53 17.46,8.53 L17.46,8.53 L14.08,8.53 C12.67,8.53 11.54,7.39 11.54,5.97 L11.54,5.97 L11.54,2.561 C11.54,1.15 12.67,-9.32587341e-14 14.08,-9.32587341e-14 L14.08,-9.32587341e-14 Z"])</script><script>self.__next_f.push([1,"40:[\"$\",\"section\",null,{\"id\":\"used-in-kits\",\"aria-labelledby\":\"used-in-kits-title\",\"className\":\"overflow-hidden rounded-xl border border-line bg-paper scroll-mt-20\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex min-h-11 items-center justify-between gap-x-3 border-b border-line px-4\",\"children\":[\"$\",\"span\",null,{\"id\":\"used-in-kits-title\",\"className\":\"font-mono text-[10px] uppercase tracking-[0.08em] text-muted-foreground\",\"children\":[\"Used in \",1,\" \",\"kit\"]}]}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col p-2\",\"children\":[[\"$\",\"li\",\"iii/deepwork\",{\"children\":[\"$\",\"$L13\",null,{\"href\":\"/kits/iii/deepwork\",\"className\":\"group flex items-start gap-x-3 rounded-lg px-2 py-2 transition-colors duration-150 hover:bg-code focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand\",\"children\":[[\"$\",\"span\",null,{\"className\":\"grid size-8 shrink-0 place-items-center rounded-[9px] border border-line bg-background\",\"children\":[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 24 24\",\"width\":\"1em\",\"height\":\"1em\",\"fill\":\"currentColor\",\"focusable\":\"false\",\"aria-hidden\":\"true\",\"className\":\"shrink-0 text-foreground size-3.5\",\"children\":[\"$\",\"g\",null,{\"transform\":\"translate(2 2)\",\"children\":[\"$\",\"path\",null,{\"d\":\"$45\"}]}]}]}],[\"$\",\"span\",null,{\"className\":\"min-w-0 flex flex-col gap-y-0.5\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate text-[13px] font-medium text-foreground\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-muted-foreground\",\"children\":[\"iii\",\"/\"]}],\"deepwork\"]}],[\"$\",\"span\",null,{\"className\":\"font-mono text-[13px] tabular-nums text-muted-foreground\",\"children\":[\"v\",\"0.4.3\",\" · \",6,\" \",\"profiles\"]}]]}]]}]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"41:[\"$\",\"section\",null,{\"id\":\"$undefined\",\"className\":\"shrink-0 overflow-hidden rounded-xl border border-line bg-paper scroll-mt-20\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex min-h-11 items-center justify-between gap-x-3 border-b border-line px-4\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-mono text-[10px] uppercase tracking-[0.08em] text-muted-foreground\",\"children\":\"api\"}],\"$undefined\"]}],[\"$\",\"div\",null,{\"className\":\"flex flex-col p-0 gap-y-0\",\"children\":[\"$\",\"$L46\",null,{\"slug\":\"iii-directory\",\"version\":\"1.2.3\",\"functions\":[{\"name\":\"directory::__on_worker_added\",\"anchor\":\"fn-directory::__on_worker_added\"},{\"name\":\"directory::engine::functions::info\",\"anchor\":\"fn-directory::engine::functions::info\"},{\"name\":\"directory::hint-preview\",\"anchor\":\"fn-directory::hint-preview\"},{\"name\":\"directory::on-config-change\",\"anchor\":\"fn-directory::on-config-change\"},{\"name\":\"directory::on-functions-change\",\"anchor\":\"fn-directory::on-functions-change\"},{\"name\":\"directory::pre-generate\",\"anchor\":\"fn-directory::pre-generate\"},{\"name\":\"directory::prompts::create\",\"anchor\":\"fn-directory::prompts::create\"},{\"name\":\"directory::prompts::delete\",\"anchor\":\"fn-directory::prompts::delete\"},{\"name\":\"directory::prompts::get\",\"anchor\":\"fn-directory::prompts::get\"},{\"name\":\"directory::prompts::list\",\"anchor\":\"fn-directory::prompts::list\"},{\"name\":\"directory::prompts::update\",\"anchor\":\"fn-directory::prompts::update\"},{\"name\":\"directory::registry::workers::info\",\"anchor\":\"fn-directory::registry::workers::info\"},{\"name\":\"directory::registry::workers::list\",\"anchor\":\"fn-directory::registry::workers::list\"},{\"name\":\"directory::search_functions\",\"anchor\":\"fn-directory::search_functions\"},{\"name\":\"directory::skills::create\",\"anchor\":\"fn-directory::skills::create\"},{\"name\":\"directory::skills::delete\",\"anchor\":\"fn-directory::skills::delete\"},{\"name\":\"directory::skills::download\",\"anchor\":\"fn-directory::skills::download\"},{\"name\":\"directory::skills::download_from_registry\",\"anchor\":\"fn-directory::skills::download_from_registry\"},{\"name\":\"directory::skills::download_from_repo\",\"anchor\":\"fn-directory::skills::download_from_repo\"},{\"name\":\"directory::skills::get\",\"anchor\":\"fn-directory::skills::get\"},{\"name\":\"directory::skills::index\",\"anchor\":\"fn-directory::skills::index\"},{\"name\":\"directory::skills::list\",\"anchor\":\"fn-directory::skills::list\"},{\"name\":\"directory::skills::update\",\"anchor\":\"fn-directory::skills::update\"},{\"name\":\"directory::system-prompts::create\",\"anchor\":\"fn-directory::system-prompts::create\"},{\"name\":\"directory::system-prompts::delete\",\"anchor\":\"fn-directory::system-prompts::delete\"},{\"name\":\"directory::system-prompts::get\",\"anchor\":\"fn-directory::system-prompts::get\"},{\"name\":\"directory::system-prompts::list\",\"anchor\":\"fn-directory::system-prompts::list\"},{\"name\":\"directory::system-prompts::update\",\"anchor\":\"fn-directory::system-prompts::update\"},{\"name\":\"iii-directory::ui-content\",\"anchor\":\"fn-iii-directory::ui-content\"}],\"triggers\":[{\"name\":\"directory::prompts::on-change\",\"anchor\":\"trigger-directory::prompts::on-change\"},{\"name\":\"directory::skills::on-change\",\"anchor\":\"trigger-directory::skills::on-change\"},{\"name\":\"directory::system-prompts::on-change\",\"anchor\":\"trigger-directory::system-prompts::on-change\"}]}]}]]}]\n"])</script><script>self.__next_f.push([1,"47:Tf821,"])</script><script>self.__next_f.push([1,"\u003ch1 id=\"iii-directory\" class=\"scroll-mt-20\"\u003eiii-directory\u003c/h1\u003e\n\u003cp\u003eWorkers registry HTTP proxy and filesystem-backed skill + prompt\nreader for the \u003ca href=\"https://github.com/iii-hq/iii\"\u003eiii engine\u003c/a\u003e. Every\npublic function sits under a single \u003ccode class=\"readme-inline-code\"\u003edirectory::*\u003c/code\u003e namespace, split\ninto five surfaces (all MCP-agnostic):\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eSurface\u003c/th\u003e\n\u003cth\u003eWhat clients see\u003c/th\u003e\n\u003cth\u003eWhen to use it\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eSkills\u003c/strong\u003e (\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::*\u003c/code\u003e)\u003c/td\u003e\n\u003ctd\u003eEnriched listing via \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::list\u003c/code\u003e (\u003ccode class=\"readme-inline-code\"\u003e{ id, title, type, description, bytes, modified_at }\u003c/code\u003e per row), a single-skill reader \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::get { id }\u003c/code\u003e returning \u003ccode class=\"readme-inline-code\"\u003e{ id, title, type, description, path, body, modified_at }\u003c/code\u003e, and \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::index\u003c/code\u003e which renders a short per-worker overview document (one \u003ccode class=\"readme-inline-code\"\u003e## \u003ctitle\u003e\u003c/code\u003e + first paragraph + \u003ccode class=\"readme-inline-code\"\u003eread more\u003c/code\u003e link per \u003ccode class=\"readme-inline-code\"\u003etype: index\u003c/code\u003e skill). Authored by \u003ccode class=\"readme-inline-code\"\u003ecreate\u003c/code\u003e, edited by \u003ccode class=\"readme-inline-code\"\u003eupdate\u003c/code\u003e, removed by \u003ccode class=\"readme-inline-code\"\u003edelete\u003c/code\u003e. \u003ccode class=\"readme-inline-code\"\u003etitle\u003c/code\u003e prefers the YAML frontmatter \u003ccode class=\"readme-inline-code\"\u003etitle:\u003c/code\u003e (then \u003ccode class=\"readme-inline-code\"\u003ename:\u003c/code\u003e) over the body H1; \u003ccode class=\"readme-inline-code\"\u003etype\u003c/code\u003e is lifted from frontmatter \u003ccode class=\"readme-inline-code\"\u003etype:\u003c/code\u003e (e.g. \u003ccode class=\"readme-inline-code\"\u003eindex\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ehow-to\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ereference\u003c/code\u003e) and serialised as \u003ccode class=\"readme-inline-code\"\u003enull\u003c/code\u003e when absent. System-installed agent skills under the read-only \u003ccode class=\"readme-inline-code\"\u003eagents_skills_folder\u003c/code\u003e are served too (see \u003ca href=\"#on-disk-layout\"\u003eOn-disk layout\u003c/a\u003e).\u003c/td\u003e\n\u003ctd\u003eOrientation: \u0026quot;when and why to use my worker\u0026#39;s tools\u0026quot;\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePrompts\u003c/strong\u003e (\u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::*\u003c/code\u003e)\u003c/td\u003e\n\u003ctd\u003eCommand templates listed by \u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::list\u003c/code\u003e, read by \u003ccode class=\"readme-inline-code\"\u003eget\u003c/code\u003e, authored by \u003ccode class=\"readme-inline-code\"\u003ecreate\u003c/code\u003e, edited by \u003ccode class=\"readme-inline-code\"\u003eupdate\u003c/code\u003e. Stored under any \u003ccode class=\"readme-inline-code\"\u003eprompts/\u003c/code\u003e path segment; \u003ccode class=\"readme-inline-code\"\u003ecreate\u003c/code\u003e writes \u003ccode class=\"readme-inline-code\"\u003e\u003cskills_folder\u003e/prompts/\u003cname\u003e.md\u003c/code\u003e.\u003c/td\u003e\n\u003ctd\u003eParametric command templates the \u003cem\u003euser\u003c/em\u003e invokes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eSystem prompts\u003c/strong\u003e (\u003ccode class=\"readme-inline-code\"\u003edirectory::system-prompts::*\u003c/code\u003e)\u003c/td\u003e\n\u003ctd\u003eIdentity prompts with the same four verbs and the same response shapes as Prompts — including the \u003ccode class=\"readme-inline-code\"\u003eprompts\u003c/code\u003e field name on \u003ccode class=\"readme-inline-code\"\u003elist\u003c/code\u003e. Stored under any \u003ccode class=\"readme-inline-code\"\u003esystem-prompts/\u003c/code\u003e path segment; \u003ccode class=\"readme-inline-code\"\u003ecreate\u003c/code\u003e writes \u003ccode class=\"readme-inline-code\"\u003e\u003cskills_folder\u003e/system-prompts/\u003cname\u003e.md\u003c/code\u003e.\u003c/td\u003e\n\u003ctd\u003eWhat the chat\u0026#39;s system-prompt picker offers as an identity prompt (enrich or replace)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eSearch\u003c/strong\u003e (\u003ccode class=\"readme-inline-code\"\u003edirectory::search_functions\u003c/code\u003e)\u003c/td\u003e\n\u003ctd\u003eOne natural-language query → the API reference of only the relevant functions (installed, plus installable registry workers under \u003ccode class=\"readme-inline-code\"\u003einstallable\u003c/code\u003e), with a conditional pre-generate hint pointing agents at it.\u003c/td\u003e\n\u003ctd\u003e\u0026quot;Which functions do I call for this task?\u0026quot;\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eRegistry\u003c/strong\u003e (\u003ccode class=\"readme-inline-code\"\u003edirectory::registry::*\u003c/code\u003e)\u003c/td\u003e\n\u003ctd\u003eHTTP proxy over \u003ccode class=\"readme-inline-code\"\u003eapi.workers.iii.dev\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eworkers::{list,info}\u003c/code\u003e. Rows share the core \u003ccode class=\"readme-inline-code\"\u003ename\u003c/code\u003e / \u003ccode class=\"readme-inline-code\"\u003edescription\u003c/code\u003e / \u003ccode class=\"readme-inline-code\"\u003eversion\u003c/code\u003e fields with the engine\u0026#39;s \u003ccode class=\"readme-inline-code\"\u003eengine::workers::list\u003c/code\u003e and add publication metadata (\u003ccode class=\"readme-inline-code\"\u003etype\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003econfig\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003esupported_targets\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003etotal_downloads\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003edependencies\u003c/code\u003e, optional \u003ccode class=\"readme-inline-code\"\u003eimage\u003c/code\u003e). \u003ccode class=\"readme-inline-code\"\u003eworkers::list\u003c/code\u003e is cursor-paginated with a server-authored page size.\u003c/td\u003e\n\u003ctd\u003e\u0026quot;What\u0026#39;s published in the public registry?\u0026quot;\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003cp\u003eEngine introspection (functions / triggers / registered triggers /\nworkers) is served by the engine natively at\n\u003ccode class=\"readme-inline-code\"\u003eengine::functions::*\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eengine::triggers::*\u003c/code\u003e,\n\u003ccode class=\"readme-inline-code\"\u003eengine::registered-triggers::*\u003c/code\u003e, and \u003ccode class=\"readme-inline-code\"\u003eengine::workers::*\u003c/code\u003e. Call the\nengine ids directly. One wrapper survives for callers that can only\nreach the \u003ccode class=\"readme-inline-code\"\u003edirectory::\u003c/code\u003e namespace: \u003ccode class=\"readme-inline-code\"\u003edirectory::engine::functions::info\u003c/code\u003e\nproxies a single function\u0026#39;s schema (see its row below).\u003c/p\u003e\n\u003cp\u003eSkills and prompts are sourced from a single configured folder on disk\n(\u003ccode class=\"readme-inline-code\"\u003eskills_folder\u003c/code\u003e). Writes are the \u003cstrong\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::download*\u003c/code\u003e\u003c/strong\u003e\nfunctions, which pull markdown into \u003ccode class=\"readme-inline-code\"\u003eskills_folder\u003c/code\u003e from either the\n\u003ca href=\"https://workers.iii.dev\"\u003eworkers registry\u003c/a\u003e or a GitHub repo, plus the\nper-kind single-file editors — \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::{create,update,delete}\u003c/code\u003e,\n\u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::{create,update,delete}\u003c/code\u003e and\n\u003ccode class=\"readme-inline-code\"\u003edirectory::system-prompts::{create,update,delete}\u003c/code\u003e. Once downloaded, files\nbelong to the developer — edit them however you want, in the editor of\nyour choice: a change made directly on disk fires the matching\n\u003ccode class=\"readme-inline-code\"\u003eon-change\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eop: \"external\"\u003c/code\u003e (see \u003ca href=\"#custom-trigger-types\"\u003eCustom trigger\ntypes\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::registry::workers::*\u003c/code\u003e and the engine\u0026#39;s \u003ccode class=\"readme-inline-code\"\u003eengine::workers::*\u003c/code\u003e\nshare the core \u003ccode class=\"readme-inline-code\"\u003ename\u003c/code\u003e / \u003ccode class=\"readme-inline-code\"\u003edescription\u003c/code\u003e / \u003ccode class=\"readme-inline-code\"\u003eversion\u003c/code\u003e fields so a parser\nthat touches only those keys works against either surface; the\nregistry view also surfaces publication metadata (\u003ccode class=\"readme-inline-code\"\u003etype\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003econfig\u003c/code\u003e,\n\u003ccode class=\"readme-inline-code\"\u003esupported_targets\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003etotal_downloads\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003edependencies\u003c/code\u003e, optional\n\u003ccode class=\"readme-inline-code\"\u003eimage\u003c/code\u003e) and the engine view adds runtime / connection state.\u003c/p\u003e\n\u003ch2 id=\"table-of-contents\" class=\"scroll-mt-20\"\u003eTable of contents\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003ca href=\"#install\"\u003eInstall\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#configuration\"\u003eConfiguration\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#quickstart-download-some-skills\"\u003eQuickstart: download some skills\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#on-disk-layout\"\u003eOn-disk layout\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#skill-ids\"\u003eSkill ids\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#functions\"\u003eFunctions\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#function-search--pre-generate-hint\"\u003eFunction search \u0026amp; pre-generate hint\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#custom-trigger-types\"\u003eCustom trigger types\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#local-development--testing\"\u003eLocal development \u0026amp; testing\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#migration-from-skills-v02x\"\u003eMigration from skills v0.2.x\u003c/a\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003ch2 id=\"install\" class=\"scroll-mt-20\"\u003eInstall\u003c/h2\u003e\n\u003cpre class=\"shiki shiki-themes min-light vesper\" style=\"--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010\" tabindex=\"0\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#FFC799\"\u003eiii\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e worker\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e add\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e iii-directory\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ccode class=\"readme-inline-code\"\u003eiii worker add\u003c/code\u003e fetches the binary, writes a config block into\n\u003ccode class=\"readme-inline-code\"\u003e~/.iii/config.yaml\u003c/code\u003e, and the engine starts the worker the next time it boots.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"skills\" class=\"scroll-mt-20\"\u003eSkills\u003c/h2\u003e\n\u003cp\u003eInstall the \u003ccode class=\"readme-inline-code\"\u003eiii-directory\u003c/code\u003e agent skill for Claude Code, Cursor, and 30+ other agents:\u003c/p\u003e\n\u003cpre class=\"shiki shiki-themes min-light vesper\" style=\"--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010\" tabindex=\"0\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#FFC799\"\u003enpx\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e skills\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e add\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e iii-hq/workers\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --skill\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e iii-directory\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eBrowse or install every worker skill at once:\u003c/p\u003e\n\u003cpre class=\"shiki shiki-themes min-light vesper\" style=\"--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010\" tabindex=\"0\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#FFC799\"\u003enpx\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e skills\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e add\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e iii-hq/workers\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --list\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#FFC799\"\u003enpx\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e skills\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e add\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e iii-hq/workers\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --all\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003chr\u003e\n\u003ch2 id=\"configuration\" class=\"scroll-mt-20\"\u003eConfiguration\u003c/h2\u003e\n\u003cp\u003eRuntime settings live in the \u003cstrong\u003e\u003ccode class=\"readme-inline-code\"\u003econfiguration\u003c/code\u003e worker\u003c/strong\u003e under id\n\u003cstrong\u003e\u003ccode class=\"readme-inline-code\"\u003eiii-directory\u003c/code\u003e\u003c/strong\u003e (the same pattern \u003ccode class=\"readme-inline-code\"\u003edatabase\u003c/code\u003e and \u003ccode class=\"readme-inline-code\"\u003estorage\u003c/code\u003e use). At boot\nthe worker registers its JSON Schema, reads the live value via\n\u003ccode class=\"readme-inline-code\"\u003econfiguration::get\u003c/code\u003e (the configuration worker env-expands \u003ccode class=\"readme-inline-code\"\u003e${VAR}\u003c/code\u003e), and binds\na \u003ccode class=\"readme-inline-code\"\u003econfiguration\u003c/code\u003e trigger so it re-fetches on change.\u003c/p\u003e\n\u003cp\u003ePersisted values default to \u003ccode class=\"readme-inline-code\"\u003e./data/configuration/iii-directory.yaml\u003c/code\u003e (fs\nadapter). Edit that file directly, call \u003ccode class=\"readme-inline-code\"\u003econfiguration::set id=iii-directory\u003c/code\u003e,\nor use the console Workers tab — all three propagate without a redeploy.\u003c/p\u003e\n\u003ch3 id=\"fields\" class=\"scroll-mt-20\"\u003eFields\u003c/h3\u003e\n\u003cpre class=\"shiki shiki-themes min-light vesper\" style=\"--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010\" tabindex=\"0\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# TOPOLOGY — changing any of these requires a worker restart.\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFC799\"\u003eskills_folder\u003c/span\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFF\"\u003e:\u003c/span\u003e\u003cspan style=\"--shiki-light:#22863A;--shiki-dark:#99FFE4\"\u003e ~/.iii/skills\u003c/span\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e # read/write root for skills + prompts\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFC799\"\u003elocal_skills_folder\u003c/span\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFF\"\u003e:\u003c/span\u003e\u003cspan style=\"--shiki-light:#22863A;--shiki-dark:#99FFE4\"\u003e ./.iii/skills\u003c/span\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e # project-scoped overrides (whole-namespace local-wins)\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFC799\"\u003eagents_skills_folder\u003c/span\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFF\"\u003e:\u003c/span\u003e\u003cspan style=\"--shiki-light:#22863A;--shiki-dark:#99FFE4\"\u003e ~/.agents/skills\u003c/span\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e # READ-ONLY system-installed agent skills (shallow \u0026#x3C;skill\u003e/SKILL.md scan)\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFC799\"\u003eauto_download\u003c/span\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFF\"\u003e:\u003c/span\u003e\u003cspan style=\"--shiki-light:#1976D2;--shiki-dark:#FFC799\"\u003e true\u003c/span\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e # subscribe to worker-add + run the boot reconcile\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# TUNABLE — hot-reload live on `configuration:updated`.\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFC799\"\u003eregistry_url\u003c/span\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFF\"\u003e:\u003c/span\u003e\u003cspan style=\"--shiki-light:#22863A;--shiki-dark:#99FFE4\"\u003e https://api.workers.iii.dev\u003c/span\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e # workers registry base URL\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFC799\"\u003edownload_timeout_ms\u003c/span\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFF\"\u003e:\u003c/span\u003e\u003cspan style=\"--shiki-light:#1976D2;--shiki-dark:#FFC799\"\u003e 60000\u003c/span\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e # per git-clone / HTTP request timeout (ms)\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFC799\"\u003eregistry_cache_ttl_ms\u003c/span\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFF\"\u003e:\u003c/span\u003e\u003cspan style=\"--shiki-light:#1976D2;--shiki-dark:#FFC799\"\u003e 60000\u003c/span\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e # in-process TTL for registry::workers::* responses\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFC799\"\u003efilter_unregistered\u003c/span\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFF\"\u003e:\u003c/span\u003e\u003cspan style=\"--shiki-light:#1976D2;--shiki-dark:#FFC799\"\u003e true\u003c/span\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e # hide skills whose namespace isn't an installed worker\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFC799\"\u003einject_hint\u003c/span\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFF\"\u003e:\u003c/span\u003e\u003cspan style=\"--shiki-light:#1976D2;--shiki-dark:#FFC799\"\u003e true\u003c/span\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e # bind the directory::pre-generate search-hint hook\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFC799\"\u003ehint_min_workers\u003c/span\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFF\"\u003e:\u003c/span\u003e\u003cspan style=\"--shiki-light:#1976D2;--shiki-dark:#FFC799\"\u003e 2\u003c/span\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e # minimum surface width before the hint fires (0 = always)\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFC799\"\u003eregistry_search\u003c/span\u003e\u003cspan style=\"--shiki-light:#D32F2F;--shiki-dark:#FFF\"\u003e:\u003c/span\u003e\u003cspan style=\"--shiki-light:#1976D2;--shiki-dark:#FFC799\"\u003e true\u003c/span\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e # include installable registry workers in every search\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe \u003ccode class=\"readme-inline-code\"\u003eskills_folder\u003c/code\u003e is created on first download if it doesn\u0026#39;t exist.\u003c/p\u003e\n\u003ch3 id=\"zero-config-default-seed\" class=\"scroll-mt-20\"\u003eZero-config default + seed\u003c/h3\u003e\n\u003cp\u003eWith no seed and no stored value the worker uses built-in defaults\n(\u003ccode class=\"readme-inline-code\"\u003eskills_folder: ~/.iii/skills\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eregistry_url: https://api.workers.iii.dev\u003c/code\u003e).\nPass \u003ccode class=\"readme-inline-code\"\u003e--config \u003cpath\u003e\u003c/code\u003e to supply a YAML seed: when present and no value is\nstored yet, its contents become \u003ccode class=\"readme-inline-code\"\u003einitial_value\u003c/code\u003e on \u003ccode class=\"readme-inline-code\"\u003econfiguration::register\u003c/code\u003e\n(see \u003ca href=\"config.yaml.example\"\u003e\u003ccode class=\"readme-inline-code\"\u003econfig.yaml.example\u003c/code\u003e\u003c/a\u003e). Engine-managed deployments\ninline the config under the worker entry; the engine delivers it via \u003ccode class=\"readme-inline-code\"\u003e--config\u003c/code\u003e.\u003c/p\u003e\n\u003ch3 id=\"hot-reload\" class=\"scroll-mt-20\"\u003eHot reload\u003c/h3\u003e\n\u003cp\u003eOn \u003ccode class=\"readme-inline-code\"\u003econfiguration::set\u003c/code\u003e (or an external edit to the persisted file), the worker\nre-fetches the authoritative value. Tunable changes apply in place and the\nregistry caches are cleared so a repointed \u003ccode class=\"readme-inline-code\"\u003eregistry_url\u003c/code\u003e takes effect\nimmediately. Topology changes (\u003ccode class=\"readme-inline-code\"\u003eskills_folder\u003c/code\u003e / \u003ccode class=\"readme-inline-code\"\u003elocal_skills_folder\u003c/code\u003e /\n\u003ccode class=\"readme-inline-code\"\u003eagents_skills_folder\u003c/code\u003e / \u003ccode class=\"readme-inline-code\"\u003eauto_download\u003c/code\u003e) are refused with a \u0026quot;restart\nrequired\u0026quot; log; the previous configuration is kept until the worker restarts.\u003c/p\u003e\n\u003cp\u003eBoth folder settings are also watch roots, and the watcher creates each one at\nboot if it is missing (so a fresh install is watched rather than silently\nunwatched until the next restart). \u003ccode class=\"readme-inline-code\"\u003eagents_skills_folder\u003c/code\u003e is a watch root too,\nbut only when it already exists — the worker never creates (or writes)\nanything under it. Install your first agents skill while the worker is\nrunning and that root stays unwatched until the next restart: reads still\nserve it, since every read re-scans disk, but the live \u003ccode class=\"readme-inline-code\"\u003eexternal\u003c/code\u003e doorbell\nis missing until then. \u003ccode class=\"readme-inline-code\"\u003elocal_skills_folder\u003c/code\u003e defaults to the\nCWD-relative \u003ccode class=\"readme-inline-code\"\u003e./.iii/skills\u003c/code\u003e, so expect an empty \u003ccode class=\"readme-inline-code\"\u003e.iii/skills\u003c/code\u003e directory to\nappear in whatever working directory the engine launches the worker from. An\nempty local root shadows nothing. Because both are restart-required, the watch\nroots are fixed for the process lifetime.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"quickstart-download-some-skills\" class=\"scroll-mt-20\"\u003eQuickstart: download some skills\u003c/h2\u003e\n\u003cpre class=\"shiki shiki-themes min-light vesper\" style=\"--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010\" tabindex=\"0\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# Pull a specific worker's skills + prompts at a fixed semver from\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# the registry. Files land under `\u0026#x3C;skills_folder\u003e/agent-memory/`.\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#FFC799\"\u003eiii\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e trigger\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --function-id=directory::skills::download\u003c/span\u003e\u003cspan style=\"--shiki-light:#24292EFF;--shiki-dark:#A0A0A0\"\u003e \\\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --payload=\u003c/span\u003e\u003cspan style=\"--shiki-light:#22863A;--shiki-dark:#99FFE4\"\u003e'{\"worker\": \"agent-memory\", \"version\": \"1.2.3\"}'\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# Same, but always fetch whatever's tagged `latest` (also the default\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# when neither version nor tag is given).\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#FFC799\"\u003eiii\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e trigger\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --function-id=directory::skills::download\u003c/span\u003e\u003cspan style=\"--shiki-light:#24292EFF;--shiki-dark:#A0A0A0\"\u003e \\\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --payload=\u003c/span\u003e\u003cspan style=\"--shiki-light:#22863A;--shiki-dark:#99FFE4\"\u003e'{\"worker\": \"agent-memory\"}'\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# Pull a single subfolder out of a public GitHub repo via\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# `git clone --depth 1 --branch main`. Files land under\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# `\u0026#x3C;skills_folder\u003e/frontend-design/`. The `branch` field defaults to\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# `main`; pass `\"master\"` for older repos that haven't migrated.\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#FFC799\"\u003eiii\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e trigger\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --function-id=directory::skills::download\u003c/span\u003e\u003cspan style=\"--shiki-light:#24292EFF;--shiki-dark:#A0A0A0\"\u003e \\\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --payload=\u003c/span\u003e\u003cspan style=\"--shiki-light:#22863A;--shiki-dark:#99FFE4\"\u003e'{\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#22863A;--shiki-dark:#99FFE4\"\u003e \"repo\": \"https://github.com/anthropics/skills\",\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#22863A;--shiki-dark:#99FFE4\"\u003e \"skill\": \"frontend-design\"\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#22863A;--shiki-dark:#99FFE4\"\u003e }'\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe response is\n\u003ccode class=\"readme-inline-code\"\u003e{ namespace, skills_written, prompts_written, system_prompts_written, source }\u003c/code\u003e\nwhere \u003ccode class=\"readme-inline-code\"\u003eskills_written\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eprompts_written\u003c/code\u003e, and \u003ccode class=\"readme-inline-code\"\u003esystem_prompts_written\u003c/code\u003e\nare arrays of relative paths / prompt names that were materialised in\nthis run.\u003c/p\u003e\n\u003cp\u003eAfter every successful download the worker fires the\n\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::on-change\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::on-change\u003c/code\u003e,\nand/or \u003ccode class=\"readme-inline-code\"\u003edirectory::system-prompts::on-change\u003c/code\u003e trigger types so that\nsubscribers like the \u003ca href=\"https://github.com/iii-hq/workers/tree/main/mcp\"\u003e\u003ccode class=\"readme-inline-code\"\u003emcp\u003c/code\u003e\u003c/a\u003e worker can\nforward MCP \u003ccode class=\"readme-inline-code\"\u003enotifications/list_changed\u003c/code\u003e to their clients.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"on-disk-layout\" class=\"scroll-mt-20\"\u003eOn-disk layout\u003c/h2\u003e\n\u003cp\u003eThe worker assumes a fixed layout under \u003ccode class=\"readme-inline-code\"\u003eskills_folder\u003c/code\u003e:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eskills_folder/\n \u0026lt;namespace\u0026gt;/ # one folder per `directory::skills::download` namespace\n index.md # → iii://\u0026lt;namespace\u0026gt;/index\n contacts.md # → iii://\u0026lt;namespace\u0026gt;/contacts\n emails/send-email.md # → iii://\u0026lt;namespace\u0026gt;/emails/send-email\n prompts/ # ← magic marker for command templates\n send-email.md # ← MCP slash-command (needs YAML frontmatter)\n triage.md\n system-prompts/ # ← magic marker for system prompts\n reviewer.md # ← identity prompt (needs YAML frontmatter)\n prompts/ # top level works too — the marker is the\n quick-note.md # segment, not its depth\n system-prompts/ # ← where system-prompts::create writes\n pirate.md\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eA second, READ-ONLY root — \u003ccode class=\"readme-inline-code\"\u003eagents_skills_folder\u003c/code\u003e (default\n\u003ccode class=\"readme-inline-code\"\u003e~/.agents/skills\u003c/code\u003e) — serves system-installed agent skills. It is\nscanned \u003cstrong\u003eshallowly\u003c/strong\u003e: only \u003ccode class=\"readme-inline-code\"\u003e\u003cskill-dir\u003e/SKILL.md\u003c/code\u003e becomes an entry\n(id \u003ccode class=\"readme-inline-code\"\u003e\u003cskill-dir\u003e/index\u003c/code\u003e, displayed as \u003ccode class=\"readme-inline-code\"\u003e\u003cskill-dir\u003e\u003c/code\u003e); a skill\u0026#39;s\n\u003ccode class=\"readme-inline-code\"\u003ereference/\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003escripts/\u003c/code\u003e, or other support payload is never listed. A\nmissing directory is silently empty. These skills bypass\n\u003ccode class=\"readme-inline-code\"\u003efilter_unregistered\u003c/code\u003e (their namespaces are skills, not workers), stay\nout of \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::index\u003c/code\u003e (a per-WORKER surface), and are\nrefused by \u003ccode class=\"readme-inline-code\"\u003eupdate\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003edelete\u003c/code\u003e — edit them with their owning tool, or\ncopy one into \u003ccode class=\"readme-inline-code\"\u003eskills_folder\u003c/code\u003e on disk to fork it. Precedence is\n\u003ccode class=\"readme-inline-code\"\u003elocal_skills_folder\u003c/code\u003e \u0026gt; \u003ccode class=\"readme-inline-code\"\u003eskills_folder\u003c/code\u003e \u0026gt; \u003ccode class=\"readme-inline-code\"\u003eagents_skills_folder\u003c/code\u003e,\nnamespace-wise: a top-level namespace directory in a higher root\nshadows the same namespace below.\u003c/p\u003e\n\u003cp\u003eA few rules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSkill ids\u003c/strong\u003e are the relative path under \u003ccode class=\"readme-inline-code\"\u003eskills_folder\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003e.md\u003c/code\u003e\nstripped. Each segment must satisfy \u003ccode class=\"readme-inline-code\"\u003e[a-z0-9_-]{1,64}\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSkill frontmatter is optional.\u003c/strong\u003e When present, the reader honours\nthree keys: \u003ccode class=\"readme-inline-code\"\u003etitle:\u003c/code\u003e (used by \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::list\u003c/code\u003e and\n\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::get\u003c/code\u003e in preference to a body \u003ccode class=\"readme-inline-code\"\u003e# H1\u003c/code\u003e), \u003ccode class=\"readme-inline-code\"\u003ename:\u003c/code\u003e\n(title fallback when \u003ccode class=\"readme-inline-code\"\u003etitle:\u003c/code\u003e is absent — the \u003ccode class=\"readme-inline-code\"\u003e~/.agents/skills\u003c/code\u003e\nconvention), and \u003ccode class=\"readme-inline-code\"\u003etype:\u003c/code\u003e (free-form classifier surfaced verbatim on\nboth responses). Any other YAML keys are ignored.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePrompts\u003c/strong\u003e live under any \u003ccode class=\"readme-inline-code\"\u003e*/prompts/*.md\u003c/code\u003e path. They must start with\na YAML frontmatter block declaring at least \u003ccode class=\"readme-inline-code\"\u003edescription\u003c/code\u003e; \u003ccode class=\"readme-inline-code\"\u003ename\u003c/code\u003e\nis optional and overrides the file-stem default.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSystem prompts\u003c/strong\u003e live under any \u003ccode class=\"readme-inline-code\"\u003e*/system-prompts/*.md\u003c/code\u003e path, with\nthe same frontmatter rule as prompts (\u003ccode class=\"readme-inline-code\"\u003edescription\u003c/code\u003e required, \u003ccode class=\"readme-inline-code\"\u003ename\u003c/code\u003e\noptional). A path carrying both a \u003ccode class=\"readme-inline-code\"\u003eprompts\u003c/code\u003e and a \u003ccode class=\"readme-inline-code\"\u003esystem-prompts\u003c/code\u003e\nsegment, in either order, is a system prompt — \u003ccode class=\"readme-inline-code\"\u003esystem-prompts\u003c/code\u003e wins\nprecedence so every path classifies as exactly one kind.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWhat a system prompt can do, by design.\u003c/strong\u003e The console\u0026#39;s chat picker\ncan send a selected system prompt with\n\u003ccode class=\"readme-inline-code\"\u003esystem_prompt_strategy: \"override\"\u003c/code\u003e, which replaces the harness\u0026#39;s\nbuilt-in identity prompt with that file\u0026#39;s body verbatim. Files reach\n\u003ccode class=\"readme-inline-code\"\u003esystem-prompts/\u003c/code\u003e either by local authoring or via\n\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::download\u003c/code\u003e from a git repo or the registry, so a\ndownloaded bundle can supply one. This is an accepted property, not a\nhole: it takes a deliberate selection in the UI, the same UI already\naccepts arbitrary typed text, and the operator owns \u003ccode class=\"readme-inline-code\"\u003eskills_folder\u003c/code\u003e.\nWorth knowing before you point \u003ccode class=\"readme-inline-code\"\u003eskills_folder\u003c/code\u003e at a directory other\npeople can write to.\u003c/li\u003e\n\u003cli\u003eFiles anywhere else (i.e. \u003cem\u003enot\u003c/em\u003e in a \u003ccode class=\"readme-inline-code\"\u003eprompts/\u003c/code\u003e or \u003ccode class=\"readme-inline-code\"\u003esystem-prompts/\u003c/code\u003e\nsegment) are skills.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe download function namespaces by source:\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eSource\u003c/th\u003e\n\u003cth\u003eDestination\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003erepo=URL skill=NAME branch?=main\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e\u003cskills_folder\u003e/\u003cNAME\u003e/...\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eworker=NAME version=…\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e\u003cskills_folder\u003e/\u003cNAME\u003e/...\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eworker=NAME tag=…\u003c/code\u003e (default \u003ccode class=\"readme-inline-code\"\u003etag=latest\u003c/code\u003e)\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e\u003cskills_folder\u003e/\u003cNAME\u003e/...\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003cp\u003eRe-pulling the same source overwrites files \u003cstrong\u003efile-by-file\u003c/strong\u003e —\nexisting siblings outside the response set are preserved (so\nhand-edited additions survive a re-pull).\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"skill-ids\" class=\"scroll-mt-20\"\u003eSkill ids\u003c/h2\u003e\n\u003cp\u003eSkills are addressed by their relative path under \u003ccode class=\"readme-inline-code\"\u003eskills_folder\u003c/code\u003e with\n\u003ccode class=\"readme-inline-code\"\u003e.md\u003c/code\u003e stripped — e.g. \u003ccode class=\"readme-inline-code\"\u003e\u003cskills_folder\u003e/agent-memory/observe.md\u003c/code\u003e →\nid \u003ccode class=\"readme-inline-code\"\u003e\"agent-memory/observe\"\u003c/code\u003e. The same string is what\n\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::list\u003c/code\u003e returns and what \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::get\u003c/code\u003e\nexpects in \u003ccode class=\"readme-inline-code\"\u003e{ \"id\": ... }\u003c/code\u003e. The legacy \u003ccode class=\"readme-inline-code\"\u003eiii://{id}\u003c/code\u003e link form is still\naccepted on \u003ccode class=\"readme-inline-code\"\u003eget\u003c/code\u003e (the prefix is auto-stripped), but the worker no\nlonger parses any other \u003ccode class=\"readme-inline-code\"\u003eiii://\u003c/code\u003e URI shape — bodies are read solely by\nid, and the auto-rendered tree-shaped index that previous releases\nserved at \u003ccode class=\"readme-inline-code\"\u003eiii://directory/skills\u003c/code\u003e is gone. Consumers that want a\ntree-shaped picker iterate \u003ccode class=\"readme-inline-code\"\u003elist\u003c/code\u003e rows themselves and indent by\n\u003ccode class=\"readme-inline-code\"\u003eid.matches('/').count()\u003c/code\u003e.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"functions\" class=\"scroll-mt-20\"\u003eFunctions\u003c/h2\u003e\n\u003cp\u003eTwenty-two functions, all under \u003ccode class=\"readme-inline-code\"\u003edirectory::*\u003c/code\u003e. All registrations are\nnamespace-clean; this worker is intentionally agnostic to MCP and any\nother adapter.\u003c/p\u003e\n\u003ch3 id=\"directoryskills-filesystem-reader-editor\" class=\"scroll-mt-20\"\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::*\u003c/code\u003e (filesystem reader + editor)\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFunction ID\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::download\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePull markdown into \u003ccode class=\"readme-inline-code\"\u003eskills_folder\u003c/code\u003e. Flexible alias accepting either source set: \u003ccode class=\"readme-inline-code\"\u003e{repo, skill, branch?}\u003c/code\u003e (defaults \u003ccode class=\"readme-inline-code\"\u003ebranch=main\u003c/code\u003e) or \u003ccode class=\"readme-inline-code\"\u003e{worker, version?|tag?}\u003c/code\u003e (defaults \u003ccode class=\"readme-inline-code\"\u003etag=latest\u003c/code\u003e). Prefer the two explicit forms below so the source is unambiguous.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::download_from_repo\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRepo-only form: \u003ccode class=\"readme-inline-code\"\u003e{repo, skill, branch?}\u003c/code\u003e. Copies one skill folder out of a GitHub repo, classifying each written file as a skill, a command template (\u003ccode class=\"readme-inline-code\"\u003eprompts/\u003c/code\u003e), or a system prompt (\u003ccode class=\"readme-inline-code\"\u003esystem-prompts/\u003c/code\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::download_from_registry\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRegistry-only form: \u003ccode class=\"readme-inline-code\"\u003e{worker, version?|tag?}\u003c/code\u003e. Installs a published worker\u0026#39;s bundle from \u003ccode class=\"readme-inline-code\"\u003eapi.workers.iii.dev\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::list\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnriched listing of every fs-backed skill: \u003ccode class=\"readme-inline-code\"\u003e{ id, title, type, description, bytes, modified_at }\u003c/code\u003e per row. \u003ccode class=\"readme-inline-code\"\u003etitle\u003c/code\u003e prefers the YAML frontmatter \u003ccode class=\"readme-inline-code\"\u003etitle:\u003c/code\u003e over the body H1, \u003ccode class=\"readme-inline-code\"\u003etype\u003c/code\u003e is lifted from frontmatter \u003ccode class=\"readme-inline-code\"\u003etype:\u003c/code\u003e (\u003ccode class=\"readme-inline-code\"\u003enull\u003c/code\u003e when absent), and \u003ccode class=\"readme-inline-code\"\u003edescription\u003c/code\u003e is the first paragraph of the body — so consumers can render a picker without a follow-up \u003ccode class=\"readme-inline-code\"\u003eget\u003c/code\u003e per row.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::get\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFetch one skill by id. Returns \u003ccode class=\"readme-inline-code\"\u003e{ id, title, type, description, path, body, modified_at }\u003c/code\u003e — same shape \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::list\u003c/code\u003e rows use, plus the raw markdown \u003ccode class=\"readme-inline-code\"\u003ebody\u003c/code\u003e and the absolute on-disk \u003ccode class=\"readme-inline-code\"\u003epath\u003c/code\u003e (its parent directory is the skill\u0026#39;s base directory, where payload like \u003ccode class=\"readme-inline-code\"\u003escripts/\u003c/code\u003e and \u003ccode class=\"readme-inline-code\"\u003ereference/\u003c/code\u003e lives — meaningful only to callers on this worker\u0026#39;s machine). Same title-resolution and \u003ccode class=\"readme-inline-code\"\u003etype\u003c/code\u003e precedence as \u003ccode class=\"readme-inline-code\"\u003elist\u003c/code\u003e. Accepts a bare id or the same id prefixed with \u003ccode class=\"readme-inline-code\"\u003eiii://\u003c/code\u003e. Pass \u003ccode class=\"readme-inline-code\"\u003eraw: true\u003c/code\u003e to additionally get the FULL on-disk file (frontmatter included) as \u003ccode class=\"readme-inline-code\"\u003eraw\u003c/code\u003e — the round-trip form \u003ccode class=\"readme-inline-code\"\u003eupdate\u003c/code\u003e takes.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::update\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOverwrite one EXISTING skill file with new full-file content: \u003ccode class=\"readme-inline-code\"\u003e{ id, content }\u003c/code\u003e where \u003ccode class=\"readme-inline-code\"\u003econtent\u003c/code\u003e is the edited \u003ccode class=\"readme-inline-code\"\u003eraw\u003c/code\u003e from \u003ccode class=\"readme-inline-code\"\u003eget { raw: true }\u003c/code\u003e. Validated against the read invariants (size cap, non-empty body after frontmatter); atomic write; fans out \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::on-change\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eop: \"update\"\u003c/code\u003e. Never creates files (use \u003ccode class=\"readme-inline-code\"\u003ecreate\u003c/code\u003e). Refuses read-only system-installed skills under \u003ccode class=\"readme-inline-code\"\u003eagents_skills_folder\u003c/code\u003e (\u003ccode class=\"readme-inline-code\"\u003eD116\u003c/code\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::create\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate a NEW skill file at \u003ccode class=\"readme-inline-code\"\u003e\u003cskills_folder\u003e/\u003cid\u003e.md\u003c/code\u003e from full-file content: \u003ccode class=\"readme-inline-code\"\u003e{ id, content }\u003c/code\u003e. Frontmatter is optional (same rules as \u003ccode class=\"readme-inline-code\"\u003eupdate\u003c/code\u003e: size cap, non-empty body). Refuses an \u003ccode class=\"readme-inline-code\"\u003eid\u003c/code\u003e that already resolves in the visible set — including the \u003ccode class=\"readme-inline-code\"\u003e\u003cid\u003e\u003c/code\u003e → \u003ccode class=\"readme-inline-code\"\u003e\u003cid\u003e/index\u003c/code\u003e overview alias and system-installed agents skills — or a target path that already exists on disk (\u003ccode class=\"readme-inline-code\"\u003eD114\u003c/code\u003e); an \u003ccode class=\"readme-inline-code\"\u003eid\u003c/code\u003e in a namespace reserved by a system-installed agents skill (\u003ccode class=\"readme-inline-code\"\u003eD115\u003c/code\u003e); and, while \u003ccode class=\"readme-inline-code\"\u003efilter_unregistered\u003c/code\u003e is on, an \u003ccode class=\"readme-inline-code\"\u003eid\u003c/code\u003e the visibility filter would immediately hide (\u003ccode class=\"readme-inline-code\"\u003eD115\u003c/code\u003e). Atomic write; fans out \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::on-change\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eop: \"create\"\u003c/code\u003e. Returns the same shape as \u003ccode class=\"readme-inline-code\"\u003eupdate\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::delete\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePermanently remove one EXISTING skill file by \u003ccode class=\"readme-inline-code\"\u003e{ id }\u003c/code\u003e (same id forms as \u003ccode class=\"readme-inline-code\"\u003eget\u003c/code\u003e). Resolves against the same visible set as \u003ccode class=\"readme-inline-code\"\u003elist\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003eget\u003c/code\u003e, refuses read-only system-installed skills under \u003ccode class=\"readme-inline-code\"\u003eagents_skills_folder\u003c/code\u003e (\u003ccode class=\"readme-inline-code\"\u003eD116\u003c/code\u003e), removes the file plus any parent directories left empty (so a deleted namespace can\u0026#39;t keep shadowing a lower-precedence root), and fans out \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::on-change\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eop: \"delete\"\u003c/code\u003e. Returns \u003ccode class=\"readme-inline-code\"\u003e{ id }\u003c/code\u003e (the resolved on-disk id).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::index\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRender one short markdown entry per installed worker (skills with frontmatter \u003ccode class=\"readme-inline-code\"\u003etype: index\u003c/code\u003e). Returns \u003ccode class=\"readme-inline-code\"\u003e{ body, workers_count }\u003c/code\u003e where \u003ccode class=\"readme-inline-code\"\u003ebody\u003c/code\u003e is a ready-to-paste page: \u003ccode class=\"readme-inline-code\"\u003e# Skills index\u003c/code\u003e, then one \u003ccode class=\"readme-inline-code\"\u003e## \u003cworker title\u003e\u003c/code\u003e heading + the worker\u0026#39;s first overview paragraph + a \u003ccode class=\"readme-inline-code\"\u003eRead iii://\u003cns\u003e/index\u003c/code\u003e pointer the agent can follow with \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::get\u003c/code\u003e. Token-light by design; use \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::list\u003c/code\u003e for per-skill rows.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003ch3 id=\"directoryprompts-filesystem-reader-editor\" class=\"scroll-mt-20\"\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::*\u003c/code\u003e (filesystem reader + editor)\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFunction ID\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::list\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMetadata-only listing of every fs-backed prompt.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::get\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFetch one prompt\u0026#39;s body + \u003ccode class=\"readme-inline-code\"\u003e{name, description, modified_at}\u003c/code\u003e. Plain shape, no envelope. Pass \u003ccode class=\"readme-inline-code\"\u003eraw: true\u003c/code\u003e to additionally get the FULL on-disk file (frontmatter included) as \u003ccode class=\"readme-inline-code\"\u003eraw\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::update\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOverwrite one EXISTING prompt file with new full-file content: \u003ccode class=\"readme-inline-code\"\u003e{ name, content }\u003c/code\u003e. The frontmatter must keep a non-empty \u003ccode class=\"readme-inline-code\"\u003edescription\u003c/code\u003e (and a valid \u003ccode class=\"readme-inline-code\"\u003ename\u003c/code\u003e when declared) — the same rules the scanner enforces. Atomic write; fans out \u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::on-change\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eop: \"update\"\u003c/code\u003e. Returns the prompt\u0026#39;s effective name after the write.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::create\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate a NEW command-template prompt file at \u003ccode class=\"readme-inline-code\"\u003e\u003cskills_folder\u003e/prompts/\u003cname\u003e.md\u003c/code\u003e from full-file content: \u003ccode class=\"readme-inline-code\"\u003e{ name, content }\u003c/code\u003e, where \u003ccode class=\"readme-inline-code\"\u003econtent\u003c/code\u003e is the FULL file including frontmatter. The frontmatter must carry a non-empty \u003ccode class=\"readme-inline-code\"\u003edescription\u003c/code\u003e (and a \u003ccode class=\"readme-inline-code\"\u003ename\u003c/code\u003e matching the request, when declared) — the same rules \u003ccode class=\"readme-inline-code\"\u003eupdate\u003c/code\u003e enforces. Refuses a \u003ccode class=\"readme-inline-code\"\u003ename\u003c/code\u003e that already exists anywhere in the merged command-prompt scan, and a target path that already exists on disk even if the scanner would skip it. Atomic write; fans out \u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::on-change\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eop: \"create\"\u003c/code\u003e. Returns \u003ccode class=\"readme-inline-code\"\u003e{ name, description, bytes, modified_at }\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::delete\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePermanently remove one EXISTING command-template prompt file by \u003ccode class=\"readme-inline-code\"\u003e{ name }\u003c/code\u003e. Resolves against the same merged scan as \u003ccode class=\"readme-inline-code\"\u003elist\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003eget\u003c/code\u003e, fans out \u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::on-change\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eop: \"delete\"\u003c/code\u003e, and returns \u003ccode class=\"readme-inline-code\"\u003e{ name }\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003ch3 id=\"directorysystem-prompts-filesystem-reader-editor\" class=\"scroll-mt-20\"\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::system-prompts::*\u003c/code\u003e (filesystem reader + editor)\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFunction ID\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::system-prompts::list\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMetadata-only listing of every fs-backed system prompt.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::system-prompts::get\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFetch one system prompt\u0026#39;s body + \u003ccode class=\"readme-inline-code\"\u003e{name, description, modified_at}\u003c/code\u003e. Plain shape, no envelope. Pass \u003ccode class=\"readme-inline-code\"\u003eraw: true\u003c/code\u003e to additionally get the FULL on-disk file (frontmatter included) as \u003ccode class=\"readme-inline-code\"\u003eraw\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::system-prompts::update\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOverwrite one EXISTING system prompt file with new full-file content: \u003ccode class=\"readme-inline-code\"\u003e{ name, content }\u003c/code\u003e. The frontmatter must keep a non-empty \u003ccode class=\"readme-inline-code\"\u003edescription\u003c/code\u003e (and a valid \u003ccode class=\"readme-inline-code\"\u003ename\u003c/code\u003e when declared) — the same rules the scanner enforces. Atomic write; fans out \u003ccode class=\"readme-inline-code\"\u003edirectory::system-prompts::on-change\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eop: \"update\"\u003c/code\u003e. Returns the system prompt\u0026#39;s effective name after the write.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::system-prompts::create\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCreate a NEW system prompt file at \u003ccode class=\"readme-inline-code\"\u003e\u003cskills_folder\u003e/system-prompts/\u003cname\u003e.md\u003c/code\u003e from full-file content: \u003ccode class=\"readme-inline-code\"\u003e{ name, content }\u003c/code\u003e, where \u003ccode class=\"readme-inline-code\"\u003econtent\u003c/code\u003e is the FULL file including frontmatter. The frontmatter must carry a non-empty \u003ccode class=\"readme-inline-code\"\u003edescription\u003c/code\u003e (and a \u003ccode class=\"readme-inline-code\"\u003ename\u003c/code\u003e matching the request, when declared) — the same rules \u003ccode class=\"readme-inline-code\"\u003eupdate\u003c/code\u003e enforces. Refuses a \u003ccode class=\"readme-inline-code\"\u003ename\u003c/code\u003e that already exists anywhere in the merged system-prompt scan, and a target path that already exists on disk even if the scanner would skip it. Atomic write; fans out \u003ccode class=\"readme-inline-code\"\u003edirectory::system-prompts::on-change\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eop: \"create\"\u003c/code\u003e. Returns \u003ccode class=\"readme-inline-code\"\u003e{ name, description, bytes, modified_at }\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::system-prompts::delete\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePermanently remove one EXISTING system prompt file by \u003ccode class=\"readme-inline-code\"\u003e{ name }\u003c/code\u003e. Resolves against the same merged scan as \u003ccode class=\"readme-inline-code\"\u003elist\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003eget\u003c/code\u003e, fans out \u003ccode class=\"readme-inline-code\"\u003edirectory::system-prompts::on-change\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eop: \"delete\"\u003c/code\u003e, and returns \u003ccode class=\"readme-inline-code\"\u003e{ name }\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003ch3 id=\"engine-introspection-native-plus-one-wrapper\" class=\"scroll-mt-20\"\u003eEngine introspection (native, plus one wrapper)\u003c/h3\u003e\n\u003cp\u003eEngine introspection is served natively; call these ids directly — every\none takes the same filters (\u003ccode class=\"readme-inline-code\"\u003eprefix\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003esearch\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eworker\u003c/code\u003e,\n\u003ccode class=\"readme-inline-code\"\u003einclude_internal\u003c/code\u003e where applicable). One wrapper is kept for callers\nwhose policy only admits the \u003ccode class=\"readme-inline-code\"\u003edirectory::\u003c/code\u003e namespace:\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFunction ID\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::engine::functions::info\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eThin proxy to \u003ccode class=\"readme-inline-code\"\u003eengine::functions::info\u003c/code\u003e for a single \u003ccode class=\"readme-inline-code\"\u003efunction_id\u003c/code\u003e: request/response schemas, metadata, and registered triggers. The one \u003ccode class=\"readme-inline-code\"\u003edirectory::engine::*\u003c/code\u003e helper that still exists — reach for it only when you cannot call \u003ccode class=\"readme-inline-code\"\u003eengine::*\u003c/code\u003e directly.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003cp\u003eThe native ids:\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFunction ID\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eengine::functions::list\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eList functions registered with the engine.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eengine::functions::info\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSingle-function detail: schemas, owning worker.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eengine::triggers::list\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eList trigger TYPES (the providers, e.g. \u003ccode class=\"readme-inline-code\"\u003ehttp\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ecron\u003c/code\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eengine::triggers::info\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSingle trigger-type detail: configuration schema, return schema.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eengine::registered-triggers::list\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eList trigger INSTANCES (subscriber rows).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eengine::registered-triggers::info\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSingle registered-trigger detail.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eengine::workers::list\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eList workers with an open engine WS connection. Daemon-managed providers (\u003ccode class=\"readme-inline-code\"\u003ehttp\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ecron\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003estate\u003c/code\u003e) won\u0026#39;t appear — call \u003ccode class=\"readme-inline-code\"\u003eworker::list\u003c/code\u003e from the supervisor to see those.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eengine::workers::info\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOne worker\u0026#39;s detail by \u003ccode class=\"readme-inline-code\"\u003ename\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003ch3 id=\"directoryregistry-workers-registry-http-proxy\" class=\"scroll-mt-20\"\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::registry::*\u003c/code\u003e (workers registry HTTP proxy)\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFunction ID\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::registry::workers::list\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBrowse / search published workers in \u003ccode class=\"readme-inline-code\"\u003eapi.workers.iii.dev\u003c/code\u003e. Optional free-text \u003ccode class=\"readme-inline-code\"\u003esearch\u003c/code\u003e (matched fuzzy by \u003ccode class=\"readme-inline-code\"\u003epg_trgm\u003c/code\u003e) and opaque \u003ccode class=\"readme-inline-code\"\u003ecursor\u003c/code\u003e for pagination; page size is server-authored. Response is \u003ccode class=\"readme-inline-code\"\u003e{ workers: [...], pagination: { next_cursor, has_more, page_size } }\u003c/code\u003e. Shares the core \u003ccode class=\"readme-inline-code\"\u003ename\u003c/code\u003e / \u003ccode class=\"readme-inline-code\"\u003edescription\u003c/code\u003e / \u003ccode class=\"readme-inline-code\"\u003eversion\u003c/code\u003e fields with the engine\u0026#39;s \u003ccode class=\"readme-inline-code\"\u003eengine::workers::list\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::registry::workers::info\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFull registry detail for one worker. Fans out two parallel registry calls — \u003ccode class=\"readme-inline-code\"\u003eGET /w/{slug}\u003c/code\u003e for the worker envelope (publication metadata + readme + functions + triggers) and \u003ccode class=\"readme-inline-code\"\u003eGET /w/{slug}/skills\u003c/code\u003e for the skills/prompts tree — and merges them into \u003ccode class=\"readme-inline-code\"\u003e{ worker, readme, api_reference, skills_tree }\u003c/code\u003e. The user-facing input still accepts \u003ccode class=\"readme-inline-code\"\u003eversion:\u003c/code\u003e (semver) or \u003ccode class=\"readme-inline-code\"\u003etag:\u003c/code\u003e (e.g. \u003ccode class=\"readme-inline-code\"\u003elatest\u003c/code\u003e); both go on the wire as \u003ccode class=\"readme-inline-code\"\u003e?version=…\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003cp\u003eBoth \u003ccode class=\"readme-inline-code\"\u003edirectory::registry::*\u003c/code\u003e responses are cached in-process for\n\u003ccode class=\"readme-inline-code\"\u003eregistry_cache_ttl_ms\u003c/code\u003e (default 60s).\u003c/p\u003e\n\u003cp\u003eThere is \u003cstrong\u003eno\u003c/strong\u003e \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::register\u003c/code\u003e /\n\u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::register\u003c/code\u003e — see\n\u003ca href=\"#migration-from-skills-v02x\"\u003eMigration\u003c/a\u003e below.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"function-search-pre-generate-hint\" class=\"scroll-mt-20\"\u003eFunction search \u0026amp; pre-generate hint\u003c/h2\u003e\n\u003cp\u003eOne-shot lexical function search over the live engine catalog, absorbed from\nthe former \u003ccode class=\"readme-inline-code\"\u003ediscovery\u003c/code\u003e worker. One natural-language query returns the API\nreference of only the relevant functions, grouped by worker in rank order —\nthe model\u0026#39;s next step is calling them directly instead of walking the engine\ncatalog with \u003ccode class=\"readme-inline-code\"\u003eengine::functions::list\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003einfo\u003c/code\u003e.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFunction\u003c/th\u003e\n\u003cth\u003eKind\u003c/th\u003e\n\u003cth\u003eWhat it does\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::search_functions\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003epublic\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e{ query }\u003c/code\u003e → \u003ccode class=\"readme-inline-code\"\u003e{ guidance, workers[], installable[]?, latency_ms }\u003c/code\u003e: BM25 rank over the live engine catalog (at most 3 workers / 12 contracts) plus matching NOT-installed registry workers under \u003ccode class=\"readme-inline-code\"\u003einstallable\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::pre-generate\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003einternal hook\u003c/td\u003e\n\u003ctd\u003eInjects the conditional search hint into a harness generation (at most once per session).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::on-functions-change\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003einternal\u003c/td\u003e\n\u003ctd\u003eRefreshes the search catalog on the engine\u0026#39;s functions-available push.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::hint-preview\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003einternal\u003c/td\u003e\n\u003ctd\u003eThe exact hint text per exposure mode, for the configuration UI.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003cp\u003eRanking pipeline:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eCorpus\u003c/strong\u003e: the live engine catalog (boot snapshot + push refresh),\nslimmed to name + first description sentence + argument names. \u003ccode class=\"readme-inline-code\"\u003eengine::\u003c/code\u003e\nids, functions published with \u003ccode class=\"readme-inline-code\"\u003emetadata.internal\u003c/code\u003e, and the search itself\nnever participate — the worker\u0026#39;s own public \u003ccode class=\"readme-inline-code\"\u003edirectory::*\u003c/code\u003e functions are\nsearchable like any other capability.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eScoring\u003c/strong\u003e: Okapi BM25 (k1 1.2, b 0.75) with the function name indexed at\n3× weight, camelCase segmentation (\u003ccode class=\"readme-inline-code\"\u003epresignUrl\u003c/code\u003e → presign + url), a\n22-word grammatical stoplist, conservative plural folding, JSON-key\nstripping from the query, and a two-distinct-terms minimum match.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMulti-intent queries\u003c/strong\u003e: clauses split on list punctuation and \u0026quot;and\u0026quot;\n(only when both sides keep two informative terms) are ranked on their own\nleaders with a fair share of the function cap.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePruning\u003c/strong\u003e: coverage-aware function floor (≥50% of the leader AND full\nterm coverage or ≥85% score) drops same-worker family riders; a\nnamespace-level floor (40% of the leader) drops trailing workers.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRegistry search\u003c/strong\u003e (\u003ccode class=\"readme-inline-code\"\u003eregistry_search\u003c/code\u003e, default on): every call also\nconsults the public workers registry in-process (full query, then\ninformative terms, all concurrent; verified authors only; candidates\nmerged round-robin across query variants) and returns up to 2 workers / 6\ncontracts that WOULD match if installed, with \u003ccode class=\"readme-inline-code\"\u003eworker::add\u003c/code\u003e guidance.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSession memory\u003c/strong\u003e (keyed by caller-supplied OTel baggage, fail-open):\nrepeat queries omit contracts already delivered; two consecutive empty\nanswers widen the next one to single-term matches.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eThe pre-generate hook appends one \u003ccode class=\"readme-inline-code\"\u003e\u003cdiscovery_assist\u003e\u003c/code\u003e block pointing the\nmodel at \u003ccode class=\"readme-inline-code\"\u003esearch_functions\u003c/code\u003e — at most once per session, and only when every\ngate clears: the function is callable in the surface, no search result is in\nthe window yet, the surface spans at least \u003ccode class=\"readme-inline-code\"\u003ehint_min_workers\u003c/code\u003e distinct\nworkers, the current task (from the latest user message) has no real function\nresults yet, and it does not already name a callable function id. Measured on\n26 pre-existing e2e scenarios: an unconditional hint \u003cem\u003einduces\u003c/em\u003e redundant\ndiscovery on guided tasks (up to +110% tokens); the gates are what make\ndefault-on affordable. The hook\u0026#39;s transcript annotations (\u003ccode class=\"readme-inline-code\"\u003eorigin.directory\u003c/code\u003e)\ncarry only coarse outcome/reason and counts.\u003c/p\u003e\n\u003cp\u003eKnobs (\u003ccode class=\"readme-inline-code\"\u003einject_hint\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ehint_min_workers\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eregistry_search\u003c/code\u003e) live in the\n\u003ccode class=\"readme-inline-code\"\u003eiii-directory\u003c/code\u003e configuration entry and hot-apply — see Configuration.\u003c/p\u003e\n\u003ch2 id=\"custom-trigger-types\" class=\"scroll-mt-20\"\u003eCustom trigger types\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eTrigger type\u003c/th\u003e\n\u003cth\u003eFires when\u003c/th\u003e\n\u003cth\u003ePayload to subscribers\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::skills::on-change\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAfter a \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::download\u003c/code\u003e that wrote at least one skill markdown file, a \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::update\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ecreate\u003c/code\u003e, or \u003ccode class=\"readme-inline-code\"\u003edelete\u003c/code\u003e, or external (file pasted/edited/deleted directly on disk — including under \u003ccode class=\"readme-inline-code\"\u003eagents_skills_folder\u003c/code\u003e)\u003c/td\u003e\n\u003ctd\u003edownload: \u003ccode class=\"readme-inline-code\"\u003e{ \"op\": \"download\", \"namespace\": \"\u003cns\u003e\", \"source\": \"repo\" | \"registry\" }\u003c/code\u003e; update/create/delete: \u003ccode class=\"readme-inline-code\"\u003e{ \"op\": \"\u003coperation\u003e\", \"namespace\": \"\u003cns\u003e\", \"id\": \"\u003cid\u003e\" }\u003c/code\u003e; external (file pasted/edited/deleted directly on disk): \u003ccode class=\"readme-inline-code\"\u003e{ \"op\": \"external\" }\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::on-change\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAfter a \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::download\u003c/code\u003e that wrote at least one prompt markdown file, a \u003ccode class=\"readme-inline-code\"\u003edirectory::prompts::update\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ecreate\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003edelete\u003c/code\u003e, or external (file pasted/edited/deleted directly on disk)\u003c/td\u003e\n\u003ctd\u003edownload: \u003ccode class=\"readme-inline-code\"\u003e{ \"op\": \"download\", \"namespace\": \"\u003cns\u003e\", \"source\": \"repo\" | \"registry\" }\u003c/code\u003e; update/create/delete: \u003ccode class=\"readme-inline-code\"\u003e{ \"op\": \"\u003coperation\u003e\", \"name\": \"\u003cname\u003e\" }\u003c/code\u003e; external (file pasted/edited/deleted directly on disk): \u003ccode class=\"readme-inline-code\"\u003e{ \"op\": \"external\" }\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003edirectory::system-prompts::on-change\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAfter a \u003ccode class=\"readme-inline-code\"\u003edirectory::skills::download\u003c/code\u003e that wrote at least one system prompt markdown file, a \u003ccode class=\"readme-inline-code\"\u003edirectory::system-prompts::update\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003ecreate\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003edelete\u003c/code\u003e, or external file change\u003c/td\u003e\n\u003ctd\u003edownload: \u003ccode class=\"readme-inline-code\"\u003e{ \"op\": \"download\", \"namespace\": \"\u003cns\u003e\", \"source\": \"repo\" | \"registry\" }\u003c/code\u003e; update/create/delete: \u003ccode class=\"readme-inline-code\"\u003e{ \"op\": \"\u003coperation\u003e\", \"name\": \"\u003cname\u003e\" }\u003c/code\u003e; external: \u003ccode class=\"readme-inline-code\"\u003e{ \"op\": \"external\" }\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003cp\u003eDispatches are fire-and-forget (Void), so the write path doesn\u0026#39;t\nblock on downstream latency.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode class=\"readme-inline-code\"\u003eexternal\u003c/code\u003e op comes from a filesystem watch over \u003ccode class=\"readme-inline-code\"\u003eskills_folder\u003c/code\u003e,\n\u003ccode class=\"readme-inline-code\"\u003elocal_skills_folder\u003c/code\u003e, and (when it already exists) the read-only\n\u003ccode class=\"readme-inline-code\"\u003eagents_skills_folder\u003c/code\u003e. It is a doorbell, not a ledger: every read re-scans\ndisk, so a missed event costs a stale open view until the next call, never\ndata. A burst coalesces into one event per kind, and this worker\u0026#39;s own writes\nare suppressed — a \u003ccode class=\"readme-inline-code\"\u003ecreate\u003c/code\u003e or \u003ccode class=\"readme-inline-code\"\u003eupdate\u003c/code\u003e sends its precise op and never an\nextra \u003ccode class=\"readme-inline-code\"\u003eexternal\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eLoop hazard for subscribers.\u003c/strong\u003e Suppression covers writes made \u003cem\u003ethrough this\nworker\u003c/em\u003e. A subscriber that reacts to \u003ccode class=\"readme-inline-code\"\u003e{ \"op\": \"external\" }\u003c/code\u003e by writing \u003ccode class=\"readme-inline-code\"\u003e.md\u003c/code\u003e\nfiles under \u003ccode class=\"readme-inline-code\"\u003eskills_folder\u003c/code\u003e by some other route — a shell or coder worker, a\nscript — is not suppressed and will re-trigger itself. Either write through\n\u003ccode class=\"readme-inline-code\"\u003edirectory::*::update\u003c/code\u003e / \u003ccode class=\"readme-inline-code\"\u003ecreate\u003c/code\u003e, or make the reaction idempotent and gated.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"local-development-testing\" class=\"scroll-mt-20\"\u003eLocal development \u0026amp; testing\u003c/h2\u003e\n\u003ch3 id=\"run-from-source\" class=\"scroll-mt-20\"\u003eRun from source\u003c/h3\u003e\n\u003cpre class=\"shiki shiki-themes min-light vesper\" style=\"--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010\" tabindex=\"0\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# --config is an optional YAML seed (see config.yaml.example); omit it to\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# rely on the value stored in the `configuration` worker (or built-in defaults).\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#FFC799\"\u003ecargo\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e run\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --release\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --url\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e ws://127.0.0.1:49134\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --config\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e ./config.yaml.example\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"tests\" class=\"scroll-mt-20\"\u003eTests\u003c/h3\u003e\n\u003cpre class=\"shiki shiki-themes min-light vesper\" style=\"--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010\" tabindex=\"0\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# Fast, offline — exercises the pure helpers (markdown / id validators\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# / fs source) without needing an iii engine.\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#FFC799\"\u003ecargo\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e test\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --lib\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# Full BDD suite — requires an iii engine on ws://127.0.0.1:49134\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# (or III_ENGINE_WS_URL). The git-backed download scenarios spin up\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# a local fixture repo via `git init`; the registry-backed scenarios\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# point a wiremock server at the worker's `registry_url` config.\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#FFC799\"\u003ecargo\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e test\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# One feature group at a time. Available tags:\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#C2C3C5;--shiki-dark:#8B8B8B94\"\u003e# @engine @read @prompts @download @download_repo @download_registry\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"line\"\u003e\u003cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#FFC799\"\u003ecargo\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e test\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --test\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e bdd\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e --tags\u003c/span\u003e\u003cspan style=\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\"\u003e @download\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe BDD harness lives under \u003ca href=\"tests/\"\u003etests/\u003c/a\u003e. Feature files mirror the\nmodules in \u003ca href=\"src/functions/\"\u003esrc/functions/\u003c/a\u003e. Step definitions under\n\u003ca href=\"tests/steps/\"\u003etests/steps/\u003c/a\u003e drive each feature through the same\n\u003ccode class=\"readme-inline-code\"\u003eiii.trigger\u003c/code\u003e path the production binary uses.\u003c/p\u003e\n"])</script><script>self.__next_f.push([1,"31:[\"$\",\"div\",null,{\"className\":\"overflow-hidden rounded-xl border border-line bg-background\",\"children\":[[\"$\",\"div\",null,{\"className\":\"bg-panel flex min-h-11 items-center justify-between gap-x-3 border-b border-line px-5 sm:px-6\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-mono text-[10px] uppercase tracking-[0.08em] text-muted-foreground\",\"children\":\"README.md\"}],[\"$\",\"div\",null,{\"className\":\"shrink-0\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://api.workers.iii.dev/w/iii-directory/readme?version=1.2.3\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex items-center gap-x-1.5 text-[12px] font-medium text-muted-foreground transition-colors duration-150 hover:text-foreground\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Open as markdown\"}],[\"$\",\"$L16\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$18:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right size-3.5\",\"aria-hidden\":true}]]}]}]]}],[\"$\",\"div\",null,{\"className\":\"readme-prose px-5 py-6 sm:px-8 sm:py-7\",\"dangerouslySetInnerHTML\":{\"__html\":\"$47\"}}]]}]\n"])</script></body></html>