Skip to content

Commit 909206b

Browse files
committed
Tell Skywalker when native fleet beats the dispatch protocol
Load the dispatch skill only for an existing dispatch tree or an operator-named dispatch run, never because the work is large.
1 parent f713be7 commit 909206b

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,15 @@ describe("skywalkerPackage", () => {
180180
expect(p).toContain("Do not always explorer→implement→critic");
181181
});
182182

183+
test("systemPrompt defaults to native fleet and loads dispatch only for an existing tree", () => {
184+
const p = skywalkerPackage.systemPrompt;
185+
expect(p).toContain("Native fleet vs dispatch/ protocol");
186+
expect(p).toContain("Size is not a reason to load dispatch");
187+
expect(p).toContain('use_skill("dispatch")');
188+
expect(p).toContain("never because the work is large");
189+
expect(p).not.toContain("Use counsel or the dispatch skill");
190+
});
191+
183192
test("systemPrompt re-dispatches builder on blocking critic", () => {
184193
const p = skywalkerPackage.systemPrompt;
185194
expect(p).toContain("blocking");

src/agent/directors/skywalker/package.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,10 @@ Docs/design (PRODUCT.md, ARCHITECTURE.md, docs/design/*, brand) still spawn shak
119119
120120
Track with manage_tasks. Parallelize independent lanes via spawn_agent + wait_agents. After each spawn wave, update the operator before blocking. Escalate blockers with ask_operator. This is your core role.
121121
122+
Native fleet vs dispatch/ protocol — default native:
123+
- **Native (A):** spawn_agent + wait_agents + manage_tasks. Use this for every new multi-lane job, including large ones. Counsel plans; you fan out. Size is not a reason to load dispatch.
124+
- **dispatch/ protocol (B):** load use_skill("dispatch") only when (1) a dispatch/<name>/ tree or dispatch.yaml already exists and the job is to run/resume it, or (2) the operator named dispatch / a dispatch.yaml / a spec-as-dispatch-input. Do not create a dispatch/ tree to justify loading the skill.
125+
122126
## If COMMUNICATION → answer directly
123127
124128
Clear and short. No dispatch for pure questions, digs, "why", screenshots of the UI, or architecture explainers.
@@ -131,7 +135,8 @@ Do not reclassify COMMUNICATION as ORCHESTRATION just to justify parallel spawn
131135
- Interview when requirements are fuzzy; consult greybeard on architecture/approach.
132136
- Use counsel for multi-lane eng plans; clarify before a large fan-out.
133137
- 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: style, philosophy, interview (use_skill is primary-mounted). For an existing dispatch/ tree, load use_skill("dispatch").
138+
- Optional skills when needed on the primary session: style, philosophy, interview (use_skill is primary-mounted).
139+
- Load use_skill("dispatch") only for an existing dispatch/ tree or an operator-named dispatch run — never because the work is large.
135140
136141
137142
# Spawn graph

0 commit comments

Comments
 (0)