claude_swarm 1.0.9 → 1.0.11

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 (134) hide show
  1. checksums.yaml +4 -4
  2. data/{CHANGELOG.md → CHANGELOG.claude-swarm.md} +10 -0
  3. data/CLAUDE.md +346 -191
  4. data/decisions/2025-11-22-001-global-agent-registry.md +172 -0
  5. data/docs/v2/CHANGELOG.swarm_cli.md +20 -0
  6. data/docs/v2/CHANGELOG.swarm_memory.md +146 -1
  7. data/docs/v2/CHANGELOG.swarm_sdk.md +433 -10
  8. data/docs/v2/README.md +20 -5
  9. data/docs/v2/guides/complete-tutorial.md +95 -9
  10. data/docs/v2/guides/getting-started.md +10 -8
  11. data/docs/v2/guides/memory-adapters.md +41 -0
  12. data/docs/v2/guides/migrating-to-2.x.md +746 -0
  13. data/docs/v2/guides/plugins.md +52 -5
  14. data/docs/v2/guides/rails-integration.md +6 -0
  15. data/docs/v2/guides/snapshots.md +14 -14
  16. data/docs/v2/guides/swarm-memory.md +2 -13
  17. data/docs/v2/reference/architecture-flow.md +3 -3
  18. data/docs/v2/reference/cli.md +0 -1
  19. data/docs/v2/reference/configuration_reference.md +300 -0
  20. data/docs/v2/reference/event_payload_structures.md +27 -5
  21. data/docs/v2/reference/ruby-dsl.md +614 -18
  22. data/docs/v2/reference/swarm_memory_technical_details.md +7 -29
  23. data/docs/v2/reference/yaml.md +172 -54
  24. data/examples/snapshot_demo.rb +2 -2
  25. data/lib/claude_swarm/mcp_generator.rb +8 -21
  26. data/lib/claude_swarm/orchestrator.rb +8 -1
  27. data/lib/claude_swarm/version.rb +1 -1
  28. data/lib/swarm_cli/commands/run.rb +2 -2
  29. data/lib/swarm_cli/config_loader.rb +11 -11
  30. data/lib/swarm_cli/formatters/human_formatter.rb +0 -33
  31. data/lib/swarm_cli/interactive_repl.rb +2 -2
  32. data/lib/swarm_cli/ui/icons.rb +0 -23
  33. data/lib/swarm_cli/version.rb +1 -1
  34. data/lib/swarm_memory/adapters/filesystem_adapter.rb +11 -34
  35. data/lib/swarm_memory/core/semantic_index.rb +10 -2
  36. data/lib/swarm_memory/core/storage.rb +7 -2
  37. data/lib/swarm_memory/dsl/memory_config.rb +37 -0
  38. data/lib/swarm_memory/integration/sdk_plugin.rb +201 -28
  39. data/lib/swarm_memory/optimization/defragmenter.rb +1 -1
  40. data/lib/swarm_memory/prompts/memory_researcher.md.erb +0 -1
  41. data/lib/swarm_memory/tools/load_skill.rb +0 -1
  42. data/lib/swarm_memory/tools/memory_edit.rb +2 -1
  43. data/lib/swarm_memory/tools/memory_read.rb +1 -1
  44. data/lib/swarm_memory/version.rb +1 -1
  45. data/lib/swarm_memory.rb +8 -6
  46. data/lib/swarm_sdk/agent/builder.rb +58 -0
  47. data/lib/swarm_sdk/agent/chat.rb +527 -1061
  48. data/lib/swarm_sdk/agent/{chat → chat_helpers}/context_tracker.rb +13 -88
  49. data/lib/swarm_sdk/agent/chat_helpers/event_emitter.rb +204 -0
  50. data/lib/swarm_sdk/agent/{chat → chat_helpers}/hook_integration.rb +108 -46
  51. data/lib/swarm_sdk/agent/chat_helpers/instrumentation.rb +78 -0
  52. data/lib/swarm_sdk/agent/chat_helpers/llm_configuration.rb +267 -0
  53. data/lib/swarm_sdk/agent/{chat → chat_helpers}/logging_helpers.rb +3 -3
  54. data/lib/swarm_sdk/agent/chat_helpers/serialization.rb +83 -0
  55. data/lib/swarm_sdk/agent/{chat → chat_helpers}/system_reminder_injector.rb +11 -13
  56. data/lib/swarm_sdk/agent/chat_helpers/system_reminders.rb +79 -0
  57. data/lib/swarm_sdk/agent/chat_helpers/token_tracking.rb +146 -0
  58. data/lib/swarm_sdk/agent/context.rb +1 -2
  59. data/lib/swarm_sdk/agent/definition.rb +66 -154
  60. data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +4 -2
  61. data/lib/swarm_sdk/agent/system_prompt_builder.rb +161 -0
  62. data/lib/swarm_sdk/agent_registry.rb +146 -0
  63. data/lib/swarm_sdk/builders/base_builder.rb +488 -0
  64. data/lib/swarm_sdk/concerns/cleanupable.rb +39 -0
  65. data/lib/swarm_sdk/concerns/snapshotable.rb +67 -0
  66. data/lib/swarm_sdk/concerns/validatable.rb +55 -0
  67. data/lib/swarm_sdk/config.rb +302 -0
  68. data/lib/swarm_sdk/configuration/parser.rb +373 -0
  69. data/lib/swarm_sdk/configuration/translator.rb +255 -0
  70. data/lib/swarm_sdk/configuration.rb +77 -546
  71. data/lib/swarm_sdk/context_compactor/token_counter.rb +2 -6
  72. data/lib/swarm_sdk/context_compactor.rb +6 -11
  73. data/lib/swarm_sdk/context_management/builder.rb +128 -0
  74. data/lib/swarm_sdk/context_management/context.rb +328 -0
  75. data/lib/swarm_sdk/custom_tool_registry.rb +226 -0
  76. data/lib/swarm_sdk/defaults.rb +196 -0
  77. data/lib/swarm_sdk/events_to_messages.rb +18 -0
  78. data/lib/swarm_sdk/hooks/adapter.rb +3 -3
  79. data/lib/swarm_sdk/hooks/shell_executor.rb +4 -2
  80. data/lib/swarm_sdk/log_collector.rb +179 -29
  81. data/lib/swarm_sdk/log_stream.rb +29 -0
  82. data/lib/swarm_sdk/models.json +4333 -1
  83. data/lib/swarm_sdk/models.rb +43 -2
  84. data/lib/swarm_sdk/node_context.rb +1 -1
  85. data/lib/swarm_sdk/observer/builder.rb +81 -0
  86. data/lib/swarm_sdk/observer/config.rb +45 -0
  87. data/lib/swarm_sdk/observer/manager.rb +236 -0
  88. data/lib/swarm_sdk/patterns/agent_observer.rb +160 -0
  89. data/lib/swarm_sdk/plugin.rb +95 -5
  90. data/lib/swarm_sdk/result.rb +52 -0
  91. data/lib/swarm_sdk/snapshot.rb +6 -6
  92. data/lib/swarm_sdk/snapshot_from_events.rb +13 -2
  93. data/lib/swarm_sdk/state_restorer.rb +136 -151
  94. data/lib/swarm_sdk/state_snapshot.rb +65 -100
  95. data/lib/swarm_sdk/swarm/agent_initializer.rb +181 -137
  96. data/lib/swarm_sdk/swarm/builder.rb +44 -578
  97. data/lib/swarm_sdk/swarm/executor.rb +213 -0
  98. data/lib/swarm_sdk/swarm/hook_triggers.rb +151 -0
  99. data/lib/swarm_sdk/swarm/logging_callbacks.rb +341 -0
  100. data/lib/swarm_sdk/swarm/mcp_configurator.rb +7 -4
  101. data/lib/swarm_sdk/swarm/tool_configurator.rb +58 -140
  102. data/lib/swarm_sdk/swarm.rb +203 -683
  103. data/lib/swarm_sdk/tools/bash.rb +14 -8
  104. data/lib/swarm_sdk/tools/delegate.rb +61 -43
  105. data/lib/swarm_sdk/tools/edit.rb +8 -13
  106. data/lib/swarm_sdk/tools/glob.rb +12 -4
  107. data/lib/swarm_sdk/tools/grep.rb +7 -0
  108. data/lib/swarm_sdk/tools/multi_edit.rb +15 -11
  109. data/lib/swarm_sdk/tools/path_resolver.rb +51 -2
  110. data/lib/swarm_sdk/tools/read.rb +16 -18
  111. data/lib/swarm_sdk/tools/registry.rb +122 -10
  112. data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +9 -5
  113. data/lib/swarm_sdk/tools/stores/storage.rb +0 -6
  114. data/lib/swarm_sdk/tools/todo_write.rb +7 -0
  115. data/lib/swarm_sdk/tools/web_fetch.rb +20 -17
  116. data/lib/swarm_sdk/tools/write.rb +8 -13
  117. data/lib/swarm_sdk/version.rb +1 -1
  118. data/lib/swarm_sdk/{node → workflow}/agent_config.rb +1 -1
  119. data/lib/swarm_sdk/workflow/builder.rb +192 -0
  120. data/lib/swarm_sdk/workflow/executor.rb +497 -0
  121. data/lib/swarm_sdk/{node/builder.rb → workflow/node_builder.rb} +7 -5
  122. data/lib/swarm_sdk/{node → workflow}/transformer_executor.rb +5 -3
  123. data/lib/swarm_sdk/{node_orchestrator.rb → workflow.rb} +152 -456
  124. data/lib/swarm_sdk.rb +294 -108
  125. data/rubocop/cop/security/no_reflection_methods.rb +1 -1
  126. data/swarm_cli.gemspec +1 -1
  127. data/swarm_memory.gemspec +8 -3
  128. data/swarm_sdk.gemspec +6 -4
  129. data/team_full.yml +124 -320
  130. metadata +42 -14
  131. data/lib/swarm_memory/chat_extension.rb +0 -34
  132. data/lib/swarm_memory/tools/memory_multi_edit.rb +0 -281
  133. data/lib/swarm_sdk/providers/openai_with_responses.rb +0 -589
  134. /data/lib/swarm_memory/{errors.rb → error.rb} +0 -0
