opencode-swarm-plugin 0.44.0 → 0.44.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 (205) hide show
  1. package/bin/swarm.serve.test.ts +6 -4
  2. package/bin/swarm.ts +16 -10
  3. package/dist/compaction-prompt-scoring.js +139 -0
  4. package/dist/eval-capture.js +12811 -0
  5. package/dist/hive.d.ts.map +1 -1
  6. package/dist/index.js +7644 -62599
  7. package/dist/plugin.js +23766 -78721
  8. package/dist/swarm-orchestrate.d.ts.map +1 -1
  9. package/dist/swarm-prompts.d.ts.map +1 -1
  10. package/dist/swarm-review.d.ts.map +1 -1
  11. package/package.json +17 -5
  12. package/.changeset/swarm-insights-data-layer.md +0 -63
  13. package/.hive/analysis/eval-failure-analysis-2025-12-25.md +0 -331
  14. package/.hive/analysis/session-data-quality-audit.md +0 -320
  15. package/.hive/eval-results.json +0 -483
  16. package/.hive/issues.jsonl +0 -138
  17. package/.hive/memories.jsonl +0 -729
  18. package/.opencode/eval-history.jsonl +0 -327
  19. package/.turbo/turbo-build.log +0 -9
  20. package/CHANGELOG.md +0 -2286
  21. package/SCORER-ANALYSIS.md +0 -598
  22. package/docs/analysis/subagent-coordination-patterns.md +0 -902
  23. package/docs/analysis-socratic-planner-pattern.md +0 -504
  24. package/docs/planning/ADR-001-monorepo-structure.md +0 -171
  25. package/docs/planning/ADR-002-package-extraction.md +0 -393
  26. package/docs/planning/ADR-003-performance-improvements.md +0 -451
  27. package/docs/planning/ADR-004-message-queue-features.md +0 -187
  28. package/docs/planning/ADR-005-devtools-observability.md +0 -202
  29. package/docs/planning/ADR-007-swarm-enhancements-worktree-review.md +0 -168
  30. package/docs/planning/ADR-008-worker-handoff-protocol.md +0 -293
  31. package/docs/planning/ADR-009-oh-my-opencode-patterns.md +0 -353
  32. package/docs/planning/ADR-010-cass-inhousing.md +0 -1215
  33. package/docs/planning/ROADMAP.md +0 -368
  34. package/docs/semantic-memory-cli-syntax.md +0 -123
  35. package/docs/swarm-mail-architecture.md +0 -1147
  36. package/docs/testing/context-recovery-test.md +0 -470
  37. package/evals/ARCHITECTURE.md +0 -1189
  38. package/evals/README.md +0 -768
  39. package/evals/compaction-prompt.eval.ts +0 -149
  40. package/evals/compaction-resumption.eval.ts +0 -289
  41. package/evals/coordinator-behavior.eval.ts +0 -307
  42. package/evals/coordinator-session.eval.ts +0 -154
  43. package/evals/evalite.config.ts.bak +0 -15
  44. package/evals/example.eval.ts +0 -31
  45. package/evals/fixtures/cass-baseline.ts +0 -217
  46. package/evals/fixtures/compaction-cases.ts +0 -350
  47. package/evals/fixtures/compaction-prompt-cases.ts +0 -311
  48. package/evals/fixtures/coordinator-sessions.ts +0 -328
  49. package/evals/fixtures/decomposition-cases.ts +0 -105
  50. package/evals/lib/compaction-loader.test.ts +0 -248
  51. package/evals/lib/compaction-loader.ts +0 -320
  52. package/evals/lib/data-loader.evalite-test.ts +0 -289
  53. package/evals/lib/data-loader.test.ts +0 -345
  54. package/evals/lib/data-loader.ts +0 -281
  55. package/evals/lib/llm.ts +0 -115
  56. package/evals/scorers/compaction-prompt-scorers.ts +0 -145
  57. package/evals/scorers/compaction-scorers.ts +0 -305
  58. package/evals/scorers/coordinator-discipline.evalite-test.ts +0 -539
  59. package/evals/scorers/coordinator-discipline.ts +0 -325
  60. package/evals/scorers/index.test.ts +0 -146
  61. package/evals/scorers/index.ts +0 -328
  62. package/evals/scorers/outcome-scorers.evalite-test.ts +0 -27
  63. package/evals/scorers/outcome-scorers.ts +0 -349
  64. package/evals/swarm-decomposition.eval.ts +0 -121
  65. package/examples/commands/swarm.md +0 -745
  66. package/examples/plugin-wrapper-template.ts +0 -2515
  67. package/examples/skills/hive-workflow/SKILL.md +0 -212
  68. package/examples/skills/skill-creator/SKILL.md +0 -223
  69. package/examples/skills/swarm-coordination/SKILL.md +0 -292
  70. package/global-skills/cli-builder/SKILL.md +0 -344
  71. package/global-skills/cli-builder/references/advanced-patterns.md +0 -244
  72. package/global-skills/learning-systems/SKILL.md +0 -644
  73. package/global-skills/skill-creator/LICENSE.txt +0 -202
  74. package/global-skills/skill-creator/SKILL.md +0 -352
  75. package/global-skills/skill-creator/references/output-patterns.md +0 -82
  76. package/global-skills/skill-creator/references/workflows.md +0 -28
  77. package/global-skills/swarm-coordination/SKILL.md +0 -995
  78. package/global-skills/swarm-coordination/references/coordinator-patterns.md +0 -235
  79. package/global-skills/swarm-coordination/references/strategies.md +0 -138
  80. package/global-skills/system-design/SKILL.md +0 -213
  81. package/global-skills/testing-patterns/SKILL.md +0 -430
  82. package/global-skills/testing-patterns/references/dependency-breaking-catalog.md +0 -586
  83. package/opencode-swarm-plugin-0.30.7.tgz +0 -0
  84. package/opencode-swarm-plugin-0.31.0.tgz +0 -0
  85. package/scripts/cleanup-test-memories.ts +0 -346
  86. package/scripts/init-skill.ts +0 -222
  87. package/scripts/migrate-unknown-sessions.ts +0 -349
  88. package/scripts/validate-skill.ts +0 -204
  89. package/src/agent-mail.ts +0 -1724
  90. package/src/anti-patterns.test.ts +0 -1167
  91. package/src/anti-patterns.ts +0 -448
  92. package/src/compaction-capture.integration.test.ts +0 -257
  93. package/src/compaction-hook.test.ts +0 -838
  94. package/src/compaction-hook.ts +0 -1204
  95. package/src/compaction-observability.integration.test.ts +0 -139
  96. package/src/compaction-observability.test.ts +0 -187
  97. package/src/compaction-observability.ts +0 -324
  98. package/src/compaction-prompt-scorers.test.ts +0 -475
  99. package/src/compaction-prompt-scoring.ts +0 -300
  100. package/src/contributor-tools.test.ts +0 -133
  101. package/src/contributor-tools.ts +0 -201
  102. package/src/dashboard.test.ts +0 -611
  103. package/src/dashboard.ts +0 -462
  104. package/src/error-enrichment.test.ts +0 -403
  105. package/src/error-enrichment.ts +0 -219
  106. package/src/eval-capture.test.ts +0 -1015
  107. package/src/eval-capture.ts +0 -929
  108. package/src/eval-gates.test.ts +0 -306
  109. package/src/eval-gates.ts +0 -218
  110. package/src/eval-history.test.ts +0 -508
  111. package/src/eval-history.ts +0 -214
  112. package/src/eval-learning.test.ts +0 -378
  113. package/src/eval-learning.ts +0 -360
  114. package/src/eval-runner.test.ts +0 -223
  115. package/src/eval-runner.ts +0 -402
  116. package/src/export-tools.test.ts +0 -476
  117. package/src/export-tools.ts +0 -257
  118. package/src/hive.integration.test.ts +0 -2241
  119. package/src/hive.ts +0 -1628
  120. package/src/index.ts +0 -940
  121. package/src/learning.integration.test.ts +0 -1815
  122. package/src/learning.ts +0 -1079
  123. package/src/logger.test.ts +0 -189
  124. package/src/logger.ts +0 -135
  125. package/src/mandate-promotion.test.ts +0 -473
  126. package/src/mandate-promotion.ts +0 -239
  127. package/src/mandate-storage.integration.test.ts +0 -601
  128. package/src/mandate-storage.test.ts +0 -578
  129. package/src/mandate-storage.ts +0 -794
  130. package/src/mandates.ts +0 -540
  131. package/src/memory-tools.test.ts +0 -195
  132. package/src/memory-tools.ts +0 -344
  133. package/src/memory.integration.test.ts +0 -334
  134. package/src/memory.test.ts +0 -158
  135. package/src/memory.ts +0 -527
  136. package/src/model-selection.test.ts +0 -188
  137. package/src/model-selection.ts +0 -68
  138. package/src/observability-tools.test.ts +0 -359
  139. package/src/observability-tools.ts +0 -871
  140. package/src/output-guardrails.test.ts +0 -438
  141. package/src/output-guardrails.ts +0 -381
  142. package/src/pattern-maturity.test.ts +0 -1160
  143. package/src/pattern-maturity.ts +0 -525
  144. package/src/planning-guardrails.test.ts +0 -491
  145. package/src/planning-guardrails.ts +0 -438
  146. package/src/plugin.ts +0 -23
  147. package/src/post-compaction-tracker.test.ts +0 -251
  148. package/src/post-compaction-tracker.ts +0 -237
  149. package/src/query-tools.test.ts +0 -636
  150. package/src/query-tools.ts +0 -324
  151. package/src/rate-limiter.integration.test.ts +0 -466
  152. package/src/rate-limiter.ts +0 -774
  153. package/src/replay-tools.test.ts +0 -496
  154. package/src/replay-tools.ts +0 -240
  155. package/src/repo-crawl.integration.test.ts +0 -441
  156. package/src/repo-crawl.ts +0 -610
  157. package/src/schemas/cell-events.test.ts +0 -347
  158. package/src/schemas/cell-events.ts +0 -807
  159. package/src/schemas/cell.ts +0 -257
  160. package/src/schemas/evaluation.ts +0 -166
  161. package/src/schemas/index.test.ts +0 -199
  162. package/src/schemas/index.ts +0 -286
  163. package/src/schemas/mandate.ts +0 -232
  164. package/src/schemas/swarm-context.ts +0 -115
  165. package/src/schemas/task.ts +0 -161
  166. package/src/schemas/worker-handoff.test.ts +0 -302
  167. package/src/schemas/worker-handoff.ts +0 -131
  168. package/src/sessions/agent-discovery.test.ts +0 -137
  169. package/src/sessions/agent-discovery.ts +0 -112
  170. package/src/sessions/index.ts +0 -15
  171. package/src/skills.integration.test.ts +0 -1192
  172. package/src/skills.test.ts +0 -643
  173. package/src/skills.ts +0 -1549
  174. package/src/storage.integration.test.ts +0 -341
  175. package/src/storage.ts +0 -884
  176. package/src/structured.integration.test.ts +0 -817
  177. package/src/structured.test.ts +0 -1046
  178. package/src/structured.ts +0 -762
  179. package/src/swarm-decompose.test.ts +0 -188
  180. package/src/swarm-decompose.ts +0 -1302
  181. package/src/swarm-deferred.integration.test.ts +0 -157
  182. package/src/swarm-deferred.test.ts +0 -38
  183. package/src/swarm-insights.test.ts +0 -214
  184. package/src/swarm-insights.ts +0 -459
  185. package/src/swarm-mail.integration.test.ts +0 -970
  186. package/src/swarm-mail.ts +0 -739
  187. package/src/swarm-orchestrate.integration.test.ts +0 -282
  188. package/src/swarm-orchestrate.test.ts +0 -548
  189. package/src/swarm-orchestrate.ts +0 -3084
  190. package/src/swarm-prompts.test.ts +0 -1270
  191. package/src/swarm-prompts.ts +0 -2077
  192. package/src/swarm-research.integration.test.ts +0 -701
  193. package/src/swarm-research.test.ts +0 -698
  194. package/src/swarm-research.ts +0 -472
  195. package/src/swarm-review.integration.test.ts +0 -285
  196. package/src/swarm-review.test.ts +0 -879
  197. package/src/swarm-review.ts +0 -709
  198. package/src/swarm-strategies.ts +0 -407
  199. package/src/swarm-worktree.test.ts +0 -501
  200. package/src/swarm-worktree.ts +0 -575
  201. package/src/swarm.integration.test.ts +0 -2377
  202. package/src/swarm.ts +0 -38
  203. package/src/tool-adapter.integration.test.ts +0 -1221
  204. package/src/tool-availability.ts +0 -461
  205. package/tsconfig.json +0 -28
