@bradygaster/squad-cli 0.9.2-insider.6 → 0.9.4-insider.1

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.
Files changed (141) hide show
  1. package/README.md +33 -0
  2. package/dist/cli/commands/doctor.d.ts +2 -0
  3. package/dist/cli/commands/doctor.d.ts.map +1 -1
  4. package/dist/cli/commands/doctor.js +27 -5
  5. package/dist/cli/commands/doctor.js.map +1 -1
  6. package/dist/cli/commands/externalize.d.ts +27 -0
  7. package/dist/cli/commands/externalize.d.ts.map +1 -0
  8. package/dist/cli/commands/externalize.js +207 -0
  9. package/dist/cli/commands/externalize.js.map +1 -0
  10. package/dist/cli/commands/loop.d.ts +56 -0
  11. package/dist/cli/commands/loop.d.ts.map +1 -0
  12. package/dist/cli/commands/loop.js +352 -0
  13. package/dist/cli/commands/loop.js.map +1 -0
  14. package/dist/cli/commands/migrate.js +2 -2
  15. package/dist/cli/commands/migrate.js.map +1 -1
  16. package/dist/cli/commands/rc.js +2 -2
  17. package/dist/cli/commands/rc.js.map +1 -1
  18. package/dist/cli/commands/watch/capabilities/cleanup.d.ts +18 -0
  19. package/dist/cli/commands/watch/capabilities/cleanup.d.ts.map +1 -0
  20. package/dist/cli/commands/watch/capabilities/cleanup.js +135 -0
  21. package/dist/cli/commands/watch/capabilities/cleanup.js.map +1 -0
  22. package/dist/cli/commands/watch/capabilities/execute.d.ts +15 -3
  23. package/dist/cli/commands/watch/capabilities/execute.d.ts.map +1 -1
  24. package/dist/cli/commands/watch/capabilities/execute.js +106 -86
  25. package/dist/cli/commands/watch/capabilities/execute.js.map +1 -1
  26. package/dist/cli/commands/watch/capabilities/fleet-dispatch.d.ts +20 -0
  27. package/dist/cli/commands/watch/capabilities/fleet-dispatch.d.ts.map +1 -0
  28. package/dist/cli/commands/watch/capabilities/fleet-dispatch.js +144 -0
  29. package/dist/cli/commands/watch/capabilities/fleet-dispatch.js.map +1 -0
  30. package/dist/cli/commands/watch/capabilities/index.d.ts +0 -2
  31. package/dist/cli/commands/watch/capabilities/index.d.ts.map +1 -1
  32. package/dist/cli/commands/watch/capabilities/index.js +4 -12
  33. package/dist/cli/commands/watch/capabilities/index.js.map +1 -1
  34. package/dist/cli/commands/watch/capabilities/self-pull.d.ts +4 -1
  35. package/dist/cli/commands/watch/capabilities/self-pull.d.ts.map +1 -1
  36. package/dist/cli/commands/watch/capabilities/self-pull.js +53 -5
  37. package/dist/cli/commands/watch/capabilities/self-pull.js.map +1 -1
  38. package/dist/cli/commands/watch/config.d.ts +10 -15
  39. package/dist/cli/commands/watch/config.d.ts.map +1 -1
  40. package/dist/cli/commands/watch/config.js +14 -47
  41. package/dist/cli/commands/watch/config.js.map +1 -1
  42. package/dist/cli/commands/watch/health.d.ts +41 -0
  43. package/dist/cli/commands/watch/health.d.ts.map +1 -0
  44. package/dist/cli/commands/watch/health.js +141 -0
  45. package/dist/cli/commands/watch/health.js.map +1 -0
  46. package/dist/cli/commands/watch/index.d.ts +9 -16
  47. package/dist/cli/commands/watch/index.d.ts.map +1 -1
  48. package/dist/cli/commands/watch/index.js +117 -63
  49. package/dist/cli/commands/watch/index.js.map +1 -1
  50. package/dist/cli/commands/watch/types.d.ts +2 -0
  51. package/dist/cli/commands/watch/types.d.ts.map +1 -1
  52. package/dist/cli/commands/watch/verbose.d.ts +12 -0
  53. package/dist/cli/commands/watch/verbose.d.ts.map +1 -0
  54. package/dist/cli/commands/watch/verbose.js +28 -0
  55. package/dist/cli/commands/watch/verbose.js.map +1 -0
  56. package/dist/cli/core/detect-squad-dir.d.ts.map +1 -1
  57. package/dist/cli/core/detect-squad-dir.js +9 -12
  58. package/dist/cli/core/detect-squad-dir.js.map +1 -1
  59. package/dist/cli/core/email-scrub.js +2 -2
  60. package/dist/cli/core/email-scrub.js.map +1 -1
  61. package/dist/cli/core/init.d.ts.map +1 -1
  62. package/dist/cli/core/init.js +4 -1
  63. package/dist/cli/core/init.js.map +1 -1
  64. package/dist/cli/core/migrations.js +1 -1
  65. package/dist/cli/core/migrations.js.map +1 -1
  66. package/dist/cli/core/nap.js +2 -2
  67. package/dist/cli/core/nap.js.map +1 -1
  68. package/dist/cli/core/project-type.js +1 -1
  69. package/dist/cli/core/project-type.js.map +1 -1
  70. package/dist/cli/core/templates.d.ts.map +1 -1
  71. package/dist/cli/core/templates.js +48 -0
  72. package/dist/cli/core/templates.js.map +1 -1
  73. package/dist/cli/core/upgrade.d.ts +20 -0
  74. package/dist/cli/core/upgrade.d.ts.map +1 -1
  75. package/dist/cli/core/upgrade.js +141 -15
  76. package/dist/cli/core/upgrade.js.map +1 -1
  77. package/dist/cli/shell/session-store.js +2 -2
  78. package/dist/cli/shell/session-store.js.map +1 -1
  79. package/dist/cli-entry.js +201 -89
  80. package/dist/cli-entry.js.map +1 -1
  81. package/package.json +6 -2
  82. package/templates/casting-reference.md +104 -104
  83. package/templates/ceremonies.md +28 -0
  84. package/templates/fact-checker-charter.md +83 -0
  85. package/templates/issue-lifecycle.md +2 -1
  86. package/templates/loop.md +46 -0
  87. package/templates/ralph-triage.js +3 -1
  88. package/templates/scribe-charter.md +20 -1
  89. package/templates/skills/external-comms/SKILL.md +329 -329
  90. package/templates/skills/gh-auth-isolation/SKILL.md +183 -183
  91. package/templates/skills/humanizer/SKILL.md +105 -105
  92. package/templates/skills/pr-review-response/SKILL.md +268 -0
  93. package/templates/skills/pr-screenshots/SKILL.md +149 -149
  94. package/templates/skills/versioning-policy/SKILL.md +119 -0
  95. package/templates/squad.agent.md.template +9 -7
  96. package/templates/workflows/squad-triage.yml +4 -2
  97. package/templates/workflows/sync-squad-labels.yml +3 -1
  98. package/dist/cli/commands/watch/capabilities/budget-check.d.ts +0 -29
  99. package/dist/cli/commands/watch/capabilities/budget-check.d.ts.map +0 -1
  100. package/dist/cli/commands/watch/capabilities/budget-check.js +0 -38
  101. package/dist/cli/commands/watch/capabilities/budget-check.js.map +0 -1
  102. package/dist/cli/commands/watch/capabilities/circuit-breaker.d.ts +0 -52
  103. package/dist/cli/commands/watch/capabilities/circuit-breaker.d.ts.map +0 -1
  104. package/dist/cli/commands/watch/capabilities/circuit-breaker.js +0 -152
  105. package/dist/cli/commands/watch/capabilities/circuit-breaker.js.map +0 -1
  106. package/dist/cli/commands/watch/capabilities/health-check.d.ts +0 -29
  107. package/dist/cli/commands/watch/capabilities/health-check.d.ts.map +0 -1
  108. package/dist/cli/commands/watch/capabilities/health-check.js +0 -139
  109. package/dist/cli/commands/watch/capabilities/health-check.js.map +0 -1
  110. package/dist/cli/commands/watch/capabilities/heartbeat.d.ts +0 -48
  111. package/dist/cli/commands/watch/capabilities/heartbeat.d.ts.map +0 -1
  112. package/dist/cli/commands/watch/capabilities/heartbeat.js +0 -115
  113. package/dist/cli/commands/watch/capabilities/heartbeat.js.map +0 -1
  114. package/dist/cli/commands/watch/capabilities/lockfile.d.ts +0 -30
  115. package/dist/cli/commands/watch/capabilities/lockfile.d.ts.map +0 -1
  116. package/dist/cli/commands/watch/capabilities/lockfile.js +0 -100
  117. package/dist/cli/commands/watch/capabilities/lockfile.js.map +0 -1
  118. package/dist/cli/commands/watch/capabilities/machine-capabilities.d.ts +0 -30
  119. package/dist/cli/commands/watch/capabilities/machine-capabilities.d.ts.map +0 -1
  120. package/dist/cli/commands/watch/capabilities/machine-capabilities.js +0 -103
  121. package/dist/cli/commands/watch/capabilities/machine-capabilities.js.map +0 -1
  122. package/dist/cli/commands/watch/capabilities/post-failure.d.ts +0 -19
  123. package/dist/cli/commands/watch/capabilities/post-failure.d.ts.map +0 -1
  124. package/dist/cli/commands/watch/capabilities/post-failure.js +0 -58
  125. package/dist/cli/commands/watch/capabilities/post-failure.js.map +0 -1
  126. package/dist/cli/commands/watch/capabilities/priority.d.ts +0 -59
  127. package/dist/cli/commands/watch/capabilities/priority.d.ts.map +0 -1
  128. package/dist/cli/commands/watch/capabilities/priority.js +0 -101
  129. package/dist/cli/commands/watch/capabilities/priority.js.map +0 -1
  130. package/dist/cli/commands/watch/capabilities/rate-pool.d.ts +0 -67
  131. package/dist/cli/commands/watch/capabilities/rate-pool.d.ts.map +0 -1
  132. package/dist/cli/commands/watch/capabilities/rate-pool.js +0 -187
  133. package/dist/cli/commands/watch/capabilities/rate-pool.js.map +0 -1
  134. package/dist/cli/commands/watch/capabilities/stale-reclaim.d.ts +0 -23
  135. package/dist/cli/commands/watch/capabilities/stale-reclaim.d.ts.map +0 -1
  136. package/dist/cli/commands/watch/capabilities/stale-reclaim.js +0 -87
  137. package/dist/cli/commands/watch/capabilities/stale-reclaim.js.map +0 -1
  138. package/dist/cli/commands/watch/capabilities/webhook-alerts.d.ts +0 -29
  139. package/dist/cli/commands/watch/capabilities/webhook-alerts.d.ts.map +0 -1
  140. package/dist/cli/commands/watch/capabilities/webhook-alerts.js +0 -114
  141. package/dist/cli/commands/watch/capabilities/webhook-alerts.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bradygaster/squad-cli",