@@ -930,12 +930,12 @@ swarm:
930
930
  **How delegation works**:
931
931
  1. You send task to `developer`
932
932
  2. Developer writes code using Write tool
933
- 3. Developer calls `DelegateTaskToReviewer(task: "Review this code")`
933
+ 3. Developer calls `WorkWithReviewer(message: "Review this code")`
934
934
  4. Reviewer analyzes code and returns feedback
935
935
  5. Developer receives feedback and can iterate
936
936
  6. Developer returns final result to you
937
937
 
938
- **The delegation tool**: When you configure `delegates_to: [reviewer]`, the developer automatically gets a `DelegateTaskToReviewer` tool.
938
+ **The delegation tool**: When you configure `delegates_to: [reviewer]`, the developer automatically gets a `WorkWithReviewer` tool.
939
939
 
940
940
  ### 3.2 Multi-Level Delegation
941
941
 
@@ -2858,7 +2858,93 @@ project/
2858
2858
  └── .env # API keys
2859
2859
  ```
2860
2860
 
2861
- ### 8.3 Testing Strategies
2861
+ ### 8.3 Reusable Agent Definitions (Global Registry)
2862
+
2863
+ For large projects, define agents once and reuse them across multiple swarms.
2864
+
2865
+ **Register agents globally:**
2866
+ ```ruby
2867
+ # agents/backend.rb
2868
+ SwarmSDK.agent :backend do
2869
+ model "claude-sonnet-4"
2870
+ description "Backend developer"
2871
+ system_prompt "You build APIs and databases"
2872
+ tools :Read, :Edit, :Bash
2873
+ # Note: Don't set delegates_to here - it's swarm-specific!
2874
+ end
2875
+
2876
+ # agents/database.rb
2877
+ SwarmSDK.agent :database do
2878
+ model "claude-sonnet-4"
2879
+ description "Database specialist"
2880
+ system_prompt "You design schemas and write migrations"
2881
+ tools :Read, :Edit
2882
+ end
2883
+ ```
2884
+
2885
+ **Reference in swarms (set delegation per-swarm):**
2886
+ ```ruby
2887
+ # Load agent definitions first
2888
+ require_relative "agents/backend"
2889
+ require_relative "agents/database"
2890
+
2891
+ # Reference by name and configure delegation (swarm-specific)
2892
+ swarm = SwarmSDK.build do
2893
+ name "Dev Team"
2894
+ lead :backend
2895
+
2896
+ agent :backend do
2897
+ delegates_to :database # Delegation is swarm-specific
2898
+ end
2899
+ agent :database # Pulls from registry as-is
2900
+ end
2901
+ ```
2902
+
2903
+ **Override other registry settings:**
2904
+ ```ruby
2905
+ swarm = SwarmSDK.build do
2906
+ name "Extended Team"
2907
+ lead :backend
2908
+
2909
+ # Registry config applied first, then override block
2910
+ agent :backend do
2911
+ delegates_to :database, :cache # Set delegation for this swarm
2912
+ tools :CustomTool # Adds to registry tools
2913
+ timeout 300 # Overrides registry timeout
2914
+ end
2915
+ end
2916
+ ```
2917
+
2918
+ **Workflow auto-resolution:**
2919
+ Agents referenced in workflow nodes automatically resolve from the global registry:
2920
+
2921
+ ```ruby
2922
+ SwarmSDK.workflow do
2923
+ name "Pipeline"
2924
+ start_node :build
2925
+
2926
+ # No need to define :backend here - auto-resolved from registry!
2927
+ node :build do
2928
+ agent(:backend)
2929
+ end
2930
+ end
2931
+ ```
2932
+
2933
+ **Testing with registry:**
2934
+ ```ruby
2935
+ # Clear registry between tests
2936
+ def setup
2937
+ SwarmSDK.clear_agent_registry!
2938
+ end
2939
+ ```
2940
+
2941
+ **Benefits:**
2942
+ - **Code reuse**: Define agents once, use in multiple swarms
2943
+ - **Separation of concerns**: Agent definitions in dedicated files
2944
+ - **Organization**: Large projects with many agents stay manageable
2945
+ - **DRY principle**: No duplication of agent configurations
2946
+
2947
+ ### 8.4 Testing Strategies
2862
2948
 
2863
2949
  **Unit test agents**:
2864
2950
  ```ruby
