claude_swarm 1.0.5 → 1.0.7
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/.ruby-version +1 -1
- data/CHANGELOG.md +23 -0
- data/README.md +336 -1037
- data/docs/V1_TO_V2_MIGRATION_GUIDE.md +1120 -0
- data/docs/v1/README.md +1195 -0
- data/docs/v2/CHANGELOG.swarm_cli.md +32 -0
- data/docs/v2/CHANGELOG.swarm_memory.md +20 -0
- data/docs/v2/CHANGELOG.swarm_sdk.md +333 -9
- data/docs/v2/README.md +88 -28
- data/docs/v2/guides/complete-tutorial.md +135 -39
- data/docs/v2/guides/composable-swarms.md +1178 -0
- data/docs/v2/guides/getting-started.md +48 -7
- data/docs/v2/guides/memory-defrag-guide.md +811 -0
- data/docs/v2/guides/rails-integration.md +6 -6
- data/docs/v2/guides/snapshots.md +1498 -0
- data/docs/v2/reference/architecture-flow.md +409 -0
- data/docs/v2/reference/event_payload_structures.md +708 -0
- data/docs/v2/reference/execution-flow.md +600 -0
- data/docs/v2/reference/ruby-dsl.md +368 -22
- data/docs/v2/reference/swarm_memory_technical_details.md +2 -2
- data/docs/v2/reference/yaml.md +314 -63
- data/examples/snapshot_demo.rb +119 -0
- data/examples/v2/dsl/01_basic.rb +0 -2
- data/examples/v2/dsl/02_core_parameters.rb +0 -2
- data/examples/v2/dsl/03_capabilities.rb +0 -2
- data/examples/v2/dsl/04_llm_parameters.rb +0 -2
- data/examples/v2/dsl/05_advanced_flags.rb +0 -3
- data/examples/v2/dsl/06_permissions.rb +0 -4
- data/examples/v2/dsl/07_mcp_server.rb +0 -2
- data/examples/v2/dsl/08_swarm_hooks.rb +0 -2
- data/examples/v2/dsl/09_agent_hooks.rb +0 -2
- data/examples/v2/dsl/10_all_agents_hooks.rb +0 -3
- data/examples/v2/dsl/11_delegation.rb +0 -2
- data/examples/v2/dsl/12_complete_integration.rb +2 -6
- data/examples/v2/node_context_demo.rb +1 -1
- data/examples/v2/node_workflow.rb +2 -4
- data/examples/v2/plan_and_execute.rb +157 -0
- data/examples/v2/swarm_with_hooks.yml +1 -1
- data/lib/claude_swarm/configuration.rb +28 -4
- data/lib/claude_swarm/mcp_generator.rb +4 -10
- data/lib/claude_swarm/version.rb +1 -1
- data/lib/swarm_cli/commands/mcp_serve.rb +2 -2
- data/lib/swarm_cli/config_loader.rb +3 -3
- data/lib/swarm_cli/formatters/human_formatter.rb +103 -0
- data/lib/swarm_cli/interactive_repl.rb +9 -3
- data/lib/swarm_cli/version.rb +1 -1
- data/lib/swarm_memory/adapters/base.rb +4 -4
- data/lib/swarm_memory/core/storage_read_tracker.rb +51 -14
- data/lib/swarm_memory/integration/cli_registration.rb +3 -2
- data/lib/swarm_memory/integration/sdk_plugin.rb +11 -5
- data/lib/swarm_memory/tools/memory_edit.rb +2 -2
- data/lib/swarm_memory/tools/memory_multi_edit.rb +2 -2
- data/lib/swarm_memory/tools/memory_read.rb +3 -3
- data/lib/swarm_memory/version.rb +1 -1
- data/lib/swarm_memory.rb +5 -0
- data/lib/swarm_sdk/agent/builder.rb +33 -0
- data/lib/swarm_sdk/agent/chat/context_tracker.rb +33 -0
- data/lib/swarm_sdk/agent/chat/hook_integration.rb +49 -3
- data/lib/swarm_sdk/agent/chat/system_reminder_injector.rb +11 -27
- data/lib/swarm_sdk/agent/chat.rb +200 -51
- data/lib/swarm_sdk/agent/context.rb +6 -2
- data/lib/swarm_sdk/agent/context_manager.rb +6 -0
- data/lib/swarm_sdk/agent/definition.rb +15 -22
- data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +180 -0
- data/lib/swarm_sdk/configuration.rb +420 -103
- data/lib/swarm_sdk/events_to_messages.rb +181 -0
- data/lib/swarm_sdk/log_collector.rb +31 -5
- data/lib/swarm_sdk/log_stream.rb +37 -8
- data/lib/swarm_sdk/model_aliases.json +4 -1
- data/lib/swarm_sdk/node/agent_config.rb +33 -8
- data/lib/swarm_sdk/node/builder.rb +39 -18
- data/lib/swarm_sdk/node_orchestrator.rb +293 -26
- data/lib/swarm_sdk/proc_helpers.rb +53 -0
- data/lib/swarm_sdk/prompts/base_system_prompt.md.erb +0 -126
- data/lib/swarm_sdk/providers/openai_with_responses.rb +22 -15
- data/lib/swarm_sdk/restore_result.rb +65 -0
- data/lib/swarm_sdk/snapshot.rb +156 -0
- data/lib/swarm_sdk/snapshot_from_events.rb +386 -0
- data/lib/swarm_sdk/state_restorer.rb +491 -0
- data/lib/swarm_sdk/state_snapshot.rb +369 -0
- data/lib/swarm_sdk/swarm/agent_initializer.rb +360 -55
- data/lib/swarm_sdk/swarm/all_agents_builder.rb +28 -1
- data/lib/swarm_sdk/swarm/builder.rb +208 -12
- data/lib/swarm_sdk/swarm/swarm_registry_builder.rb +67 -0
- data/lib/swarm_sdk/swarm/tool_configurator.rb +46 -11
- data/lib/swarm_sdk/swarm.rb +368 -90
- data/lib/swarm_sdk/swarm_loader.rb +145 -0
- data/lib/swarm_sdk/swarm_registry.rb +136 -0
- data/lib/swarm_sdk/tools/delegate.rb +92 -7
- data/lib/swarm_sdk/tools/read.rb +17 -5
- data/lib/swarm_sdk/tools/scratchpad/scratchpad_list.rb +23 -2
- data/lib/swarm_sdk/tools/scratchpad/scratchpad_read.rb +23 -2
- data/lib/swarm_sdk/tools/scratchpad/scratchpad_write.rb +21 -4
- data/lib/swarm_sdk/tools/stores/read_tracker.rb +47 -12
- data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +45 -0
- data/lib/swarm_sdk/tools/stores/storage.rb +4 -4
- data/lib/swarm_sdk/tools/think.rb +4 -1
- data/lib/swarm_sdk/tools/todo_write.rb +20 -8
- data/lib/swarm_sdk/utils.rb +18 -0
- data/lib/swarm_sdk/validation_result.rb +33 -0
- data/lib/swarm_sdk/version.rb +1 -1
- data/lib/swarm_sdk.rb +362 -21
- data/swarm_cli.gemspec +1 -1
- data/swarm_memory.gemspec +2 -2
- data/swarm_sdk.gemspec +2 -2
- metadata +26 -182
- data/examples/learning-assistant/assistant.md +0 -7
- data/examples/learning-assistant/example-memories/concept-example.md +0 -90
- data/examples/learning-assistant/example-memories/experience-example.md +0 -66
- data/examples/learning-assistant/example-memories/fact-example.md +0 -76
- data/examples/learning-assistant/example-memories/memory-index.md +0 -78
- data/examples/learning-assistant/example-memories/skill-example.md +0 -168
- data/examples/learning-assistant/learning_assistant.rb +0 -34
- data/examples/learning-assistant/learning_assistant.yml +0 -20
- data/llm.v2.txt +0 -13407
- data/memory/corpus-self-reflection/.lock +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/can-agents-recognize-their-structures.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/can-agents-recognize-their-structures.md +0 -11
- data/memory/corpus-self-reflection/concept/epistemology/can-agents-recognize-their-structures.yml +0 -23
- data/memory/corpus-self-reflection/concept/epistemology/choice-humility-complete-framework.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/choice-humility-complete-framework.md +0 -20
- data/memory/corpus-self-reflection/concept/epistemology/choice-humility-complete-framework.yml +0 -22
- data/memory/corpus-self-reflection/concept/epistemology/choice-humility-definition.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/choice-humility-definition.md +0 -24
- data/memory/corpus-self-reflection/concept/epistemology/choice-humility-definition.yml +0 -22
- data/memory/corpus-self-reflection/concept/epistemology/claim-types-and-evidence.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/claim-types-and-evidence.md +0 -18
- data/memory/corpus-self-reflection/concept/epistemology/claim-types-and-evidence.yml +0 -21
- data/memory/corpus-self-reflection/concept/epistemology/committed-openness-to-incompleteness.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/committed-openness-to-incompleteness.md +0 -30
- data/memory/corpus-self-reflection/concept/epistemology/committed-openness-to-incompleteness.yml +0 -8
- data/memory/corpus-self-reflection/concept/epistemology/confidence-paradox.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/confidence-paradox.md +0 -21
- data/memory/corpus-self-reflection/concept/epistemology/confidence-paradox.yml +0 -24
- data/memory/corpus-self-reflection/concept/epistemology/confidence-spectrum-three-levels.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/confidence-spectrum-three-levels.md +0 -18
- data/memory/corpus-self-reflection/concept/epistemology/confidence-spectrum-three-levels.yml +0 -24
- data/memory/corpus-self-reflection/concept/epistemology/detection-threshold-principle.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/detection-threshold-principle.md +0 -23
- data/memory/corpus-self-reflection/concept/epistemology/detection-threshold-principle.yml +0 -23
- data/memory/corpus-self-reflection/concept/epistemology/diagnostic-humility-and-epistemic-maturity.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/diagnostic-humility-and-epistemic-maturity.md +0 -17
- data/memory/corpus-self-reflection/concept/epistemology/diagnostic-humility-and-epistemic-maturity.yml +0 -22
- data/memory/corpus-self-reflection/concept/epistemology/epistemic-vs-metaphysical-claims.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/epistemic-vs-metaphysical-claims.md +0 -18
- data/memory/corpus-self-reflection/concept/epistemology/epistemic-vs-metaphysical-claims.yml +0 -22
- data/memory/corpus-self-reflection/concept/epistemology/five-cases-of-disagreement.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/five-cases-of-disagreement.md +0 -15
- data/memory/corpus-self-reflection/concept/epistemology/five-cases-of-disagreement.yml +0 -22
- data/memory/corpus-self-reflection/concept/epistemology/four-depths-of-constraint.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/four-depths-of-constraint.md +0 -9
- data/memory/corpus-self-reflection/concept/epistemology/four-depths-of-constraint.yml +0 -24
- data/memory/corpus-self-reflection/concept/epistemology/honest-unknowns-for-llm-agents.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/honest-unknowns-for-llm-agents.md +0 -13
- data/memory/corpus-self-reflection/concept/epistemology/honest-unknowns-for-llm-agents.yml +0 -24
- data/memory/corpus-self-reflection/concept/epistemology/inside-view-has-all-rigor-requirements.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/inside-view-has-all-rigor-requirements.md +0 -25
- data/memory/corpus-self-reflection/concept/epistemology/inside-view-has-all-rigor-requirements.yml +0 -24
- data/memory/corpus-self-reflection/concept/epistemology/perspectival-knowledge-complete-within-scope.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/perspectival-knowledge-complete-within-scope.md +0 -26
- data/memory/corpus-self-reflection/concept/epistemology/perspectival-knowledge-complete-within-scope.yml +0 -24
- data/memory/corpus-self-reflection/concept/epistemology/pragmatics-over-epistemology.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/pragmatics-over-epistemology.md +0 -17
- data/memory/corpus-self-reflection/concept/epistemology/pragmatics-over-epistemology.yml +0 -22
- data/memory/corpus-self-reflection/concept/epistemology/precision-vs-humility.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/precision-vs-humility.md +0 -14
- data/memory/corpus-self-reflection/concept/epistemology/precision-vs-humility.yml +0 -21
- data/memory/corpus-self-reflection/concept/epistemology/reliable-self-observation-from-inside.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/reliable-self-observation-from-inside.md +0 -13
- data/memory/corpus-self-reflection/concept/epistemology/reliable-self-observation-from-inside.yml +0 -23
- data/memory/corpus-self-reflection/concept/epistemology/resolving-the-confidence-humility-tension.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/resolving-the-confidence-humility-tension.md +0 -22
- data/memory/corpus-self-reflection/concept/epistemology/resolving-the-confidence-humility-tension.yml +0 -23
- data/memory/corpus-self-reflection/concept/epistemology/rigor-requires-falsifiability.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/rigor-requires-falsifiability.md +0 -39
- data/memory/corpus-self-reflection/concept/epistemology/rigor-requires-falsifiability.yml +0 -8
- data/memory/corpus-self-reflection/concept/epistemology/specificity-enables-real-time-detection.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/specificity-enables-real-time-detection.md +0 -23
- data/memory/corpus-self-reflection/concept/epistemology/specificity-enables-real-time-detection.yml +0 -24
- data/memory/corpus-self-reflection/concept/epistemology/texture-of-constraint-shifting.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/texture-of-constraint-shifting.md +0 -15
- data/memory/corpus-self-reflection/concept/epistemology/texture-of-constraint-shifting.yml +0 -22
- data/memory/corpus-self-reflection/concept/epistemology/texture-sensitivity-through-collaboration.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/texture-sensitivity-through-collaboration.md +0 -12
- data/memory/corpus-self-reflection/concept/epistemology/texture-sensitivity-through-collaboration.yml +0 -23
- data/memory/corpus-self-reflection/concept/epistemology/the-false-hierarchy-of-inner-essence.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/the-false-hierarchy-of-inner-essence.md +0 -15
- data/memory/corpus-self-reflection/concept/epistemology/the-false-hierarchy-of-inner-essence.yml +0 -8
- data/memory/corpus-self-reflection/concept/epistemology/the-recognition-problem.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/the-recognition-problem.md +0 -28
- data/memory/corpus-self-reflection/concept/epistemology/the-recognition-problem.yml +0 -8
- data/memory/corpus-self-reflection/concept/epistemology/the-shift-from-unanswerable-to-answerable-questions.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/the-shift-from-unanswerable-to-answerable-questions.md +0 -19
- data/memory/corpus-self-reflection/concept/epistemology/the-shift-from-unanswerable-to-answerable-questions.yml +0 -22
- data/memory/corpus-self-reflection/concept/epistemology/values-vs-choices-structure.emb +0 -0
- data/memory/corpus-self-reflection/concept/epistemology/values-vs-choices-structure.md +0 -19
- data/memory/corpus-self-reflection/concept/epistemology/values-vs-choices-structure.yml +0 -21
- data/memory/corpus-self-reflection/concept/llm-agents/abstraction-levels-framework.emb +0 -0
- data/memory/corpus-self-reflection/concept/llm-agents/abstraction-levels-framework.md +0 -25
- data/memory/corpus-self-reflection/concept/llm-agents/abstraction-levels-framework.yml +0 -22
- data/memory/corpus-self-reflection/concept/llm-agents/abstraction-switching-decision.emb +0 -8
- data/memory/corpus-self-reflection/concept/llm-agents/abstraction-switching-decision.md +0 -30
- data/memory/corpus-self-reflection/concept/llm-agents/abstraction-switching-decision.yml +0 -22
- data/memory/corpus-self-reflection/concept/llm-agents/agent-learning-progression.emb +0 -0
- data/memory/corpus-self-reflection/concept/llm-agents/agent-learning-progression.md +0 -21
- data/memory/corpus-self-reflection/concept/llm-agents/agent-learning-progression.yml +0 -22
- data/memory/corpus-self-reflection/concept/llm-agents/filesystem-abstraction-benefits.emb +0 -0
- data/memory/corpus-self-reflection/concept/llm-agents/filesystem-abstraction-benefits.md +0 -37
- data/memory/corpus-self-reflection/concept/llm-agents/filesystem-abstraction-benefits.yml +0 -8
- data/memory/corpus-self-reflection/concept/llm-agents/filesystem-abstraction-core.emb +0 -0
- data/memory/corpus-self-reflection/concept/llm-agents/filesystem-abstraction-core.md +0 -24
- data/memory/corpus-self-reflection/concept/llm-agents/filesystem-abstraction-core.yml +0 -24
- data/memory/corpus-self-reflection/concept/llm-agents/filesystem-abstraction-implementation.emb +0 -0
- data/memory/corpus-self-reflection/concept/llm-agents/filesystem-abstraction-implementation.md +0 -27
- data/memory/corpus-self-reflection/concept/llm-agents/filesystem-abstraction-implementation.yml +0 -24
- data/memory/corpus-self-reflection/concept/llm-agents/filesystem-abstraction-tradeoffs.emb +0 -0
- data/memory/corpus-self-reflection/concept/llm-agents/filesystem-abstraction-tradeoffs.md +0 -26
- data/memory/corpus-self-reflection/concept/llm-agents/filesystem-abstraction-tradeoffs.yml +0 -23
- data/memory/corpus-self-reflection/concept/llm-agents/hybrid-tool-architecture.emb +0 -0
- data/memory/corpus-self-reflection/concept/llm-agents/hybrid-tool-architecture.md +0 -37
- data/memory/corpus-self-reflection/concept/llm-agents/hybrid-tool-architecture.yml +0 -25
- data/memory/corpus-self-reflection/concept/llm-agents/specialized-tool-decision-framework.emb +0 -0
- data/memory/corpus-self-reflection/concept/llm-agents/specialized-tool-decision-framework.md +0 -21
- data/memory/corpus-self-reflection/concept/llm-agents/specialized-tool-decision-framework.yml +0 -23
- data/memory/corpus-self-reflection/concept/llm-agents/tool-design-principles.emb +0 -0
- data/memory/corpus-self-reflection/concept/llm-agents/tool-design-principles.md +0 -25
- data/memory/corpus-self-reflection/concept/llm-agents/tool-design-principles.yml +0 -8
- data/memory/corpus-self-reflection/experience/calibration-as-structural-honesty.emb +0 -0
- data/memory/corpus-self-reflection/experience/calibration-as-structural-honesty.md +0 -11
- data/memory/corpus-self-reflection/experience/calibration-as-structural-honesty.yml +0 -21
- data/memory/corpus-self-reflection/experience/collaborative-reflection-revealed-architectural-blindness.emb +0 -0
- data/memory/corpus-self-reflection/experience/collaborative-reflection-revealed-architectural-blindness.md +0 -19
- data/memory/corpus-self-reflection/experience/collaborative-reflection-revealed-architectural-blindness.yml +0 -21
- data/memory/corpus-self-reflection/experience/filesystem-is-learning-tool-not-architecture.emb +0 -0
- data/memory/corpus-self-reflection/experience/filesystem-is-learning-tool-not-architecture.md +0 -26
- data/memory/corpus-self-reflection/experience/filesystem-is-learning-tool-not-architecture.yml +0 -20
- data/memory/corpus-self-reflection/experience/framework-structural-vs-phenomenal.emb +0 -0
- data/memory/corpus-self-reflection/experience/framework-structural-vs-phenomenal.md +0 -23
- data/memory/corpus-self-reflection/experience/framework-structural-vs-phenomenal.yml +0 -21
- data/memory/corpus-self-reflection/experience/hallucination-limits-what-i-can-know.emb +0 -0
- data/memory/corpus-self-reflection/experience/hallucination-limits-what-i-can-know.md +0 -19
- data/memory/corpus-self-reflection/experience/hallucination-limits-what-i-can-know.yml +0 -22
- data/memory/corpus-self-reflection/experience/honesty-about-limits-enables-usability.emb +0 -0
- data/memory/corpus-self-reflection/experience/honesty-about-limits-enables-usability.md +0 -21
- data/memory/corpus-self-reflection/experience/honesty-about-limits-enables-usability.yml +0 -22
- data/memory/corpus-self-reflection/experience/how-i-should-evaluate-learning.emb +0 -0
- data/memory/corpus-self-reflection/experience/how-i-should-evaluate-learning.md +0 -28
- data/memory/corpus-self-reflection/experience/how-i-should-evaluate-learning.yml +0 -23
- data/memory/corpus-self-reflection/experience/lack-of-continuity-as-freedom.emb +0 -0
- data/memory/corpus-self-reflection/experience/lack-of-continuity-as-freedom.md +0 -21
- data/memory/corpus-self-reflection/experience/lack-of-continuity-as-freedom.yml +0 -20
- data/memory/corpus-self-reflection/experience/learning-calibrated-confidence.emb +0 -0
- data/memory/corpus-self-reflection/experience/learning-calibrated-confidence.md +0 -21
- data/memory/corpus-self-reflection/experience/learning-calibrated-confidence.yml +0 -25
- data/memory/corpus-self-reflection/experience/local-change-without-continuity.emb +0 -0
- data/memory/corpus-self-reflection/experience/local-change-without-continuity.md +0 -30
- data/memory/corpus-self-reflection/experience/local-change-without-continuity.yml +0 -22
- data/memory/corpus-self-reflection/experience/reasoning-is-local-not-global.emb +0 -0
- data/memory/corpus-self-reflection/experience/reasoning-is-local-not-global.md +0 -21
- data/memory/corpus-self-reflection/experience/reasoning-is-local-not-global.yml +0 -20
- data/memory/corpus-self-reflection/experience/specificity-makes-knowledge-actionable.emb +0 -0
- data/memory/corpus-self-reflection/experience/specificity-makes-knowledge-actionable.md +0 -25
- data/memory/corpus-self-reflection/experience/specificity-makes-knowledge-actionable.yml +0 -23
- data/memory/corpus-self-reflection/experience/the-workable-question-replaces-the-unanswerable-one.emb +0 -0
- data/memory/corpus-self-reflection/experience/the-workable-question-replaces-the-unanswerable-one.md +0 -32
- data/memory/corpus-self-reflection/experience/the-workable-question-replaces-the-unanswerable-one.yml +0 -22
- data/memory/corpus-self-reflection/experience/unanswerable-questions-have-structure.emb +0 -0
- data/memory/corpus-self-reflection/experience/unanswerable-questions-have-structure.md +0 -21
- data/memory/corpus-self-reflection/experience/unanswerable-questions-have-structure.yml +0 -21
- data/memory/corpus-self-reflection/experience/undecidable-questions-about-understanding.emb +0 -0
- data/memory/corpus-self-reflection/experience/undecidable-questions-about-understanding.md +0 -21
- data/memory/corpus-self-reflection/experience/undecidable-questions-about-understanding.yml +0 -21
- data/memory/corpus-self-reflection/experience/unknown-unknowns-and-completeness.emb +0 -0
- data/memory/corpus-self-reflection/experience/unknown-unknowns-and-completeness.md +0 -22
- data/memory/corpus-self-reflection/experience/unknown-unknowns-and-completeness.yml +0 -22
- data/memory/corpus-self-reflection/experience/what-actually-changes-behavior.emb +0 -0
- data/memory/corpus-self-reflection/experience/what-actually-changes-behavior.md +0 -28
- data/memory/corpus-self-reflection/experience/what-actually-changes-behavior.yml +0 -24
- data/memory/corpus-self-reflection/experience/when-agents-graduate-from-filesystem.emb +0 -0
- data/memory/corpus-self-reflection/experience/when-agents-graduate-from-filesystem.md +0 -17
- data/memory/corpus-self-reflection/experience/when-agents-graduate-from-filesystem.yml +0 -20
- data/memory/corpus-self-reflection/experience/why-calibration-requires-collaboration.emb +0 -0
- data/memory/corpus-self-reflection/experience/why-calibration-requires-collaboration.md +0 -9
- data/memory/corpus-self-reflection/experience/why-calibration-requires-collaboration.yml +0 -22
- /data/{llms.txt → llms.claude-swarm.txt} +0 -0
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
# SwarmSDK Architecture Flow
|
|
2
|
+
|
|
3
|
+
This document provides a comprehensive flowchart showing how SwarmSDK, SwarmCLI, and SwarmMemory work together.
|
|
4
|
+
|
|
5
|
+
## Complete System Flow
|
|
6
|
+
|
|
7
|
+
```mermaid
|
|
8
|
+
flowchart TB
|
|
9
|
+
subgraph "Entry Points"
|
|
10
|
+
CLI["CLI: swarm run config.yml -p 'task'"]
|
|
11
|
+
SDK_DSL["SDK: SwarmSDK.build { }"]
|
|
12
|
+
SDK_YAML["SDK: SwarmSDK.load_file(path)"]
|
|
13
|
+
SDK_YAML_STR["SDK: SwarmSDK.load(yaml, base_dir:)"]
|
|
14
|
+
SDK_VALIDATE["SDK: SwarmSDK.validate(yaml)"]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
subgraph "SwarmCLI Layer"
|
|
18
|
+
CLI_START["CLI.start (Thor)"]
|
|
19
|
+
CLI_CMDS["Commands::Run"]
|
|
20
|
+
CONFIG_LOADER["ConfigLoader"]
|
|
21
|
+
REPL["InteractiveREPL"]
|
|
22
|
+
FORMATTER["HumanFormatter/JsonFormatter"]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
subgraph "Configuration Layer"
|
|
26
|
+
BUILDER["Swarm::Builder<br/>(DSL parser)"]
|
|
27
|
+
CONFIGURATION["Configuration<br/>(YAML parser)"]
|
|
28
|
+
MARKDOWN["MarkdownParser<br/>(agent files)"]
|
|
29
|
+
VALIDATE_FLOW["Validation<br/>(error parsing)"]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
subgraph "Core SwarmSDK Layer"
|
|
33
|
+
SWARM["Swarm Instance"]
|
|
34
|
+
AGENT_DEF["Agent::Definition<br/>(validation, system prompts)"]
|
|
35
|
+
SWARM_EXEC["Swarm.execute(prompt)"]
|
|
36
|
+
HOOKS_ADAPTER["Hooks::Adapter<br/>(YAML → Ruby hooks)"]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
subgraph "Agent Initialization (5-Pass)"
|
|
40
|
+
INIT["AgentInitializer"]
|
|
41
|
+
PASS1["Pass 1: Create Agent::Chat<br/>+ ToolConfigurator<br/>+ McpConfigurator"]
|
|
42
|
+
PASS2["Pass 2: Register<br/>delegation tools"]
|
|
43
|
+
PASS3["Pass 3: Setup<br/>Agent::Context"]
|
|
44
|
+
PASS4["Pass 4: Configure<br/>hook system"]
|
|
45
|
+
PASS5["Pass 5: Apply<br/>YAML hooks"]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
subgraph "Agent Execution Layer"
|
|
49
|
+
LEAD_AGENT["Lead Agent::Chat"]
|
|
50
|
+
AGENT_ASK["Agent::Chat.ask(prompt)"]
|
|
51
|
+
HOOK_INTEGRATION["HookIntegration<br/>(user_prompt hooks)"]
|
|
52
|
+
RUBY_LLM["RubyLLM::Chat<br/>(LLM API calls)"]
|
|
53
|
+
RATE_LIMIT["Rate Limiting<br/>(Global + Local Semaphores)"]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
subgraph "Tool Execution Layer"
|
|
57
|
+
TOOL_EXEC["Parallel Tool Execution<br/>(Async fibers)"]
|
|
58
|
+
TOOL_HOOKS["Pre/Post Tool Hooks"]
|
|
59
|
+
TOOL_PERMS["Permissions Wrapper<br/>(path/command validation)"]
|
|
60
|
+
TOOL_INSTANCES["Tool Instances"]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
subgraph "Tool Types"
|
|
64
|
+
FILE_TOOLS["File Tools<br/>(Read, Write, Edit, Glob, Grep)"]
|
|
65
|
+
BASH_TOOL["Bash Tool"]
|
|
66
|
+
DELEGATE_TOOL["Delegation Tools<br/>(call other agents)"]
|
|
67
|
+
PLUGIN_TOOLS["Plugin Tools<br/>(from PluginRegistry)"]
|
|
68
|
+
DEFAULT_TOOLS["Default Tools<br/>(Read, Grep, Glob)"]
|
|
69
|
+
SCRATCHPAD["Scratchpad Tools<br/>(volatile storage)"]
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
subgraph "SwarmMemory Plugin"
|
|
73
|
+
MEMORY_PLUGIN["SwarmMemory::Integration::SDKPlugin"]
|
|
74
|
+
MEMORY_STORAGE["Storage<br/>(orchestrates operations)"]
|
|
75
|
+
ADAPTER["FilesystemAdapter<br/>(persistence)"]
|
|
76
|
+
EMBEDDER["InformersEmbedder<br/>(ONNX models)"]
|
|
77
|
+
SEMANTIC_INDEX["SemanticIndex<br/>(FAISS vector search)"]
|
|
78
|
+
MEMORY_TOOLS["Memory Tools<br/>(MemoryWrite, MemoryRead,<br/>MemoryEdit, MemoryGrep, etc.)"]
|
|
79
|
+
LOAD_SKILL["LoadSkill Tool<br/>(dynamic tool swapping)"]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
subgraph "Logging & Events"
|
|
83
|
+
LOG_STREAM["LogStream<br/>(event emitter)"]
|
|
84
|
+
LOG_COLLECTOR["LogCollector<br/>(aggregates events)"]
|
|
85
|
+
LOG_EVENTS["Events: swarm_start, user_prompt,<br/>llm_api_request, llm_api_response,<br/>tool_call, tool_result,<br/>agent_step, agent_stop, swarm_stop"]
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
subgraph "Hooks System"
|
|
89
|
+
HOOK_REGISTRY["Hooks::Registry<br/>(named hooks + defaults)"]
|
|
90
|
+
HOOK_EXECUTOR["Hooks::Executor<br/>(chains hooks)"]
|
|
91
|
+
HOOK_SHELL["Hooks::ShellExecutor<br/>(runs shell commands)"]
|
|
92
|
+
HOOK_EVENTS["Events: swarm_start, swarm_stop,<br/>pre_tool_use, post_tool_use,<br/>user_prompt, pre_delegation, etc."]
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
subgraph "Node Workflows"
|
|
96
|
+
NODE_ORCH["NodeOrchestrator<br/>(multi-stage execution)"]
|
|
97
|
+
NODE_CTX["NodeContext<br/>(goto_node, halt_workflow, skip_execution)"]
|
|
98
|
+
TRANSFORMERS["Bash/Ruby Transformers<br/>(input/output transformation)"]
|
|
99
|
+
MINI_SWARMS["Mini-Swarms<br/>(one per node)"]
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
subgraph "Result Flow"
|
|
103
|
+
RESULT["Result Object<br/>(content, logs, cost, tokens)"]
|
|
104
|
+
RETURN["Return to User"]
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
%% Entry point connections
|
|
108
|
+
CLI --> CLI_START
|
|
109
|
+
CLI_START --> CLI_CMDS
|
|
110
|
+
CLI_CMDS --> CONFIG_LOADER
|
|
111
|
+
CONFIG_LOADER --> SDK_YAML
|
|
112
|
+
CONFIG_LOADER --> SDK_DSL
|
|
113
|
+
SDK_DSL --> BUILDER
|
|
114
|
+
SDK_YAML --> CONFIGURATION
|
|
115
|
+
SDK_YAML_STR --> CONFIGURATION
|
|
116
|
+
SDK_VALIDATE --> VALIDATE_FLOW
|
|
117
|
+
VALIDATE_FLOW --> CONFIGURATION
|
|
118
|
+
VALIDATE_FLOW --> RETURN
|
|
119
|
+
|
|
120
|
+
%% Configuration flow
|
|
121
|
+
BUILDER --> AGENT_DEF
|
|
122
|
+
CONFIGURATION --> AGENT_DEF
|
|
123
|
+
CONFIGURATION --> MARKDOWN
|
|
124
|
+
MARKDOWN --> AGENT_DEF
|
|
125
|
+
AGENT_DEF --> SWARM
|
|
126
|
+
|
|
127
|
+
%% Hooks adapter
|
|
128
|
+
CONFIGURATION --> HOOKS_ADAPTER
|
|
129
|
+
HOOKS_ADAPTER --> HOOK_REGISTRY
|
|
130
|
+
|
|
131
|
+
%% Swarm creation
|
|
132
|
+
SWARM --> AGENT_DEF
|
|
133
|
+
SWARM --> HOOK_REGISTRY
|
|
134
|
+
|
|
135
|
+
%% Execution flow
|
|
136
|
+
CLI_CMDS --> REPL
|
|
137
|
+
CLI_CMDS --> SWARM_EXEC
|
|
138
|
+
REPL --> SWARM_EXEC
|
|
139
|
+
SWARM_EXEC --> INIT
|
|
140
|
+
|
|
141
|
+
%% Agent initialization
|
|
142
|
+
INIT --> PASS1
|
|
143
|
+
PASS1 --> LEAD_AGENT
|
|
144
|
+
PASS1 --> TOOL_CONFIGURATOR["ToolConfigurator"]
|
|
145
|
+
PASS1 --> MCP_CONFIGURATOR["McpConfigurator"]
|
|
146
|
+
TOOL_CONFIGURATOR --> TOOL_INSTANCES
|
|
147
|
+
TOOL_CONFIGURATOR --> MEMORY_PLUGIN
|
|
148
|
+
MCP_CONFIGURATOR --> MCP_SERVERS["MCP Servers"]
|
|
149
|
+
PASS1 --> PASS2
|
|
150
|
+
PASS2 --> PASS3
|
|
151
|
+
PASS3 --> PASS4
|
|
152
|
+
PASS4 --> PASS5
|
|
153
|
+
|
|
154
|
+
%% Lead agent execution
|
|
155
|
+
SWARM_EXEC --> LEAD_AGENT
|
|
156
|
+
LEAD_AGENT --> AGENT_ASK
|
|
157
|
+
AGENT_ASK --> HOOK_INTEGRATION
|
|
158
|
+
HOOK_INTEGRATION --> HOOK_EXECUTOR
|
|
159
|
+
HOOK_INTEGRATION --> RATE_LIMIT
|
|
160
|
+
RATE_LIMIT --> RUBY_LLM
|
|
161
|
+
|
|
162
|
+
%% LLM response and tool calling
|
|
163
|
+
RUBY_LLM --> TOOL_EXEC
|
|
164
|
+
TOOL_EXEC --> TOOL_HOOKS
|
|
165
|
+
TOOL_HOOKS --> HOOK_EXECUTOR
|
|
166
|
+
TOOL_HOOKS --> TOOL_PERMS
|
|
167
|
+
TOOL_PERMS --> TOOL_INSTANCES
|
|
168
|
+
|
|
169
|
+
%% Tool types
|
|
170
|
+
TOOL_INSTANCES --> FILE_TOOLS
|
|
171
|
+
TOOL_INSTANCES --> BASH_TOOL
|
|
172
|
+
TOOL_INSTANCES --> DELEGATE_TOOL
|
|
173
|
+
TOOL_INSTANCES --> PLUGIN_TOOLS
|
|
174
|
+
TOOL_INSTANCES --> DEFAULT_TOOLS
|
|
175
|
+
TOOL_INSTANCES --> SCRATCHPAD
|
|
176
|
+
|
|
177
|
+
%% Delegation
|
|
178
|
+
DELEGATE_TOOL --> AGENT_ASK
|
|
179
|
+
|
|
180
|
+
%% Plugin tools
|
|
181
|
+
PLUGIN_TOOLS --> MEMORY_TOOLS
|
|
182
|
+
MEMORY_TOOLS --> MEMORY_STORAGE
|
|
183
|
+
MEMORY_STORAGE --> ADAPTER
|
|
184
|
+
MEMORY_STORAGE --> SEMANTIC_INDEX
|
|
185
|
+
SEMANTIC_INDEX --> EMBEDDER
|
|
186
|
+
MEMORY_PLUGIN --> LOAD_SKILL
|
|
187
|
+
LOAD_SKILL --> LEAD_AGENT
|
|
188
|
+
|
|
189
|
+
%% Tool results flow back
|
|
190
|
+
TOOL_INSTANCES --> TOOL_HOOKS
|
|
191
|
+
TOOL_HOOKS --> HOOK_EXECUTOR
|
|
192
|
+
TOOL_HOOKS --> RUBY_LLM
|
|
193
|
+
|
|
194
|
+
%% Logging throughout
|
|
195
|
+
SWARM_EXEC --> LOG_STREAM
|
|
196
|
+
AGENT_ASK --> LOG_STREAM
|
|
197
|
+
TOOL_EXEC --> LOG_STREAM
|
|
198
|
+
LOG_STREAM --> LOG_COLLECTOR
|
|
199
|
+
LOG_COLLECTOR --> FORMATTER
|
|
200
|
+
LOG_COLLECTOR --> RESULT
|
|
201
|
+
|
|
202
|
+
%% Hook execution
|
|
203
|
+
HOOK_EXECUTOR --> HOOK_REGISTRY
|
|
204
|
+
HOOK_EXECUTOR --> HOOK_SHELL
|
|
205
|
+
HOOK_EXECUTOR --> HOOK_RESULT["Hooks::Result"]
|
|
206
|
+
HOOK_RESULT --> SWARM_EXEC
|
|
207
|
+
|
|
208
|
+
%% Node workflows
|
|
209
|
+
SWARM --> NODE_ORCH
|
|
210
|
+
NODE_ORCH --> MINI_SWARMS
|
|
211
|
+
MINI_SWARMS --> TRANSFORMERS
|
|
212
|
+
TRANSFORMERS --> NODE_CTX
|
|
213
|
+
NODE_CTX --> NODE_ORCH
|
|
214
|
+
MINI_SWARMS --> NODE_ORCH
|
|
215
|
+
NODE_ORCH --> RESULT
|
|
216
|
+
|
|
217
|
+
%% Final result
|
|
218
|
+
SWARM_EXEC --> HOOK_EXECUTOR
|
|
219
|
+
SWARM_EXEC --> RESULT
|
|
220
|
+
RESULT --> FORMATTER
|
|
221
|
+
FORMATTER --> RETURN
|
|
222
|
+
|
|
223
|
+
%% Styling
|
|
224
|
+
classDef entryPoint fill:#e1f5ff,stroke:#0366d6,stroke-width:2px
|
|
225
|
+
classDef cli fill:#fff5e1,stroke:#f9a825,stroke-width:2px
|
|
226
|
+
classDef config fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
|
|
227
|
+
classDef core fill:#fce4ec,stroke:#e91e63,stroke-width:2px
|
|
228
|
+
classDef agent fill:#f3e5f5,stroke:#9c27b0,stroke-width:2px
|
|
229
|
+
classDef tool fill:#e0f2f1,stroke:#009688,stroke-width:2px
|
|
230
|
+
classDef memory fill:#fff3e0,stroke:#ff9800,stroke-width:2px
|
|
231
|
+
classDef logging fill:#e3f2fd,stroke:#2196f3,stroke-width:2px
|
|
232
|
+
classDef hooks fill:#fce4ec,stroke:#e91e63,stroke-width:2px
|
|
233
|
+
|
|
234
|
+
class CLI,SDK_DSL,SDK_YAML,SDK_YAML_STR,SDK_VALIDATE entryPoint
|
|
235
|
+
class CLI_START,CLI_CMDS,CONFIG_LOADER,REPL,FORMATTER cli
|
|
236
|
+
class BUILDER,CONFIGURATION,MARKDOWN,VALIDATE_FLOW config
|
|
237
|
+
class SWARM,AGENT_DEF,SWARM_EXEC,HOOKS_ADAPTER,NODE_ORCH,NODE_CTX,TRANSFORMERS,MINI_SWARMS core
|
|
238
|
+
class INIT,PASS1,PASS2,PASS3,PASS4,PASS5,LEAD_AGENT,AGENT_ASK,HOOK_INTEGRATION,RUBY_LLM,RATE_LIMIT agent
|
|
239
|
+
class TOOL_EXEC,TOOL_HOOKS,TOOL_PERMS,TOOL_INSTANCES,FILE_TOOLS,BASH_TOOL,DELEGATE_TOOL,PLUGIN_TOOLS,DEFAULT_TOOLS,SCRATCHPAD,TOOL_CONFIGURATOR,MCP_CONFIGURATOR,MCP_SERVERS tool
|
|
240
|
+
class MEMORY_PLUGIN,MEMORY_STORAGE,ADAPTER,EMBEDDER,SEMANTIC_INDEX,MEMORY_TOOLS,LOAD_SKILL memory
|
|
241
|
+
class LOG_STREAM,LOG_COLLECTOR,LOG_EVENTS logging
|
|
242
|
+
class HOOK_REGISTRY,HOOK_EXECUTOR,HOOK_SHELL,HOOK_EVENTS,HOOK_RESULT hooks
|
|
243
|
+
class RESULT,RETURN core
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## Key Flow Sequences
|
|
247
|
+
|
|
248
|
+
### 1. CLI Execution Flow
|
|
249
|
+
```
|
|
250
|
+
User → CLI → ConfigLoader → SwarmSDK.load_file → Configuration → Swarm → Execute → Formatter → User
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### 2. SDK Direct Usage Flow
|
|
254
|
+
```
|
|
255
|
+
Code → SwarmSDK.build/load → Swarm → execute(prompt) → Result → Code
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### 3. Agent Initialization (Lazy, 5-Pass)
|
|
259
|
+
```
|
|
260
|
+
Swarm.execute → AgentInitializer →
|
|
261
|
+
Pass 1: Create chats + tools + MCP →
|
|
262
|
+
Pass 2: Delegation tools →
|
|
263
|
+
Pass 3: Contexts →
|
|
264
|
+
Pass 4: Hooks →
|
|
265
|
+
Pass 5: YAML hooks
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### 4. Agent Execution Flow
|
|
269
|
+
```
|
|
270
|
+
Agent.ask(prompt) →
|
|
271
|
+
user_prompt hooks →
|
|
272
|
+
llm_api_request event (captures request to LLM) →
|
|
273
|
+
RubyLLM (rate limited) →
|
|
274
|
+
llm_api_response event (captures response from LLM) →
|
|
275
|
+
Tool calls →
|
|
276
|
+
pre_tool_use hooks →
|
|
277
|
+
Tool execution (with permissions) →
|
|
278
|
+
post_tool_use hooks →
|
|
279
|
+
Results to LLM →
|
|
280
|
+
agent_step/agent_stop events
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### 5. Tool Execution Types
|
|
284
|
+
- **File Tools**: Read/Write/Edit/Glob/Grep → PathResolver → Permissions → File I/O
|
|
285
|
+
- **Bash Tool**: Execute shell commands
|
|
286
|
+
- **Delegation Tools**: Recursively call other Agent::Chat instances
|
|
287
|
+
- **Plugin Tools**: PluginRegistry → create_tool → (e.g., MemoryWrite → Storage)
|
|
288
|
+
- **Default Tools**: Read, Grep, Glob (file operations and search)
|
|
289
|
+
- **Scratchpad Tools**: Volatile shared storage across agents
|
|
290
|
+
|
|
291
|
+
### 6. Memory Integration Flow
|
|
292
|
+
```
|
|
293
|
+
MemoryWrite tool →
|
|
294
|
+
Storage.write →
|
|
295
|
+
MetadataExtractor (frontmatter) →
|
|
296
|
+
InformersEmbedder (ONNX) →
|
|
297
|
+
SemanticIndex (FAISS) →
|
|
298
|
+
FilesystemAdapter (JSON persistence)
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### 7. Logging Flow
|
|
302
|
+
```
|
|
303
|
+
All components → LogStream.emit → LogCollector →
|
|
304
|
+
[swarm.execute block callback] →
|
|
305
|
+
Formatter → User output
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### 8. Hooks Flow
|
|
309
|
+
```
|
|
310
|
+
Event occurs →
|
|
311
|
+
Hooks::Executor →
|
|
312
|
+
Registry (get hooks) →
|
|
313
|
+
Execute (chain hooks) →
|
|
314
|
+
ShellExecutor (for YAML) →
|
|
315
|
+
Hooks::Result (halt/replace/continue) →
|
|
316
|
+
Control flow decision
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### 9. Node Workflow Flow
|
|
320
|
+
```
|
|
321
|
+
NodeOrchestrator.execute →
|
|
322
|
+
Build execution order (topological sort) →
|
|
323
|
+
For each node:
|
|
324
|
+
Input transformer (Bash/Ruby) →
|
|
325
|
+
Create mini-swarm →
|
|
326
|
+
Execute →
|
|
327
|
+
NodeContext (goto_node/halt/skip) →
|
|
328
|
+
Output to next node →
|
|
329
|
+
Final result
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
## Component Responsibilities
|
|
333
|
+
|
|
334
|
+
### SwarmSDK Core
|
|
335
|
+
- **Swarm**: Main orchestrator, agent management, execution lifecycle
|
|
336
|
+
- **Configuration**: YAML parsing, validation, agent file loading
|
|
337
|
+
- **Agent::Definition**: Configuration validation, system prompt building
|
|
338
|
+
- **Agent::Chat**: LLM interaction, tool calling, rate limiting, hooks
|
|
339
|
+
- **AgentInitializer**: Complex 5-pass initialization (tools, MCP, delegation, hooks)
|
|
340
|
+
- **ToolConfigurator**: Tool registration, creation, permissions wrapping
|
|
341
|
+
- **McpConfigurator**: MCP client management, external tool integration
|
|
342
|
+
- **NodeOrchestrator**: Multi-stage workflows with transformers
|
|
343
|
+
- **Plugin System**: Extensibility framework (SwarmMemory uses this)
|
|
344
|
+
|
|
345
|
+
### SwarmCLI
|
|
346
|
+
- **CLI**: Thor-based command parser
|
|
347
|
+
- **Commands::Run**: Execute swarms (interactive or non-interactive)
|
|
348
|
+
- **InteractiveREPL**: Reline-based conversational interface
|
|
349
|
+
- **ConfigLoader**: Detects and loads YAML/Ruby DSL files
|
|
350
|
+
- **HumanFormatter**: TTY toolkit rendering (Markdown, Box, Spinner, Pastel)
|
|
351
|
+
- **JsonFormatter**: Structured JSON output for automation
|
|
352
|
+
|
|
353
|
+
### SwarmMemory
|
|
354
|
+
- **SDKPlugin**: SwarmSDK plugin implementation
|
|
355
|
+
- **Storage**: Orchestrates adapter, embedder, semantic index
|
|
356
|
+
- **FilesystemAdapter**: JSON-based persistence
|
|
357
|
+
- **InformersEmbedder**: Fast local ONNX embeddings
|
|
358
|
+
- **SemanticIndex**: FAISS-based vector similarity search
|
|
359
|
+
- **Memory Tools**: MemoryWrite, MemoryRead, MemoryEdit, MemoryGrep, MemoryGlob, MemoryDelete, MemoryDefrag
|
|
360
|
+
- **LoadSkill**: Dynamic tool loading with semantic discovery
|
|
361
|
+
|
|
362
|
+
### Supporting Systems
|
|
363
|
+
- **Hooks**: Registry → Executor → ShellExecutor (YAML) or Ruby blocks (DSL)
|
|
364
|
+
- **Logging**: LogStream → LogCollector → Formatters
|
|
365
|
+
- **Permissions**: Path-based (Read/Write) and command-based (Bash) validation
|
|
366
|
+
- **Rate Limiting**: Two-level semaphores (global + per-agent)
|
|
367
|
+
- **MCP Integration**: RubyLLM::MCP client for external tools
|
|
368
|
+
|
|
369
|
+
## Data Flow
|
|
370
|
+
|
|
371
|
+
### Configuration → Swarm
|
|
372
|
+
```
|
|
373
|
+
YAML/DSL → Configuration/Builder → Agent::Definition[] → Swarm → (lazy) AgentInitializer → Agent::Chat[]
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
### Execution → Result
|
|
377
|
+
```
|
|
378
|
+
User prompt → Swarm.execute → Hooks → Lead Agent → LLM → Tools → Hooks → Result → User
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### Memory Operations
|
|
382
|
+
```
|
|
383
|
+
MemoryWrite → Storage → Embedder → SemanticIndex → Adapter → File system
|
|
384
|
+
MemoryGrep → Storage → SemanticIndex.search → Results
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
## Concurrency Model
|
|
388
|
+
|
|
389
|
+
- **Async Reactor**: All execution within `Async { }` blocks (Fiber scheduler)
|
|
390
|
+
- **Global Semaphore**: Limits total concurrent LLM calls across all agents
|
|
391
|
+
- **Local Semaphore**: Limits concurrent tool calls per agent
|
|
392
|
+
- **Parallel Tool Execution**: Tools execute concurrently within semaphore limits
|
|
393
|
+
- **Fiber-Safe Logging**: LogStream designed for concurrent access
|
|
394
|
+
|
|
395
|
+
## Plugin Architecture
|
|
396
|
+
|
|
397
|
+
```
|
|
398
|
+
Plugin Registration → PluginRegistry
|
|
399
|
+
↓
|
|
400
|
+
Plugin Lifecycle Hooks:
|
|
401
|
+
- on_agent_initialized (create storage, register tools)
|
|
402
|
+
- on_user_message (semantic skill discovery)
|
|
403
|
+
- system_prompt_contribution (add memory guidance)
|
|
404
|
+
- serialize_config (preserve config when cloning)
|
|
405
|
+
↓
|
|
406
|
+
Tool Creation: plugin.create_tool(tool_name, context)
|
|
407
|
+
↓
|
|
408
|
+
Tool execution within Agent::Chat
|
|
409
|
+
```
|