Publish the official Dispatch plugin for Claude Code and Codex - #952
Merged
selfcontained merged 3 commits intoAug 13, 2026
Merged
Conversation
This repo now doubles as a plugin marketplace. Eleven narrow skills teach agents to use Dispatch's own capabilities — the Brain, subagents, .dispatch/tools.json, artifact sharing, the review workflow, the whiteboard, jobs, templates, personas, personalities, and UI validation. Dual manifests, one tree: `.claude-plugin/marketplace.json` + `.agents/plugins/marketplace.json` at the root, and both plugin manifests under `plugins/dispatch/`, sharing a single `skills/` directory. Codex does fall back to reading `.claude-plugin/`, but that behavior is undocumented by OpenAI, so the Codex-native manifests are carried explicitly. The skill description is the product: descriptions load into every session unconditionally while bodies load only on a match, so they are written as symptom triggers rather than feature labels. Total always-on cost is ~2.3 KB (~592 tokens by `claude plugin details`), below the 2,891 chars Dispatch's own launch guidance already injects. Purely additive — launch guidance is not trimmed and the documentation-bearing MCP tools (`whiteboard_howto`, `persona_templates`) stay in place. Trimming either is a follow-up gated on how adoption actually goes. Adds a vitest guard for the manifests and skill frontmatter: CI has no claude/codex CLI, and a SKILL.md whose YAML frontmatter fails to parse still installs cleanly — it just loads with empty metadata and never fires. That exact bug (an unquoted colon in a description) was caught during this work. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- brain: `brain_list_remove` takes `index` or `where {field, equals}`, not a
`match` param. Documents the object shape and that indexes shift on removal.
- brain: narrow the description so it no longer overlaps `subagents` on live
handoff — it now reads as durable storage that survives the session, leaving
coordination to `subagents`.
- repo-tools: the mtime cache applies to hooks, not tools. Measured against a
live server: `handleMcpRequest` rebuilds per request and `loadRepoTools` has
no cache, so an edited description and a newly added tool both appeared in the
next tools/list with no restart. The real constraint is client-side — the CLI
holds the tool list it fetched at session start.
- Root README: state the unsigned/unsandboxed/full-privileges warning above the
install commands rather than only behind a link.
- Plugin README: the "entire contents" claim was literally false (README and
evals/ also exist). Scope it to runtime-relevant components and give the exact
commands to verify, plus `claude plugin details`' component inventory.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Per Claude Code's docs, installing from a marketplace is explicitly a two-step process and the shell `claude plugin install` doesn't take effect in a running session — plugins load on next start or via `/reload-plugins`. The README omitted that, so a shell installer would expect the skills immediately. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
selfcontained
deleted the
agt_786ebdc45489/build-dispatch-plugin-claude-codex
branch
August 13, 2026 15:23
This was referenced Aug 13, 2026
selfcontained
added a commit
that referenced
this pull request
Aug 15, 2026
The official plugin (#952) shipped with a README section and nothing else — no in-app docs section and no ambient tip, so the only place a user learns it exists is the GitHub README. - New docs-pane section "Plugin" covering trust (unsigned/unsandboxed, no executable components, how to verify), the two-step marketplace + install flow on Claude Code and Codex, the eleven skills and what each fires on, and update mechanics (Codex has no update subcommand). - Ambient tip pointing at plugin#plugin-install, since 0.34.1 (the plugin landed after the v0.34.0 release commit). - README's plugin blurb named 8 skills; the tree has 11 — personas, personalities and ui-validation were missing. Same fix in plugins/dispatch/README.md's intro paragraph. - README's "user-facing documentation" list was missing browser feedback, service resources and the new plugin section, and said "jobs" where the section is templates and jobs. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Makes this repo a plugin marketplace for both Claude Code and Codex, shipping eleven narrow skills that teach agents to use Dispatch's own capabilities.
Closes the
dispatch-usage-skills-bundleidea. Manual install only — stale-version detection, auto-attach, and marketplace submission stay deferred per Brad's decision.What ships
whiteboard,personasreview-workflow,ui-validationsharing,brain,subagents,repo-toolsjobs,templates,personalitiesInstall:
Verified end-to-end on both CLIs
Against
claude2.1.231 andcodex-cli0.147.0, using throwawayCLAUDE_CONFIG_DIR/CODEX_HOMEroots — not the machine's real config.Claude —
claude plugin validatepasses on both the marketplace and the plugin (clean under--stricttoo). Aftermarketplace add+install,claude plugin details dispatch@dispatchreports:Codex —
codex plugin marketplace add+codex plugin addboth exit 0 non-interactively and install0.1.0from the Codex-native manifest.codex debug prompt-inputshows all eleven reaching the model prompt inside<skills_instructions>, namespaceddispatch:<name>with the right descriptions — so this is confirmed model-visible, not just installed.Design
The description is the product. Descriptions load into every session unconditionally; bodies load only on a match. So they're written as symptom triggers rather than feature labels — an agent that doesn't know a capability exists will never match its name, but will match a description of the situation it's currently in. Total always-on cost is 2,258 chars (~592 tokens), under the 2,891 chars launch guidance already injects.
Narrow skills, not mega-skills. Eleven short descriptions always-on, exactly one body loaded on a match. A single "automations" skill would load four unrelated bodies whenever one of them fired.
Dual manifests. Codex does fall back to reading
.claude-plugin/, but that's undocumented by OpenAI, so the Codex-native manifests are carried explicitly rather than relying on it.Explicit
versionin both manifests — Claude uses it as the update cache key, so routine commits tomaindon't register as a plugin update. Omitting it would resolve the version to the commit SHA and make every push look like a new release.Purely additive. Launch guidance is not trimmed and the documentation-bearing MCP tools (
whiteboard_howto,persona_templates) stay in place; content lives in two places for now. Deleting either would regress any repo that hasn't installed the plugin. Both trims are follow-ups gated on a real soak period.Deliberately not skills:
dispatch_event, pin discipline, and session naming. Skills only load on a task match, so always-relevant protocol obligations can't move out of launch guidance.The vitest guard
apps/server/test/plugin-manifest.test.tschecks the manifests agree on name/version/source shape and that every SKILL.md's frontmatter parses.This isn't speculative.
claude plugin validatecaught a real defect mid-build: an unquoted colon in thepersonalitiesdescription broke its YAML frontmatter, and the failure mode is silent — the skill still installs, it just loads with empty metadata and never fires. CI has noclaude/codexCLI to catch that. Confirmed the guard fails on the reintroduced bug and passes once fixed.It also asserts the always-on description budget stays under the 2,891-char launch-guidance ceiling, so the plugin can't quietly grow past the thing it augments.
Evals
Four ablation cases (
sharing,brain,subagents,repo-tools) in the documentedprompt.md+graders/criteria.mdlayout, aimed at--ablation with-withoutso the no-plugin baseline arm gives a score delta.They have not been executed.
claude plugin evalis in early access and refuses to run on 2.1.231 — every invocation returns`plugin eval` is currently in early accessand exits.plugins/dispatch/evals/README.mdsays so plainly; treat the criteria as a first draft to tune once the runner is available, not as a passing suite.sharingis the sharpest case in the set: the rule it encodes already exists in two always-on places (launch guidance and CLAUDE.md) and still gets ignored, so a measurable delta there would be evidence that arriving at the moment of action beats more background text.Checks
pnpm run check— passespnpm run test— 3,635 passed, 9 skipped across all three suitespnpm run format— cleanpnpm run test:e2e— run locally before pushing (to avoid colliding with CI's stack)apps/web/changes, sofinalize:webdoesn't applyThe plugin-format spec work in #951 was pulled into this directly rather than linked; that PR can be closed without merging.
🤖 Generated with Claude Code