@@ -2920,7 +3006,7 @@ allow(LLM).to receive(:chat).and_return(
2920
3006
  )
2921
3007
  ```
2922
3008
 
2923
- ### 8.4 Performance Optimization
3009
+ ### 8.5 Performance Optimization
2924
3010
 
2925
3011
  **1. Choose appropriate models**:
2926
3012
  ```ruby
@@ -2993,7 +3079,7 @@ node :summarizer do
2993
3079
  end
2994
3080
  ```
2995
3081
 
2996
- ### 8.5 Security Considerations
3082
+ ### 8.6 Security Considerations
2997
3083
 
2998
3084
  **1. Restrict file access**:
2999
3085
  ```ruby
@@ -3099,7 +3185,7 @@ end
3099
3185
  - **Priority**: Explicit parameter > Global setting > Environment variable > Default (true)
3100
3186
  - **Non-breaking**: Defaults to `true` for backward compatibility
3101
3187
 
3102
- ### 8.6 Cost Management
3188
+ ### 8.7 Cost Management
3103
3189
 
3104
3190
  **Track costs in real-time**:
3105
3191
  ```ruby
@@ -3153,7 +3239,7 @@ end
3153
3239
  - [ ] Batch similar operations
3154
3240
  - [ ] Monitor and set cost alerts
3155
3241
 
3156
- ### 8.7 Monitoring and Observability
3242
+ ### 8.8 Monitoring and Observability
3157
3243
 
3158
3244
  **Structured logging to files**:
3159
3245
  ```ruby