@@ -1,235 +0,0 @@
1
- # Coordinator Patterns
2
-
3
- The coordinator is the orchestration layer that manages the swarm. This document covers the coordinator's responsibilities, decision points, and intervention patterns.
4
-
5
- ## Coordinator Responsibilities
6
-
7
- ### 1. Knowledge Gathering (BEFORE decomposition)
8
-
9
- **MANDATORY**: Before decomposing any task, the coordinator MUST query all available knowledge sources:
10
-
11
- ```
12
- # 1. Search semantic memory for past learnings
13
- semantic-memory_find(query="<task keywords>", limit=5)
14
-
15
- # 2. Search CASS for similar past tasks
16
- cass_search(query="<task description>", limit=5)
17
-
18
- # 3. Search pdf-brain for design patterns and prior art
19
- pdf-brain_search(query="<domain concepts>", limit=5)
20
-
21
- # 4. List available skills
22
- skills_list()
23
- ```
24
-
25
- **Why this matters:** From "Patterns for Building AI Agents":
26
-
27
- > "AI agents, like people, make better decisions when they understand the full context rather than working from fragments."
28
-
29
- The coordinator synthesizes findings into `shared_context` that all workers receive.
30
-
31
- ### 2. Task Decomposition
32
-
33
- After knowledge gathering:
34
-
35
- 1. Select strategy (auto or explicit)
36
- 2. Generate decomposition with `swarm_plan_prompt` or `swarm_decompose`
37
- 3. Validate with `swarm_validate_decomposition`
38
- 4. Create cells with `hive_create_epic`
39
-
40
- ### 3. Worker Spawning
41
-
42
- For each subtask:
43
-
44
- 1. Generate worker prompt with `swarm_spawn_subtask`
45
- 2. Include relevant skills in prompt
46
- 3. Spawn worker agent via Task tool
47
- 4. Track bead status
48
-
49
- ### 4. Progress Monitoring
50
-
51
- - Check `hive_query(status="in_progress")` for active work
52
- - Check `swarmmail_inbox()` for worker messages
53
- - Intervene on blockers (see Intervention Patterns below)
54
-
55
- ### 5. Completion & Aggregation
56
-
57
- - Verify all subtasks completed via bead status
58
- - Aggregate results from worker summaries
59
- - Run final verification (typecheck, tests)
60
- - Close epic bead with summary
61
-
62
- ---
63
-
64
- ## Decision Points
65
-
66
- ### When to Swarm vs Single Agent
67
-
68
- **Swarm when:**
69
-
70
- - 3+ files need modification
71
- - Task has natural parallel boundaries
72
- - Different specializations needed (frontend/backend/tests)
73
- - Time-to-completion matters
74
-
75
- **Single agent when:**
76
-
77
- - Task touches 1-2 files
78
- - Heavy sequential dependencies
79
- - Coordination overhead > parallelization benefit
80
- - Task requires tight feedback loop
81
-
82
- **Heuristic:** If you can describe the task in one sentence without "and", probably single agent.
83
-
84
- ### When to Intervene
85
-
86
- | Signal | Action |
87
- | ------------------------- | ----------------------------------------------------- |
88
- | Worker blocked >5 min | Check inbox, offer guidance |
89
- | File conflict detected | Mediate, reassign files |
90
- | Worker asking questions | Answer directly, don't spawn new agent |
91
- | Scope creep detected | Redirect to original task, create new bead for extras |
92
- | Worker failing repeatedly | Take over subtask or reassign |
93
-
94
- ### When to Abort
95
-
96
- - Critical blocker affects all subtasks
97
- - Scope changed fundamentally mid-swarm
98
- - Resource exhaustion (context, time, cost)
99
-
100
- On abort: Close all cells with reason, summarize partial progress.
101
-
102
- ---
103
-
104
- ## Context Engineering
105
-
106
- From "Patterns for Building AI Agents":
107
-
108
- > "Instead of just instructing subagents 'Do this specific task,' you should try to ensure they are able to share context along the way."
109
-
110
- ### Shared Context Template
111
-
112
- ```markdown
113
- ## Project Context
114
-
115
- - Repository: {repo_name}
116
- - Tech stack: {stack}
117
- - Relevant patterns: {patterns from pdf-brain}
118
-
119
- ## Task Context
120
-
121
- - Epic: {epic_title}
122
- - Goal: {what success looks like}
123
- - Constraints: {time, scope, dependencies}
124
-
125
- ## Prior Art
126
-
127
- - Similar past tasks: {from CASS}
128
- - Relevant learnings: {from semantic-memory}
129
-
130
- ## Coordination
131
-
132
- - Other active subtasks: {list}
133
- - Shared files to avoid: {reserved files}
134
- - Communication channel: thread_id={epic_id}
135
- ```
136
-
137
- ### Context Compression
138
-
139
- For long-running swarms, compress context periodically:
140
-
141
- - Summarize completed subtasks (don't list all details)
142
- - Keep only active blockers and decisions
143
- - Preserve key learnings for remaining work
144
-
145
- ---
146
-
147
- ## Failure Modes & Recovery
148
-
149
- ### Incompatible Parallel Outputs
150
-
151
- **Problem:** Two agents produce conflicting results that can't be merged.
152
-
153
- **From "Patterns for Building AI Agents":**
154
-
155
- > "Subagents can create responses that are in conflict — forcing the final agent to combine two incompatible, intermediate products."
156
-
157
- **Prevention:**
158
-
159
- - Clear file boundaries (no overlap)
160
- - Explicit interface contracts in shared_context
161
- - Sequential phases for tightly coupled work
162
-
163
- **Recovery:**
164
-
165
- - Identify conflict source
166
- - Pick one approach, discard other
167
- - Re-run losing subtask with winning approach as constraint
168
-
169
- ### Worker Drift
170
-
171
- **Problem:** Worker goes off-task, implements something different.
172
-
173
- **Prevention:**
174
-
175
- - Specific, actionable subtask descriptions
176
- - Clear success criteria in prompt
177
- - File list as hard constraint
178
-
179
- **Recovery:**
180
-
181
- - Revert changes
182
- - Re-run with more explicit instructions
183
- - Consider taking over manually
184
-
185
- ### Cascade Failure
186
-
187
- **Problem:** One failure blocks multiple dependent subtasks.
188
-
189
- **Prevention:**
190
-
191
- - Minimize dependencies in decomposition
192
- - Front-load risky/uncertain work
193
- - Have fallback plans for critical paths
194
-
195
- **Recovery:**
196
-
197
- - Unblock manually if possible
198
- - Reassign dependent work
199
- - Partial completion is okay - close what's done
200
-
201
- ---
202
-
203
- ## Anti-Patterns
204
-
205
- ### The Mega-Coordinator
206
-
207
- **Problem:** Coordinator does too much work itself instead of delegating.
208
-
209
- **Symptom:** Coordinator editing files, running tests, debugging.
210
-
211
- **Fix:** Coordinator only orchestrates. If you're writing code, you're a worker.
212
-
213
- ### The Silent Swarm
214
-
215
- **Problem:** Workers don't communicate, coordinator doesn't monitor.
216
-
217
- **Symptom:** Swarm runs for 30 minutes, then fails with conflicts.
218
-
219
- **Fix:** Require progress updates. Check inbox regularly. Intervene early.
220
-
221
- ### The Over-Decomposed Task
222
-
223
- **Problem:** 10 subtasks for a 20-line change.
224
-
225
- **Symptom:** Coordination overhead exceeds actual work.
226
-
227
- **Fix:** 2-5 subtasks is the sweet spot. If task is small, don't swarm.
228
-
229
- ### The Under-Specified Subtask
230
-
231
- **Problem:** "Implement the backend" with no details.
232
-
233
- **Symptom:** Worker asks questions, guesses wrong, or stalls.
234
-
235
- **Fix:** Each subtask needs: clear goal, file list, success criteria, context.
@@ -1,138 +0,0 @@
1
- # Decomposition Strategies
2
-
3
- Four strategies for breaking tasks into parallelizable subtasks. The coordinator auto-selects based on task keywords, or you can specify explicitly.
4
-
5
- ## File-Based Strategy
6
-
7
- **Best for:** Refactoring, migrations, pattern changes across codebase
8
-
9
- **Keywords:** refactor, migrate, update all, rename, replace, convert, upgrade, deprecate, remove, cleanup, lint, format
10
-
11
- ### Guidelines
12
-
13
- - Group files by directory or type (e.g., all components, all tests)
14
- - Minimize cross-directory dependencies within a subtask
15
- - Handle shared types/utilities FIRST if they change
16
- - Each subtask should be a complete transformation of its file set
17
- - Consider import/export relationships when grouping
18
-
19
- ### Anti-Patterns
20
-
21
- - Don't split tightly coupled files across subtasks
22
- - Don't group files that have no relationship
23
- - Don't forget to update imports when moving/renaming
24
-
25
- ### Examples
26
-
27
- | Task | Decomposition |
28
- | ----------------------------------- | --------------------------------------------- |
29
- | Migrate all components to new API | Split by component directory |
30
- | Rename `userId` to `accountId` | Split by module (types first, then consumers) |
31
- | Update all tests to use new matcher | Split by test directory |
32
-
33
- ---
34
-
35
- ## Feature-Based Strategy
36
-
37
- **Best for:** New features, adding functionality, vertical slices
38
-
39
- **Keywords:** add, implement, build, create, feature, new, integrate, connect, enable, support
40
-
41
- ### Guidelines
42
-
43
- - Each subtask is a complete vertical slice (UI + logic + data)
44
- - Start with data layer/types, then logic, then UI
45
- - Keep related components together (form + validation + submission)
46
- - Separate concerns that can be developed independently
47
- - Consider user-facing features as natural boundaries
48
-
49
- ### Anti-Patterns
50
-
51
- - Don't split a single feature across multiple subtasks
52
- - Don't create subtasks that can't be tested independently
53
- - Don't forget integration points between features
54
-
55
- ### Examples
56
-
57
- | Task | Decomposition |
58
- | --------------- | ---------------------------------------------------- |
59
- | Add user auth | [OAuth setup, Session management, Protected routes] |
60
- | Build dashboard | [Data fetching, Chart components, Layout/navigation] |
61
- | Add search | [Search API, Search UI, Results display] |
62
-
63
- ---
64
-
65
- ## Risk-Based Strategy
66
-
67
- **Best for:** Bug fixes, security issues, critical changes, hotfixes
68
-
69
- **Keywords:** fix, bug, security, vulnerability, critical, urgent, hotfix, patch, audit, review
70
-
71
- ### Guidelines
72
-
73
- - Write tests FIRST to capture expected behavior
74
- - Isolate the risky change to minimize blast radius
75
- - Add monitoring/logging around the change
76
- - Create rollback plan as part of the task
77
- - Audit similar code for the same issue
78
-
79
- ### Anti-Patterns
80
-
81
- - Don't make multiple risky changes in one subtask
82
- - Don't skip tests for "simple" fixes
83
- - Don't forget to check for similar issues elsewhere
84
-
85
- ### Examples
86
-
87
- | Task | Decomposition |
88
- | ------------------ | ------------------------------------------------------------------------- |
89
- | Fix auth bypass | [Add regression test, Fix vulnerability, Audit similar endpoints] |
90
- | Fix race condition | [Add test reproducing issue, Implement fix, Add concurrency tests] |
91
- | Security audit | [Scan for vulnerabilities, Fix critical issues, Document remaining risks] |
92
-
93
- ---
94
-
95
- ## Research-Based Strategy
96
-
97
- **Best for:** Investigation, learning, discovery, debugging options
98
-
99
- **Keywords:** research, investigate, explore, find out, discover, understand, learn about, analyze, compare, evaluate, study, debug options, configuration options
100
-
101
- ### Guidelines
102
-
103
- - Split by information source (PDFs, repos, history, web)
104
- - Each agent searches with different query angles
105
- - Include a synthesis subtask that depends on all search subtasks
106
- - Use pdf-brain for documentation/books if available
107
- - Use repo-crawl for GitHub repos if URL provided
108
- - Use CASS for past agent session history
109
- - Assign NO files to research subtasks (read-only)
110
-
111
- ### Anti-Patterns
112
-
113
- - Don't have one agent search everything sequentially
114
- - Don't skip synthesis - raw search results need consolidation
115
- - Don't forget to check tool availability before assigning sources
116
-
117
- ### Examples
118
-
119
- | Task | Decomposition |
120
- | ---------------------- | ---------------------------------------------------------------------------- |
121
- | Research auth patterns | [Search PDFs, Search repos, Search history, Synthesize] |
122
- | Investigate error | [Search CASS for similar errors, Search repo for error handling, Synthesize] |
123
- | Learn about library | [Search docs, Search examples, Search issues, Synthesize findings] |
124
-
125
- ---
126
-
127
- ## Strategy Selection
128
-
129
- The coordinator auto-selects strategy by matching task keywords. Override with explicit strategy when:
130
-
131
- - Task spans multiple categories (e.g., "fix bug and add feature")
132
- - You have domain knowledge the keywords don't capture
133
- - Past experience suggests a different approach
134
-
135
- ```
136
- swarm_plan_prompt(task="...", strategy="risk-based") // explicit override
137
- swarm_plan_prompt(task="...") // auto-select
138
- ```
@@ -1,213 +0,0 @@
1
- ---
2
- name: system-design
3
- description: Principles for building reusable coding systems. Use when designing modules, APIs, CLIs, or any code meant to be used by others. Based on "A Philosophy of Software Design" by John Ousterhout. Covers deep modules, complexity management, and design red flags.
4
- tags:
5
- - design
6
- - architecture
7
- - modules
8
- - complexity
9
- ---
10
-
11
- # System Design
12
-
13
- Principles for building reusable, maintainable coding systems. From "A Philosophy of Software Design" by John Ousterhout.
14
-
15
- ## Core Principle: Fight Complexity
16
-
17
- Complexity is the root cause of most software problems. It accumulates incrementally—each shortcut adds a little, until the system becomes unmaintainable.
18
-
19
- **Complexity defined:** Anything that makes software hard to understand or modify.
20
-
21
- **Symptoms:**
22
-
23
- - Change amplification: simple change requires many modifications
24
- - Cognitive load: how much you need to know to make a change
25
- - Unknown unknowns: not obvious what needs to change
26
-
27
- ## Deep Modules
28
-
29
- The most important design principle: **make modules deep**.
30
-
31
- ```
32
- ┌─────────────────────────────┐
33
- │ Simple Interface │ ← Small surface area
34
- ├─────────────────────────────┤
35
- │ │
36
- │ │
37
- │ Deep Implementation │ ← Lots of functionality
38
- │ │
39
- │ │
40
- └─────────────────────────────┘
41
- ```
42
-
43
- **Deep module:** Simple interface, lots of functionality hidden behind it.
44
-
45
- **Shallow module:** Complex interface relative to functionality provided. Red flag.
46
-
47
- ### Examples
48
-
49
- **Deep:** Unix file I/O - just 5 calls (open, read, write, lseek, close) hide enormous complexity (buffering, caching, device drivers, permissions, journaling).
50
-
51
- **Shallow:** Java's file reading requires BufferedReader wrapping FileReader wrapping FileInputStream. Interface complexity matches implementation complexity.
52
-
53
- ### Apply This
54
-
55
- - Prefer fewer methods that do more over many small methods
56
- - Hide implementation details aggressively
57
- - A module's interface should be much simpler than its implementation
58
- - If interface is as complex as implementation, reconsider the abstraction
59
-
60
- ## Strategic vs Tactical Programming
61
-
62
- **Tactical:** Get it working now. Each task adds small complexities. Debt accumulates.
63
-
64
- **Strategic:** Invest time in good design. Slower initially, faster long-term.
65
-
66
- ```
67
- Progress
68
-
69
- │ Strategic ────────────────→
70
- │ /
71
- │ /
72
- │ / Tactical ─────────→
73
- │ / ↘ (slows down)
74
- │ /
75
- └──┴─────────────────────────────────→ Time
76
- ```
77
-
78
- **Rule of thumb:** Spend 10-20% of development time on design improvements.
79
-
80
- ### Working Code Isn't Enough
81
-
82
- "Working code" is not the goal. The goal is a great design that also works. If you're satisfied with "it works," you're programming tactically.
83
-
84
- ## Information Hiding
85
-
86
- Each module should encapsulate knowledge that other modules don't need.
87
-
88
- **Information leakage (red flag):** Same knowledge appears in multiple places. If one changes, all must change.
89
-
90
- **Temporal decomposition (red flag):** Splitting code based on when things happen rather than what information they use. Often causes leakage.
91
-
92
- ### Apply This
93
-
94
- - Ask: "What knowledge does this module encapsulate?"
95
- - If the answer is "not much," the module is probably shallow
96
- - Group code by what it knows, not when it runs
97
- - Private by default; expose only what's necessary
98
-
99
- ## Define Errors Out of Existence
100
-
101
- Exceptions add complexity. The best way to handle them: design so they can't happen.
102
-
103
- **Instead of:**
104
-
105
- ```typescript
106
- function deleteFile(path: string): void {
107
- if (!exists(path)) throw new FileNotFoundError();
108
- // delete...
109
- }
110
- ```
111
-
112
- **Do:**
113
-
114
- ```typescript
115
- function deleteFile(path: string): void {
116
- // Just delete. If it doesn't exist, goal is achieved.
117
- // No error to handle.
118
- }
119
- ```
120
-
121
- ### Apply This
122
-
123
- - Redefine semantics so errors become non-issues
124
- - Handle edge cases internally rather than exposing them
125
- - Fewer exceptions = simpler interface = deeper module
126
- - Ask: "Can I change the definition so this isn't an error?"
127
-
128
- ## General-Purpose Modules
129
-
130
- Somewhat general-purpose modules are deeper than special-purpose ones.
131
-
132
- **Not too general:** Don't build a framework when you need a function.
133
-
134
- **Not too specific:** Don't hardcode assumptions that limit reuse.
135
-
136
- **Sweet spot:** Solve today's problem in a way that naturally handles tomorrow's.
137
-
138
- ### Questions to Ask
139
-
140
- 1. What is the simplest interface that covers all current needs?
141
- 2. How many situations will this method be used in?
142
- 3. Is this API easy to use for my current needs?
143
-
144
- ## Pull Complexity Downward
145
-
146
- When complexity is unavoidable, put it in the implementation, not the interface.
147
-
148
- **Bad:** Expose complexity to all callers.
149
- **Good:** Handle complexity once, internally.
150
-
151
- It's more important for a module to have a simple interface than a simple implementation.
152
-
153
- ### Example
154
-
155
- Configuration: Instead of requiring callers to configure everything, provide sensible defaults. Handle the complexity of choosing defaults internally.
156
-
157
- ## Design Twice
158
-
159
- Before implementing, consider at least two different designs. Compare them.
160
-
161
- **Benefits:**
162
-
163
- - Reveals assumptions you didn't know you were making
164
- - Often the second design is better
165
- - Even if first design wins, you understand why
166
-
167
- **Don't skip this:** "I can't think of another approach" usually means you haven't tried hard enough.
168
-
169
- ## Red Flags Summary
170
-
171
- | Red Flag | Symptom |
172
- | ----------------------- | ------------------------------------------------ |
173
- | Shallow module | Interface complexity ≈ implementation complexity |
174
- | Information leakage | Same knowledge in multiple modules |
175
- | Temporal decomposition | Code split by time, not information |
176
- | Overexposure | Too many methods/params in interface |
177
- | Pass-through methods | Method does little except call another |
178
- | Repetition | Same code pattern appears multiple times |
179
- | Special-general mixture | General-purpose code mixed with special-purpose |
180
- | Conjoined methods | Can't understand one without reading another |
181
- | Comment repeats code | Comment says what code obviously does |
182
- | Vague name | Name doesn't convey much information |
183
-
184
- ## Applying to CLI/Tool Design
185
-
186
- When building CLIs, plugins, or tools:
187
-
188
- 1. **Deep commands:** Few commands that do a lot, not many shallow ones
189
- 2. **Sensible defaults:** Work without configuration for common cases
190
- 3. **Progressive disclosure:** Simple usage first, advanced options available
191
- 4. **Consistent interface:** Same patterns across all commands
192
- 5. **Error elimination:** Design so common mistakes are impossible
193
-
194
- ### Example: Good CLI Design
195
-
196
- ```bash
197
- # Deep: one command handles the common case well
198
- swarm setup
199
-
200
- # Not shallow: doesn't require 10 flags for basic usage
201
- # Sensible defaults: picks reasonable models
202
- # Progressive: advanced users can customize later
203
- ```
204
-
205
- ## Key Takeaways
206
-
207
- 1. **Complexity is the enemy.** Every design decision should reduce it.
208
- 2. **Deep modules win.** Simple interface, rich functionality.
209
- 3. **Hide information.** Each module owns specific knowledge.
210
- 4. **Define errors away.** Change semantics to eliminate edge cases.
211
- 5. **Design twice.** Always consider alternatives.
212
- 6. **Strategic > tactical.** Invest in design, not just working code.
213
- 7. **Pull complexity down.** Implementation absorbs complexity, interface stays simple.