claude_swarm 1.0.1 → 1.0.2
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.
- checksums.yaml +4 -4
- data/.claude/commands/release.md +1 -1
- data/.claude/hooks/lint-code-files.rb +65 -0
- data/.rubocop.yml +22 -2
- data/CHANGELOG.md +14 -1
- data/CLAUDE.md +1 -1
- data/CONTRIBUTING.md +69 -0
- data/README.md +27 -2
- data/Rakefile +71 -3
- data/analyze_coverage.rb +94 -0
- data/docs/v2/CHANGELOG.swarm_cli.md +43 -0
- data/docs/v2/CHANGELOG.swarm_memory.md +379 -0
- data/docs/v2/CHANGELOG.swarm_sdk.md +362 -0
- data/docs/v2/README.md +308 -0
- data/docs/v2/guides/claude-code-agents.md +262 -0
- data/docs/v2/guides/complete-tutorial.md +3088 -0
- data/docs/v2/guides/getting-started.md +1456 -0
- data/docs/v2/guides/memory-adapters.md +998 -0
- data/docs/v2/guides/plugins.md +816 -0
- data/docs/v2/guides/quick-start-cli.md +1745 -0
- data/docs/v2/guides/rails-integration.md +1902 -0
- data/docs/v2/guides/swarm-memory.md +599 -0
- data/docs/v2/reference/cli.md +729 -0
- data/docs/v2/reference/ruby-dsl.md +2154 -0
- data/docs/v2/reference/yaml.md +1835 -0
- data/docs-team-swarm.yml +2222 -0
- data/examples/learning-assistant/assistant.md +7 -0
- data/examples/learning-assistant/example-memories/concept-example.md +90 -0
- data/examples/learning-assistant/example-memories/experience-example.md +66 -0
- data/examples/learning-assistant/example-memories/fact-example.md +76 -0
- data/examples/learning-assistant/example-memories/memory-index.md +78 -0
- data/examples/learning-assistant/example-memories/skill-example.md +168 -0
- data/examples/learning-assistant/learning_assistant.rb +34 -0
- data/examples/learning-assistant/learning_assistant.yml +20 -0
- data/examples/v2/dsl/01_basic.rb +44 -0
- data/examples/v2/dsl/02_core_parameters.rb +59 -0
- data/examples/v2/dsl/03_capabilities.rb +71 -0
- data/examples/v2/dsl/04_llm_parameters.rb +56 -0
- data/examples/v2/dsl/05_advanced_flags.rb +73 -0
- data/examples/v2/dsl/06_permissions.rb +80 -0
- data/examples/v2/dsl/07_mcp_server.rb +62 -0
- data/examples/v2/dsl/08_swarm_hooks.rb +53 -0
- data/examples/v2/dsl/09_agent_hooks.rb +67 -0
- data/examples/v2/dsl/10_all_agents_hooks.rb +67 -0
- data/examples/v2/dsl/11_delegation.rb +60 -0
- data/examples/v2/dsl/12_complete_integration.rb +137 -0
- data/examples/v2/file_tools_swarm.yml +102 -0
- data/examples/v2/hooks/01_basic_hooks.rb +133 -0
- data/examples/v2/hooks/02_usage_tracking.rb +201 -0
- data/examples/v2/hooks/03_production_monitoring.rb +429 -0
- data/examples/v2/hooks/agent_stop_exit_0.yml +21 -0
- data/examples/v2/hooks/agent_stop_exit_1.yml +21 -0
- data/examples/v2/hooks/agent_stop_exit_2.yml +26 -0
- data/examples/v2/hooks/multiple_hooks_all_pass.yml +37 -0
- data/examples/v2/hooks/multiple_hooks_first_fails.yml +37 -0
- data/examples/v2/hooks/multiple_hooks_second_fails.yml +37 -0
- data/examples/v2/hooks/multiple_hooks_warnings.yml +37 -0
- data/examples/v2/hooks/post_tool_use_exit_0.yml +24 -0
- data/examples/v2/hooks/post_tool_use_exit_1.yml +24 -0
- data/examples/v2/hooks/post_tool_use_exit_2.yml +24 -0
- data/examples/v2/hooks/post_tool_use_multi_matcher_exit_0.yml +26 -0
- data/examples/v2/hooks/post_tool_use_multi_matcher_exit_1.yml +26 -0
- data/examples/v2/hooks/post_tool_use_multi_matcher_exit_2.yml +26 -0
- data/examples/v2/hooks/pre_tool_use_exit_0.yml +24 -0
- data/examples/v2/hooks/pre_tool_use_exit_1.yml +24 -0
- data/examples/v2/hooks/pre_tool_use_exit_2.yml +24 -0
- data/examples/v2/hooks/pre_tool_use_multi_matcher_exit_0.yml +26 -0
- data/examples/v2/hooks/pre_tool_use_multi_matcher_exit_1.yml +26 -0
- data/examples/v2/hooks/pre_tool_use_multi_matcher_exit_2.yml +27 -0
- data/examples/v2/hooks/swarm_summary.sh +44 -0
- data/examples/v2/hooks/user_prompt_exit_0.yml +21 -0
- data/examples/v2/hooks/user_prompt_exit_1.yml +21 -0
- data/examples/v2/hooks/user_prompt_exit_2.yml +21 -0
- data/examples/v2/hooks/validate_bash.rb +59 -0
- data/examples/v2/multi_directory_permissions.yml +221 -0
- data/examples/v2/node_context_demo.rb +127 -0
- data/examples/v2/node_workflow.rb +173 -0
- data/examples/v2/path_resolution_demo.rb +216 -0
- data/examples/v2/simple-swarm-v2.rb +90 -0
- data/examples/v2/simple-swarm-v2.yml +62 -0
- data/examples/v2/swarm.yml +71 -0
- data/examples/v2/swarm_with_hooks.yml +61 -0
- data/examples/v2/swarm_with_hooks_simple.yml +25 -0
- data/examples/v2/think_tool_demo.rb +62 -0
- data/exe/swarm +6 -0
- data/lib/claude_swarm/claude_mcp_server.rb +0 -6
- data/lib/claude_swarm/cli.rb +10 -3
- data/lib/claude_swarm/commands/ps.rb +19 -20
- data/lib/claude_swarm/commands/show.rb +1 -1
- data/lib/claude_swarm/configuration.rb +10 -12
- data/lib/claude_swarm/mcp_generator.rb +10 -1
- data/lib/claude_swarm/orchestrator.rb +73 -49
- data/lib/claude_swarm/system_utils.rb +37 -11
- data/lib/claude_swarm/version.rb +1 -1
- data/lib/claude_swarm/worktree_manager.rb +1 -0
- data/lib/claude_swarm/yaml_loader.rb +22 -0
- data/lib/claude_swarm.rb +6 -2
- data/lib/swarm_cli/cli.rb +201 -0
- data/lib/swarm_cli/command_registry.rb +61 -0
- data/lib/swarm_cli/commands/mcp_serve.rb +130 -0
- data/lib/swarm_cli/commands/mcp_tools.rb +148 -0
- data/lib/swarm_cli/commands/migrate.rb +55 -0
- data/lib/swarm_cli/commands/run.rb +173 -0
- data/lib/swarm_cli/config_loader.rb +97 -0
- data/lib/swarm_cli/formatters/human_formatter.rb +711 -0
- data/lib/swarm_cli/formatters/json_formatter.rb +51 -0
- data/lib/swarm_cli/interactive_repl.rb +918 -0
- data/lib/swarm_cli/mcp_serve_options.rb +44 -0
- data/lib/swarm_cli/mcp_tools_options.rb +59 -0
- data/lib/swarm_cli/migrate_options.rb +54 -0
- data/lib/swarm_cli/migrator.rb +132 -0
- data/lib/swarm_cli/options.rb +151 -0
- data/lib/swarm_cli/ui/components/agent_badge.rb +33 -0
- data/lib/swarm_cli/ui/components/content_block.rb +120 -0
- data/lib/swarm_cli/ui/components/divider.rb +57 -0
- data/lib/swarm_cli/ui/components/panel.rb +62 -0
- data/lib/swarm_cli/ui/components/usage_stats.rb +70 -0
- data/lib/swarm_cli/ui/formatters/cost.rb +49 -0
- data/lib/swarm_cli/ui/formatters/number.rb +58 -0
- data/lib/swarm_cli/ui/formatters/text.rb +77 -0
- data/lib/swarm_cli/ui/formatters/time.rb +73 -0
- data/lib/swarm_cli/ui/icons.rb +59 -0
- data/lib/swarm_cli/ui/renderers/event_renderer.rb +188 -0
- data/lib/swarm_cli/ui/state/agent_color_cache.rb +45 -0
- data/lib/swarm_cli/ui/state/depth_tracker.rb +40 -0
- data/lib/swarm_cli/ui/state/spinner_manager.rb +170 -0
- data/lib/swarm_cli/ui/state/usage_tracker.rb +62 -0
- data/lib/swarm_cli/version.rb +5 -0
- data/lib/swarm_cli.rb +44 -0
- data/lib/swarm_memory/adapters/base.rb +141 -0
- data/lib/swarm_memory/adapters/filesystem_adapter.rb +845 -0
- data/lib/swarm_memory/chat_extension.rb +34 -0
- data/lib/swarm_memory/cli/commands.rb +306 -0
- data/lib/swarm_memory/core/entry.rb +37 -0
- data/lib/swarm_memory/core/frontmatter_parser.rb +108 -0
- data/lib/swarm_memory/core/metadata_extractor.rb +68 -0
- data/lib/swarm_memory/core/path_normalizer.rb +75 -0
- data/lib/swarm_memory/core/semantic_index.rb +244 -0
- data/lib/swarm_memory/core/storage.rb +288 -0
- data/lib/swarm_memory/core/storage_read_tracker.rb +63 -0
- data/lib/swarm_memory/dsl/builder_extension.rb +40 -0
- data/lib/swarm_memory/dsl/memory_config.rb +113 -0
- data/lib/swarm_memory/embeddings/embedder.rb +36 -0
- data/lib/swarm_memory/embeddings/informers_embedder.rb +152 -0
- data/lib/swarm_memory/errors.rb +21 -0
- data/lib/swarm_memory/integration/cli_registration.rb +30 -0
- data/lib/swarm_memory/integration/configuration.rb +43 -0
- data/lib/swarm_memory/integration/registration.rb +31 -0
- data/lib/swarm_memory/integration/sdk_plugin.rb +531 -0
- data/lib/swarm_memory/optimization/analyzer.rb +244 -0
- data/lib/swarm_memory/optimization/defragmenter.rb +863 -0
- data/lib/swarm_memory/prompts/memory.md.erb +109 -0
- data/lib/swarm_memory/prompts/memory_assistant.md.erb +181 -0
- data/lib/swarm_memory/prompts/memory_researcher.md.erb +281 -0
- data/lib/swarm_memory/prompts/memory_retrieval.md.erb +78 -0
- data/lib/swarm_memory/search/semantic_search.rb +112 -0
- data/lib/swarm_memory/search/text_search.rb +42 -0
- data/lib/swarm_memory/search/text_similarity.rb +80 -0
- data/lib/swarm_memory/skills/meta/deep-learning.md +101 -0
- data/lib/swarm_memory/skills/meta/deep-learning.yml +14 -0
- data/lib/swarm_memory/tools/load_skill.rb +313 -0
- data/lib/swarm_memory/tools/memory_defrag.rb +382 -0
- data/lib/swarm_memory/tools/memory_delete.rb +99 -0
- data/lib/swarm_memory/tools/memory_edit.rb +185 -0
- data/lib/swarm_memory/tools/memory_glob.rb +160 -0
- data/lib/swarm_memory/tools/memory_grep.rb +247 -0
- data/lib/swarm_memory/tools/memory_multi_edit.rb +281 -0
- data/lib/swarm_memory/tools/memory_read.rb +123 -0
- data/lib/swarm_memory/tools/memory_write.rb +231 -0
- data/lib/swarm_memory/utils.rb +50 -0
- data/lib/swarm_memory/version.rb +5 -0
- data/lib/swarm_memory.rb +166 -0
- data/lib/swarm_sdk/agent/RETRY_LOGIC.md +127 -0
- data/lib/swarm_sdk/agent/builder.rb +461 -0
- data/lib/swarm_sdk/agent/chat/context_tracker.rb +314 -0
- data/lib/swarm_sdk/agent/chat/hook_integration.rb +372 -0
- data/lib/swarm_sdk/agent/chat/logging_helpers.rb +116 -0
- data/lib/swarm_sdk/agent/chat/system_reminder_injector.rb +152 -0
- data/lib/swarm_sdk/agent/chat.rb +1159 -0
- data/lib/swarm_sdk/agent/context.rb +112 -0
- data/lib/swarm_sdk/agent/context_manager.rb +309 -0
- data/lib/swarm_sdk/agent/definition.rb +556 -0
- data/lib/swarm_sdk/claude_code_agent_adapter.rb +205 -0
- data/lib/swarm_sdk/configuration.rb +296 -0
- data/lib/swarm_sdk/context_compactor/metrics.rb +147 -0
- data/lib/swarm_sdk/context_compactor/token_counter.rb +106 -0
- data/lib/swarm_sdk/context_compactor.rb +340 -0
- data/lib/swarm_sdk/hooks/adapter.rb +359 -0
- data/lib/swarm_sdk/hooks/context.rb +197 -0
- data/lib/swarm_sdk/hooks/definition.rb +80 -0
- data/lib/swarm_sdk/hooks/error.rb +29 -0
- data/lib/swarm_sdk/hooks/executor.rb +146 -0
- data/lib/swarm_sdk/hooks/registry.rb +147 -0
- data/lib/swarm_sdk/hooks/result.rb +150 -0
- data/lib/swarm_sdk/hooks/shell_executor.rb +254 -0
- data/lib/swarm_sdk/hooks/tool_call.rb +35 -0
- data/lib/swarm_sdk/hooks/tool_result.rb +62 -0
- data/lib/swarm_sdk/log_collector.rb +51 -0
- data/lib/swarm_sdk/log_stream.rb +69 -0
- data/lib/swarm_sdk/markdown_parser.rb +75 -0
- data/lib/swarm_sdk/model_aliases.json +5 -0
- data/lib/swarm_sdk/models.json +1 -0
- data/lib/swarm_sdk/models.rb +120 -0
- data/lib/swarm_sdk/node/agent_config.rb +49 -0
- data/lib/swarm_sdk/node/builder.rb +439 -0
- data/lib/swarm_sdk/node/transformer_executor.rb +248 -0
- data/lib/swarm_sdk/node_context.rb +170 -0
- data/lib/swarm_sdk/node_orchestrator.rb +384 -0
- data/lib/swarm_sdk/permissions/config.rb +239 -0
- data/lib/swarm_sdk/permissions/error_formatter.rb +121 -0
- data/lib/swarm_sdk/permissions/path_matcher.rb +35 -0
- data/lib/swarm_sdk/permissions/validator.rb +173 -0
- data/lib/swarm_sdk/permissions_builder.rb +122 -0
- data/lib/swarm_sdk/plugin.rb +147 -0
- data/lib/swarm_sdk/plugin_registry.rb +101 -0
- data/lib/swarm_sdk/prompts/base_system_prompt.md.erb +243 -0
- data/lib/swarm_sdk/providers/openai_with_responses.rb +582 -0
- data/lib/swarm_sdk/result.rb +97 -0
- data/lib/swarm_sdk/swarm/agent_initializer.rb +334 -0
- data/lib/swarm_sdk/swarm/all_agents_builder.rb +140 -0
- data/lib/swarm_sdk/swarm/builder.rb +586 -0
- data/lib/swarm_sdk/swarm/mcp_configurator.rb +151 -0
- data/lib/swarm_sdk/swarm/tool_configurator.rb +419 -0
- data/lib/swarm_sdk/swarm.rb +982 -0
- data/lib/swarm_sdk/tools/bash.rb +274 -0
- data/lib/swarm_sdk/tools/clock.rb +44 -0
- data/lib/swarm_sdk/tools/delegate.rb +164 -0
- data/lib/swarm_sdk/tools/document_converters/base_converter.rb +83 -0
- data/lib/swarm_sdk/tools/document_converters/docx_converter.rb +99 -0
- data/lib/swarm_sdk/tools/document_converters/html_converter.rb +101 -0
- data/lib/swarm_sdk/tools/document_converters/pdf_converter.rb +78 -0
- data/lib/swarm_sdk/tools/document_converters/xlsx_converter.rb +194 -0
- data/lib/swarm_sdk/tools/edit.rb +150 -0
- data/lib/swarm_sdk/tools/glob.rb +158 -0
- data/lib/swarm_sdk/tools/grep.rb +228 -0
- data/lib/swarm_sdk/tools/image_extractors/docx_image_extractor.rb +43 -0
- data/lib/swarm_sdk/tools/image_extractors/pdf_image_extractor.rb +163 -0
- data/lib/swarm_sdk/tools/image_formats/tiff_builder.rb +65 -0
- data/lib/swarm_sdk/tools/multi_edit.rb +232 -0
- data/lib/swarm_sdk/tools/path_resolver.rb +43 -0
- data/lib/swarm_sdk/tools/read.rb +251 -0
- data/lib/swarm_sdk/tools/registry.rb +93 -0
- data/lib/swarm_sdk/tools/scratchpad/scratchpad_list.rb +96 -0
- data/lib/swarm_sdk/tools/scratchpad/scratchpad_read.rb +76 -0
- data/lib/swarm_sdk/tools/scratchpad/scratchpad_write.rb +91 -0
- data/lib/swarm_sdk/tools/stores/read_tracker.rb +61 -0
- data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +224 -0
- data/lib/swarm_sdk/tools/stores/storage.rb +148 -0
- data/lib/swarm_sdk/tools/stores/todo_manager.rb +65 -0
- data/lib/swarm_sdk/tools/think.rb +95 -0
- data/lib/swarm_sdk/tools/todo_write.rb +216 -0
- data/lib/swarm_sdk/tools/web_fetch.rb +261 -0
- data/lib/swarm_sdk/tools/write.rb +117 -0
- data/lib/swarm_sdk/utils.rb +50 -0
- data/lib/swarm_sdk/version.rb +5 -0
- data/lib/swarm_sdk.rb +157 -0
- data/llm.v2.txt +13407 -0
- data/rubocop/cop/security/no_reflection_methods.rb +47 -0
- data/rubocop/cop/security/no_ruby_llm_logger.rb +32 -0
- data/swarm_cli.gemspec +57 -0
- data/swarm_memory.gemspec +28 -0
- data/swarm_sdk.gemspec +41 -0
- data/team.yml +1 -1
- data/team_full.yml +1875 -0
- data/{team_v2.yml → team_sdk.yml} +121 -52
- metadata +247 -4
- data/EXAMPLES.md +0 -164
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# Using Claude Code Agent Files
|
|
2
|
+
|
|
3
|
+
SwarmSDK supports loading agent definitions from Claude Code markdown files, allowing you to reuse your existing `.claude/agents/*.md` files with SwarmSDK.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Claude Code agents use a different format than SwarmSDK agents:
|
|
8
|
+
- **Tools**: Comma-separated strings (e.g., `tools: Read, Write, Bash`)
|
|
9
|
+
- **Model shortcuts**: `sonnet`, `opus`, `haiku` instead of full model IDs
|
|
10
|
+
- **Tool permissions**: `Write(src/**)` syntax (not supported in frontmatter)
|
|
11
|
+
|
|
12
|
+
SwarmSDK automatically detects and converts Claude Code agent files to SwarmSDK format.
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
### YAML Format
|
|
17
|
+
|
|
18
|
+
```yaml
|
|
19
|
+
version: 2
|
|
20
|
+
swarm:
|
|
21
|
+
name: "Dev Team"
|
|
22
|
+
lead: reviewer
|
|
23
|
+
agents:
|
|
24
|
+
# Simple path - uses file as-is
|
|
25
|
+
reviewer: ".claude/agents/code-reviewer.md"
|
|
26
|
+
|
|
27
|
+
# With overrides - customize for SwarmSDK
|
|
28
|
+
implementer:
|
|
29
|
+
agent_file: ".claude/agents/implementer.md"
|
|
30
|
+
provider: openai
|
|
31
|
+
model: gpt-5
|
|
32
|
+
delegates_to: [reviewer]
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Ruby DSL Format
|
|
36
|
+
|
|
37
|
+
```ruby
|
|
38
|
+
SwarmSDK.build do
|
|
39
|
+
name "Dev Team"
|
|
40
|
+
lead :reviewer
|
|
41
|
+
|
|
42
|
+
# Simple - uses file as-is
|
|
43
|
+
agent :reviewer, File.read(".claude/agents/code-reviewer.md")
|
|
44
|
+
|
|
45
|
+
# With overrides
|
|
46
|
+
agent :implementer, File.read(".claude/agents/implementer.md") do
|
|
47
|
+
provider :openai
|
|
48
|
+
model "gpt-5"
|
|
49
|
+
delegates_to :reviewer
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Claude Code Agent File Format
|
|
55
|
+
|
|
56
|
+
Claude Code agent files use YAML frontmatter with markdown content:
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
---
|
|
60
|
+
name: code-reviewer
|
|
61
|
+
description: Expert code reviewer
|
|
62
|
+
tools: Read, Grep, Glob, Write
|
|
63
|
+
model: sonnet
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
You are a senior code reviewer ensuring code quality.
|
|
67
|
+
|
|
68
|
+
Review checklist:
|
|
69
|
+
- Code is simple and readable
|
|
70
|
+
- No duplicated code
|
|
71
|
+
- Proper error handling
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Automatic Conversions
|
|
75
|
+
|
|
76
|
+
### Model Shortcuts
|
|
77
|
+
|
|
78
|
+
SwarmSDK automatically resolves model shortcuts to the latest model IDs:
|
|
79
|
+
|
|
80
|
+
| Shortcut | Resolves To |
|
|
81
|
+
|----------|-------------|
|
|
82
|
+
| `sonnet` | `claude-sonnet-4-5-20250929` |
|
|
83
|
+
| `opus` | `claude-opus-4-1-20250805` |
|
|
84
|
+
| `haiku` | `claude-haiku-4-5-20251001` |
|
|
85
|
+
|
|
86
|
+
**Note:** Mappings are defined in `lib/swarm_sdk/model_aliases.json` and can be updated as new models are released.
|
|
87
|
+
|
|
88
|
+
### Tools
|
|
89
|
+
|
|
90
|
+
Comma-separated tools are converted to arrays:
|
|
91
|
+
|
|
92
|
+
```markdown
|
|
93
|
+
# Claude Code format
|
|
94
|
+
tools: Read, Write, Bash
|
|
95
|
+
|
|
96
|
+
# Converts to SwarmSDK
|
|
97
|
+
tools: [Read, Write, Bash]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Coding Agent Flag
|
|
101
|
+
|
|
102
|
+
Claude Code agent files automatically get `coding_agent: true` by default, which includes SwarmSDK's base system prompt for coding tasks.
|
|
103
|
+
|
|
104
|
+
## Handling Differences
|
|
105
|
+
|
|
106
|
+
### Tool Permissions
|
|
107
|
+
|
|
108
|
+
Claude Code's tool permission syntax (`Write(src/**)`) is **not supported** in agent frontmatter. You'll see a warning:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
Tool permission syntax 'Write(src/**)' detected in agent file.
|
|
112
|
+
SwarmSDK supports permissions but uses different syntax.
|
|
113
|
+
Using 'Write' without restrictions for now.
|
|
114
|
+
See SwarmSDK documentation for permission configuration.
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Solution:** Configure permissions in your swarm file:
|
|
118
|
+
|
|
119
|
+
**YAML:**
|
|
120
|
+
```yaml
|
|
121
|
+
agents:
|
|
122
|
+
reviewer:
|
|
123
|
+
agent_file: ".claude/agents/reviewer.md"
|
|
124
|
+
permissions:
|
|
125
|
+
Write:
|
|
126
|
+
allowed_paths: ["src/**"]
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Ruby DSL:**
|
|
130
|
+
```ruby
|
|
131
|
+
agent :reviewer, File.read(".claude/agents/reviewer.md") do
|
|
132
|
+
permissions do
|
|
133
|
+
tool(:Write).allow_paths("src/**")
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Hooks
|
|
139
|
+
|
|
140
|
+
Hooks in Claude Code agent frontmatter are **not supported**. You'll see a warning:
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
Hooks configuration detected in agent frontmatter.
|
|
144
|
+
SwarmSDK handles hooks at the swarm level.
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**Solution:** Configure hooks at the swarm or agent level in your configuration file.
|
|
148
|
+
|
|
149
|
+
## Overriding Settings
|
|
150
|
+
|
|
151
|
+
You can override any setting from the markdown file:
|
|
152
|
+
|
|
153
|
+
### Override Model
|
|
154
|
+
|
|
155
|
+
```yaml
|
|
156
|
+
agents:
|
|
157
|
+
reviewer:
|
|
158
|
+
agent_file: ".claude/agents/reviewer.md"
|
|
159
|
+
model: gpt-5 # Override 'sonnet' from markdown
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
```ruby
|
|
163
|
+
agent :reviewer, File.read(".claude/agents/reviewer.md") do
|
|
164
|
+
model "gpt-5" # Override 'sonnet' from markdown
|
|
165
|
+
end
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Override Tools
|
|
169
|
+
|
|
170
|
+
```yaml
|
|
171
|
+
agents:
|
|
172
|
+
reviewer:
|
|
173
|
+
agent_file: ".claude/agents/reviewer.md"
|
|
174
|
+
tools: # Replaces tools from markdown
|
|
175
|
+
- Read
|
|
176
|
+
- Bash
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
```ruby
|
|
180
|
+
agent :reviewer, File.read(".claude/agents/reviewer.md") do
|
|
181
|
+
tools :Read, :Bash, replace: true # Replaces tools from markdown
|
|
182
|
+
end
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Add Provider/Base URL
|
|
186
|
+
|
|
187
|
+
```yaml
|
|
188
|
+
agents:
|
|
189
|
+
reviewer:
|
|
190
|
+
agent_file: ".claude/agents/reviewer.md"
|
|
191
|
+
provider: openai
|
|
192
|
+
base_url: "https://api.openrouter.ai/v1"
|
|
193
|
+
headers:
|
|
194
|
+
authorization: "Bearer ${OPENROUTER_API_KEY}"
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
```ruby
|
|
198
|
+
agent :reviewer, File.read(".claude/agents/reviewer.md") do
|
|
199
|
+
provider :openai
|
|
200
|
+
base_url "https://api.openrouter.ai/v1"
|
|
201
|
+
headers authorization: "Bearer #{ENV['OPENROUTER_API_KEY']}"
|
|
202
|
+
end
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Model Validation
|
|
206
|
+
|
|
207
|
+
SwarmSDK validates models using its own registry (`lib/swarm_sdk/models.json`) and provides helpful suggestions:
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
⚠️ MODEL WARNING reviewer
|
|
211
|
+
Model 'anthropic:claude-sonnet-4-5' not found in registry
|
|
212
|
+
Did you mean one of these?
|
|
213
|
+
• claude-sonnet-4-5-20250929 (200,000 tokens)
|
|
214
|
+
Context tracking unavailable for this model.
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Note:** Warnings are informational only - execution continues. SwarmSDK always tells RubyLLM to assume models exist, then validates separately for better error messages.
|
|
218
|
+
|
|
219
|
+
## Best Practices
|
|
220
|
+
|
|
221
|
+
1. **Use model shortcuts** - `sonnet`, `opus`, `haiku` stay up-to-date automatically
|
|
222
|
+
2. **Keep agent files portable** - Don't put SwarmSDK-specific settings in frontmatter
|
|
223
|
+
3. **Override in swarm config** - Provider, base_url, permissions belong in swarm file
|
|
224
|
+
4. **Share agent files** - Same markdown file works in Claude Code and SwarmSDK
|
|
225
|
+
|
|
226
|
+
## Example: Full Integration
|
|
227
|
+
|
|
228
|
+
**Claude Code agent file** (`.claude/agents/backend-dev.md`):
|
|
229
|
+
```markdown
|
|
230
|
+
---
|
|
231
|
+
name: backend-developer
|
|
232
|
+
description: Backend API specialist
|
|
233
|
+
tools: Read, Write, Edit, Bash, Grep
|
|
234
|
+
model: sonnet
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
You are a backend developer specializing in REST APIs and databases.
|
|
238
|
+
Focus on scalability, security, and clean architecture.
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**SwarmSDK config** (`swarm.yml`):
|
|
242
|
+
```yaml
|
|
243
|
+
version: 2
|
|
244
|
+
swarm:
|
|
245
|
+
name: "Dev Team"
|
|
246
|
+
lead: backend
|
|
247
|
+
|
|
248
|
+
agents:
|
|
249
|
+
backend:
|
|
250
|
+
agent_file: ".claude/agents/backend-dev.md"
|
|
251
|
+
provider: openai
|
|
252
|
+
base_url: "http://localhost:8000/v1" # Local proxy
|
|
253
|
+
delegates_to: [reviewer]
|
|
254
|
+
permissions:
|
|
255
|
+
Write:
|
|
256
|
+
allowed_paths: ["backend/**"]
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
This gives you the best of both worlds:
|
|
260
|
+
- ✅ Portable agent definitions (work in Claude Code)
|
|
261
|
+
- ✅ SwarmSDK-specific configuration (provider, permissions, delegation)
|
|
262
|
+
- ✅ No duplication or maintenance burden
|