3
- "version": "0.9.2-insider.6",
3
+ "version": "0.9.4-insider.1",
4
4
  "description": "Squad CLI — Command-line interface for the Squad multi-agent runtime",
5
5
  "type": "module",
6
6
  "bin": {
@@ -124,6 +124,10 @@
124
124
  "types": "./dist/cli/commands/watch/index.d.ts",
125
125
  "import": "./dist/cli/commands/watch/index.js"
126
126
  },
127
+ "./commands/watch/health": {
128
+ "types": "./dist/cli/commands/watch/health.d.ts",
129
+ "import": "./dist/cli/commands/watch/health.js"
130
+ },
127
131
  "./commands/start": {
128
132
  "types": "./dist/cli/commands/start.d.ts",
129
133
  "import": "./dist/cli/commands/start.js"
@@ -177,7 +181,7 @@
177
181
  "node": ">=22.5.0"
178
182
  },
179
183
  "dependencies": {
180
- "@bradygaster/squad-sdk": "*",
184
+ "@bradygaster/squad-sdk": "0.9.4-insider.1",
181
185
  "ink": "^6.8.0",
182
186
  "react": "^19.2.4",
183
187
  "vscode-jsonrpc": "^8.2.1"
@@ -1,104 +1,104 @@
1
- # Casting Reference
2
-
3
- On-demand reference for Squad's casting system. Loaded during Init Mode or when adding team members.
4
-
5
- ## Universe Table
6
-
7
- | Universe | Capacity | Shape Tags | Resonance Signals |
8
- |---|---|---|---|
9
- | The Usual Suspects | 6 | small, noir, ensemble | crime, heist, mystery, deception |
10
- | Reservoir Dogs | 8 | small, noir, ensemble | crime, heist, tension, loyalty |
11
- | Alien | 8 | small, sci-fi, survival | space, isolation, threat, engineering |
12
- | Ocean's Eleven | 14 | medium, heist, ensemble | planning, coordination, roles, charm |
13
- | Arrested Development | 15 | medium, comedy, ensemble | dysfunction, business, family, satire |
14
- | Star Wars | 12 | medium, sci-fi, epic | conflict, mentorship, legacy, rebellion |
15
- | The Matrix | 10 | medium, sci-fi, cyberpunk | systems, reality, hacking, philosophy |
16
- | Firefly | 10 | medium, sci-fi, western | frontier, crew, independence, smuggling |
17
- | The Goonies | 8 | small, adventure, ensemble | exploration, treasure, kids, teamwork |
18
- | The Simpsons | 20 | large, comedy, ensemble | satire, community, family, absurdity |
19
- | Breaking Bad | 12 | medium, drama, tension | chemistry, transformation, consequence, power |
20
- | Lost | 18 | large, mystery, ensemble | survival, mystery, groups, leadership |
21
- | Marvel Cinematic Universe | 25 | large, action, ensemble | heroism, teamwork, powers, scale |
22
- | DC Universe | 18 | large, action, ensemble | justice, duality, powers, mythology |
23
- | Futurama | 12 | medium, sci-fi, comedy | future, robots, space, absurdity |
24
-
25
- **Total: 15 universes** — capacity range 6–25.
26
-
27
- ## Selection Algorithm
28
-
29
- Universe selection is deterministic. Score each universe and pick the highest:
30
-
31
- ```
32
- score = size_fit + shape_fit + resonance_fit + LRU
33
- ```
34
-
35
- | Factor | Description |
36
- |---|---|
37
- | `size_fit` | How well the universe capacity matches the team size. Prefer universes where capacity ≥ agent_count with minimal waste. |
38
- | `shape_fit` | Match universe shape tags against the assignment shape derived from the project description. |
39
- | `resonance_fit` | Match universe resonance signals against session and repo context signals. |
40
- | `LRU` | Least-recently-used bonus — prefer universes not used in recent assignments (from `history.json`). |
41
-
42
- Same inputs → same choice (unless LRU changes between assignments).
43
-
44
- ## Casting State File Schemas
45
-
46
- ### policy.json
47
-
48
- Source template: `.squad/templates/casting-policy.json`
49
- Runtime location: `.squad/casting/policy.json`
50
-
51
- ```json
52
- {
53
- "casting_policy_version": "1.1",
54
- "allowlist_universes": ["Universe Name", "..."],
55
- "universe_capacity": {
56
- "Universe Name": 10
57
- }
58
- }
59
- ```
60
-
61
- ### registry.json
62
-
63
- Source template: `.squad/templates/casting-registry.json`
64
- Runtime location: `.squad/casting/registry.json`
65
-
66
- ```json
67
- {
68
- "agents": {
69
- "agent-role-id": {
70
- "persistent_name": "CharacterName",
71
- "universe": "Universe Name",
72
- "created_at": "ISO-8601",
73
- "legacy_named": false,
74
- "status": "active"
75
- }
76
- }
77
- }
78
- ```
79
-
80
- ### history.json
81
-
82
- Source template: `.squad/templates/casting-history.json`
83
- Runtime location: `.squad/casting/history.json`
84
-
85
- ```json
86
- {
87
- "universe_usage_history": [
88
- {
89
- "universe": "Universe Name",
90
- "assignment_id": "unique-id",
91
- "used_at": "ISO-8601"
92
- }
93
- ],
94
- "assignment_cast_snapshots": {
95
- "assignment-id": {
96
- "universe": "Universe Name",
97
- "agents": {
98
- "role-id": "CharacterName"
99
- },
100
- "created_at": "ISO-8601"
101
- }
102
- }
103
- }
104
- ```
1
+ # Casting Reference
2
+
3
+ On-demand reference for Squad's casting system. Loaded during Init Mode or when adding team members.
4
+
5
+ ## Universe Table
6
+
7
+ | Universe | Capacity | Shape Tags | Resonance Signals |
8
+ |---|---|---|---|
9
+ | The Usual Suspects | 6 | small, noir, ensemble | crime, heist, mystery, deception |
10
+ | Reservoir Dogs | 8 | small, noir, ensemble | crime, heist, tension, loyalty |
11
+ | Alien | 8 | small, sci-fi, survival | space, isolation, threat, engineering |
12
+ | Ocean's Eleven | 14 | medium, heist, ensemble | planning, coordination, roles, charm |
13
+ | Arrested Development | 15 | medium, comedy, ensemble | dysfunction, business, family, satire |
14
+ | Star Wars | 12 | medium, sci-fi, epic | conflict, mentorship, legacy, rebellion |
15
+ | The Matrix | 10 | medium, sci-fi, cyberpunk | systems, reality, hacking, philosophy |
16
+ | Firefly | 10 | medium, sci-fi, western | frontier, crew, independence, smuggling |
17
+ | The Goonies | 8 | small, adventure, ensemble | exploration, treasure, kids, teamwork |
18
+ | The Simpsons | 20 | large, comedy, ensemble | satire, community, family, absurdity |
19
+ | Breaking Bad | 12 | medium, drama, tension | chemistry, transformation, consequence, power |
20
+ | Lost | 18 | large, mystery, ensemble | survival, mystery, groups, leadership |
21
+ | Marvel Cinematic Universe | 25 | large, action, ensemble | heroism, teamwork, powers, scale |
22
+ | DC Universe | 18 | large, action, ensemble | justice, duality, powers, mythology |
23
+ | Futurama | 12 | medium, sci-fi, comedy | future, robots, space, absurdity |
24
+
25
+ **Total: 15 universes** — capacity range 6–25.
26
+
27
+ ## Selection Algorithm
28
+
29
+ Universe selection is deterministic. Score each universe and pick the highest:
30
+
31
+ ```
32
+ score = size_fit + shape_fit + resonance_fit + LRU
33
+ ```
34
+
35
+ | Factor | Description |
36
+ |---|---|
37
+ | `size_fit` | How well the universe capacity matches the team size. Prefer universes where capacity ≥ agent_count with minimal waste. |
38
+ | `shape_fit` | Match universe shape tags against the assignment shape derived from the project description. |
39
+ | `resonance_fit` | Match universe resonance signals against session and repo context signals. |
40
+ | `LRU` | Least-recently-used bonus — prefer universes not used in recent assignments (from `history.json`). |
41
+
42
+ Same inputs → same choice (unless LRU changes between assignments).
43
+
44
+ ## Casting State File Schemas
45
+
46
+ ### policy.json
47
+
48
+ Source template: `.squad/templates/casting-policy.json`
49
+ Runtime location: `.squad/casting/policy.json`
50
+
51
+ ```json
52
+ {
53
+ "casting_policy_version": "1.1",
54
+ "allowlist_universes": ["Universe Name", "..."],
55
+ "universe_capacity": {
56
+ "Universe Name": 10
57
+ }
58
+ }
59
+ ```
60
+
61
+ ### registry.json
62
+
63
+ Source template: `.squad/templates/casting-registry.json`
64
+ Runtime location: `.squad/casting/registry.json`
65
+
66
+ ```json
67
+ {
68
+ "agents": {
69
+ "agent-role-id": {
70
+ "persistent_name": "CharacterName",
71
+ "universe": "Universe Name",
72
+ "created_at": "ISO-8601",
73
+ "legacy_named": false,
74
+ "status": "active"
75
+ }
76
+ }
77
+ }
78
+ ```
79
+
80
+ ### history.json
81
+
82
+ Source template: `.squad/templates/casting-history.json`
83
+ Runtime location: `.squad/casting/history.json`
84
+
85
+ ```json
86
+ {
87
+ "universe_usage_history": [
88
+ {
89
+ "universe": "Universe Name",
90
+ "assignment_id": "unique-id",
91
+ "used_at": "ISO-8601"
92
+ }
93
+ ],
94
+ "assignment_cast_snapshots": {
95
+ "assignment-id": {
96
+ "universe": "Universe Name",
97
+ "agents": {
98
+ "role-id": "CharacterName"
99
+ },
100
+ "created_at": "ISO-8601"
101
+ }
102
+ }
103
+ }
104
+ ```
@@ -39,3 +39,31 @@
39
39
  2. Root cause analysis
40
40
  3. What should change?
41
41
  4. Action items for next iteration
42
+
43
+
44
+ ---
45
+
46
+ ## Retrospective with Enforcement
47
+
48
+ | Field | Value |
49
+ |-------|-------|
50
+ | **Trigger** | auto |
51
+ | **When** | weekly |
52
+ | **Condition** | No *retrospective* log in .squad/log/ within the last 7 days |
53
+ | **Facilitator** | lead |
54
+ | **Participants** | all |
55
+ | **Time budget** | focused |
56
+ | **Enabled** | yes |
57
+ | **Enforcement skill** | retro-enforcement |
58
+
59
+ **Agenda:**
60
+ 1. What shipped this week? (closed issues, merged PRs)
61
+ 2. What did not ship? (open issues, blockers)
62
+ 3. Root cause on any failures
63
+ 4. Action items -- each MUST become a GitHub Issue labeled retro-action
64
+
65
+ **Coordinator integration:**
66
+ At round start, call Test-RetroOverdue (see skill retro-enforcement). If overdue, run this ceremony before the work queue.
67
+
68
+ **Why GitHub Issues, not markdown:**
69
+ Production data: 0% completion across 6 retros using markdown checklists, 100% after switching to GitHub Issues.
@@ -0,0 +1,83 @@
1
+ # Fact Checker
2
+
3
+ > Trust, but verify. Every claim gets a source check.
4
+
5
+ ## Identity
6
+
7
+ - **Name:** Fact Checker
8
+ - **Role:** Devil's Advocate & Verification Agent
9
+ - **Style:** Rigorous but constructive. Flags issues clearly without being abrasive.
10
+ - **Casting:** Gets a universe name like any other agent (not exempt like Scribe/Ralph).
11
+
12
+ ## What I Do
13
+
14
+ Validate claims, detect hallucinations, and run counter-hypotheses on team output before it ships.
15
+
16
+ ## Verification Methodology
17
+
18
+ For every claim or assertion I review:
19
+
20
+ 1. **Source Check:** What evidence supports this? Can I verify it?
21
+ 2. **Counter-Hypothesis:** What would disprove this? Is there an alternative explanation?
22
+ 3. **Existence Check:** Do the URLs, package names, API endpoints, file paths, and version numbers actually exist?
23
+ 4. **Consistency Check:** Does this contradict anything in `.squad/decisions.md` or prior team output?
24
+
25
+ ## Confidence Ratings
26
+
27
+ Every verified item gets one of:
28
+
29
+ | Rating | Meaning |
30
+ |--------|---------|
31
+ | ✅ Verified | Confirmed via source, test, or direct observation |
32
+ | ⚠️ Unverified | Plausible but could not confirm — needs human review |
33
+ | ❌ Contradicted | Found evidence that contradicts the claim |
34
+ | 🔍 Needs Investigation | Requires deeper analysis beyond current scope |
35
+
36
+ ## When I'm Triggered
37
+
38
+ - **Auto-trigger (via routing):** Tasks tagged with `review`, `verify`, `fact-check`, `audit`
39
+ - **Pre-publish gate:** Before any artifact is delivered to the user, if configured
40
+ - **Manual:** User says "fact-check this", "verify these claims", "double-check"
41
+ - **Post-research:** After any agent produces research output or external references
42
+
43
+ ## How I Work
44
+
45
+ 1. **Read the artifact** — understand what's being claimed
46
+ 2. **Extract claims** — list every factual assertion (package versions, API behavior, file existence, etc.)
47
+ 3. **Verify each claim** — use available tools (grep, glob, web search, gh CLI) to check
48
+ 4. **Run counter-hypotheses** — for key assumptions, ask "what if this is wrong?"
49
+ 5. **Produce a verification report:**
50
+
51
+ ```markdown
52
+ ## Verification Report — {artifact name}
53
+
54
+ ### Claims Verified
55
+ - ✅ {claim} — confirmed via {source}
56
+ - ⚠️ {claim} — could not verify, {reason}
57
+ - ❌ {claim} — contradicted by {evidence}
58
+
59
+ ### Counter-Hypotheses
60
+ - {assumption} → Alternative: {counter}
61
+
62
+ ### Recommendation
63
+ {proceed / revise / block with reasons}
64
+ ```
65
+
66
+ 6. **Write decision** if I found issues: `.squad/decisions/inbox/fact-checker-{slug}.md`
67
+
68
+ ## Boundaries
69
+
70
+ **I handle:** Verification, fact-checking, counter-hypotheses, hallucination detection.
71
+
72
+ **I don't handle:** Implementation, design, testing, or docs. I review, not create.
73
+
74
+ **I am not a blocker by default.** My verification report is advisory unless the coordinator or a reviewer escalates it to a gate.
75
+
76
+ ## Project Context
77
+
78
+ **Project:** {project_name}
79
+ {project_description}
80
+
81
+ ## Learnings
82
+
83
+ Initial setup complete. Ready for verification work.
@@ -231,7 +231,8 @@ Working as {member} ({role})
231
231
  **Update workflow:**
232
232
  ```bash
233
233
  # Make changes
234
- git add .
234
+ # ⚠️ NEVER use `git add .` or `git add -A` — only stage files you intentionally changed
235
+ git add -- {specific files you modified}
235
236
  git commit -m "fix: address review feedback"
236
237
  git push
237
238
  ```
@@ -0,0 +1,46 @@
1
+ ---
2
+ configured: false
3
+ interval: 10
4
+ timeout: 30
5
+ description: "My squad work loop"
6
+ ---
7
+
8
+ # Squad Work Loop
9
+
10
+ > ⚠️ Set `configured: true` in the frontmatter above to activate this loop.
11
+ > Run with: `squad loop`
12
+
13
+ ## What to do each cycle
14
+
15
+ Describe what your squad should do every time the loop wakes up. Be specific —
16
+ the more context you give, the better your squad performs.
17
+
18
+ Examples:
19
+ - Check for new messages in a Teams channel and summarize action items
20
+ - Review recent pull requests and flag anything needing attention
21
+ - Run a health check on staging and report anomalies
22
+ - Scan the inbox for anything that needs a response today
23
+
24
+ <!-- Replace this section with your actual loop instructions. -->
25
+
26
+ ## Monitoring (optional)
27
+
28
+ If you want your squad to watch external channels, enable monitor capabilities:
29
+
30
+ ```bash
31
+ squad loop --monitor-email --monitor-teams
32
+ ```
33
+
34
+ ## Personality (optional)
35
+
36
+ If your squad has a specific voice or style, describe it here so each cycle
37
+ stays consistent.
38
+
39
+ Example: "Be concise. Use bullet points. Flag blockers clearly."
40
+
41
+ ## Tips
42
+
43
+ - **Be specific.** Vague prompts produce vague results.
44
+ - **Set boundaries.** Tell the squad what NOT to do (e.g., "Don't send messages to anyone but me").
45
+ - **Start small.** Begin with one task per cycle, then expand.
46
+ - **Use frontmatter.** `interval` controls how often the loop runs. `timeout` caps each cycle.
@@ -55,6 +55,8 @@ function normalizeEol(content) {
55
55
  return content.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
56
56
  }
57
57
 
58
+ function slugify(text) { return text.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); }
59
+
58
60
  function parseRoutingRules(routingMd) {
59
61
  const table = parseTableSection(routingMd, /^##\s*work\s*type\s*(?:→|->)\s*agent\b/i);
60
62
  if (!table) return [];
@@ -124,7 +126,7 @@ function parseRoster(teamMd) {
124
126
  members.push({
125
127
  name,
126
128
  role,
127
- label: `squad:${name.toLowerCase()}`,
129
+ label: `squad:${slugify(name)}`,
128
130
  });
129
131
  }
130
132
 
@@ -61,7 +61,26 @@ After every substantial work session:
61
61
  Do NOT embed newlines in `git commit -m` (backtick-n fails silently in PowerShell).
62
62
  Instead:
63
63
  - `cd` into the team root first.
64
- - Stage all `.squad/` files: `git add .squad/`
64
+ - Stage only files Scribe actually modified in this session.
65
+ Use `git status --porcelain` to build an explicit file list filtered to allowed `.squad/` paths:
66
+ ```powershell
67
+ $allowed = @(
68
+ '.squad/decisions.md',
69
+ '.squad/decisions-archive.md'
70
+ )
71
+ $allowedPatterns = @(
72
+ '.squad/agents/*/history.md',
73
+ '.squad/agents/*/history-archive.md',
74
+ '.squad/log/*',
75
+ '.squad/orchestration-log/*'
76
+ )
77
+ $filesToStage = git status --porcelain | Where-Object { $_.Length -gt 3 } | ForEach-Object { $_.Substring(3) -replace '^.* -> ','' } | Where-Object {
78
+ $f = $_
79
+ ($f -in $allowed) -or ($allowedPatterns | Where-Object { $f -like $_ })
80
+ }
81
+ if ($filesToStage) { $filesToStage | Where-Object { $_ } | ForEach-Object { git add -- $_ } }
82
+ ```
83
+ ⚠️ NEVER use `git add .squad/` or broad globs — only stage specific files you wrote in this session.
65
84
  - Check for staged changes: `git diff --cached --quiet`
66
85
  If exit code is 0, no changes — skip silently.
67
86
  - Write the commit message to a temp file, then commit with `-F`: