docs: iii is a language agnostic runtime, not a worker mesh - #934
Conversation
Replace "WebSocket-routed worker mesh" and "mesh of workers" with the canonical framing: iii is a language agnostic runtime where services, agents, and tools are composed of the same things: workers, triggers, and functions. Covers the seven per-agent iii runtime context prompts, the harness default prompt and README, the devin and grok docs, and the console Storybook fixtures. Line wrapping in harness/prompts/default.txt keeps the phrases that prompt tests assert on unbroken; the coder fixture keeps its 42-line length so numberWindow ranges still match. The three "worker mesh" strings left in iii-directory/tests/e2e assert on the upstream iii SKILL.md the test downloads at run time, so they must change with that document, not here. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The e2e suite pinned three assertions to the words "worker mesh" in the upstream iii SKILL.md it downloads at run time. Those strings were the old framing, so flip them: keep "registerWorker" as the real-content canary, and assert that neither the body nor the list description contains "mesh" at all. These three assertions FAIL until the upstream iii SKILL.md ships the new wording. That is deliberate: the test now guards the wording we want instead of the wording we are removing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
skill-check — worker0 verified, 66 skipped (no docs/).
Four for four. Nicely done. |
|
Warning Review limit reachedNext included review available in 56 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (17)
✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…runtime" "Runtime" now names what iii is, so reusing it for what the agent discovers at run time reads as two different things with one word. The image alt text and the grok prose now name the thing the agent actually lists: the live iii worker functionality. The devin skill bullet drops to "your iii workers" to match its own frontmatter. "the iii runtime context" stays as-is: that is the name of the `iii_context` feature, not a description of iii. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
@coderabbitai review |
|
Carry #934's language-agnostic-runtime paragraph into the bundled minimal identity, matching the embedded harness default. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j
…rebase The prompt-content revert carried the pre-rebase copy of default.txt, which silently undid #934's rephrase of the identity paragraph (and the runtime_model test rename). Re-applied from origin/main. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j
Carry #934's language-agnostic-runtime paragraph into the bundled minimal identity, matching the embedded harness default. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j
…rebase The prompt-content revert carried the pre-rebase copy of default.txt, which silently undid #934's rephrase of the identity paragraph (and the runtime_model test rename). Re-applied from origin/main. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j
Carry #934's language-agnostic-runtime paragraph into the bundled minimal identity, matching the embedded harness default. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j
…ts and bundled iii-minimal prompt (#966) * feat(harness): unify agent identity into one minimal discovery-first prompt Every agent — top-level sessions and spawned children alike — now gets the same embedded identity prompt; prompts/subagent.txt is deleted and leaf-ness is enforced by policy (CONTROL_PLANE_DENY), never by prompt text. The unified prompt is deliberately minimal: the agent_trigger contract, the mesh model, the discovery loop, payload/error rules, and the basic engine surface. Discovery defaults to directory::search_functions (the directory worker installs alongside the harness), with engine::functions::list as the explicit fallback; the agent_trigger tool description teaches the same order. Everything else — registry installs, coder routing, SDK docs, orchestration doctrine — is discovered at runtime or supplied by enrich layers. Prompt invariants rewritten: the identity may name only engine::* plus directory::search_functions; orchestration-process phrases stay banned and the retired sub-agent prompt must stay removed. Integration scenarios match the new identity line, and the iii skill teaches the compose::* lifecycle instead of the retired worker::* surface. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j * feat(iii-directory): retire discovery-hint default and teach compose-format installs inject_hint now defaults to false: the harness identity prompt bakes in directory::search_functions as the default discovery path, so the per-generation <discovery_assist> injection is redundant; the knob remains for deployments running a custom identity prompt without that doctrine. The UI search card's installable snippet drops the retired worker::add { source: { kind: registry, ... }, wait: false } shape for the compose::add { worker } call the backend already returns in its install field. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j * feat(iii-directory): point dead-end searches at the shipped skills route An empty directory::search_functions result only said "refine and search again" — a dead end when the capability is to BUILD something no function covers (authoring a worker, registering a new engine function). Both the no-match guidance and the installable "if none fit" clause now route the agent to directory::skills::list / ::get, where the worker-authoring how-to lives. Live-verified: an agent asked to register a function goes search → skills → SDK authoring → registered function, instead of reporting FAILED. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j * feat(harness): stored system-prompt default overrides the embedded identity A `default` entry in the directory's system-prompt store (<skills_folder>/system-prompts/default.md, served by directory::system-prompts::get) now overrides the embedded identity prompt for every NEW prompt composition — send, spawn, and the preview all resolve through prompt::effective_default. Editing or deleting the entry hot-applies on the next send; any store failure (directory absent, entry missing, blank body) falls back to the embedded prompt, so the override can never block a send. The preview names its source (embedded vs stored) so the console shows which default is active. Live-verified: create → preview and a real send carry the stored body; delete → embedded returns; sticky sessions keep their frozen prompt. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j * feat(iii-directory): copy-on-write editing for the built-in default prompt The System Prompts panel's harness/default entry was hard read-only. It is now editable: the built-in body is opened wrapped in default/description frontmatter, and saving CREATES the local system-prompts/default.md store entry — which the harness uses as the effective default identity — instead of failing on a nonexistent file. The built-in row hides once the local override exists (the local row replaces it; deleting the local entry brings the built-in back), and carries no delete action since there is no file behind it. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j * feat(harness): restore the full default prompt; ship the minimal one as iii-minimal prompts/default.txt returns to the original engine-grounded identity (the step-by-step default with the orchestration surface, registry flow, coder routing, and SDK gate); the single-prompt architecture stays — children still share this identity, subagent.txt stays removed, and the stored system-prompts/default override still wins when present. The minimal discovery-first identity moves to the directory prompt store as skills/system-prompts/iii-minimal.md: editable in the Directory panel, selectable in the chat picker, and usable as the stored default override by copying it over the default entry. Prompt content tests return to the original invariants, adapted to the single shipped prompt. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j * feat(iii-directory): ship iii-minimal as a bundled system prompt The minimal iii identity now travels WITH the worker: prompts/iii-minimal.md is embedded in the binary and seeded into <skills_folder>/system-prompts/ at boot whenever no file with that name exists — so every installation gets it, it stays a plain store file (editable in the Directory panel, selectable in the chat picker, usable as the stored default override), user edits persist across restarts, and deleting it brings the bundled copy back on the next boot. A read-only skills folder only warns; startup never blocks. Moves the file out of harness/skills (deployment-local) into the crate as the single source of truth. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j * feat(iii-directory): bundled prompts become built-in overlay entries Boot seeding is replaced by the harness-default pattern: a bundled prompt (iii-minimal) is always visible in system-prompts::list/::get — served from the binary with builtin: true while no local file exists, shadowed by a local file with the same name, and updating it copy-on-writes that local file (system-prompts::update creates it when the target is bundled). Deleting the local file falls back to the built-in IMMEDIATELY, in the same list call — no restart, no resurrection on disk. The panel renders builtin rows like the harness default (Built-in fine print, no delete action). Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j * fix(harness): restore main's language-agnostic-runtime framing after rebase The prompt-content revert carried the pre-rebase copy of default.txt, which silently undid #934's rephrase of the identity paragraph (and the runtime_model test rename). Re-applied from origin/main. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j * chore(harness): drop the downloaded iii skill from the repo harness/skills/iii is registry-downloaded runtime content (the .iii-skill-complete marker is the download receipt), not repo-owned source — it landed in the tree by accident and can be re-fetched through directory::skills::download at any time. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j * fix: address CodeRabbit review on identity-prompt defaults - prompt::effective_default now returns the resolved identity WITH its source; the system-prompt preview labels embedded vs stored from the lookup itself instead of comparing bodies (a stored default that duplicates the embedded text is still reported as stored), and the default_only contract documents that it returns the effective built-in layer with the part name stating the source. - directory::system-prompts::{list,get,update} contracts describe the worker-bundled builtin entries and the copy-on-write update path. - The Directory panel refuses to save the Harness default override under any name but `default` — a renamed draft would create an entry that overrides nothing. The stale-skill comment on harness/skills/iii/index.md is moot: the file was removed from the branch (registry-downloaded runtime content). Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j * docs(iii-directory): align iii-minimal framing with the runtime rephrase Carry #934's language-agnostic-runtime paragraph into the bundled minimal identity, matching the embedded harness default. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j * fix(harness): satisfy clippy single_element_loop in prompt tests The SUBAGENT-loop adaptations left two one-element for loops behind; CI runs clippy with --all-targets -D warnings and rejects them. Scoped blocks replace the loops. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j * fix: reconcile identity-prompt series with agent profile management (#965) Post-rebase adjustments: main's new build_options test call site gains the identity argument, and the spawn wire-schema golden is regenerated against the merged surface. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j * chore(harness): drop the runtime-authored agent profile from the tree harness/agents is the live stack's agents_folder — runtime content scooped into the branch by a broad add during conflict resolution, not repo source. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j * fix(harness): span-clean stored-default lookup The per-send directory::system-prompts::get error-stamped every turn trace on the fallback paths: function_not_found in directory-less deployments (the integration floor rejects turns with error spans — 19 scenarios red) and the handler's not-found miss in every no-override deployment. The lookup now climbs a span-clean ladder: engine::functions::list presence probe (fail-open, OK when the directory is absent), then directory::system-prompts::list existence check (OK either way), and only then the get. Behavior is unchanged wherever an override exists. Claude-Session: https://claude.ai/code/session_01N9eSbXVQXPieBiMFYc3p4j
What
Every place in this repo that described iii as a "mesh" now uses the canonical framing:
19 of 22
meshhits are gone; the 3 that remain are negative assertions that guard against the word coming back.Where
claude-code,codex,devin,grok,hermes,opencode,piiii_prompt# iii runtimecontext block opens with the new sentenceharness/prompts/default.txt,harness/README.mdconsole/web/src/stories/fixtures/*iiiskill fixture and blog-post fixturedevin/skills/SKILL.md,devin/README.md,grok/README.mdharness/src/bindings/store.rsharness/src/prompt/tests.rsmesh_modeltest renamedruntime_modelNote: the iii-directory e2e suite is red on purpose
iii-directory/tests/e2e/run-tests.shhad three assertions pinned to the literal wordsworker meshin the upstreamiiiSKILL.md, which the suite downloads from the registry at run time. That document is not in this repo, so this PR cannot update it.Rather than delete the assertions, they are flipped to guard the new wording:
registerWorker(real content, phrasing independent)hasnt ... "mesh"on theid=iiiandid=iii/indexbodiesmeshThese three assertions fail until the upstream
iiiSKILL.md ships the new wording. That is the intended signal: the suite now fails loudly while the canonical description is stale, instead of passing on the description we are removing.Verification
cargo test --lib prompt::inharness: 43 passed. The rewrap indefault.txtkeeps every substring those tests assert on unbroken.cargo checkclean forcodex,devin,grok.bash -n run-tests.shclean.coder-fixtures.tsskill excerpt keeps its 42-line length, so thenumberWindow(III_SKILL_MD, 26, 33)and(1, 6)ranges still frame the same content.🤖 Generated with Claude Code