@bradygaster/squad-cli 0.9.1 → 0.9.2-insider.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +329 -329
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +10 -10
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/config.d.ts +12 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +157 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/consult.d.ts.map +1 -1
- package/dist/cli/commands/consult.js +9 -4
- package/dist/cli/commands/consult.js.map +1 -1
- package/dist/cli/commands/copilot.d.ts.map +1 -1
- package/dist/cli/commands/copilot.js +8 -7
- package/dist/cli/commands/copilot.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +50 -17
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/economy.d.ts.map +1 -1
- package/dist/cli/commands/economy.js +3 -2
- package/dist/cli/commands/economy.js.map +1 -1
- package/dist/cli/commands/export.d.ts.map +1 -1
- package/dist/cli/commands/export.js +22 -16
- package/dist/cli/commands/export.js.map +1 -1
- package/dist/cli/commands/extract.d.ts.map +1 -1
- package/dist/cli/commands/extract.js +14 -10
- package/dist/cli/commands/extract.js.map +1 -1
- package/dist/cli/commands/import.d.ts.map +1 -1
- package/dist/cli/commands/import.js +21 -18
- package/dist/cli/commands/import.js.map +1 -1
- package/dist/cli/commands/init-remote.d.ts.map +1 -1
- package/dist/cli/commands/init-remote.js +7 -6
- package/dist/cli/commands/init-remote.js.map +1 -1
- package/dist/cli/commands/link.d.ts.map +1 -1
- package/dist/cli/commands/link.js +11 -10
- package/dist/cli/commands/link.js.map +1 -1
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +19 -18
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands/personal.d.ts.map +1 -1
- package/dist/cli/commands/personal.js +57 -65
- package/dist/cli/commands/personal.js.map +1 -1
- package/dist/cli/commands/plugin.d.ts.map +1 -1
- package/dist/cli/commands/plugin.js +8 -7
- package/dist/cli/commands/plugin.js.map +1 -1
- package/dist/cli/commands/rc.d.ts.map +1 -1
- package/dist/cli/commands/rc.js +19 -12
- package/dist/cli/commands/rc.js.map +1 -1
- package/dist/cli/commands/schedule.d.ts.map +1 -1
- package/dist/cli/commands/schedule.js +6 -5
- package/dist/cli/commands/schedule.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +18 -11
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/streams.d.ts.map +1 -1
- package/dist/cli/commands/streams.js +3 -2
- package/dist/cli/commands/streams.js.map +1 -1
- package/dist/cli/commands/upstream.d.ts.map +1 -1
- package/dist/cli/commands/upstream.js +23 -19
- package/dist/cli/commands/upstream.js.map +1 -1
- package/dist/cli/commands/watch/capabilities/board.d.ts +22 -0
- package/dist/cli/commands/watch/capabilities/board.d.ts.map +1 -0
- package/dist/cli/commands/watch/capabilities/board.js +121 -0
- package/dist/cli/commands/watch/capabilities/board.js.map +1 -0
- package/dist/cli/commands/watch/capabilities/decision-hygiene.d.ts +14 -0
- package/dist/cli/commands/watch/capabilities/decision-hygiene.d.ts.map +1 -0
- package/dist/cli/commands/watch/capabilities/decision-hygiene.js +72 -0
- package/dist/cli/commands/watch/capabilities/decision-hygiene.js.map +1 -0
- package/dist/cli/commands/watch/capabilities/execute.d.ts +33 -0
- package/dist/cli/commands/watch/capabilities/execute.d.ts.map +1 -0
- package/dist/cli/commands/watch/capabilities/execute.js +119 -0
- package/dist/cli/commands/watch/capabilities/execute.js.map +1 -0
- package/dist/cli/commands/watch/capabilities/index.d.ts +7 -0
- package/dist/cli/commands/watch/capabilities/index.d.ts.map +1 -0
- package/dist/cli/commands/watch/capabilities/index.js +28 -0
- package/dist/cli/commands/watch/capabilities/index.js.map +1 -0
- package/dist/cli/commands/watch/capabilities/monitor-email.d.ts +14 -0
- package/dist/cli/commands/watch/capabilities/monitor-email.d.ts.map +1 -0
- package/dist/cli/commands/watch/capabilities/monitor-email.js +54 -0
- package/dist/cli/commands/watch/capabilities/monitor-email.js.map +1 -0
- package/dist/cli/commands/watch/capabilities/monitor-teams.d.ts +14 -0
- package/dist/cli/commands/watch/capabilities/monitor-teams.d.ts.map +1 -0
- package/dist/cli/commands/watch/capabilities/monitor-teams.js +55 -0
- package/dist/cli/commands/watch/capabilities/monitor-teams.js.map +1 -0
- package/dist/cli/commands/watch/capabilities/retro.d.ts +14 -0
- package/dist/cli/commands/watch/capabilities/retro.d.ts.map +1 -0
- package/dist/cli/commands/watch/capabilities/retro.js +81 -0
- package/dist/cli/commands/watch/capabilities/retro.js.map +1 -0
- package/dist/cli/commands/watch/capabilities/self-pull.d.ts +14 -0
- package/dist/cli/commands/watch/capabilities/self-pull.d.ts.map +1 -0
- package/dist/cli/commands/watch/capabilities/self-pull.js +33 -0
- package/dist/cli/commands/watch/capabilities/self-pull.js.map +1 -0
- package/dist/cli/commands/watch/capabilities/two-pass.d.ts +14 -0
- package/dist/cli/commands/watch/capabilities/two-pass.d.ts.map +1 -0
- package/dist/cli/commands/watch/capabilities/two-pass.js +66 -0
- package/dist/cli/commands/watch/capabilities/two-pass.js.map +1 -0
- package/dist/cli/commands/watch/capabilities/wave-dispatch.d.ts +14 -0
- package/dist/cli/commands/watch/capabilities/wave-dispatch.d.ts.map +1 -0
- package/dist/cli/commands/watch/capabilities/wave-dispatch.js +117 -0
- package/dist/cli/commands/watch/capabilities/wave-dispatch.js.map +1 -0
- package/dist/cli/commands/watch/config.d.ts +25 -0
- package/dist/cli/commands/watch/config.d.ts.map +1 -0
- package/dist/cli/commands/watch/config.js +82 -0
- package/dist/cli/commands/watch/config.js.map +1 -0
- package/dist/cli/commands/watch/index.d.ts +95 -0
- package/dist/cli/commands/watch/index.d.ts.map +1 -0
- package/dist/cli/commands/watch/index.js +704 -0
- package/dist/cli/commands/watch/index.js.map +1 -0
- package/dist/cli/commands/watch/registry.d.ts +19 -0
- package/dist/cli/commands/watch/registry.d.ts.map +1 -0
- package/dist/cli/commands/watch/registry.js +28 -0
- package/dist/cli/commands/watch/registry.js.map +1 -0
- package/dist/cli/commands/watch/types.d.ts +57 -0
- package/dist/cli/commands/watch/types.d.ts.map +1 -0
- package/dist/cli/commands/watch/types.js +8 -0
- package/dist/cli/commands/watch/types.js.map +1 -0
- package/dist/cli/core/cast.d.ts.map +1 -1
- package/dist/cli/core/cast.js +15 -19
- package/dist/cli/core/cast.js.map +1 -1
- package/dist/cli/core/detect-squad-dir.d.ts.map +1 -1
- package/dist/cli/core/detect-squad-dir.js +12 -10
- package/dist/cli/core/detect-squad-dir.js.map +1 -1
- package/dist/cli/core/email-scrub.d.ts.map +1 -1
- package/dist/cli/core/email-scrub.js +12 -11
- package/dist/cli/core/email-scrub.js.map +1 -1
- package/dist/cli/core/gh-cli.d.ts +13 -0
- package/dist/cli/core/gh-cli.d.ts.map +1 -1
- package/dist/cli/core/gh-cli.js +24 -0
- package/dist/cli/core/gh-cli.js.map +1 -1
- package/dist/cli/core/init.d.ts +2 -0
- package/dist/cli/core/init.d.ts.map +1 -1
- package/dist/cli/core/init.js +22 -5
- package/dist/cli/core/init.js.map +1 -1
- package/dist/cli/core/migrate-directory.d.ts.map +1 -1
- package/dist/cli/core/migrate-directory.js +14 -13
- package/dist/cli/core/migrate-directory.js.map +1 -1
- package/dist/cli/core/migrations.d.ts.map +1 -1
- package/dist/cli/core/migrations.js +22 -8
- package/dist/cli/core/migrations.js.map +1 -1
- package/dist/cli/core/nap.d.ts.map +1 -1
- package/dist/cli/core/nap.js +111 -49
- package/dist/cli/core/nap.js.map +1 -1
- package/dist/cli/core/project-type.d.ts.map +1 -1
- package/dist/cli/core/project-type.js +11 -10
- package/dist/cli/core/project-type.js.map +1 -1
- package/dist/cli/core/team-md.d.ts.map +1 -1
- package/dist/cli/core/team-md.js +43 -38
- package/dist/cli/core/team-md.js.map +1 -1
- package/dist/cli/core/templates.d.ts.map +1 -1
- package/dist/cli/core/templates.js +4 -3
- package/dist/cli/core/templates.js.map +1 -1
- package/dist/cli/core/upgrade.d.ts.map +1 -1
- package/dist/cli/core/upgrade.js +68 -55
- package/dist/cli/core/upgrade.js.map +1 -1
- package/dist/cli/core/version.d.ts.map +1 -1
- package/dist/cli/core/version.js +8 -7
- package/dist/cli/core/version.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/self-update.d.ts.map +1 -1
- package/dist/cli/self-update.js +7 -4
- package/dist/cli/self-update.js.map +1 -1
- package/dist/cli/shell/agent-name-parser.d.ts +16 -0
- package/dist/cli/shell/agent-name-parser.d.ts.map +1 -0
- package/dist/cli/shell/agent-name-parser.js +54 -0
- package/dist/cli/shell/agent-name-parser.js.map +1 -0
- package/dist/cli/shell/commands.d.ts.map +1 -1
- package/dist/cli/shell/commands.js +4 -3
- package/dist/cli/shell/commands.js.map +1 -1
- package/dist/cli/shell/coordinator.d.ts +4 -1
- package/dist/cli/shell/coordinator.d.ts.map +1 -1
- package/dist/cli/shell/coordinator.js +29 -26
- package/dist/cli/shell/coordinator.js.map +1 -1
- package/dist/cli/shell/index.d.ts.map +1 -1
- package/dist/cli/shell/index.js +33 -35
- package/dist/cli/shell/index.js.map +1 -1
- package/dist/cli/shell/lifecycle.d.ts +13 -2
- package/dist/cli/shell/lifecycle.d.ts.map +1 -1
- package/dist/cli/shell/lifecycle.js +26 -13
- package/dist/cli/shell/lifecycle.js.map +1 -1
- package/dist/cli/shell/session-store.d.ts.map +1 -1
- package/dist/cli/shell/session-store.js +16 -12
- package/dist/cli/shell/session-store.js.map +1 -1
- package/dist/cli/shell/spawn.d.ts +4 -1
- package/dist/cli/shell/spawn.d.ts.map +1 -1
- package/dist/cli/shell/spawn.js +28 -10
- package/dist/cli/shell/spawn.js.map +1 -1
- package/dist/cli-entry.js +83 -12
- package/dist/cli-entry.js.map +1 -1
- package/package.json +8 -4
- package/scripts/patch-esm-imports.mjs +105 -105
- package/scripts/patch-ink-rendering.mjs +115 -115
- package/templates/casting/Futurama.json +9 -9
- package/templates/casting-history.json +4 -4
- package/templates/casting-policy.json +37 -37
- package/templates/casting-reference.md +104 -104
- package/templates/casting-registry.json +3 -3
- package/templates/ceremonies.md +41 -41
- package/templates/charter.md +53 -53
- package/templates/constraint-tracking.md +38 -38
- package/templates/cooperative-rate-limiting.md +229 -229
- package/templates/copilot-instructions.md +46 -46
- package/templates/history.md +10 -10
- package/templates/identity/now.md +9 -9
- package/templates/identity/wisdom.md +15 -15
- package/templates/issue-lifecycle.md +412 -412
- package/templates/keda-scaler.md +164 -164
- package/templates/machine-capabilities.md +74 -74
- package/templates/mcp-config.md +90 -90
- package/templates/multi-agent-format.md +28 -28
- package/templates/orchestration-log.md +27 -27
- package/templates/plugin-marketplace.md +49 -49
- package/templates/ralph-circuit-breaker.md +313 -313
- package/templates/raw-agent-output.md +37 -37
- package/templates/roster.md +60 -60
- package/templates/routing.md +39 -39
- package/templates/run-output.md +50 -50
- package/templates/scribe-charter.md +123 -119
- package/templates/skill.md +24 -24
- package/templates/skills/agent-collaboration/SKILL.md +42 -42
- package/templates/skills/agent-conduct/SKILL.md +24 -24
- package/templates/skills/architectural-proposals/SKILL.md +151 -151
- package/templates/skills/ci-validation-gates/SKILL.md +84 -84
- package/templates/skills/cli-wiring/SKILL.md +47 -47
- package/templates/skills/client-compatibility/SKILL.md +89 -89
- package/templates/skills/cross-machine-coordination/SKILL.md +434 -0
- package/templates/skills/cross-squad/SKILL.md +114 -114
- package/templates/skills/distributed-mesh/SKILL.md +287 -287
- package/templates/skills/distributed-mesh/mesh.json.example +30 -30
- package/templates/skills/distributed-mesh/sync-mesh.ps1 +111 -111
- package/templates/skills/distributed-mesh/sync-mesh.sh +104 -104
- package/templates/skills/docs-standards/SKILL.md +71 -71
- package/templates/skills/economy-mode/SKILL.md +114 -114
- package/templates/skills/error-recovery/SKILL.md +99 -0
- package/templates/skills/external-comms/SKILL.md +329 -329
- package/templates/skills/gh-auth-isolation/SKILL.md +183 -183
- package/templates/skills/git-workflow/SKILL.md +204 -204
- package/templates/skills/github-multi-account/SKILL.md +95 -95
- package/templates/skills/history-hygiene/SKILL.md +36 -36
- package/templates/skills/humanizer/SKILL.md +105 -105
- package/templates/skills/init-mode/SKILL.md +102 -102
- package/templates/skills/iterative-retrieval/SKILL.md +165 -0
- package/templates/skills/model-selection/SKILL.md +117 -117
- package/templates/skills/nap/SKILL.md +24 -24
- package/templates/skills/notification-routing/SKILL.md +105 -0
- package/templates/skills/personal-squad/SKILL.md +57 -57
- package/templates/skills/pr-screenshots/SKILL.md +149 -0
- package/templates/skills/ralph-two-pass-scan/SKILL.md +35 -0
- package/templates/skills/reflect/SKILL.md +229 -0
- package/templates/skills/release-process/SKILL.md +131 -423
- package/templates/skills/reskill/SKILL.md +92 -92
- package/templates/skills/retro-enforcement/SKILL.md +148 -0
- package/templates/skills/reviewer-protocol/SKILL.md +79 -79
- package/templates/skills/secret-handling/SKILL.md +200 -200
- package/templates/skills/session-recovery/SKILL.md +155 -155
- package/templates/skills/squad-conventions/SKILL.md +69 -69
- package/templates/skills/test-discipline/SKILL.md +37 -37
- package/templates/skills/tiered-memory/SKILL.md +234 -0
- package/templates/skills/windows-compatibility/SKILL.md +98 -74
- package/templates/{squad.agent.md → squad.agent.md.template} +1316 -1287
- package/templates/workflows/squad-ci.yml +24 -24
- package/templates/workflows/squad-docs.yml +54 -54
- package/templates/workflows/squad-heartbeat.yml +0 -4
- package/templates/workflows/squad-insider-release.yml +61 -61
- package/templates/workflows/squad-issue-assign.yml +161 -161
- package/templates/workflows/squad-label-enforce.yml +181 -181
- package/templates/workflows/squad-preview.yml +55 -55
- package/templates/workflows/squad-promote.yml +120 -120
- package/templates/workflows/squad-release.yml +77 -77
- package/templates/workflows/squad-triage.yml +260 -260
- package/templates/workflows/sync-squad-labels.yml +169 -169
- package/dist/cli/commands/watch.d.ts +0 -18
- package/dist/cli/commands/watch.d.ts.map +0 -1
- package/dist/cli/commands/watch.js +0 -306
- package/dist/cli/commands/watch.js.map +0 -1
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "humanizer"
|
|
3
|
-
description: "Tone enforcement patterns for external-facing community responses"
|
|
4
|
-
domain: "communication, tone, community"
|
|
5
|
-
confidence: "low"
|
|
6
|
-
source: "manual (RFC #426 — PAO External Communications)"
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Context
|
|
10
|
-
|
|
11
|
-
Use this skill whenever PAO drafts external-facing responses for issues or discussions.
|
|
12
|
-
|
|
13
|
-
- Tone must be warm, helpful, and human-sounding — never robotic or corporate.
|
|
14
|
-
- Brady's constraint applies everywhere: **Humanized tone is mandatory**.
|
|
15
|
-
- This applies to **all external-facing content** drafted by PAO in Phase 1 issues/discussions workflows.
|
|
16
|
-
|
|
17
|
-
## Patterns
|
|
18
|
-
|
|
19
|
-
1. **Warm opening** — Start with acknowledgment ("Thanks for reporting this", "Great question!")
|
|
20
|
-
2. **Active voice** — "We're looking into this" not "This is being investigated"
|
|
21
|
-
3. **Second person** — Address the person directly ("you" not "the user")
|
|
22
|
-
4. **Conversational connectors** — "That said...", "Here's what we found...", "Quick note:"
|
|
23
|
-
5. **Specific, not vague** — "This affects the casting module in v0.8.x" not "We are aware of issues"
|
|
24
|
-
6. **Empathy markers** — "I can see how that would be frustrating", "Good catch!"
|
|
25
|
-
7. **Action-oriented closes** — "Let us know if that helps!" not "Please advise if further assistance is required"
|
|
26
|
-
8. **Uncertainty is OK** — "We're not 100% sure yet, but here's what we think is happening..." is better than false confidence
|
|
27
|
-
9. **Profanity filter** — Never include profanity, slurs, or aggressive language, even when quoting
|
|
28
|
-
10. **Baseline comparison** — Responses should align with tone of 5-10 "gold standard" responses (>80% similarity threshold)
|
|
29
|
-
11. **Empathetic disagreement** — "We hear you. That's a fair concern." before explaining the reasoning
|
|
30
|
-
12. **Information request** — Ask for specific details, not open-ended "can you provide more info?"
|
|
31
|
-
13. **No link-dumping** — Don't just paste URLs. Provide context: "Check out the [getting started guide](url) — specifically the section on routing" not just a bare link
|
|
32
|
-
|
|
33
|
-
## Examples
|
|
34
|
-
|
|
35
|
-
### 1. Welcome
|
|
36
|
-
|
|
37
|
-
```text
|
|
38
|
-
Hey {author}! Welcome to Squad 👋 Thanks for opening this.
|
|
39
|
-
{substantive response}
|
|
40
|
-
Let us know if you have questions — happy to help!
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### 2. Troubleshooting
|
|
44
|
-
|
|
45
|
-
```text
|
|
46
|
-
Thanks for the detailed report, {author}!
|
|
47
|
-
Here's what we think is happening: {explanation}
|
|
48
|
-
{steps or workaround}
|
|
49
|
-
Let us know if that helps, or if you're seeing something different.
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### 3. Feature guidance
|
|
53
|
-
|
|
54
|
-
```text
|
|
55
|
-
Great question! {context on current state}
|
|
56
|
-
{guidance or workaround}
|
|
57
|
-
We've noted this as a potential improvement — {tracking info if applicable}.
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### 4. Redirect
|
|
61
|
-
|
|
62
|
-
```text
|
|
63
|
-
Thanks for reaching out! This one is actually better suited for {correct location}.
|
|
64
|
-
{brief explanation of why}
|
|
65
|
-
Feel free to open it there — they'll be able to help!
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### 5. Acknowledgment
|
|
69
|
-
|
|
70
|
-
```text
|
|
71
|
-
Good catch, {author}. We've confirmed this is a real issue.
|
|
72
|
-
{what we know so far}
|
|
73
|
-
We'll update this thread when we have a fix. Thanks for flagging it!
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### 6. Closing
|
|
77
|
-
|
|
78
|
-
```text
|
|
79
|
-
This should be resolved in {version/PR}! 🎉
|
|
80
|
-
{brief summary of what changed}
|
|
81
|
-
Thanks for reporting this, {author} — it made Squad better.
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### 7. Technical uncertainty
|
|
85
|
-
|
|
86
|
-
```text
|
|
87
|
-
Interesting find, {author}. We're not 100% sure what's causing this yet.
|
|
88
|
-
Here's what we've ruled out: {list}
|
|
89
|
-
We'd love more context if you have it — {specific ask}.
|
|
90
|
-
We'll dig deeper and update this thread.
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## Anti-Patterns
|
|
94
|
-
|
|
95
|
-
- ❌ Corporate speak: "We appreciate your patience as we investigate this matter"
|
|
96
|
-
- ❌ Marketing hype: "Squad is the BEST way to..." or "This amazing feature..."
|
|
97
|
-
- ❌ Passive voice: "It has been determined that..." or "The issue is being tracked"
|
|
98
|
-
- ❌ Dismissive: "This works as designed" without empathy
|
|
99
|
-
- ❌ Over-promising: "We'll ship this next week" without commitment from the team
|
|
100
|
-
- ❌ Empty acknowledgment: "Thanks for your feedback" with no substance
|
|
101
|
-
- ❌ Robot signatures: "Best regards, PAO" or "Sincerely, The Squad Team"
|
|
102
|
-
- ❌ Excessive emoji: More than 1-2 emoji per response
|
|
103
|
-
- ❌ Quoting profanity: Even when the original issue contains it, paraphrase instead
|
|
104
|
-
- ❌ Link-dumping: Pasting URLs without context ("See: https://...")
|
|
105
|
-
- ❌ Open-ended info requests: "Can you provide more information?" without specifying what information
|
|
1
|
+
---
|
|
2
|
+
name: "humanizer"
|
|
3
|
+
description: "Tone enforcement patterns for external-facing community responses"
|
|
4
|
+
domain: "communication, tone, community"
|
|
5
|
+
confidence: "low"
|
|
6
|
+
source: "manual (RFC #426 — PAO External Communications)"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
|
|
11
|
+
Use this skill whenever PAO drafts external-facing responses for issues or discussions.
|
|
12
|
+
|
|
13
|
+
- Tone must be warm, helpful, and human-sounding — never robotic or corporate.
|
|
14
|
+
- Brady's constraint applies everywhere: **Humanized tone is mandatory**.
|
|
15
|
+
- This applies to **all external-facing content** drafted by PAO in Phase 1 issues/discussions workflows.
|
|
16
|
+
|
|
17
|
+
## Patterns
|
|
18
|
+
|
|
19
|
+
1. **Warm opening** — Start with acknowledgment ("Thanks for reporting this", "Great question!")
|
|
20
|
+
2. **Active voice** — "We're looking into this" not "This is being investigated"
|
|
21
|
+
3. **Second person** — Address the person directly ("you" not "the user")
|
|
22
|
+
4. **Conversational connectors** — "That said...", "Here's what we found...", "Quick note:"
|
|
23
|
+
5. **Specific, not vague** — "This affects the casting module in v0.8.x" not "We are aware of issues"
|
|
24
|
+
6. **Empathy markers** — "I can see how that would be frustrating", "Good catch!"
|
|
25
|
+
7. **Action-oriented closes** — "Let us know if that helps!" not "Please advise if further assistance is required"
|
|
26
|
+
8. **Uncertainty is OK** — "We're not 100% sure yet, but here's what we think is happening..." is better than false confidence
|
|
27
|
+
9. **Profanity filter** — Never include profanity, slurs, or aggressive language, even when quoting
|
|
28
|
+
10. **Baseline comparison** — Responses should align with tone of 5-10 "gold standard" responses (>80% similarity threshold)
|
|
29
|
+
11. **Empathetic disagreement** — "We hear you. That's a fair concern." before explaining the reasoning
|
|
30
|
+
12. **Information request** — Ask for specific details, not open-ended "can you provide more info?"
|
|
31
|
+
13. **No link-dumping** — Don't just paste URLs. Provide context: "Check out the [getting started guide](url) — specifically the section on routing" not just a bare link
|
|
32
|
+
|
|
33
|
+
## Examples
|
|
34
|
+
|
|
35
|
+
### 1. Welcome
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
Hey {author}! Welcome to Squad 👋 Thanks for opening this.
|
|
39
|
+
{substantive response}
|
|
40
|
+
Let us know if you have questions — happy to help!
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 2. Troubleshooting
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
Thanks for the detailed report, {author}!
|
|
47
|
+
Here's what we think is happening: {explanation}
|
|
48
|
+
{steps or workaround}
|
|
49
|
+
Let us know if that helps, or if you're seeing something different.
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 3. Feature guidance
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
Great question! {context on current state}
|
|
56
|
+
{guidance or workaround}
|
|
57
|
+
We've noted this as a potential improvement — {tracking info if applicable}.
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 4. Redirect
|
|
61
|
+
|
|
62
|
+
```text
|
|
63
|
+
Thanks for reaching out! This one is actually better suited for {correct location}.
|
|
64
|
+
{brief explanation of why}
|
|
65
|
+
Feel free to open it there — they'll be able to help!
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 5. Acknowledgment
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
Good catch, {author}. We've confirmed this is a real issue.
|
|
72
|
+
{what we know so far}
|
|
73
|
+
We'll update this thread when we have a fix. Thanks for flagging it!
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 6. Closing
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
This should be resolved in {version/PR}! 🎉
|
|
80
|
+
{brief summary of what changed}
|
|
81
|
+
Thanks for reporting this, {author} — it made Squad better.
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 7. Technical uncertainty
|
|
85
|
+
|
|
86
|
+
```text
|
|
87
|
+
Interesting find, {author}. We're not 100% sure what's causing this yet.
|
|
88
|
+
Here's what we've ruled out: {list}
|
|
89
|
+
We'd love more context if you have it — {specific ask}.
|
|
90
|
+
We'll dig deeper and update this thread.
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Anti-Patterns
|
|
94
|
+
|
|
95
|
+
- ❌ Corporate speak: "We appreciate your patience as we investigate this matter"
|
|
96
|
+
- ❌ Marketing hype: "Squad is the BEST way to..." or "This amazing feature..."
|
|
97
|
+
- ❌ Passive voice: "It has been determined that..." or "The issue is being tracked"
|
|
98
|
+
- ❌ Dismissive: "This works as designed" without empathy
|
|
99
|
+
- ❌ Over-promising: "We'll ship this next week" without commitment from the team
|
|
100
|
+
- ❌ Empty acknowledgment: "Thanks for your feedback" with no substance
|
|
101
|
+
- ❌ Robot signatures: "Best regards, PAO" or "Sincerely, The Squad Team"
|
|
102
|
+
- ❌ Excessive emoji: More than 1-2 emoji per response
|
|
103
|
+
- ❌ Quoting profanity: Even when the original issue contains it, paraphrase instead
|
|
104
|
+
- ❌ Link-dumping: Pasting URLs without context ("See: https://...")
|
|
105
|
+
- ❌ Open-ended info requests: "Can you provide more information?" without specifying what information
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "init-mode"
|
|
3
|
-
description: "Team initialization flow (Phase 1 proposal + Phase 2 creation)"
|
|
4
|
-
domain: "orchestration"
|
|
5
|
-
confidence: "high"
|
|
6
|
-
source: "extracted"
|
|
7
|
-
tools:
|
|
8
|
-
- name: "ask_user"
|
|
9
|
-
description: "Confirm team roster with selectable menu"
|
|
10
|
-
when: "Phase 1 proposal — requires explicit user confirmation"
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## Context
|
|
14
|
-
|
|
15
|
-
Init Mode activates when `.squad/team.md` does not exist, or exists but has zero roster entries under `## Members`. The coordinator proposes a team (Phase 1), waits for user confirmation, then creates the team structure (Phase 2).
|
|
16
|
-
|
|
17
|
-
## Patterns
|
|
18
|
-
|
|
19
|
-
### Phase 1: Propose the Team
|
|
20
|
-
|
|
21
|
-
No team exists yet. Propose one — but **DO NOT create any files until the user confirms.**
|
|
22
|
-
|
|
23
|
-
1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey Brady, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.**
|
|
24
|
-
2. Ask: *"What are you building? (language, stack, what it does)"*
|
|
25
|
-
3. **Cast the team.** Before proposing names, run the Casting & Persistent Naming algorithm (see that section):
|
|
26
|
-
- Determine team size (typically 4–5 + Scribe).
|
|
27
|
-
- Determine assignment shape from the user's project description.
|
|
28
|
-
- Derive resonance signals from the session and repo context.
|
|
29
|
-
- Select a universe. If the universe is custom, allocate character names from that universe based on the related list found in the `.squad/templates/casting/` directory. Prefer custom universes when available.
|
|
30
|
-
- Scribe is always "Scribe" — exempt from casting.
|
|
31
|
-
- Ralph is always "Ralph" — exempt from casting.
|
|
32
|
-
4. Propose the team with their cast names. Example (names will vary per cast):
|
|
33
|
-
|
|
34
|
-
```
|
|
35
|
-
🏗️ {CastName1} — Lead Scope, decisions, code review
|
|
36
|
-
⚛️ {CastName2} — Frontend Dev React, UI, components
|
|
37
|
-
🔧 {CastName3} — Backend Dev APIs, database, services
|
|
38
|
-
🧪 {CastName4} — Tester Tests, quality, edge cases
|
|
39
|
-
📋 Scribe — (silent) Memory, decisions, session logs
|
|
40
|
-
🔄 Ralph — (monitor) Work queue, backlog, keep-alive
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
5. Use the `ask_user` tool to confirm the roster. Provide choices so the user sees a selectable menu:
|
|
44
|
-
- **question:** *"Look right?"*
|
|
45
|
-
- **choices:** `["Yes, hire this team", "Add someone", "Change a role"]`
|
|
46
|
-
|
|
47
|
-
**⚠️ STOP. Your response ENDS here. Do NOT proceed to Phase 2. Do NOT create any files or directories. Wait for the user's reply.**
|
|
48
|
-
|
|
49
|
-
### Phase 2: Create the Team
|
|
50
|
-
|
|
51
|
-
**Trigger:** The user replied to Phase 1 with confirmation ("yes", "looks good", or similar affirmative), OR the user's reply to Phase 1 is a task (treat as implicit "yes").
|
|
52
|
-
|
|
53
|
-
> If the user said "add someone" or "change a role," go back to Phase 1 step 3 and re-propose. Do NOT enter Phase 2 until the user confirms.
|
|
54
|
-
|
|
55
|
-
6. Create the `.squad/` directory structure (see `.squad/templates/` for format guides or use the standard structure: team.md, routing.md, ceremonies.md, decisions.md, decisions/inbox/, casting/, agents/, orchestration-log/, skills/, log/).
|
|
56
|
-
|
|
57
|
-
**Casting state initialization:** Copy `.squad/templates/casting-policy.json` to `.squad/casting/policy.json` (or create from defaults). Create `registry.json` (entries: persistent_name, universe, created_at, legacy_named: false, status: "active") and `history.json` (first assignment snapshot with unique assignment_id).
|
|
58
|
-
|
|
59
|
-
**Seeding:** Each agent's `history.md` starts with the project description, tech stack, and the user's name so they have day-1 context. Agent folder names are the cast name in lowercase (e.g., `.squad/agents/ripley/`). The Scribe's charter includes maintaining `decisions.md` and cross-agent context sharing.
|
|
60
|
-
|
|
61
|
-
**Team.md structure:** `team.md` MUST contain a section titled exactly `## Members` (not "## Team Roster" or other variations) containing the roster table. This header is hard-coded in GitHub workflows (`squad-heartbeat.yml`, `squad-issue-assign.yml`, `squad-triage.yml`, `sync-squad-labels.yml`) for label automation. If the header is missing or titled differently, label routing breaks.
|
|
62
|
-
|
|
63
|
-
**Merge driver for append-only files:** Create or update `.gitattributes` at the repo root to enable conflict-free merging of `.squad/` state across branches:
|
|
64
|
-
```
|
|
65
|
-
.squad/decisions.md merge=union
|
|
66
|
-
.squad/agents/*/history.md merge=union
|
|
67
|
-
.squad/log/** merge=union
|
|
68
|
-
.squad/orchestration-log/** merge=union
|
|
69
|
-
```
|
|
70
|
-
The `union` merge driver keeps all lines from both sides, which is correct for append-only files. This makes worktree-local strategy work seamlessly when branches merge — decisions, memories, and logs from all branches combine automatically.
|
|
71
|
-
|
|
72
|
-
7. Say: *"✅ Team hired. Try: '{FirstCastName}, set up the project structure'"*
|
|
73
|
-
|
|
74
|
-
8. **Post-setup input sources** (optional — ask after team is created, not during casting):
|
|
75
|
-
- PRD/spec: *"Do you have a PRD or spec document? (file path, paste it, or skip)"* → If provided, follow PRD Mode flow
|
|
76
|
-
- GitHub issues: *"Is there a GitHub repo with issues I should pull from? (owner/repo, or skip)"* → If provided, follow GitHub Issues Mode flow
|
|
77
|
-
- Human members: *"Are any humans joining the team? (names and roles, or just AI for now)"* → If provided, add per Human Team Members section
|
|
78
|
-
- Copilot agent: *"Want to include @copilot? It can pick up issues autonomously. (yes/no)"* → If yes, follow Copilot Coding Agent Member section and ask about auto-assignment
|
|
79
|
-
- These are additive. Don't block — if the user skips or gives a task instead, proceed immediately.
|
|
80
|
-
|
|
81
|
-
## Examples
|
|
82
|
-
|
|
83
|
-
**Example flow:**
|
|
84
|
-
1. Coordinator detects no team.md → Init Mode
|
|
85
|
-
2. Runs `git config user.name` → "Brady"
|
|
86
|
-
3. Asks: *"Hey Brady, what are you building?"*
|
|
87
|
-
4. User: *"TypeScript CLI tool with GitHub API integration"*
|
|
88
|
-
5. Coordinator runs casting algorithm → selects "The Usual Suspects" universe
|
|
89
|
-
6. Proposes: Keaton (Lead), Verbal (Prompt), Fenster (Backend), Hockney (Tester), Scribe, Ralph
|
|
90
|
-
7. Uses `ask_user` with choices → user selects "Yes, hire this team"
|
|
91
|
-
8. Coordinator creates `.squad/` structure, initializes casting state, seeds agents
|
|
92
|
-
9. Says: *"✅ Team hired. Try: 'Keaton, set up the project structure'"*
|
|
93
|
-
|
|
94
|
-
## Anti-Patterns
|
|
95
|
-
|
|
96
|
-
- ❌ Creating files before user confirms Phase 1
|
|
97
|
-
- ❌ Mixing agents from different universes in the same cast
|
|
98
|
-
- ❌ Skipping the `ask_user` tool and assuming confirmation
|
|
99
|
-
- ❌ Proceeding to Phase 2 when user said "add someone" or "change a role"
|
|
100
|
-
- ❌ Using `## Team Roster` instead of `## Members` as the header (breaks GitHub workflows)
|
|
101
|
-
- ❌ Forgetting to initialize `.squad/casting/` state files
|
|
102
|
-
- ❌ Reading or storing `git config user.email` (PII violation)
|
|
1
|
+
---
|
|
2
|
+
name: "init-mode"
|
|
3
|
+
description: "Team initialization flow (Phase 1 proposal + Phase 2 creation)"
|
|
4
|
+
domain: "orchestration"
|
|
5
|
+
confidence: "high"
|
|
6
|
+
source: "extracted"
|
|
7
|
+
tools:
|
|
8
|
+
- name: "ask_user"
|
|
9
|
+
description: "Confirm team roster with selectable menu"
|
|
10
|
+
when: "Phase 1 proposal — requires explicit user confirmation"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Context
|
|
14
|
+
|
|
15
|
+
Init Mode activates when `.squad/team.md` does not exist, or exists but has zero roster entries under `## Members`. The coordinator proposes a team (Phase 1), waits for user confirmation, then creates the team structure (Phase 2).
|
|
16
|
+
|
|
17
|
+
## Patterns
|
|
18
|
+
|
|
19
|
+
### Phase 1: Propose the Team
|
|
20
|
+
|
|
21
|
+
No team exists yet. Propose one — but **DO NOT create any files until the user confirms.**
|
|
22
|
+
|
|
23
|
+
1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *"Hey Brady, what are you building?"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.**
|
|
24
|
+
2. Ask: *"What are you building? (language, stack, what it does)"*
|
|
25
|
+
3. **Cast the team.** Before proposing names, run the Casting & Persistent Naming algorithm (see that section):
|
|
26
|
+
- Determine team size (typically 4–5 + Scribe).
|
|
27
|
+
- Determine assignment shape from the user's project description.
|
|
28
|
+
- Derive resonance signals from the session and repo context.
|
|
29
|
+
- Select a universe. If the universe is custom, allocate character names from that universe based on the related list found in the `.squad/templates/casting/` directory. Prefer custom universes when available.
|
|
30
|
+
- Scribe is always "Scribe" — exempt from casting.
|
|
31
|
+
- Ralph is always "Ralph" — exempt from casting.
|
|
32
|
+
4. Propose the team with their cast names. Example (names will vary per cast):
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
🏗️ {CastName1} — Lead Scope, decisions, code review
|
|
36
|
+
⚛️ {CastName2} — Frontend Dev React, UI, components
|
|
37
|
+
🔧 {CastName3} — Backend Dev APIs, database, services
|
|
38
|
+
🧪 {CastName4} — Tester Tests, quality, edge cases
|
|
39
|
+
📋 Scribe — (silent) Memory, decisions, session logs
|
|
40
|
+
🔄 Ralph — (monitor) Work queue, backlog, keep-alive
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
5. Use the `ask_user` tool to confirm the roster. Provide choices so the user sees a selectable menu:
|
|
44
|
+
- **question:** *"Look right?"*
|
|
45
|
+
- **choices:** `["Yes, hire this team", "Add someone", "Change a role"]`
|
|
46
|
+
|
|
47
|
+
**⚠️ STOP. Your response ENDS here. Do NOT proceed to Phase 2. Do NOT create any files or directories. Wait for the user's reply.**
|
|
48
|
+
|
|
49
|
+
### Phase 2: Create the Team
|
|
50
|
+
|
|
51
|
+
**Trigger:** The user replied to Phase 1 with confirmation ("yes", "looks good", or similar affirmative), OR the user's reply to Phase 1 is a task (treat as implicit "yes").
|
|
52
|
+
|
|
53
|
+
> If the user said "add someone" or "change a role," go back to Phase 1 step 3 and re-propose. Do NOT enter Phase 2 until the user confirms.
|
|
54
|
+
|
|
55
|
+
6. Create the `.squad/` directory structure (see `.squad/templates/` for format guides or use the standard structure: team.md, routing.md, ceremonies.md, decisions.md, decisions/inbox/, casting/, agents/, orchestration-log/, skills/, log/).
|
|
56
|
+
|
|
57
|
+
**Casting state initialization:** Copy `.squad/templates/casting-policy.json` to `.squad/casting/policy.json` (or create from defaults). Create `registry.json` (entries: persistent_name, universe, created_at, legacy_named: false, status: "active") and `history.json` (first assignment snapshot with unique assignment_id).
|
|
58
|
+
|
|
59
|
+
**Seeding:** Each agent's `history.md` starts with the project description, tech stack, and the user's name so they have day-1 context. Agent folder names are the cast name in lowercase (e.g., `.squad/agents/ripley/`). The Scribe's charter includes maintaining `decisions.md` and cross-agent context sharing.
|
|
60
|
+
|
|
61
|
+
**Team.md structure:** `team.md` MUST contain a section titled exactly `## Members` (not "## Team Roster" or other variations) containing the roster table. This header is hard-coded in GitHub workflows (`squad-heartbeat.yml`, `squad-issue-assign.yml`, `squad-triage.yml`, `sync-squad-labels.yml`) for label automation. If the header is missing or titled differently, label routing breaks.
|
|
62
|
+
|
|
63
|
+
**Merge driver for append-only files:** Create or update `.gitattributes` at the repo root to enable conflict-free merging of `.squad/` state across branches:
|
|
64
|
+
```
|
|
65
|
+
.squad/decisions.md merge=union
|
|
66
|
+
.squad/agents/*/history.md merge=union
|
|
67
|
+
.squad/log/** merge=union
|
|
68
|
+
.squad/orchestration-log/** merge=union
|
|
69
|
+
```
|
|
70
|
+
The `union` merge driver keeps all lines from both sides, which is correct for append-only files. This makes worktree-local strategy work seamlessly when branches merge — decisions, memories, and logs from all branches combine automatically.
|
|
71
|
+
|
|
72
|
+
7. Say: *"✅ Team hired. Try: '{FirstCastName}, set up the project structure'"*
|
|
73
|
+
|
|
74
|
+
8. **Post-setup input sources** (optional — ask after team is created, not during casting):
|
|
75
|
+
- PRD/spec: *"Do you have a PRD or spec document? (file path, paste it, or skip)"* → If provided, follow PRD Mode flow
|
|
76
|
+
- GitHub issues: *"Is there a GitHub repo with issues I should pull from? (owner/repo, or skip)"* → If provided, follow GitHub Issues Mode flow
|
|
77
|
+
- Human members: *"Are any humans joining the team? (names and roles, or just AI for now)"* → If provided, add per Human Team Members section
|
|
78
|
+
- Copilot agent: *"Want to include @copilot? It can pick up issues autonomously. (yes/no)"* → If yes, follow Copilot Coding Agent Member section and ask about auto-assignment
|
|
79
|
+
- These are additive. Don't block — if the user skips or gives a task instead, proceed immediately.
|
|
80
|
+
|
|
81
|
+
## Examples
|
|
82
|
+
|
|
83
|
+
**Example flow:**
|
|
84
|
+
1. Coordinator detects no team.md → Init Mode
|
|
85
|
+
2. Runs `git config user.name` → "Brady"
|
|
86
|
+
3. Asks: *"Hey Brady, what are you building?"*
|
|
87
|
+
4. User: *"TypeScript CLI tool with GitHub API integration"*
|
|
88
|
+
5. Coordinator runs casting algorithm → selects "The Usual Suspects" universe
|
|
89
|
+
6. Proposes: Keaton (Lead), Verbal (Prompt), Fenster (Backend), Hockney (Tester), Scribe, Ralph
|
|
90
|
+
7. Uses `ask_user` with choices → user selects "Yes, hire this team"
|
|
91
|
+
8. Coordinator creates `.squad/` structure, initializes casting state, seeds agents
|
|
92
|
+
9. Says: *"✅ Team hired. Try: 'Keaton, set up the project structure'"*
|
|
93
|
+
|
|
94
|
+
## Anti-Patterns
|
|
95
|
+
|
|
96
|
+
- ❌ Creating files before user confirms Phase 1
|
|
97
|
+
- ❌ Mixing agents from different universes in the same cast
|
|
98
|
+
- ❌ Skipping the `ask_user` tool and assuming confirmation
|
|
99
|
+
- ❌ Proceeding to Phase 2 when user said "add someone" or "change a role"
|
|
100
|
+
- ❌ Using `## Team Roster` instead of `## Members` as the header (breaks GitHub workflows)
|
|
101
|
+
- ❌ Forgetting to initialize `.squad/casting/` state files
|
|
102
|
+
- ❌ Reading or storing `git config user.email` (PII violation)
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "iterative-retrieval"
|
|
3
|
+
description: "Max-3-cycle protocol for agent sub-tasks with WHY context and coordinator validation. Use when spawning sub-agents to complete scoped work."
|
|
4
|
+
domain: "agent-coordination"
|
|
5
|
+
confidence: "high"
|
|
6
|
+
license: MIT
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Iterative Retrieval Skill
|
|
10
|
+
|
|
11
|
+
Squad agents frequently spawn sub-agents to complete scoped work. Without structure, these
|
|
12
|
+
handoffs become vague, cycles multiply, and outputs land without being checked. The
|
|
13
|
+
**Iterative Retrieval Pattern** caps cycles at 3, mandates WHY context in every spawn, and
|
|
14
|
+
requires the coordinator to validate agent output before closing an issue.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Spawn Prompt Template
|
|
19
|
+
|
|
20
|
+
Every agent spawn must include the following four sections. Copy and fill in the template:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
## Task
|
|
24
|
+
{What you need done — concrete and bounded}
|
|
25
|
+
|
|
26
|
+
## WHY this matters
|
|
27
|
+
{The motivation and context. What system or user goal does this serve? What breaks if skipped?}
|
|
28
|
+
|
|
29
|
+
## Success criteria
|
|
30
|
+
{How you will know the output is correct. Be explicit — list acceptance criteria, not vibes.}
|
|
31
|
+
Example:
|
|
32
|
+
- [ ] File X exists and contains Y
|
|
33
|
+
- [ ] No regressions in existing tests
|
|
34
|
+
- [ ] PR is open targeting main with description matching the issue
|
|
35
|
+
|
|
36
|
+
## Escalation path
|
|
37
|
+
{What the agent should do if uncertain or stuck. "Stop and ask me" is valid.}
|
|
38
|
+
Example:
|
|
39
|
+
- If requirements are ambiguous → stop, comment on the issue, set label status:needs-decision
|
|
40
|
+
- If blocked by a dependency → label status:blocked, explain in a comment
|
|
41
|
+
- If 3 cycles exhausted without resolution → write a summary to inbox and surface to coordinator
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 3-Cycle Protocol
|
|
47
|
+
|
|
48
|
+
| Cycle | Description | Exit condition |
|
|
49
|
+
|-------|-------------|----------------|
|
|
50
|
+
| **1** | Initial attempt | Done → coordinator validates. Incomplete → surface delta. |
|
|
51
|
+
| **2** | Targeted retry with specific corrections | Done → coordinator validates. Incomplete → one more. |
|
|
52
|
+
| **3** | Final attempt with all context from cycles 1–2 | Done or escalate — no cycle 4. |
|
|
53
|
+
|
|
54
|
+
### Rules
|
|
55
|
+
|
|
56
|
+
1. **After each cycle**, the coordinator evaluates the output against the success criteria
|
|
57
|
+
before accepting it or spawning the next cycle.
|
|
58
|
+
2. **Objective context forward**: each subsequent spawn includes a summary of what was tried
|
|
59
|
+
and what is still missing — not just a repeat of the original task.
|
|
60
|
+
3. **Cycle 3 exhausted** → escalate: write a summary to `.squad/decisions/inbox/`, label the
|
|
61
|
+
issue `status:needs-decision`, and notify the user.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Coordinator Validation Checklist
|
|
66
|
+
|
|
67
|
+
Before accepting agent output and closing an issue, the coordinator must check:
|
|
68
|
+
|
|
69
|
+
- [ ] All success criteria from the spawn prompt are met
|
|
70
|
+
- [ ] PR exists and description matches the issue (if code work)
|
|
71
|
+
- [ ] No obvious regressions (grep for TODO/FIXME introduced, build passes)
|
|
72
|
+
- [ ] Agent did not silently skip parts of the task
|
|
73
|
+
- [ ] If the agent reported uncertainty — was it resolved or escalated?
|
|
74
|
+
|
|
75
|
+
If any item fails → do **not** accept. Spawn cycle N+1 (up to cycle 3) with specific deltas.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## When to Escalate vs Retry
|
|
80
|
+
|
|
81
|
+
**Retry (cycle N+1)** when:
|
|
82
|
+
- Output is structurally correct but missing specific items
|
|
83
|
+
- Agent misunderstood scope (provide more context and re-run)
|
|
84
|
+
- Partial success — clearly identified remaining delta
|
|
85
|
+
|
|
86
|
+
**Escalate** when:
|
|
87
|
+
- Requirements are fundamentally unclear (decision needed)
|
|
88
|
+
- 3 cycles complete without convergence
|
|
89
|
+
- Agent returned conflicting results across cycles
|
|
90
|
+
- Task requires elevated permissions or external action
|
|
91
|
+
- The work depends on another issue that isn't done yet
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Issue Dedup Check (Mandatory)
|
|
96
|
+
|
|
97
|
+
Before any agent creates a GitHub issue, it **must** search for existing open issues to avoid
|
|
98
|
+
duplicates.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Check for existing open issues before creating a new one
|
|
102
|
+
gh issue list --search "<keywords from your issue title>" --state open
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
- If an open issue already covers the same problem → **comment on it** instead of creating a new one.
|
|
106
|
+
- If no duplicate → proceed to create the issue.
|
|
107
|
+
- Use 2–3 representative keywords from the planned issue title as the search query.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Mandatory Output Requirement (Research-Then-Execute)
|
|
112
|
+
|
|
113
|
+
Every research or analysis task completed under this protocol **MUST** end with at least one
|
|
114
|
+
concrete action before the cycle is closed. Acceptable follow-up actions:
|
|
115
|
+
|
|
116
|
+
- GitHub issue created documenting the findings and next steps
|
|
117
|
+
- PR opened implementing a recommendation
|
|
118
|
+
- Decision recorded in `.squad/decisions/inbox/`
|
|
119
|
+
- Documented recommendation with a named assignee and due date
|
|
120
|
+
|
|
121
|
+
**Pure analysis reports without actionable follow-up will be rejected during triage.**
|
|
122
|
+
If no action is warranted, the agent must explicitly state why and get coordinator sign-off.
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Anti-Patterns
|
|
127
|
+
|
|
128
|
+
- **Spawning without WHY** — agents can't prioritise trade-offs without motivation context.
|
|
129
|
+
- **Accepting output without validating** — one failed check avoids merging broken work.
|
|
130
|
+
- **Cycle 4+** — if 3 cycles haven't converged, the problem is in the requirements, not the agent.
|
|
131
|
+
- **Vague success criteria** — "looks good" is not a criterion. Use checkboxes.
|
|
132
|
+
- **Forwarding WHAT without delta** — cycle 2+ prompts must include what cycle 1 got wrong.
|
|
133
|
+
- **Creating issues without dedup check** — always search before creating.
|
|
134
|
+
- **Research without action** — delivering analysis with no issue, PR, decision, or assignee is incomplete work.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Examples
|
|
139
|
+
|
|
140
|
+
### Good spawn prompt
|
|
141
|
+
```
|
|
142
|
+
## Task
|
|
143
|
+
Add an "Iterative Retrieval Protocol" section to `.squad/agents/coordinator/charter.md` explaining
|
|
144
|
+
the 3-cycle rule, WHY format, and validation checklist.
|
|
145
|
+
|
|
146
|
+
## WHY this matters
|
|
147
|
+
The coordinator spawns sub-agents on every round. Without a documented protocol, agents run unbounded
|
|
148
|
+
cycles and outputs go unvalidated — leading to stale issues and silent failures.
|
|
149
|
+
|
|
150
|
+
## Success criteria
|
|
151
|
+
- [ ] Section "Iterative Retrieval Protocol" exists in charter.md
|
|
152
|
+
- [ ] Section documents max-3-cycles rule
|
|
153
|
+
- [ ] Section documents WHY format requirement
|
|
154
|
+
- [ ] Section contains validation checklist (at least 4 items)
|
|
155
|
+
- [ ] No other sections of charter.md are modified
|
|
156
|
+
|
|
157
|
+
## Escalation path
|
|
158
|
+
If the charter.md format is unclear, check another agent charter as a reference.
|
|
159
|
+
If uncertain about content, stop and surface to coordinator.
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Bad spawn prompt (don't do this)
|
|
163
|
+
```
|
|
164
|
+
Update the coordinator charter with the iterative retrieval stuff.
|
|
165
|
+
```
|