Skip to content

docs: iii is a language agnostic runtime, not a worker mesh - #934

Merged
andersonleal merged 3 commits into
mainfrom
chore/remove-mesh-mentions
Aug 27, 2026
Merged

docs: iii is a language agnostic runtime, not a worker mesh#934
andersonleal merged 3 commits into
mainfrom
chore/remove-mesh-mentions

Conversation

@anthonyiscoding

Copy link
Copy Markdown
Contributor

What

Every place in this repo that described iii as a "mesh" now uses the canonical framing:

iii is a language agnostic runtime where services, agents, and tools are composed of the same things: workers, triggers, and functions.

19 of 22 mesh hits are gone; the 3 that remain are negative assertions that guard against the word coming back.

Where

Area Change
claude-code, codex, devin, grok, hermes, opencode, pi iii_prompt The shared # iii runtime context block opens with the new sentence
harness/prompts/default.txt, harness/README.md Same sentence, rewrapped
console/web/src/stories/fixtures/* Storybook iii skill fixture and blog-post fixture
devin/skills/SKILL.md, devin/README.md, grok/README.md Inline paraphrase: "your workers", "the live runtime"
harness/src/bindings/store.rs Comment: "serve the same mesh" -> "serve the same engine"
harness/src/prompt/tests.rs mesh_model test renamed runtime_model

Note: the iii-directory e2e suite is red on purpose

iii-directory/tests/e2e/run-tests.sh had three assertions pinned to the literal words worker mesh in the upstream iii SKILL.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:

  • body canary is now registerWorker (real content, phrasing independent)
  • hasnt ... "mesh" on the id=iii and id=iii/index bodies
  • the list row description must be non-empty and must not contain mesh

These three assertions fail until the upstream iii SKILL.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:: in harness: 43 passed. The rewrap in default.txt keeps every substring those tests assert on unbroken.
  • cargo check clean for codex, devin, grok.
  • bash -n run-tests.sh clean.
  • The coder-fixtures.ts skill excerpt keeps its 42-line length, so the numberWindow(III_SKILL_MD, 26, 33) and (1, 6) ranges still frame the same content.

🤖 Generated with Claude Code

anthonyiscoding and others added 2 commits August 25, 2026 11:54
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>
@vercel

vercel Bot commented Aug 25, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
workers Ready Ready Preview Aug 25, 2026 5:01pm
workers-tech-spec Ready Ready Preview Aug 25, 2026 5:01pm

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

skill-check — worker

0 verified, 66 skipped (no docs/).

Layer Result
structure
vale
ai
render

Four for four. Nicely done.

@coderabbitai

coderabbitai Bot commented Aug 25, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

Next included review available in 56 minutes.

View limit details

Limit 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.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 15705a07-d0c6-4de8-9328-d89f1ed473bb

📥 Commits

Reviewing files that changed from the base of the PR and between 793ab25 and 86798c4.

📒 Files selected for processing (17)
  • claude-code/src/iii-prompt.ts
  • codex/src/iii_prompt.rs
  • console/web/src/stories/fixtures/coder-fixtures.ts
  • console/web/src/stories/fixtures/workflow-fixtures.ts
  • devin/README.md
  • devin/skills/SKILL.md
  • devin/src/iii_prompt.rs
  • grok/README.md
  • grok/src/iii_prompt.rs
  • harness/README.md
  • harness/prompts/default.txt
  • harness/src/bindings/store.rs
  • harness/src/prompt/tests.rs
  • hermes/src/iii_prompt.py
  • iii-directory/tests/e2e/run-tests.sh
  • opencode/src/iii-prompt.ts
  • pi/src/iii-prompt.ts
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/remove-mesh-mentions

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

…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>
@anthonyiscoding

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 25, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@andersonleal
andersonleal merged commit c8276f1 into main Aug 27, 2026
40 of 41 checks passed
@andersonleal
andersonleal deleted the chore/remove-mesh-mentions branch August 27, 2026 17:43
andersonleal added a commit that referenced this pull request Aug 27, 2026
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
andersonleal added a commit that referenced this pull request Aug 27, 2026
…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
andersonleal added a commit that referenced this pull request Aug 27, 2026
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
andersonleal added a commit that referenced this pull request Aug 27, 2026
…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
andersonleal added a commit that referenced this pull request Aug 27, 2026
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
andersonleal added a commit that referenced this pull request Aug 27, 2026
…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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-ticket PR deliberately has no Linear ticket (bump/typo/CI-only)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants