claude_swarm 1.0.1 → 1.0.4

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 (267) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/commands/release.md +1 -1
  3. data/.claude/hooks/lint-code-files.rb +65 -0
  4. data/.rubocop.yml +22 -2
  5. data/CHANGELOG.md +14 -1
  6. data/CLAUDE.md +1 -1
  7. data/CONTRIBUTING.md +69 -0
  8. data/README.md +27 -2
  9. data/Rakefile +71 -3
  10. data/analyze_coverage.rb +94 -0
  11. data/docs/v2/CHANGELOG.swarm_cli.md +43 -0
  12. data/docs/v2/CHANGELOG.swarm_memory.md +379 -0
  13. data/docs/v2/CHANGELOG.swarm_sdk.md +362 -0
  14. data/docs/v2/README.md +308 -0
  15. data/docs/v2/guides/claude-code-agents.md +262 -0
  16. data/docs/v2/guides/complete-tutorial.md +3088 -0
  17. data/docs/v2/guides/getting-started.md +1456 -0
  18. data/docs/v2/guides/memory-adapters.md +998 -0
  19. data/docs/v2/guides/plugins.md +816 -0
  20. data/docs/v2/guides/quick-start-cli.md +1745 -0
  21. data/docs/v2/guides/rails-integration.md +1902 -0
  22. data/docs/v2/guides/swarm-memory.md +599 -0
  23. data/docs/v2/reference/cli.md +729 -0
  24. data/docs/v2/reference/ruby-dsl.md +2154 -0
  25. data/docs/v2/reference/yaml.md +1835 -0
  26. data/docs-team-swarm.yml +2222 -0
  27. data/examples/learning-assistant/assistant.md +7 -0
  28. data/examples/learning-assistant/example-memories/concept-example.md +90 -0
  29. data/examples/learning-assistant/example-memories/experience-example.md +66 -0
  30. data/examples/learning-assistant/example-memories/fact-example.md +76 -0
  31. data/examples/learning-assistant/example-memories/memory-index.md +78 -0
  32. data/examples/learning-assistant/example-memories/skill-example.md +168 -0
  33. data/examples/learning-assistant/learning_assistant.rb +34 -0
  34. data/examples/learning-assistant/learning_assistant.yml +20 -0
  35. data/examples/v2/dsl/01_basic.rb +44 -0
  36. data/examples/v2/dsl/02_core_parameters.rb +59 -0
  37. data/examples/v2/dsl/03_capabilities.rb +71 -0
  38. data/examples/v2/dsl/04_llm_parameters.rb +56 -0
  39. data/examples/v2/dsl/05_advanced_flags.rb +73 -0
  40. data/examples/v2/dsl/06_permissions.rb +80 -0
  41. data/examples/v2/dsl/07_mcp_server.rb +62 -0
  42. data/examples/v2/dsl/08_swarm_hooks.rb +53 -0
  43. data/examples/v2/dsl/09_agent_hooks.rb +67 -0
  44. data/examples/v2/dsl/10_all_agents_hooks.rb +67 -0
  45. data/examples/v2/dsl/11_delegation.rb +60 -0
  46. data/examples/v2/dsl/12_complete_integration.rb +137 -0
  47. data/examples/v2/file_tools_swarm.yml +102 -0
  48. data/examples/v2/hooks/01_basic_hooks.rb +133 -0
  49. data/examples/v2/hooks/02_usage_tracking.rb +201 -0
  50. data/examples/v2/hooks/03_production_monitoring.rb +429 -0
  51. data/examples/v2/hooks/agent_stop_exit_0.yml +21 -0
  52. data/examples/v2/hooks/agent_stop_exit_1.yml +21 -0
  53. data/examples/v2/hooks/agent_stop_exit_2.yml +26 -0
  54. data/examples/v2/hooks/multiple_hooks_all_pass.yml +37 -0
  55. data/examples/v2/hooks/multiple_hooks_first_fails.yml +37 -0
  56. data/examples/v2/hooks/multiple_hooks_second_fails.yml +37 -0
  57. data/examples/v2/hooks/multiple_hooks_warnings.yml +37 -0
  58. data/examples/v2/hooks/post_tool_use_exit_0.yml +24 -0
  59. data/examples/v2/hooks/post_tool_use_exit_1.yml +24 -0
  60. data/examples/v2/hooks/post_tool_use_exit_2.yml +24 -0
  61. data/examples/v2/hooks/post_tool_use_multi_matcher_exit_0.yml +26 -0
  62. data/examples/v2/hooks/post_tool_use_multi_matcher_exit_1.yml +26 -0
  63. data/examples/v2/hooks/post_tool_use_multi_matcher_exit_2.yml +26 -0
  64. data/examples/v2/hooks/pre_tool_use_exit_0.yml +24 -0
  65. data/examples/v2/hooks/pre_tool_use_exit_1.yml +24 -0
  66. data/examples/v2/hooks/pre_tool_use_exit_2.yml +24 -0
  67. data/examples/v2/hooks/pre_tool_use_multi_matcher_exit_0.yml +26 -0
  68. data/examples/v2/hooks/pre_tool_use_multi_matcher_exit_1.yml +26 -0
  69. data/examples/v2/hooks/pre_tool_use_multi_matcher_exit_2.yml +27 -0
  70. data/examples/v2/hooks/swarm_summary.sh +44 -0
  71. data/examples/v2/hooks/user_prompt_exit_0.yml +21 -0
  72. data/examples/v2/hooks/user_prompt_exit_1.yml +21 -0
  73. data/examples/v2/hooks/user_prompt_exit_2.yml +21 -0
  74. data/examples/v2/hooks/validate_bash.rb +59 -0
  75. data/examples/v2/multi_directory_permissions.yml +221 -0
  76. data/examples/v2/node_context_demo.rb +127 -0
  77. data/examples/v2/node_workflow.rb +173 -0
  78. data/examples/v2/path_resolution_demo.rb +216 -0
  79. data/examples/v2/simple-swarm-v2.rb +90 -0
  80. data/examples/v2/simple-swarm-v2.yml +62 -0
  81. data/examples/v2/swarm.yml +71 -0
  82. data/examples/v2/swarm_with_hooks.yml +61 -0
  83. data/examples/v2/swarm_with_hooks_simple.yml +25 -0
  84. data/examples/v2/think_tool_demo.rb +62 -0
  85. data/exe/swarm +6 -0
  86. data/lib/claude_swarm/claude_mcp_server.rb +0 -6
  87. data/lib/claude_swarm/cli.rb +10 -3
  88. data/lib/claude_swarm/commands/ps.rb +19 -20
  89. data/lib/claude_swarm/commands/show.rb +1 -1
  90. data/lib/claude_swarm/configuration.rb +10 -12
  91. data/lib/claude_swarm/mcp_generator.rb +10 -1
  92. data/lib/claude_swarm/orchestrator.rb +73 -49
  93. data/lib/claude_swarm/system_utils.rb +37 -11
  94. data/lib/claude_swarm/version.rb +1 -1
  95. data/lib/claude_swarm/worktree_manager.rb +1 -0
  96. data/lib/claude_swarm/yaml_loader.rb +22 -0
  97. data/lib/claude_swarm.rb +7 -2
  98. data/lib/swarm_cli/cli.rb +201 -0
  99. data/lib/swarm_cli/command_registry.rb +61 -0
  100. data/lib/swarm_cli/commands/mcp_serve.rb +130 -0
  101. data/lib/swarm_cli/commands/mcp_tools.rb +148 -0
  102. data/lib/swarm_cli/commands/migrate.rb +55 -0
  103. data/lib/swarm_cli/commands/run.rb +173 -0
  104. data/lib/swarm_cli/config_loader.rb +97 -0
  105. data/lib/swarm_cli/formatters/human_formatter.rb +711 -0
  106. data/lib/swarm_cli/formatters/json_formatter.rb +51 -0
  107. data/lib/swarm_cli/interactive_repl.rb +918 -0
  108. data/lib/swarm_cli/mcp_serve_options.rb +44 -0
  109. data/lib/swarm_cli/mcp_tools_options.rb +59 -0
  110. data/lib/swarm_cli/migrate_options.rb +54 -0
  111. data/lib/swarm_cli/migrator.rb +132 -0
  112. data/lib/swarm_cli/options.rb +151 -0
  113. data/lib/swarm_cli/ui/components/agent_badge.rb +33 -0
  114. data/lib/swarm_cli/ui/components/content_block.rb +120 -0
  115. data/lib/swarm_cli/ui/components/divider.rb +57 -0
  116. data/lib/swarm_cli/ui/components/panel.rb +62 -0
  117. data/lib/swarm_cli/ui/components/usage_stats.rb +70 -0
  118. data/lib/swarm_cli/ui/formatters/cost.rb +49 -0
  119. data/lib/swarm_cli/ui/formatters/number.rb +58 -0
  120. data/lib/swarm_cli/ui/formatters/text.rb +77 -0
  121. data/lib/swarm_cli/ui/formatters/time.rb +73 -0
  122. data/lib/swarm_cli/ui/icons.rb +59 -0
  123. data/lib/swarm_cli/ui/renderers/event_renderer.rb +188 -0
  124. data/lib/swarm_cli/ui/state/agent_color_cache.rb +45 -0
  125. data/lib/swarm_cli/ui/state/depth_tracker.rb +40 -0
  126. data/lib/swarm_cli/ui/state/spinner_manager.rb +170 -0
  127. data/lib/swarm_cli/ui/state/usage_tracker.rb +62 -0
  128. data/lib/swarm_cli/version.rb +5 -0
  129. data/lib/swarm_cli.rb +44 -0
  130. data/lib/swarm_memory/adapters/base.rb +141 -0
  131. data/lib/swarm_memory/adapters/filesystem_adapter.rb +845 -0
  132. data/lib/swarm_memory/chat_extension.rb +34 -0
  133. data/lib/swarm_memory/cli/commands.rb +306 -0
  134. data/lib/swarm_memory/core/entry.rb +37 -0
  135. data/lib/swarm_memory/core/frontmatter_parser.rb +108 -0
  136. data/lib/swarm_memory/core/metadata_extractor.rb +68 -0
  137. data/lib/swarm_memory/core/path_normalizer.rb +75 -0
  138. data/lib/swarm_memory/core/semantic_index.rb +244 -0
  139. data/lib/swarm_memory/core/storage.rb +288 -0
  140. data/lib/swarm_memory/core/storage_read_tracker.rb +63 -0
  141. data/lib/swarm_memory/dsl/builder_extension.rb +40 -0
  142. data/lib/swarm_memory/dsl/memory_config.rb +113 -0
  143. data/lib/swarm_memory/embeddings/embedder.rb +36 -0
  144. data/lib/swarm_memory/embeddings/informers_embedder.rb +152 -0
  145. data/lib/swarm_memory/errors.rb +21 -0
  146. data/lib/swarm_memory/integration/cli_registration.rb +30 -0
  147. data/lib/swarm_memory/integration/configuration.rb +43 -0
  148. data/lib/swarm_memory/integration/registration.rb +31 -0
  149. data/lib/swarm_memory/integration/sdk_plugin.rb +531 -0
  150. data/lib/swarm_memory/optimization/analyzer.rb +244 -0
  151. data/lib/swarm_memory/optimization/defragmenter.rb +863 -0
  152. data/lib/swarm_memory/prompts/memory.md.erb +109 -0
  153. data/lib/swarm_memory/prompts/memory_assistant.md.erb +181 -0
  154. data/lib/swarm_memory/prompts/memory_researcher.md.erb +281 -0
  155. data/lib/swarm_memory/prompts/memory_retrieval.md.erb +78 -0
  156. data/lib/swarm_memory/search/semantic_search.rb +112 -0
  157. data/lib/swarm_memory/search/text_search.rb +42 -0
  158. data/lib/swarm_memory/search/text_similarity.rb +80 -0
  159. data/lib/swarm_memory/skills/meta/deep-learning.md +101 -0
  160. data/lib/swarm_memory/skills/meta/deep-learning.yml +14 -0
  161. data/lib/swarm_memory/tools/load_skill.rb +313 -0
  162. data/lib/swarm_memory/tools/memory_defrag.rb +382 -0
  163. data/lib/swarm_memory/tools/memory_delete.rb +99 -0
  164. data/lib/swarm_memory/tools/memory_edit.rb +185 -0
  165. data/lib/swarm_memory/tools/memory_glob.rb +160 -0
  166. data/lib/swarm_memory/tools/memory_grep.rb +247 -0
  167. data/lib/swarm_memory/tools/memory_multi_edit.rb +281 -0
  168. data/lib/swarm_memory/tools/memory_read.rb +123 -0
  169. data/lib/swarm_memory/tools/memory_write.rb +231 -0
  170. data/lib/swarm_memory/utils.rb +50 -0
  171. data/lib/swarm_memory/version.rb +5 -0
  172. data/lib/swarm_memory.rb +166 -0
  173. data/lib/swarm_sdk/agent/RETRY_LOGIC.md +127 -0
  174. data/lib/swarm_sdk/agent/builder.rb +461 -0
  175. data/lib/swarm_sdk/agent/chat/context_tracker.rb +314 -0
  176. data/lib/swarm_sdk/agent/chat/hook_integration.rb +372 -0
  177. data/lib/swarm_sdk/agent/chat/logging_helpers.rb +116 -0
  178. data/lib/swarm_sdk/agent/chat/system_reminder_injector.rb +152 -0
  179. data/lib/swarm_sdk/agent/chat.rb +1159 -0
  180. data/lib/swarm_sdk/agent/context.rb +112 -0
  181. data/lib/swarm_sdk/agent/context_manager.rb +309 -0
  182. data/lib/swarm_sdk/agent/definition.rb +556 -0
  183. data/lib/swarm_sdk/claude_code_agent_adapter.rb +205 -0
  184. data/lib/swarm_sdk/configuration.rb +296 -0
  185. data/lib/swarm_sdk/context_compactor/metrics.rb +147 -0
  186. data/lib/swarm_sdk/context_compactor/token_counter.rb +106 -0
  187. data/lib/swarm_sdk/context_compactor.rb +340 -0
  188. data/lib/swarm_sdk/hooks/adapter.rb +359 -0
  189. data/lib/swarm_sdk/hooks/context.rb +197 -0
  190. data/lib/swarm_sdk/hooks/definition.rb +80 -0
  191. data/lib/swarm_sdk/hooks/error.rb +29 -0
  192. data/lib/swarm_sdk/hooks/executor.rb +146 -0
  193. data/lib/swarm_sdk/hooks/registry.rb +147 -0
  194. data/lib/swarm_sdk/hooks/result.rb +150 -0
  195. data/lib/swarm_sdk/hooks/shell_executor.rb +254 -0
  196. data/lib/swarm_sdk/hooks/tool_call.rb +35 -0
  197. data/lib/swarm_sdk/hooks/tool_result.rb +62 -0
  198. data/lib/swarm_sdk/log_collector.rb +51 -0
  199. data/lib/swarm_sdk/log_stream.rb +69 -0
  200. data/lib/swarm_sdk/markdown_parser.rb +75 -0
  201. data/lib/swarm_sdk/model_aliases.json +5 -0
  202. data/lib/swarm_sdk/models.json +1 -0
  203. data/lib/swarm_sdk/models.rb +120 -0
  204. data/lib/swarm_sdk/node/agent_config.rb +49 -0
  205. data/lib/swarm_sdk/node/builder.rb +439 -0
  206. data/lib/swarm_sdk/node/transformer_executor.rb +248 -0
  207. data/lib/swarm_sdk/node_context.rb +170 -0
  208. data/lib/swarm_sdk/node_orchestrator.rb +384 -0
  209. data/lib/swarm_sdk/permissions/config.rb +239 -0
  210. data/lib/swarm_sdk/permissions/error_formatter.rb +121 -0
  211. data/lib/swarm_sdk/permissions/path_matcher.rb +35 -0
  212. data/lib/swarm_sdk/permissions/validator.rb +173 -0
  213. data/lib/swarm_sdk/permissions_builder.rb +122 -0
  214. data/lib/swarm_sdk/plugin.rb +147 -0
  215. data/lib/swarm_sdk/plugin_registry.rb +101 -0
  216. data/lib/swarm_sdk/prompts/base_system_prompt.md.erb +243 -0
  217. data/lib/swarm_sdk/providers/openai_with_responses.rb +582 -0
  218. data/lib/swarm_sdk/result.rb +97 -0
  219. data/lib/swarm_sdk/swarm/agent_initializer.rb +334 -0
  220. data/lib/swarm_sdk/swarm/all_agents_builder.rb +140 -0
  221. data/lib/swarm_sdk/swarm/builder.rb +586 -0
  222. data/lib/swarm_sdk/swarm/mcp_configurator.rb +151 -0
  223. data/lib/swarm_sdk/swarm/tool_configurator.rb +419 -0
  224. data/lib/swarm_sdk/swarm.rb +982 -0
  225. data/lib/swarm_sdk/tools/bash.rb +274 -0
  226. data/lib/swarm_sdk/tools/clock.rb +44 -0
  227. data/lib/swarm_sdk/tools/delegate.rb +164 -0
  228. data/lib/swarm_sdk/tools/document_converters/base_converter.rb +83 -0
  229. data/lib/swarm_sdk/tools/document_converters/docx_converter.rb +99 -0
  230. data/lib/swarm_sdk/tools/document_converters/html_converter.rb +101 -0
  231. data/lib/swarm_sdk/tools/document_converters/pdf_converter.rb +78 -0
  232. data/lib/swarm_sdk/tools/document_converters/xlsx_converter.rb +194 -0
  233. data/lib/swarm_sdk/tools/edit.rb +150 -0
  234. data/lib/swarm_sdk/tools/glob.rb +158 -0
  235. data/lib/swarm_sdk/tools/grep.rb +228 -0
  236. data/lib/swarm_sdk/tools/image_extractors/docx_image_extractor.rb +43 -0
  237. data/lib/swarm_sdk/tools/image_extractors/pdf_image_extractor.rb +163 -0
  238. data/lib/swarm_sdk/tools/image_formats/tiff_builder.rb +65 -0
  239. data/lib/swarm_sdk/tools/multi_edit.rb +232 -0
  240. data/lib/swarm_sdk/tools/path_resolver.rb +43 -0
  241. data/lib/swarm_sdk/tools/read.rb +251 -0
  242. data/lib/swarm_sdk/tools/registry.rb +93 -0
  243. data/lib/swarm_sdk/tools/scratchpad/scratchpad_list.rb +96 -0
  244. data/lib/swarm_sdk/tools/scratchpad/scratchpad_read.rb +76 -0
  245. data/lib/swarm_sdk/tools/scratchpad/scratchpad_write.rb +91 -0
  246. data/lib/swarm_sdk/tools/stores/read_tracker.rb +61 -0
  247. data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +224 -0
  248. data/lib/swarm_sdk/tools/stores/storage.rb +148 -0
  249. data/lib/swarm_sdk/tools/stores/todo_manager.rb +65 -0
  250. data/lib/swarm_sdk/tools/think.rb +95 -0
  251. data/lib/swarm_sdk/tools/todo_write.rb +216 -0
  252. data/lib/swarm_sdk/tools/web_fetch.rb +261 -0
  253. data/lib/swarm_sdk/tools/write.rb +117 -0
  254. data/lib/swarm_sdk/utils.rb +50 -0
  255. data/lib/swarm_sdk/version.rb +5 -0
  256. data/lib/swarm_sdk.rb +157 -0
  257. data/llm.v2.txt +13407 -0
  258. data/rubocop/cop/security/no_reflection_methods.rb +47 -0
  259. data/rubocop/cop/security/no_ruby_llm_logger.rb +32 -0
  260. data/swarm_cli.gemspec +57 -0
  261. data/swarm_memory.gemspec +28 -0
  262. data/swarm_sdk.gemspec +41 -0
  263. data/team.yml +1 -1
  264. data/team_full.yml +1875 -0
  265. data/{team_v2.yml → team_sdk.yml} +121 -52
  266. metadata +249 -6
  267. data/EXAMPLES.md +0 -164