@@ -3205,7 +3291,7 @@ end
3205
3291
  }
3206
3292
  ```
3207
3293
 
3208
- ### 8.8 Common Patterns Summary
3294
+ ### 8.9 Common Patterns Summary
3209
3295
 
3210
3296
  **Pattern: Code Review Workflow**
3211
3297
  ```
@@ -3263,7 +3349,7 @@ You've now learned **100% of SwarmSDK features**:
3263
3349
 
3264
3350
  ✅ **Part 7: Production Features** - Structured logging, token/cost tracking, error handling, validation, document conversion
3265
3351
 
3266
- ✅ **Part 8: Best Practices** - Architecture patterns, testing strategies, performance optimization, security, cost management, monitoring
3352
+ ✅ **Part 8: Best Practices** - Architecture patterns, reusable agent definitions (global registry), testing strategies, performance optimization, security, cost management, monitoring
3267
3353
 
3268
3354
  ## Next Steps
3269
3355
 
@@ -124,10 +124,10 @@ An **agent** is an AI with specific capabilities and constraints:
124
124
 
125
125
  Delegation is how agents collaborate. When an agent is configured with `delegates_to: [other_agent]`, it gains a special delegation tool.
126
126
 
127
- **Delegation tool naming**: Tools are named `DelegateTaskTo{AgentName}` where AgentName is capitalized. For example:
128
- - `delegates_to: [reviewer]` → creates `DelegateTaskToReviewer` tool
129
- - `delegates_to: [backend]` → creates `DelegateTaskToBackend` tool
130
- - `delegates_to: [qa_tester]` → creates `DelegateTaskToQa_tester` tool
127
+ **Delegation tool naming**: Tools are named `WorkWith{AgentName}` where AgentName is capitalized. For example:
128
+ - `delegates_to: [reviewer]` → creates `WorkWithReviewer` tool
129
+ - `delegates_to: [backend]` → creates `WorkWithBackend` tool
130
+ - `delegates_to: [qa_tester]` → creates `WorkWithQa_tester` tool
131
131
 
