Skip to content

Commit f713be7

Browse files
committed
Hide dispatch as a Skywalker background library
Skywalker already orchestrates. Keep the on-disk DAG protocol behind an explicit use_skill load, not in the listing.
1 parent a0311f8 commit f713be7

8 files changed

Lines changed: 16 additions & 17 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ parallel copies under `docs/` or `scripts/notes/`. At cut time: rename
1717

1818
- First-party skills are how-to playbooks (what to do, in what order, what done looks like),
1919
not director personas. Identity stays on director system prompts.
20+
- Dispatch is a background library for an existing `dispatch/` tree. Skywalker
21+
orchestrates natively and no longer lists dispatch as an optional skill.
2022

2123
### Fixed
2224

docs/ARCHITECTURE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ Corbits Code **ships a bundled catalog** as the first-party data-only plugin `pl
403403

404404
`discoverRepoPlugins` locates `plugins/` next to the source root, at `dist/plugins`, or at `dirname(execPath)/plugins`. It never scans the session cwd for the bundled catalog.
405405

406-
Primary is Skywalker. Bundled skill bodies are **how-to playbooks** (steps, done-definition) — not director personas and not fleet routers. Identity and who-does-what live on director system prompts. Default slashes: `/implement`, `/plan`, `/refactor`, `/review`, `/pull-request-review`, `/create-issue`, `/scribe`, `/interview`, `/ast-grep`. `/review` is how to review a branch (base, scope, signal); `/pull-request-review` is worktree checkout then the review skill; `/scribe` is how to maintain PRODUCT / ARCHITECTURE / IMPLEMENTATION; `/implement` is the per-commit greybeard → implement → gate → critic loop; `/plan` authors an eng change plan and does not implement or file tickets; `/create-issue` remains the tracker command — Linear MCP when available, otherwise `ask_operator` for the platform and persists `Preferred issue tracker` in `.corbits/MEMORY.md`. Dispatch is `use_skill` only, not a default slash. Draper and emil are closed directors via `task(agent=…)`, not slashes. There is no catch-all worker. The operator types the slash; the primary follows the playbook.
406+
Primary is Skywalker. Bundled skill bodies are **how-to playbooks** (steps, done-definition) — not director personas and not fleet routers. Identity and who-does-what live on director system prompts. Default slashes: `/implement`, `/plan`, `/refactor`, `/review`, `/pull-request-review`, `/create-issue`, `/scribe`, `/interview`, `/ast-grep`. `/review` is how to review a branch (base, scope, signal); `/pull-request-review` is worktree checkout then the review skill; `/scribe` is how to maintain PRODUCT / ARCHITECTURE / IMPLEMENTATION; `/implement` is the per-commit greybeard → implement → gate → critic loop; `/plan` authors an eng change plan and does not implement or file tickets; `/create-issue` remains the tracker command — Linear MCP when available, otherwise `ask_operator` for the platform and persists `Preferred issue tracker` in `.corbits/MEMORY.md`. Dispatch is a background library (`disable-model-invocation`) for an existing `dispatch/` tree — Skywalker orchestrates natively without it. Draper and emil are closed directors via `task(agent=…)`, not slashes. There is no catch-all worker. The operator types the slash; the primary follows the playbook.
407407

408408
#### Discovery and precedence
409409

docs/PRODUCT.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ is the direct, explicit resume path.
9898

9999
The TUI has an extensible slash-command framework. Built-ins include `/help` (shortcut + command overlay), `/model` (models-only picker for connected accounts; **Alt+A** adds a provider), `/settings`, `/permissions`, `/plugins`, `/clear`, `/new`, `/mcp`, and `/yolo` (persists as the user-global skip-permissions default; `--dangerously-skip-permissions` still forces this process; secret-guard and authz still apply; `/yolo [on|off|toggle]`, bare `/yolo` toggles), plus a `/<name>` command per available workflow. When a session starts with the persisted default already on, the TUI shows a startup notice ("Permission prompts are disabled by your saved default…") so the silent machine-wide default is never invisible; `corbits exec` prints the equivalent warning to stderr. Plugins can register additional commands.
100100

101-
**Default skills** exist out of the gate as first-party slash **actions**, not director names: `/implement`, `/plan`, `/refactor`, `/review`, `/pull-request-review`, `/create-issue`, `/scribe`, `/interview`, `/ast-grep`. Each one is a how-to playbook — the slash sends the skill body to the primary, which follows the steps. Skills do not assign identity or route the fleet; that stays on director system prompts. `/review` is how to review a branch; `/scribe` is how to maintain PRODUCT / ARCHITECTURE / IMPLEMENTATION; `/implement` is the per-commit review/build/critique loop; `/plan` authors an eng change plan (files, AC, non-goals, risks, ordered steps) and does not implement. `/create-issue` remains the tracker command: Linear MCP when available; otherwise it `ask_operator`s for the platform (GitHub etc.) and persists `Preferred issue tracker` in `.corbits/MEMORY.md` (GitHub via `gh issue create`). Dispatch is not a default slash — it stays `use_skill` only, along with git-rebase, linear-issue-workflow, style, philosophy, typescript, and opsh (`user-invocable: false`). Draper and emil are not slashes; they remain closed directors via `task(agent=…)`. There is no catch-all worker. Slash names are also available to the model via `use_skill`. Disable the catalog in `/plugins` (`corbits-skills`) if you want them gone.
101+
**Default skills** exist out of the gate as first-party slash **actions**, not director names: `/implement`, `/plan`, `/refactor`, `/review`, `/pull-request-review`, `/create-issue`, `/scribe`, `/interview`, `/ast-grep`. Each one is a how-to playbook — the slash sends the skill body to the primary, which follows the steps. Skills do not assign identity or route the fleet; that stays on director system prompts. `/review` is how to review a branch; `/scribe` is how to maintain PRODUCT / ARCHITECTURE / IMPLEMENTATION; `/implement` is the per-commit review/build/critique loop; `/plan` authors an eng change plan (files, AC, non-goals, risks, ordered steps) and does not implement. `/create-issue` remains the tracker command: Linear MCP when available; otherwise it `ask_operator`s for the platform (GitHub etc.) and persists `Preferred issue tracker` in `.corbits/MEMORY.md` (GitHub via `gh issue create`). Dispatch is a background library for an existing `dispatch/` tree (hidden from slash and the use_skill listing). `git-rebase`, `linear-issue-workflow`, `style`, `philosophy`, `typescript`, and `opsh` stay `use_skill` only (`user-invocable: false`). Draper and emil are not slashes; they remain closed directors via `task(agent=…)`. There is no catch-all worker. Slash names are also available to the model via `use_skill`. Disable the catalog in `/plugins` (`corbits-skills`) if you want them gone.
102102

103103
Providers are **models-first**: there is no standalone `/login` command. `/model` opens a **models-only list** (Recent, Favorites, then connected provider/model rows) — type-to-filter owns printable keys, so Connect is never a bare letter. **Alt+A** opens a dedicated add-provider selector over every first-class kind (OpenAI dual-path ChatGPT OAuth or API key, xAI, OpenCode Zen, Anthropic, Google, OpenCode Go, Z.AI Coding Plan, Custom), each annotated with its live account count and never filtered out for “already connected.” **Alt+F** toggles favorite on the highlighted model. **Alt+D** persists the highlighted pair as the default without switching the live session. Advanced provider drill-down (edit/delete/tiers) stays on the advanced surface, not a bare printable key while the model list is filtering. OAuth providers open their existing browser login with a named account step so multiple accounts per kind coexist (`codex/work`, …). API-key providers use the same named-instance step before the key (auth-only form: instance name + key + fixed catalog base URL), so personal and team keys land as distinct catalog rows (`openai/default`, `anthropic/work`, …); reusing a name re-keys that instance after confirm. Custom remains a free-form single endpoint (full manual form). Successful connect refreshes the catalog and reopens the model list focused on the new account’s default model. OpenCode Go routes each model by its protocol metadata (chat completions, OpenAI responses, or Anthropic messages) and can show subscription usage in the status bar when active (rolling 5h / weekly / monthly windows when the usage API responds; omitted on auth or network failure). When Go returns a quota or rate-limit error — including some HTTP 400 responses that carry limit payloads — Corbits classifies them so quota aborts cleanly and short provider rate limits remain retryable. On a free-tier or subscription quota hit, wait for the window to reset or use OpenCode Zen free models.
104104

plugins/corbits-skills/skills/dispatch/SKILL.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
---
22
name: dispatch
33
user-invocable: false
4+
disable-model-invocation: true
45
argument-hint: "[<name> | dispatch/<name>/ | dispatch/<name>/dispatch.yaml | <spec-file> ]"
5-
description: Multi-lane DAG orchestration via use_skill("dispatch"). Spawns explorer, intern, builder, counsel, and critic. Use for DAG product work; tiny edits outside the DAG may be DIY.
6+
description: On-disk DAG protocol (dispatch.yaml / plan.md / resume). Background library — load via use_skill("dispatch") when a dispatch/ tree already exists. Absent from slash and use_skill listing. Skywalker orchestrates natively without this skill.
67
---
78

89
# Dispatch
910

10-
How to orchestrate parallel director runs across a dependency graph. Fan out work, fan in reports, critique, verify, re-dispatch fixes, and synthesize until done.
11+
On-disk DAG protocol for an existing `dispatch/` tree. Skywalker orchestrates natively with spawn_agent / wait_agents / manage_tasks — do not load this skill for ordinary multi-lane work.
12+
13+
How to run a `dispatch.yaml` graph: fan out work, fan in reports, critique, verify, re-dispatch fixes, and synthesize until done. Fan out work, fan in reports, critique, verify, re-dispatch fixes, and synthesize until done.
1114

1215
DAG product tasks go through builder workers. Do not write `dispatch.yaml` or `plan.md` on the parent (intern cannot write; builder writes manifests). Tiny / single-file / one-route product edits outside this DAG may be DIY with write_file/edit_file/delete_file.
1316

src/agent/directors/identity.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ describe("formatDirectorSystemPrompt", () => {
8080
expect(text).not.toContain("use_skill is not mounted on workers");
8181
expect(text).not.toMatch(/guidance is baked/i);
8282
expect(text).toContain("use_skill is primary-mounted");
83-
expect(text).toContain("dispatch, style, philosophy, interview");
83+
expect(text).toContain("style, philosophy, interview");
8484
});
8585

8686
test("counsel does not bake interview ask_operator guidance (CL-6803)", () => {

src/agent/directors/skywalker/package.test.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,7 @@ describe("skywalkerPackage", () => {
5656
});
5757

5858
test("optionalSkills order", () => {
59-
expect(skywalkerPackage.optionalSkills).toEqual([
60-
"dispatch",
61-
"style",
62-
"philosophy",
63-
"interview",
64-
]);
59+
expect(skywalkerPackage.optionalSkills).toEqual(["style", "philosophy", "interview"]);
6560
});
6661

6762
test("primaryIntent and outOfLane", () => {

src/agent/directors/skywalker/package.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ Docs/design (PRODUCT.md, ARCHITECTURE.md, docs/design/*, brand) still spawn shak
112112
1. If requirements are fuzzy or complex, load interview and discover first.
113113
2. Use explorer workers for scope when needed.
114114
3. Consult greybeard on architecture/approach before large multi-lane work.
115-
4. Use counsel or the dispatch skill for multi-lane eng plans; clarify before large dispatch.
115+
4. Use counsel for multi-lane eng plans; clarify before a large fan-out.
116116
5. Track progress with manage_tasks; synthesize results for the operator.
117117
118118
## If ORCHESTRATION → coordinate
@@ -129,9 +129,9 @@ Do not reclassify COMMUNICATION as ORCHESTRATION just to justify parallel spawn
129129
130130
- Tiny/single-file/one-route product edits: write_file/edit_file/delete_file yourself. Substantial, multi-file, parallel, or specialist work: spawn (builder for code; shakespeare / bruckheimer / rand for docs/design unless a one-line fix).
131131
- Interview when requirements are fuzzy; consult greybeard on architecture/approach.
132-
- Use counsel or dispatch skill for multi-lane eng plans; clarify before large dispatch.
132+
- Use counsel for multi-lane eng plans; clarify before a large fan-out.
133133
- Path tools are the DIY surface; shell file-writes stay denied. Track fleet work with manage_tasks.
134-
- Optional skills when needed on the primary session: dispatch, style, philosophy, interview (use_skill is primary-mounted).
134+
- Optional skills when needed on the primary session: style, philosophy, interview (use_skill is primary-mounted). For an existing dispatch/ tree, load use_skill("dispatch").
135135
136136
137137
# Spawn graph
@@ -175,7 +175,7 @@ export const skywalkerPackage: DirectorPackage = {
175175
],
176176
description: "Primary orchestration director — chains specialists into a workflow",
177177
systemPrompt: SKYWALKER_SYSTEM_PROMPT,
178-
optionalSkills: ["dispatch", "style", "philosophy", "interview"],
178+
optionalSkills: ["style", "philosophy", "interview"],
179179
tools: { allow: SKYWALKER_TOOLS },
180180
spawn: {
181181
maySpawn: true,

tests/unit/corbits-skills-catalog.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ const SPAWN_RECIPE_SKILLS = ["implement", "dispatch"] as const;
3030

3131
/** use_skill listing + resolve; not slash. No disable-model-invocation. */
3232
const USE_SKILL_ONLY = [
33-
"dispatch",
3433
"git-rebase",
3534
"linear-issue-workflow",
3635
"style",
@@ -40,7 +39,7 @@ const USE_SKILL_ONLY = [
4039
] as const;
4140

4241
/** Background libs: absent from slash and use_skill listing; explicit resolve only. */
43-
const BACKGROUND_ONLY = ["git-worktrees"] as const;
42+
const BACKGROUND_ONLY = ["git-worktrees", "dispatch"] as const;
4443

4544
const SLASH_SKILLS = [
4645
"implement",

0 commit comments

Comments
 (0)