@@ -0,0 +1,1835 @@
1
+ # YAML Configuration Reference
2
+
3
+ Complete YAML configuration reference for SwarmSDK v2.
4
+
5
+ ---
6
+
7
+ ## Document Structure
8
+
9
+ SwarmSDK v2 configurations follow this structure:
10
+
11
+ ```yaml
12
+ version: 2
13
+ swarm:
14
+ name: "Swarm Name"
15
+ lead: agent_name
16
+ agents:
17
+ agent_name:
18
+ # Agent configuration
19
+ all_agents:
20
+ # Shared agent configuration
21
+ hooks:
22
+ # Swarm-level hooks
23
+ nodes:
24
+ # Node configurations (optional)
25
+ start_node: node_name # Required if nodes defined
26
+ ```
27
+
28
+ ---
29
+
30
+ ## Top-Level Fields
31
+
32
+ ### version
33
+
34
+ **Type:** Integer (required)
35
+ **Value:** `2`
36
+ **Description:** Configuration version number. Must be `2` for SwarmSDK v2.
37
+
38
+ ```yaml
39
+ version: 2
40
+ ```
41
+
42
+ ---
43
+
44
+ ### swarm
45
+
46
+ **Type:** Object (required)
47
+ **Description:** Root configuration object containing all swarm settings.
48
+
49
+ ```yaml
50
+ swarm:
51
+ name: "Development Team"
52
+ lead: backend
53
+ agents:
54
+ # ...
55
+ ```
56
+
57
+ ---
58
+
59
+ ## Swarm Configuration
60
+
61
+ Fields under the `swarm` key.
62
+
63
+ ### name
64
+
65
+ **Type:** String (required)
66
+ **Description:** Human-readable swarm name.
67
+
68
+ ```yaml
69
+ swarm:
70
+ name: "Development Team"
71
+ name: "Code Review Swarm"
72
+ ```
73
+
74
+ ---
75
+
76
+ ### lead
77
+
78
+ **Type:** String (required)
79
+ **Description:** Name of the lead agent (entry point for execution).
80
+
81
+ ```yaml
82
+ swarm:
83
+ lead: backend
84
+ lead: coordinator
85
+ ```
86
+
87
+ ---
88
+
89
+ ### use_scratchpad
90
+
91
+ **Type:** Boolean (optional)
92
+ **Default:** `true`
93
+ **Description:** Enable or disable shared scratchpad tools for all agents in the swarm.
94
+
95
+ When enabled, all agents get scratchpad tools (ScratchpadWrite, ScratchpadRead, ScratchpadList). Scratchpad is volatile (in-memory only) and shared across all agents.
96
+
97
+ ```yaml
98
+ swarm:
99
+ use_scratchpad: true # default
100
+ use_scratchpad: false # disable scratchpad
101
+ ```
102
+
103
+ ---
104
+
105
+ ### agents
106
+
107
+ **Type:** Object (required)
108
+ **Description:** Map of agent names to agent configurations.
109
+ **Format:** `{ agent_name: agent_config }`
110
+
111
+ ```yaml
112
+ swarm:
113
+ agents:
114
+ backend:
115
+ description: "Backend developer"
116
+ model: gpt-5
117
+ tools: [Read, Write, Bash]
118
+
119
+ frontend:
120
+ description: "Frontend developer"
121
+ model: claude-sonnet-4
122
+ tools: [Read, Write]
123
+ ```
124
+
125
+ ---
126
+
127
+ ### all_agents
128
+
129
+ **Type:** Object (optional)
130
+ **Description:** Configuration applied to all agents. Agent-specific values override these defaults.
131
+ **Default:** `{}`
132
+
133
+ ```yaml
134
+ swarm:
135
+ all_agents:
136
+ provider: openai
137
+ timeout: 180
138
+ tools: [Read, Write]
139
+ coding_agent: false
140
+
141
+ permissions:
142
+ Write:
143
+ denied_paths: ["secrets/**"]
144
+ ```
145
+
146
+ ---
147
+
148
+ ### hooks
149
+
150
+ **Type:** Object (optional)
151
+ **Description:** Swarm-level hooks (swarm_start and swarm_stop only).
152
+ **Default:** `{}`
153
+
154
+ ```yaml
155
+ swarm:
156
+ hooks:
157
+ swarm_start:
158
+ - type: command
159
+ command: "echo 'Starting swarm' >> log.txt"
160
+
161
+ swarm_stop:
162
+ - type: command
163
+ command: "scripts/cleanup.sh"
164
+ timeout: 30
165
+ ```
166
+
167
+ ---
168
+
169
+ ### nodes
170
+
171
+ > **⚠️ IMPORTANT: Node workflows are ONLY supported in Ruby DSL, NOT in YAML configuration.**
172
+ >
173
+ > The documentation below describes the node structure for reference, but you cannot use nodes in YAML files.
174
+ > To use node-based workflows, you must use the Ruby DSL. See [Ruby DSL Reference](./ruby-dsl.md#node-builder-dsl) for details.
175
+
176
+ **Type:** Object (optional, **Ruby DSL only**)
177
+ **Description:** Map of node names to node configurations. Enables multi-stage workflows.
178
+ **Format:** `{ node_name: node_config }`
179
+
180
+ **Note:** This section is for reference only. YAML configuration does not support nodes.
181
+
182
+ ```ruby
183
+ # Ruby DSL only - NOT valid in YAML
184
+ SwarmSDK.build do
185
+ nodes:
186
+ planning:
187
+ agents:
188
+ - agent: architect
189
+
190
+ implementation:
191
+ agents:
192
+ - agent: backend
193
+ delegates_to: [tester]
194
+ - agent: tester
195
+ dependencies: [planning]
196
+ end
197
+ ```
198
+
199
+ ---
200
+
201
+ ### start_node
202
+
203
+ > **⚠️ Note: Node workflows are Ruby DSL only, not supported in YAML.**
204
+
205
+ **Type:** String (required if nodes defined, **Ruby DSL only**)
206
+ **Description:** Name of the starting node for workflow execution.
207
+
208
+ **Note:** This field only applies to Ruby DSL. Not supported in YAML configuration.
209
+
210
+ ```ruby
211
+ # Ruby DSL only - NOT valid in YAML
212
+ SwarmSDK.build do
213
+ start_node :planning
214
+ nodes:
215
+ planning:
216
+ # ...
217
+ end
218
+ ```
219
+
220
+ ---
221
+
222
+ ## Agent Configuration
223
+
224
+ Fields under each agent in `swarm.agents`.
225
+
226
+ ### description
227
+
228
+ **Type:** String (required)
229
+ **Description:** Human-readable description of the agent's role.
230
+
231
+ ```yaml
232
+ agents:
233
+ backend:
234
+ description: "Backend API developer specializing in Ruby on Rails"
235
+ frontend:
236
+ description: "Frontend developer with React and TypeScript expertise"
237
+ ```
238
+
239
+ ---
240
+
241
+ ### model
242
+
243
+ **Type:** String (optional)
244
+ **Default:** `"gpt-5"`
245
+ **Description:** LLM model identifier.
246
+
247
+ **Common models:**
248
+ - OpenAI: `gpt-5`, `gpt-4o`, `o4`, `o4-mini`
249
+ - Anthropic: `claude-sonnet-4`, `claude-opus-4`
250
+ - Google: `gemini-2.5-flash`, `gemini-2.0-pro`
251
+ - DeepSeek: `deepseek-chat`, `deepseek-reasoner`
252
+
253
+ ```yaml
254
+ agents:
255
+ backend:
256
+ model: gpt-5
257
+ frontend:
258
+ model: claude-sonnet-4
259
+ analyzer:
260
+ model: deepseek-reasoner
261
+ ```
262
+
263
+ ---
264
+
265
+ ### provider
266
+
267
+ **Type:** String (optional)
268
+ **Default:** `"openai"`
269
+ **Description:** LLM provider name.
270
+
271
+ **Supported providers:**
272
+ - `openai`: OpenAI
273
+ - `anthropic`: Anthropic Claude
274
+ - `google`: Google AI
275
+ - `deepseek`: DeepSeek
276
+ - `openrouter`: OpenRouter
277
+ - `mistral`: Mistral AI
278
+ - `perplexity`: Perplexity
279
+
280
+ ```yaml
281
+ agents:
282
+ backend:
283
+ provider: openai
284
+ frontend:
285
+ provider: anthropic
286
+ ```
287
+
288
+ ---
289
+
290
+ ### base_url
291
+
292
+ **Type:** String (optional)
293
+ **Default:** Provider's default endpoint
294
+ **Description:** Custom API endpoint URL (for proxies or compatible APIs).
295
+ **Auto-sets:** `assume_model_exists: true`
296
+
297
+ ```yaml
298
+ agents:
299
+ backend:
300
+ base_url: "http://localhost:8080/v1"
301
+ frontend:
302
+ base_url: "https://proxy.example.com/v1"
303
+ ```
304
+
305
+ ---
306
+
307
+ ### api_version
308
+
309
+ **Type:** String (optional)
310
+ **Default:** `"v1/chat/completions"`
311
+ **Description:** API version for OpenAI-compatible providers.
312
+
313
+ **Valid values:**
314
+ - `v1/chat/completions`: Standard chat completions (default)
315
+ - `v1/responses`: Extended responses format
316
+
317
+ **Compatible providers:** `openai`, `deepseek`, `perplexity`, `mistral`, `openrouter`
318
+
319
+ ```yaml
320
+ agents:
321
+ backend:
322
+ provider: openai
323
+ api_version: "v1/chat/completions"
324
+
325
+ reasoner:
326
+ provider: deepseek
327
+ api_version: "v1/responses"
328
+ ```
329
+
330
+ ---
331
+
332
+ ### directory
333
+
334
+ **Type:** String (optional)
335
+ **Default:** `"."`
336
+ **Description:** Agent's working directory. All file operations are relative to this path.
337
+
338
+ ```yaml
339
+ agents:
340
+ backend:
341
+ directory: "."
342
+ frontend:
343
+ directory: "frontend"
344
+ docs:
345
+ directory: "/absolute/path/to/docs"
346
+ ```
347
+
348
+ ---
349
+
350
+ ### system_prompt
351
+
352
+ **Type:** String (optional)
353
+ **Default:** `nil`
354
+ **Description:** Custom system prompt text.
355
+
356
+ **Combination with `coding_agent`:**
357
+ - `coding_agent: false` (default): Uses only custom prompt + TODO/Scratchpad info
358
+ - `coding_agent: true`: Prepends base coding prompt, then custom prompt
359
+
360
+ ```yaml
361
+ agents:
362
+ backend:
363
+ system_prompt: "You are a backend API developer. Focus on clean, testable code."
364
+
365
+ reviewer:
366
+ system_prompt: |
367
+ You are a code reviewer. For each file:
368
+ 1. Check for bugs and edge cases
369
+ 2. Suggest improvements
370
+ 3. Verify test coverage
371
+ ```
372
+
373
+ ---
374
+
375
+ ### coding_agent
376
+
377
+ **Type:** Boolean (optional)
378
+ **Default:** `false`
379
+ **Description:** Whether to include the base coding system prompt.
380
+
381
+ **Behavior:**
382
+ - `false`: Uses only custom `system_prompt` + TODO/Scratchpad sections
383
+ - `true`: Prepends comprehensive base coding prompt, then custom prompt
384
+
385
+ ```yaml
386
+ agents:
387
+ developer:
388
+ coding_agent: true # Include base coding prompt
389
+ analyst:
390
+ coding_agent: false # Custom prompt only (default)
391
+ ```
392
+
393
+ ---
394
+
395
+ ### tools
396
+
397
+ **Type:** Array (optional)
398
+ **Default:** Default tools if `default tools enabled`
399
+ **Description:** List of tools available to the agent.
400
+
401
+ **Default tools (when `default tools enabled`):**
402
+ - `Read`, `Glob`, `Grep`, `TodoWrite`, `Think`, `WebFetch`
403
+
404
+ **Scratchpad tools** (added if `use_scratchpad: true` at swarm level, default):
405
+ - `ScratchpadWrite`, `ScratchpadRead`, `ScratchpadList`
406
+
407
+ **Memory tools** (added if agent has `memory` configured):
408
+ - `MemoryWrite`, `MemoryRead`, `MemoryEdit`, `MemoryMultiEdit`, `MemoryGlob`, `MemoryGrep`, `MemoryDelete`
409
+
410
+ **Additional tools:**
411
+ - `Write`, `Edit`, `MultiEdit`, `Bash`
412
+
413
+ **Format:** Simple array or array of objects with permissions
414
+
415
+ ```yaml
416
+ # Simple format
417
+ agents:
418
+ backend:
419
+ tools: [Read, Write, Edit, Bash]
420
+
421
+ # With inline permissions
422
+ agents:
423
+ backend:
424
+ tools:
425
+ - Read
426
+ - Write:
427
+ allowed_paths: ["backend/**/*"]
428
+ denied_paths: ["backend/secrets/**"]
429
+ - Bash:
430
+ allowed_commands: ["^git (status|diff|log)$"]
431
+ denied_commands: ["^rm -rf"]
432
+
433
+ # Without default tools
434
+ agents:
435
+ minimal:
436
+ tools: [Read, Write]
437
+ disable_default_tools: true
438
+ ```
439
+
440
+ ---
441
+
442
+ ### delegates_to
443
+
444
+ **Type:** Array (optional)
445
+ **Default:** `[]`
446
+ **Description:** List of agent names this agent can delegate to.
447
+
448
+ **Behavior:** Creates a `delegate_to_{agent}` tool for each target
449
+
450
+ ```yaml
451
+ agents:
452
+ backend:
453
+ delegates_to: [database, tester]
454
+ coordinator:
455
+ delegates_to: [frontend, backend, reviewer]
456
+ ```
457
+
458
+ ---
459
+
460
+ ### memory
461
+
462
+ **Type:** Object (optional)
463
+ **Default:** `null` (memory disabled)
464
+ **Description:** Configure persistent memory storage for this agent.
465
+
466
+ When configured, the agent automatically gets all 7 memory tools (MemoryWrite, MemoryRead, MemoryEdit, MemoryMultiEdit, MemoryGlob, MemoryGrep, MemoryDelete) and a memory system prompt is appended.
467
+
468
+ Memory is per-agent (isolated) and persistent (survives across sessions).
469
+
470
+ **Fields:**
471
+ - `adapter` (String, optional): Storage adapter (default: `"filesystem"`)
472
+ - `directory` (String, required): Directory where `memory.json` will be stored
473
+
474
+ ```yaml
475
+ agents:
476
+ learning_assistant:
477
+ description: "Assistant that learns"
478
+ model: gpt-4
479
+ memory:
480
+ adapter: filesystem # optional
481
+ directory: .swarm/assistant-memory # required
482
+
483
+ # Minimal (adapter defaults to filesystem)
484
+ another_agent:
485
+ memory:
486
+ directory: .swarm/another-agent
487
+ ```
488
+
489
+ **Future adapters:** `sqlite`, `faiss` (not yet implemented)
490
+
491
+ ---
492
+
493
+ ### mcp_servers
494
+
495
+ **Type:** Array (optional)
496
+ **Default:** `[]`
497
+ **Description:** MCP server configurations for this agent.
498
+
499
+ **Transport types:** `stdio`, `sse`, `http`
500
+
501
+ ```yaml
502
+ agents:
503
+ backend:
504
+ mcp_servers:
505
+ # stdio transport
506
+ - name: filesystem
507
+ type: stdio
508
+ command: npx
509
+ args: ["-y", "@modelcontextprotocol/server-filesystem", "/allowed/path"]
510
+ env:
511
+ VAR: value
512
+
513
+ # SSE transport
514
+ - name: web
515
+ type: sse
516
+ url: "https://example.com/mcp"
517
+ headers:
518
+ authorization: "Bearer token"
519
+ timeout: 60
520
+
521
+ # HTTP transport
522
+ - name: api
523
+ type: http
524
+ url: "https://api.example.com/mcp"
525
+ headers:
526
+ api-key: "key"
527
+ timeout: 120
528
+ ```
529
+
530
+ ---
531
+
532
+ ### permissions
533
+
534
+ **Type:** Object (optional)
535
+ **Default:** `{}`
536
+ **Description:** Tool permission configuration. Uses glob patterns for paths, regex for commands.
537
+
538
+ **Format:** `{ ToolName: { allowed_paths, denied_paths, allowed_commands, denied_commands } }`
539
+
540
+ ```yaml
541
+ agents:
542
+ backend:
543
+ permissions:
544
+ Write:
545
+ allowed_paths:
546
+ - "backend/**/*"
547
+ - "shared/**/*"
548
+ denied_paths:
549
+ - "backend/secrets/**"
550
+ - "shared/config/credentials.yml"
551
+
552
+ Read:
553
+ denied_paths:
554
+ - "*.key"
555
+ - ".env"
556
+
557
+ Bash:
558
+ allowed_commands:
559
+ - "^git (status|diff|log)$"
560
+ - "^bundle exec rspec$"
561
+ denied_commands:
562
+ - "^rm -rf"
563
+ - "^sudo"
564
+ ```
565
+
566
+ ---
567
+
568
+ ### hooks
569
+
570
+ **Type:** Object (optional)
571
+ **Default:** `{}`
572
+ **Description:** Agent-specific hooks configuration.
573
+
574
+ **Event types:**
575
+ - `pre_tool_use`: Before tool execution
576
+ - `post_tool_use`: After tool execution
577
+ - `user_prompt`: Before sending user message
578
+ - `agent_stop`: When agent finishes
579
+ - `first_message`: First user message (once per swarm)
580
+ - `pre_delegation`: Before delegating to another agent
581
+ - `post_delegation`: After delegation completes
582
+ - `context_warning`: When context window threshold exceeded
583
+
584
+ ```yaml
585
+ agents:
586
+ backend:
587
+ hooks:
588
+ pre_tool_use:
589
+ - matcher: "Write|Edit"
590
+ type: command
591
+ command: "scripts/validate.sh"
592
+ timeout: 10
593
+
594
+ post_tool_use:
595
+ - matcher: "Bash"
596
+ type: command
597
+ command: "logger 'Command executed'"
598
+
599
+ user_prompt:
600
+ - type: command
601
+ command: "scripts/log-request.sh"
602
+ ```
603
+
604
+ ---
605
+
606
+ ### parameters
607
+
608
+ **Type:** Object (optional)
609
+ **Default:** `{}`
610
+ **Description:** LLM parameters (temperature, top_p, etc.).
611
+
612
+ **Common parameters:**
613
+ - `temperature` (Float): Randomness (0.0-2.0)
614
+ - `top_p` (Float): Nucleus sampling (0.0-1.0)
615
+ - `max_tokens` (Integer): Maximum output tokens
616
+ - `presence_penalty` (Float): Presence penalty (-2.0-2.0)
617
+ - `frequency_penalty` (Float): Frequency penalty (-2.0-2.0)
618
+
619
+ ```yaml
620
+ agents:
621
+ creative:
622
+ parameters:
623
+ temperature: 0.9
624
+ top_p: 0.95
625
+
626
+ precise:
627
+ parameters:
628
+ temperature: 0.3
629
+ max_tokens: 2000
630
+ ```
631
+
632
+ ---
633
+
634
+ ### headers
635
+
636
+ **Type:** Object (optional)
637
+ **Default:** `{}`
638
+ **Description:** Custom HTTP headers for API requests.
639
+
640
+ ```yaml
641
+ agents:
642
+ backend:
643
+ headers:
644
+ X-API-Key: "key123"
645
+ X-Organization: "org123"
646
+ Authorization: "Bearer token"
647
+ ```
648
+
649
+ ---
650
+
651
+ ### timeout
652
+
653
+ **Type:** Integer (optional)
654
+ **Default:** `300` (5 minutes)
655
+ **Description:** Request timeout in seconds.
656
+
657
+ ```yaml
658
+ agents:
659
+ fast:
660
+ timeout: 60
661
+
662
+ reasoning:
663
+ timeout: 600 # 10 minutes for reasoning models
664
+ ```
665
+
666
+ ---
667
+
668
+ ### context_window
669
+
670
+ **Type:** Integer (optional)
671
+ **Default:** Auto-detected from model registry
672
+ **Description:** Explicit context window size in tokens.
673
+
674
+ **Use case:** Override when using custom models or proxies
675
+
676
+ ```yaml
677
+ agents:
678
+ custom:
679
+ model: custom-model
680
+ context_window: 128000 # Override auto-detection
681
+ ```
682
+
683
+ ---
684
+
685
+ ### bypass_permissions
686
+
687
+ **Type:** Boolean (optional)
688
+ **Default:** `false`
689
+ **Description:** Disable permission checks for this agent.
690
+
691
+ **Warning:** Use with caution - allows unrestricted file/command access
692
+
693
+ ```yaml
694
+ agents:
695
+ admin:
696
+ bypass_permissions: true # Disable all permission checks
697
+ ```
698
+
699
+ ---
700
+
701
+ ### max_concurrent_tools
702
+
703
+ **Type:** Integer (optional)
704
+ **Default:** Swarm's `default_local_concurrency` (10)
705
+ **Description:** Maximum concurrent tool calls for this agent.
706
+
707
+ ```yaml
708
+ agents:
709
+ parallel:
710
+ max_concurrent_tools: 20 # Allow more parallelism
711
+
712
+ sequential:
713
+ max_concurrent_tools: 1 # Force sequential execution
714
+ ```
715
+
716
+ ---
717
+
718
+ ### disable_default_tools
719
+
720
+ **Type:** Boolean (optional)
721
+ **Default:** `true`
722
+ **Description:** Include default tools (Read, Grep, Glob, TodoWrite, Think, and scratchpad tools).
723
+
724
+ ```yaml
725
+ agents:
726
+ minimal:
727
+ tools: [Bash]
728
+ disable_default_tools: true # No default tools
729
+ ```
730
+
731
+ ---
732
+
733
+ ### assume_model_exists
734
+
735
+ **Type:** Boolean (optional)
736
+ **Default:** `false` (validate), `true` when `base_url` is set
737
+ **Description:** Skip model validation for custom models.
738
+
739
+ ```yaml
740
+ agents:
741
+ custom:
742
+ model: my-custom-model
743
+ base_url: "https://my-proxy.com/v1"
744
+ assume_model_exists: true # Skip validation
745
+ ```
746
+
747
+ ---
748
+
749
+ ### agent_file
750
+
751
+ **Type:** String (optional)
752
+ **Default:** `nil`
753
+ **Description:** Path to markdown file containing agent configuration (system prompt and tools).
754
+
755
+ **Format:** Path relative to YAML file or absolute
756
+
757
+ ```yaml
758
+ agents:
759
+ backend:
760
+ description: "Backend developer"
761
+ agent_file: "agents/backend.md"
762
+
763
+ frontend:
764
+ description: "Frontend developer"
765
+ agent_file: "/absolute/path/to/frontend.md"
766
+ ```
767
+
768
+ **Markdown file format** (requires YAML frontmatter):
769
+ ```markdown
770
+ ---
771
+ description: "Backend developer"
772
+ model: "gpt-4"
773
+ tools:
774
+ - Read
775
+ - Write
776
+ - Edit
777
+ - Bash
778
+ ---
779
+
780
+ You are a backend API developer specializing in Ruby on Rails.
781
+
782
+ Focus on clean, testable code with proper error handling.
783
+ ```
784
+
785
+ ---
786
+
787
+ ## All-Agents Configuration
788
+
789
+ Fields under `swarm.all_agents`. All fields are optional and provide defaults for agents.
790
+
791
+ ### model
792
+
793
+ **Type:** String
794
+ **Description:** Default model for all agents.
795
+
796
+ ```yaml
797
+ swarm:
798
+ all_agents:
799
+ model: gpt-5
800
+ ```
801
+
802
+ ---
803
+
804
+ ### provider
805
+
806
+ **Type:** String
807
+ **Description:** Default provider for all agents.
808
+
809
+ ```yaml
810
+ swarm:
811
+ all_agents:
812
+ provider: anthropic
813
+ ```
814
+
815
+ ---
816
+
817
+ ### base_url
818
+
819
+ **Type:** String
820
+ **Description:** Default base URL for all agents.
821
+
822
+ ```yaml
823
+ swarm:
824
+ all_agents:
825
+ base_url: "https://proxy.example.com/v1"
826
+ ```
827
+
828
+ ---
829
+
830
+ ### api_version
831
+
832
+ **Type:** String
833
+ **Description:** Default API version for all agents.
834
+
835
+ ```yaml
836
+ swarm:
837
+ all_agents:
838
+ api_version: "v1/responses"
839
+ ```
840
+
841
+ ---
842
+
843
+ ### timeout
844
+
845
+ **Type:** Integer
846
+ **Description:** Default timeout for all agents.
847
+
848
+ ```yaml
849
+ swarm:
850
+ all_agents:
851
+ timeout: 180
852
+ ```
853
+
854
+ ---
855
+
856
+ ### parameters
857
+
858
+ **Type:** Object
859
+ **Description:** Default LLM parameters for all agents.
860
+
861
+ ```yaml
862
+ swarm:
863
+ all_agents:
864
+ parameters:
865
+ temperature: 0.7
866
+ max_tokens: 2000
867
+ ```
868
+
869
+ ---
870
+
871
+ ### headers
872
+
873
+ **Type:** Object
874
+ **Description:** Default HTTP headers for all agents.
875
+
876
+ ```yaml
877
+ swarm:
878
+ all_agents:
879
+ headers:
880
+ X-Organization: "org123"
881
+ ```
882
+
883
+ ---
884
+
885
+ ### coding_agent
886
+
887
+ **Type:** Boolean
888
+ **Description:** Default coding_agent flag for all agents.
889
+
890
+ ```yaml
891
+ swarm:
892
+ all_agents:
893
+ coding_agent: false
894
+ ```
895
+
896
+ ---
897
+
898
+ ### tools
899
+
900
+ **Type:** Array
901
+ **Description:** Tools that all agents will have (in addition to agent-specific tools).
902
+
903
+ ```yaml
904
+ swarm:
905
+ all_agents:
906
+ tools: [Read, Write]
907
+ ```
908
+
909
+ ---
910
+
911
+ ### permissions
912
+
913
+ **Type:** Object
914
+ **Description:** Default permissions for all agents.
915
+
916
+ ```yaml
917
+ swarm:
918
+ all_agents:
919
+ permissions:
920
+ Write:
921
+ denied_paths: ["secrets/**"]
922
+ Bash:
923
+ denied_commands: ["^rm -rf", "^sudo"]
924
+ ```
925
+
926
+ ---
927
+
928
+ ### hooks
929
+
930
+ **Type:** Object
931
+ **Description:** Hooks applied to all agents.
932
+
933
+ **Valid events:** All agent-level events (not swarm-level events)
934
+
935
+ ```yaml
936
+ swarm:
937
+ all_agents:
938
+ hooks:
939
+ pre_tool_use:
940
+ - matcher: "Write"
941
+ type: command
942
+ command: "scripts/validate-write.sh"
943
+ ```
944
+
945
+ ---
946
+
947
+ ## Hooks Configuration
948
+
949
+ ### Hook Structure
950
+
951
+ Each hook is an object with the following fields:
952
+
953
+ #### type
954
+
955
+ **Type:** String (required)
956
+ **Value:** `"command"`
957
+ **Description:** Hook type. Only `command` supported in YAML (Ruby DSL supports blocks).
958
+
959
+ ```yaml
960
+ hooks:
961
+ pre_tool_use:
962
+ - type: command
963
+ command: "validate.sh"
964
+ ```
965
+
966
+ ---
967
+
968
+ #### command
969
+
970
+ **Type:** String (required for type: command)
971
+ **Description:** Shell command to execute.
972
+
973
+ **Environment variables available:**
974
+ - `SWARM_NAME`: Swarm name
975
+ - `AGENT_NAME`: Current agent name
976
+ - `HOOK_EVENT`: Event type (pre_tool_use, post_tool_use, etc.)
977
+ - `TOOL_NAME`: Tool name (for tool events)
978
+
979
+ ```yaml
980
+ hooks:
981
+ pre_tool_use:
982
+ - type: command
983
+ command: "scripts/validate.sh"
984
+ command: "npx eslint $FILE_PATH"
985
+ ```
986
+
987
+ ---
988
+
989
+ #### matcher
990
+
991
+ **Type:** String (optional)
992
+ **Description:** Tool name pattern (regex) for filtering (tool events only).
993
+
994
+ ```yaml
995
+ hooks:
996
+ pre_tool_use:
997
+ # Match Write or Edit
998
+ - matcher: "Write|Edit"
999
+ type: command
1000
+ command: "validate.sh"
1001
+
1002
+ # Match all Bash commands
1003
+ - matcher: "Bash"
1004
+ type: command
1005
+ command: "log-command.sh"
1006
+ ```
1007
+
1008
+ ---
1009
+
1010
+ #### timeout
1011
+
1012
+ **Type:** Integer (optional)
1013
+ **Default:** `60`
1014
+ **Description:** Command timeout in seconds.
1015
+
1016
+ ```yaml
1017
+ hooks:
1018
+ pre_tool_use:
1019
+ - type: command
1020
+ command: "slow-validation.sh"
1021
+ timeout: 120
1022
+ ```
1023
+
1024
+ ---
1025
+
1026
+ ### Hook Events
1027
+
1028
+ #### swarm_start
1029
+
1030
+ Fires when swarm execution begins (before first message).
1031
+
1032
+ **Available in:** `swarm.hooks` only (not agent hooks)
1033
+
1034
+ **Input (stdin JSON):**
1035
+ ```json
1036
+ {
1037
+ "event": "swarm_start",
1038
+ "prompt": "User's task prompt",
1039
+ "swarm_name": "Development Team",
1040
+ "lead_agent": "backend",
1041
+ "timestamp": "2024-01-01T12:00:00Z"
1042
+ }
1043
+ ```
1044
+
1045
+ **Exit codes:**
1046
+ - `0`: Success, continue execution (stdout appended to prompt if non-empty)
1047
+ - `2`: Halt execution with error message from stderr
1048
+ - Other: Non-blocking warning (stderr logged, execution continues)
1049
+
1050
+ ```yaml
1051
+ swarm:
1052
+ hooks:
1053
+ swarm_start:
1054
+ - type: command
1055
+ command: "scripts/pre-flight-check.sh"
1056
+ ```
1057
+
1058
+ ---
1059
+
1060
+ #### swarm_stop
1061
+
1062
+ Fires when swarm execution completes.
1063
+
1064
+ **Available in:** `swarm.hooks` only (not agent hooks)
1065
+
1066
+ **Input (stdin JSON):**
1067
+ ```json
1068
+ {
1069
+ "event": "swarm_stop",
1070
+ "swarm_name": "Development Team",
1071
+ "lead_agent": "backend",
1072
+ "last_agent": "backend",
1073
+ "content": "Final response",
1074
+ "success": true,
1075
+ "duration": 5.2,
1076
+ "total_cost": 0.0045,
1077
+ "total_tokens": 1234,
1078
+ "agents_involved": ["backend", "frontend"],
1079
+ "timestamp": "2024-01-01T12:00:05Z"
1080
+ }
1081
+ ```
1082
+
1083
+ **Exit codes:**
1084
+ - `0`: Success, stdout can trigger reprompt
1085
+ - `1`: Log error but continue
1086
+ - `2`: Halt with error
1087
+
1088
+ **Reprompt:** If stdout is non-empty, reprompt the lead agent with stdout content
1089
+
1090
+ ```yaml
1091
+ swarm:
1092
+ hooks:
1093
+ swarm_stop:
1094
+ - type: command
1095
+ command: "scripts/post-execution.sh"
1096
+ ```
1097
+
1098
+ ---
1099
+
1100
+ #### pre_tool_use
1101
+
1102
+ Fires before tool execution.
1103
+
1104
+ **Available in:** `swarm.agents.{agent}.hooks`, `swarm.all_agents.hooks`
1105
+
1106
+ **Input (stdin JSON):**
1107
+ ```json
1108
+ {
1109
+ "event": "pre_tool_use",
1110
+ "agent": "backend",
1111
+ "tool": "Write",
1112
+ "parameters": {
1113
+ "file_path": "src/app.rb",
1114
+ "content": "..."
1115
+ }
1116
+ }
1117
+ ```
1118
+
1119
+ **Exit codes:**
1120
+ - `0`: Continue execution
1121
+ - `2`: Halt tool execution with error message from stderr
1122
+ - Other: Non-blocking warning (stderr logged, execution continues)
1123
+
1124
+ ```yaml
1125
+ agents:
1126
+ backend:
1127
+ hooks:
1128
+ pre_tool_use:
1129
+ - matcher: "Write|Edit"
1130
+ type: command
1131
+ command: "scripts/validate-write.sh"
1132
+ ```
1133
+
1134
+ ---
1135
+
1136
+ #### post_tool_use
1137
+
1138
+ Fires after tool execution.
1139
+
1140
+ **Available in:** `swarm.agents.{agent}.hooks`, `swarm.all_agents.hooks`
1141
+
1142
+ **Input (stdin JSON):**
1143
+ ```json
1144
+ {
1145
+ "event": "post_tool_use",
1146
+ "agent": "backend",
1147
+ "tool": "Write",
1148
+ "result": "File written successfully",
1149
+ "success": true
1150
+ }
1151
+ ```
1152
+
1153
+ **Exit codes:**
1154
+ - `0`: Continue execution
1155
+ - `2`: Halt execution with error message from stderr
1156
+ - Other: Non-blocking warning (stderr logged, execution continues)
1157
+
1158
+ ```yaml
1159
+ agents:
1160
+ backend:
1161
+ hooks:
1162
+ post_tool_use:
1163
+ - matcher: "Bash"
1164
+ type: command
1165
+ command: "logger 'Command executed'"
1166
+ ```
1167
+
1168
+ ---
1169
+
1170
+ #### user_prompt
1171
+
1172
+ Fires before sending user message to LLM.
1173
+
1174
+ **Available in:** `swarm.agents.{agent}.hooks`, `swarm.all_agents.hooks`
1175
+
1176
+ **Input (stdin JSON):**
1177
+ ```json
1178
+ {
1179
+ "event": "user_prompt",
1180
+ "agent": "backend",
1181
+ "prompt": "Build a REST API",
1182
+ "model": "gpt-5",
1183
+ "provider": "openai",
1184
+ "message_count": 1
1185
+ }
1186
+ ```
1187
+
1188
+ ```yaml
1189
+ agents:
1190
+ backend:
1191
+ hooks:
1192
+ user_prompt:
1193
+ - type: command
1194
+ command: "scripts/log-request.sh"
1195
+ ```
1196
+
1197
+ ---
1198
+
1199
+ #### agent_stop
1200
+
1201
+ Fires when agent finishes execution.
1202
+
1203
+ **Available in:** `swarm.agents.{agent}.hooks`, `swarm.all_agents.hooks`
1204
+
1205
+ **Input (stdin JSON):**
1206
+ ```json
1207
+ {
1208
+ "event": "agent_stop",
1209
+ "agent": "backend",
1210
+ "model": "gpt-5",
1211
+ "content": "Here is the implementation...",
1212
+ "finish_reason": "stop",
1213
+ "usage": {
1214
+ "input_tokens": 234,
1215
+ "output_tokens": 567,
1216
+ "total_tokens": 801,
1217
+ "total_cost": 0.0023
1218
+ }
1219
+ }
1220
+ ```
1221
+
1222
+ ```yaml
1223
+ agents:
1224
+ backend:
1225
+ hooks:
1226
+ agent_stop:
1227
+ - type: command
1228
+ command: "scripts/log-response.sh"
1229
+ ```
1230
+
1231
+ ---
1232
+
1233
+ #### first_message
1234
+
1235
+ Fires on first user message (once per swarm execution).
1236
+
1237
+ **Available in:** `swarm.agents.{agent}.hooks`, `swarm.all_agents.hooks`
1238
+
1239
+ **Input (stdin JSON):**
1240
+ ```json
1241
+ {
1242
+ "event": "first_message",
1243
+ "agent": "backend",
1244
+ "prompt": "Build a REST API",
1245
+ "swarm_name": "Development Team",
1246
+ "timestamp": "2024-01-01T12:00:00Z"
1247
+ }
1248
+ ```
1249
+
1250
+ ```yaml
1251
+ all_agents:
1252
+ hooks:
1253
+ first_message:
1254
+ - type: command
1255
+ command: "scripts/initialize.sh"
1256
+ ```
1257
+
1258
+ ---
1259
+
1260
+ #### pre_delegation
1261
+
1262
+ Fires before delegating to another agent.
1263
+
1264
+ **Available in:** `swarm.agents.{agent}.hooks`, `swarm.all_agents.hooks`
1265
+
1266
+ **Input (stdin JSON):**
1267
+ ```json
1268
+ {
1269
+ "event": "pre_delegation",
1270
+ "agent": "backend",
1271
+ "delegation_target": "database",
1272
+ "prompt": "Create the users table"
1273
+ }
1274
+ ```
1275
+
1276
+ ```yaml
1277
+ agents:
1278
+ backend:
1279
+ hooks:
1280
+ pre_delegation:
1281
+ - type: command
1282
+ command: "echo 'Delegating to $DELEGATION_TARGET'"
1283
+ ```
1284
+
1285
+ ---
1286
+
1287
+ #### post_delegation
1288
+
1289
+ Fires after delegation completes.
1290
+
1291
+ **Available in:** `swarm.agents.{agent}.hooks`, `swarm.all_agents.hooks`
1292
+
1293
+ **Input (stdin JSON):**
1294
+ ```json
1295
+ {
1296
+ "event": "post_delegation",
1297
+ "agent": "backend",
1298
+ "delegation_target": "database",
1299
+ "result": "Table created successfully"
1300
+ }
1301
+ ```
1302
+
1303
+ ```yaml
1304
+ agents:
1305
+ backend:
1306
+ hooks:
1307
+ post_delegation:
1308
+ - type: command
1309
+ command: "logger 'Delegation complete'"
1310
+ ```
1311
+
1312
+ ---
1313
+
1314
+ #### context_warning
1315
+
1316
+ Fires when context window threshold exceeded.
1317
+
1318
+ **Available in:** `swarm.agents.{agent}.hooks`, `swarm.all_agents.hooks`
1319
+
1320
+ **Input (stdin JSON):**
1321
+ ```json
1322
+ {
1323
+ "event": "context_warning",
1324
+ "agent": "backend",
1325
+ "model": "gpt-5",
1326
+ "threshold": "80%",
1327
+ "percentage": "85%",
1328
+ "tokens_used": 102400,
1329
+ "tokens_remaining": 25600,
1330
+ "context_limit": 128000
1331
+ }
1332
+ ```
1333
+
1334
+ ```yaml
1335
+ agents:
1336
+ backend:
1337
+ hooks:
1338
+ context_warning:
1339
+ - type: command
1340
+ command: "notify-admin.sh"
1341
+ ```
1342
+
1343
+ ---
1344
+
1345
+ ## Node Configuration (**Ruby DSL Only**)
1346
+
1347
+ > **⚠️ CRITICAL: Nodes are NOT supported in YAML configuration.**
1348
+ >
1349
+ > The following documentation is for reference only. To use node-based workflows, you MUST use the Ruby DSL.
1350
+ > See [Ruby DSL Reference](./ruby-dsl.md#node-builder-dsl) for working examples.
1351
+
1352
+ Fields under each node in `swarm.nodes` (**Ruby DSL only**).
1353
+
1354
+ ### agents
1355
+
1356
+ **Type:** Array (optional)
1357
+ **Default:** `[]`
1358
+ **Description:** List of agents participating in this node.
1359
+
1360
+ **Format:** Array of objects with `agent` and optional `delegates_to`
1361
+
1362
+ ```yaml
1363
+ nodes:
1364
+ implementation:
1365
+ agents:
1366
+ - agent: backend
1367
+ delegates_to: [tester, database]
1368
+ - agent: tester
1369
+ delegates_to: [database]
1370
+ - agent: database
1371
+ ```
1372
+
1373
+ ---
1374
+
1375
+ ### lead
1376
+
1377
+ **Type:** String (optional)
1378
+ **Default:** First agent in `agents` list
1379
+ **Description:** Lead agent for this node (overrides first agent).
1380
+
1381
+ ```yaml
1382
+ nodes:
1383
+ review:
1384
+ agents:
1385
+ - agent: backend
1386
+ - agent: reviewer
1387
+ lead: reviewer # Make reviewer the lead instead of backend
1388
+ ```
1389
+
1390
+ ---
1391
+
1392
+ ### dependencies
1393
+
1394
+ **Type:** Array (optional)
1395
+ **Default:** `[]`
1396
+ **Description:** List of prerequisite node names that must execute before this node.
1397
+
1398
+ **Note:** In Ruby DSL, use the `depends_on` method. In YAML (if nodes were supported), the field name is `dependencies`.
1399
+
1400
+ ```yaml
1401
+ nodes:
1402
+ planning:
1403
+ agents:
1404
+ - agent: architect
1405
+
1406
+ implementation:
1407
+ agents:
1408
+ - agent: backend
1409
+ dependencies: [planning]
1410
+
1411
+ testing:
1412
+ agents:
1413
+ - agent: tester
1414
+ dependencies: [implementation]
1415
+ ```
1416
+
1417
+ ---
1418
+
1419
+ ### input
1420
+
1421
+ **Type:** String (optional, Ruby DSL only)
1422
+ **Description:** Ruby block for input transformation. Not supported in YAML - use `input_command` instead.
1423
+
1424
+ ---
1425
+
1426
+ ### input_command
1427
+
1428
+ **Type:** String (optional)
1429
+ **Default:** `nil`
1430
+ **Description:** Bash command to transform input before node execution.
1431
+
1432
+ **Input (stdin):** NodeContext as JSON
1433
+ **Output (stdout):** Transformed input content
1434
+
1435
+ **Exit codes:**
1436
+ - `0`: Success, use stdout as transformed content
1437
+ - `1`: Skip node execution, use current_input unchanged
1438
+ - `2`: Halt workflow with error from stderr
1439
+
1440
+ **NodeContext JSON:**
1441
+ ```json
1442
+ {
1443
+ "original_prompt": "User's original prompt",
1444
+ "node_name": "implementation",
1445
+ "dependencies": ["planning"],
1446
+ "content": "Previous node's content",
1447
+ "all_results": {
1448
+ "planning": {
1449
+ "content": "...",
1450
+ "agent": "architect",
1451
+ "duration": 3.2,
1452
+ "success": true
1453
+ }
1454
+ }
1455
+ }
1456
+ ```
1457
+
1458
+ ```yaml
1459
+ nodes:
1460
+ implementation:
1461
+ input_command: "scripts/transform-input.sh"
1462
+ input_command: "jq '.content'"
1463
+ input_command: "scripts/validate.sh" # Exit 1 to skip, 2 to halt
1464
+ ```
1465
+
1466
+ ---
1467
+
1468
+ ### input_timeout
1469
+
1470
+ **Type:** Integer (optional)
1471
+ **Default:** `60`
1472
+ **Description:** Timeout for input_command in seconds.
1473
+
1474
+ ```yaml
1475
+ nodes:
1476
+ implementation:
1477
+ input_command: "scripts/slow-transform.sh"
1478
+ input_timeout: 120
1479
+ ```
1480
+
1481
+ ---
1482
+
1483
+ ### output
1484
+
1485
+ **Type:** String (optional, Ruby DSL only)
1486
+ **Description:** Ruby block for output transformation. Not supported in YAML - use `output_command` instead.
1487
+
1488
+ ---
1489
+
1490
+ ### output_command
1491
+
1492
+ **Type:** String (optional)
1493
+ **Default:** `nil`
1494
+ **Description:** Bash command to transform output after node execution.
1495
+
1496
+ **Input (stdin):** NodeContext as JSON (with result)
1497
+ **Output (stdout):** Transformed output content
1498
+
1499
+ **Exit codes:**
1500
+ - `0`: Success, use stdout as transformed content
1501
+ - `1`: Pass through unchanged, use result.content
1502
+ - `2`: Halt workflow with error from stderr
1503
+
1504
+ **NodeContext JSON:**
1505
+ ```json
1506
+ {
1507
+ "original_prompt": "User's original prompt",
1508
+ "node_name": "implementation",
1509
+ "content": "Current node's result content",
1510
+ "agent": "backend",
1511
+ "duration": 5.2,
1512
+ "success": true,
1513
+ "all_results": {
1514
+ "planning": { ... },
1515
+ "implementation": { ... }
1516
+ }
1517
+ }
1518
+ ```
1519
+
1520
+ ```yaml
1521
+ nodes:
1522
+ implementation:
1523
+ output_command: "scripts/transform-output.sh"
1524
+ output_command: "tee results.txt"
1525
+ output_command: "scripts/save-and-format.sh"
1526
+ ```
1527
+
1528
+ ---
1529
+
1530
+ ### output_timeout
1531
+
1532
+ **Type:** Integer (optional)
1533
+ **Default:** `60`
1534
+ **Description:** Timeout for output_command in seconds.
1535
+
1536
+ ```yaml
1537
+ nodes:
1538
+ implementation:
1539
+ output_command: "scripts/slow-format.sh"
1540
+ output_timeout: 120
1541
+ ```
1542
+
1543
+ ---
1544
+
1545
+ ## Environment Variable Interpolation
1546
+
1547
+ SwarmSDK supports environment variable interpolation with default values.
1548
+
1549
+ ### Syntax
1550
+
1551
+ **Simple:**
1552
+ ```yaml
1553
+ ${ENV_VAR}
1554
+ ```
1555
+
1556
+ **With default:**
1557
+ ```yaml
1558
+ ${ENV_VAR:=default_value}
1559
+ ```
1560
+
1561
+ ### Examples
1562
+
1563
+ ```yaml
1564
+ swarm:
1565
+ agents:
1566
+ backend:
1567
+ model: ${MODEL} # Required env var
1568
+ base_url: ${BASE_URL:=http://localhost:8080} # With default
1569
+ headers:
1570
+ Authorization: "Bearer ${API_TOKEN}"
1571
+ parameters:
1572
+ temperature: ${TEMPERATURE:=0.7}
1573
+
1574
+ mcp_servers:
1575
+ - name: filesystem
1576
+ type: stdio
1577
+ command: npx
1578
+ args: ["-y", "@modelcontextprotocol/server-filesystem", "${ALLOWED_PATH:=.}"]
1579
+ ```
1580
+
1581
+ **Shell usage:**
1582
+ ```bash
1583
+ # With environment variables
1584
+ MODEL=gpt-5 API_TOKEN=abc123 swarm run config.yml -p "Task"
1585
+
1586
+ # With defaults (no env vars set)
1587
+ swarm run config.yml -p "Task" # Uses defaults from config
1588
+ ```
1589
+
1590
+ ---
1591
+
1592
+ ## Permission Patterns
1593
+
1594
+ ### Path Patterns (Glob)
1595
+
1596
+ Glob patterns for file paths.
1597
+
1598
+ **Syntax:**
1599
+ - `*`: Match any characters except `/`
1600
+ - `**`: Match any characters including `/`
1601
+ - `?`: Match single character
1602
+ - `[abc]`: Match a, b, or c
1603
+ - `{a,b}`: Match a or b
1604
+
1605
+ **Examples:**
1606
+ ```yaml
1607
+ permissions:
1608
+ Write:
1609
+ allowed_paths:
1610
+ - "backend/**/*" # All files under backend/
1611
+ - "shared/**/*.rb" # All .rb files under shared/
1612
+ - "config/*.yml" # YAML files in config/ (not subdirs)
1613
+ - "**/test_*.rb" # test_*.rb anywhere
1614
+ - "src/{models,views}/**/*" # models/ and views/ in src/
1615
+
1616
+ denied_paths:
1617
+ - "backend/secrets/**" # No files in secrets/
1618
+ - "**/credentials.yml" # No credentials.yml anywhere
1619
+ - "*.key" # No .key files in root
1620
+ - ".env*" # No .env files
1621
+ ```
1622
+
1623
+ ---
1624
+
1625
+ ### Command Patterns (Regex)
1626
+
1627
+ Regular expressions for bash commands.
1628
+
1629
+ **Syntax:** Standard Ruby/PCRE regex
1630
+
1631
+ **Examples:**
1632
+ ```yaml
1633
+ permissions:
1634
+ Bash:
1635
+ allowed_commands:
1636
+ - "^git (status|diff|log)$" # Only safe git commands
1637
+ - "^bundle exec (rspec|rubocop)$" # Only test/lint
1638
+ - "^npm (test|run lint)$" # Safe npm commands
1639
+ - "^ls( -[lah]+)?$" # ls with optional flags
1640
+ - "^echo " # Echo commands
1641
+
1642
+ denied_commands:
1643
+ - "^rm -rf" # No rm -rf
1644
+ - "^sudo" # No sudo
1645
+ - "^dd if=" # No dd
1646
+ - "chmod 777" # No world-writable
1647
+ - "eval" # No eval
1648
+ ```
1649
+
1650
+ ---
1651
+
1652
+ ## Complete Example
1653
+
1654
+ ```yaml
1655
+ version: 2
1656
+
1657
+ swarm:
1658
+ name: "Full-Stack Development Team"
1659
+ lead: coordinator
1660
+
1661
+ # Global configuration for all agents
1662
+ all_agents:
1663
+ provider: openai
1664
+ timeout: 180
1665
+ coding_agent: false
1666
+ tools: [Read, Write]
1667
+
1668
+ permissions:
1669
+ Write:
1670
+ denied_paths:
1671
+ - "secrets/**"
1672
+ - "*.key"
1673
+ Bash:
1674
+ denied_commands:
1675
+ - "^rm -rf"
1676
+ - "^sudo"
1677
+
1678
+ hooks:
1679
+ pre_tool_use:
1680
+ - matcher: "Write|Edit"
1681
+ type: command
1682
+ command: "scripts/validate-write.sh"
1683
+ timeout: 10
1684
+
1685
+ # Swarm-level hooks
1686
+ hooks:
1687
+ swarm_start:
1688
+ - type: command
1689
+ command: "echo 'Starting development' >> log.txt"
1690
+
1691
+ swarm_stop:
1692
+ - type: command
1693
+ command: "scripts/cleanup.sh"
1694
+ timeout: 30
1695
+
1696
+ # Agent definitions
1697
+ agents:
1698
+ coordinator:
1699
+ description: "Lead coordinator managing the development process"
1700
+ model: gpt-5
1701
+ directory: "."
1702
+ system_prompt: |
1703
+ You are the lead coordinator. Your responsibilities:
1704
+ 1. Understand requirements and create tasks
1705
+ 2. Delegate to specialists (backend, frontend, reviewer)
1706
+ 3. Synthesize results into final deliverable
1707
+ tools: [Read, TodoWrite]
1708
+ delegates_to: [backend, frontend, reviewer]
1709
+ coding_agent: true
1710
+
1711
+ hooks:
1712
+ pre_delegation:
1713
+ - type: command
1714
+ command: "echo 'Delegating to $DELEGATION_TARGET' >> delegation.log"
1715
+
1716
+ backend:
1717
+ description: "Backend developer specializing in Ruby on Rails"
1718
+ model: claude-sonnet-4
1719
+ provider: anthropic
1720
+ directory: "backend"
1721
+ system_prompt: "You build clean, testable backend APIs with Ruby on Rails"
1722
+ tools: [Read, Write, Edit, Bash, Grep, Glob]
1723
+ delegates_to: [database]
1724
+ coding_agent: true
1725
+
1726
+ parameters:
1727
+ temperature: 0.3
1728
+ max_tokens: 4000
1729
+
1730
+ permissions:
1731
+ Write:
1732
+ allowed_paths: ["**/*"]
1733
+ denied_paths: ["config/credentials.yml.enc"]
1734
+ Bash:
1735
+ allowed_commands:
1736
+ - "^bundle exec (rspec|rubocop)"
1737
+ - "^rails (db:migrate|routes)"
1738
+
1739
+ mcp_servers:
1740
+ - name: filesystem
1741
+ type: stdio
1742
+ command: npx
1743
+ args: ["-y", "@modelcontextprotocol/server-filesystem", "/backend"]
1744
+
1745
+ frontend:
1746
+ description: "Frontend developer specializing in React and TypeScript"
1747
+ model: gpt-5
1748
+ directory: "frontend"
1749
+ system_prompt: "You build modern, accessible frontends with React and TypeScript"
1750
+ tools: [Read, Write, Edit, Bash]
1751
+ coding_agent: true
1752
+
1753
+ permissions:
1754
+ Write:
1755
+ allowed_paths: ["**/*"]
1756
+ Bash:
1757
+ allowed_commands:
1758
+ - "^npm (test|run lint)"
1759
+ - "^npx (tsc|eslint)"
1760
+
1761
+ database:
1762
+ description: "Database expert for schema design and migrations"
1763
+ model: gpt-5
1764
+ directory: "backend"
1765
+ system_prompt: "You design efficient database schemas and write migrations"
1766
+ tools: [Read, Write, Bash]
1767
+ coding_agent: true
1768
+
1769
+ permissions:
1770
+ Write:
1771
+ allowed_paths: ["db/**/*"]
1772
+ Bash:
1773
+ allowed_commands:
1774
+ - "^rails db:(migrate|rollback|schema:dump)"
1775
+
1776
+ reviewer:
1777
+ description: "Code reviewer checking for bugs and best practices"
1778
+ model: o4
1779
+ directory: "."
1780
+ system_prompt: |
1781
+ You are a thorough code reviewer. For each change:
1782
+ 1. Check for bugs and edge cases
1783
+ 2. Verify test coverage
1784
+ 3. Suggest improvements
1785
+ 4. Check security issues
1786
+ tools: [Read, Grep, Glob]
1787
+ coding_agent: false
1788
+
1789
+ parameters:
1790
+ temperature: 0.2
1791
+
1792
+ # Multi-stage workflow (optional)
1793
+ nodes:
1794
+ planning:
1795
+ agents:
1796
+ - agent: coordinator
1797
+
1798
+ output_command: "tee plan.txt"
1799
+
1800
+ backend_implementation:
1801
+ agents:
1802
+ - agent: backend
1803
+ delegates_to: [database]
1804
+ - agent: database
1805
+ dependencies: [planning]
1806
+
1807
+ input_command: "scripts/prepare-backend-context.sh"
1808
+ output_command: "scripts/save-backend-results.sh"
1809
+
1810
+ frontend_implementation:
1811
+ agents:
1812
+ - agent: frontend
1813
+ dependencies: [planning]
1814
+
1815
+ input_command: "scripts/prepare-frontend-context.sh"
1816
+
1817
+ review:
1818
+ agents:
1819
+ - agent: reviewer
1820
+ dependencies: [backend_implementation, frontend_implementation]
1821
+
1822
+ input_command: "scripts/gather-changes.sh"
1823
+ output_command: "scripts/format-review.sh"
1824
+
1825
+ start_node: planning
1826
+ ```
1827
+
1828
+ ---
1829
+
1830
+ ## See Also
1831
+
1832
+ - [Ruby DSL Reference](./ruby-dsl.md): Complete Ruby DSL reference
1833
+ - [CLI Reference](./cli.md): Command-line interface reference
1834
+ - [Getting Started Guide](../guides/getting-started.md): Introduction to SwarmSDK
1835
+ - [Quick Start CLI](../guides/quick-start-cli.md): Quick CLI examples