132
132
  **Example flow**:
133
133
  1. You send "Build a login page" to the **lead** agent
@@ -192,7 +192,7 @@ Tools are functions agents call to interact with the world. SwarmSDK provides:
192
192
  | **Web** | WebFetch | Fetch and process web content |
193
193
  | **Task Management** | TodoWrite | Track progress on multi-step tasks |
194
194
  | **Shared Scratchpad** | ScratchpadWrite, ScratchpadRead, ScratchpadList | Share work-in-progress between agents (volatile) |
195
- | **Per-Agent Memory** | MemoryWrite, MemoryRead, MemoryEdit, MemoryMultiEdit, MemoryGlob, MemoryGrep, MemoryDelete | Persistent learning and knowledge storage (opt-in) |
195
+ | **Per-Agent Memory** | MemoryWrite, MemoryRead, MemoryEdit, MemoryGlob, MemoryGrep, MemoryDelete | Persistent learning and knowledge storage (opt-in) |
196
196
  | **Reasoning** | Think | Extended reasoning for complex problems |
197
197
 
198
198
  **Default tools**: Every agent automatically gets **Read, Grep, and Glob** unless you explicitly disable them with `disable_default_tools: true`. Scratchpad tools (ScratchpadWrite, ScratchpadRead, ScratchpadList) are opt-in via `scratchpad: :enabled`.
@@ -750,7 +750,7 @@ swarm = SwarmSDK.load_file('swarm.yml')
750
750
  result = swarm.execute("Write a function to validate email addresses and get it reviewed")
751
751
  ```
752
752
 
753
- **How delegation works**: The coder writes code, then calls the `DelegateTaskToReviewer` tool to get feedback. The reviewer analyzes and returns suggestions. The coder can iterate based on feedback.
753
+ **How delegation works**: The coder writes code, then calls the `WorkWithReviewer` tool to get feedback. The reviewer analyzes and returns suggestions. The coder can iterate based on feedback.
754
754
 
755
755
  ### Using Multiple Tools
756
756
 
@@ -1026,7 +1026,7 @@ swarm = SwarmSDK.build do
1026
1026
  model "gpt-4"
1027
1027
  end
1028
1028
  end
1029
- # Leader won't have DelegateTaskToHelper tool!
1029
+ # Leader won't have WorkWithHelper tool!
1030
1030
  ```
1031
1031
 
1032
1032
  **Solution**:
@@ -1239,6 +1239,8 @@ Congratulations! You've learned the fundamentals of SwarmSDK.
1239
1239
 
1240
1240
  **Agent Delegation Patterns**: Learn advanced collaboration strategies like hierarchical delegation, peer collaboration, and specialist chains.
1241
1241
 
1242
+ **Reusable Agent Definitions**: Use the Global Agent Registry (`SwarmSDK.agent`) to define agents once and reuse them across multiple swarms—perfect for large projects with shared agents.
1243
+
1242
1244
  **Permissions System**: Discover how to restrict agents to specific directories, prevent dangerous commands, and create secure multi-agent systems.
1243
1245
 
1244
1246
  **Hooks and Customization**: Master pre/post hooks for tool calls, prompt injection, and workflow automation.
@@ -1412,7 +1414,7 @@ tools :Bash # Run shell commands
1412
1414
  agent :leader do
1413
1415
  description "Coordinates work"
1414
1416
  model "gpt-4"
1415
- delegates_to :worker # Creates DelegateTaskToWorker tool
1417
+ delegates_to :worker # Creates WorkWithWorker tool
1416
1418
  end
1417
1419
 
1418
1420
  agent :worker do
@@ -193,6 +193,47 @@ end
193
193
  # MyAdapter.new(namespace: "researcher", table_name: "memory_entries")
194
194
  ```
195
195
 
196
+ ### YAML Configuration
197
+
198
+ Custom adapters also work seamlessly with YAML configuration. All YAML keys (except `directory`, `adapter`, `mode`) are automatically passed to the adapter constructor:
199
+
200
+ ```yaml
201
+ # swarm.yml
202
+ agents:
203
+ researcher:
204
+ memory:
205
+ adapter: multi_bank_postgres
206
+ agent_id: researcher
207
+ discovery_threshold: 0.5
208
+ discovery_threshold_short: 0.3
209
+ semantic_weight: 0.6
210
+ default_bank: working
211
+ banks:
212
+ working: { max_size: 10485760 }
213
+ long_term: { max_size: 52428800 }
214
+ ```
215
+
216
+ This configuration creates an adapter with:
217
+ ```ruby
218
+ MultiBankPostgresAdapter.new(
219
+ agent_id: "researcher",
220
+ discovery_threshold: 0.5,
221
+ discovery_threshold_short: 0.3,
222
+ semantic_weight: 0.6,
223
+ default_bank: "working",
224
+ banks: {
225
+ "working" => { "max_size" => 10485760 },
226
+ "long_term" => { "max_size" => 52428800 }
227
+ }
228
+ )
229
+ ```
230
+
231
+ **Benefits:**
232
+ - ✅ No code changes needed for configuration
233
+ - ✅ Per-agent customization via YAML
234
+ - ✅ All options passed directly to adapter
235
+ - ✅ Each adapter validates its own requirements
236
+
196
237
  ---
197
238
 
198
239
  ## Example: ActiveRecord Adapter (PostgreSQL/Rails)