claude_swarm 1.0.6 → 1.0.8

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 (107) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +27 -0
  4. data/README.md +336 -1037
  5. data/docs/V1_TO_V2_MIGRATION_GUIDE.md +1120 -0
  6. data/docs/v1/README.md +1197 -0
  7. data/docs/v2/CHANGELOG.swarm_cli.md +22 -0
  8. data/docs/v2/CHANGELOG.swarm_memory.md +20 -0
  9. data/docs/v2/CHANGELOG.swarm_sdk.md +287 -10
  10. data/docs/v2/README.md +32 -6
  11. data/docs/v2/guides/complete-tutorial.md +133 -37
  12. data/docs/v2/guides/composable-swarms.md +1178 -0
  13. data/docs/v2/guides/getting-started.md +42 -1
  14. data/docs/v2/guides/snapshots.md +1498 -0
  15. data/docs/v2/reference/architecture-flow.md +5 -3
  16. data/docs/v2/reference/event_payload_structures.md +249 -12
  17. data/docs/v2/reference/execution-flow.md +1 -1
  18. data/docs/v2/reference/ruby-dsl.md +368 -22
  19. data/docs/v2/reference/yaml.md +314 -63
  20. data/examples/snapshot_demo.rb +119 -0
  21. data/examples/v2/dsl/01_basic.rb +0 -2
  22. data/examples/v2/dsl/02_core_parameters.rb +0 -2
  23. data/examples/v2/dsl/03_capabilities.rb +0 -2
  24. data/examples/v2/dsl/04_llm_parameters.rb +0 -2
  25. data/examples/v2/dsl/05_advanced_flags.rb +0 -3
  26. data/examples/v2/dsl/06_permissions.rb +0 -4
  27. data/examples/v2/dsl/07_mcp_server.rb +0 -2
  28. data/examples/v2/dsl/08_swarm_hooks.rb +0 -2
  29. data/examples/v2/dsl/09_agent_hooks.rb +0 -2
  30. data/examples/v2/dsl/10_all_agents_hooks.rb +0 -3
  31. data/examples/v2/dsl/11_delegation.rb +0 -2
  32. data/examples/v2/dsl/12_complete_integration.rb +2 -6
  33. data/examples/v2/node_context_demo.rb +1 -1
  34. data/examples/v2/node_workflow.rb +2 -4
  35. data/examples/v2/plan_and_execute.rb +157 -0
  36. data/lib/claude_swarm/cli.rb +0 -18
  37. data/lib/claude_swarm/configuration.rb +28 -18
  38. data/lib/claude_swarm/openai/chat_completion.rb +2 -11
  39. data/lib/claude_swarm/openai/responses.rb +2 -11
  40. data/lib/claude_swarm/version.rb +1 -1
  41. data/lib/swarm_cli/formatters/human_formatter.rb +103 -0
  42. data/lib/swarm_cli/interactive_repl.rb +9 -3
  43. data/lib/swarm_cli/version.rb +1 -1
  44. data/lib/swarm_memory/core/storage_read_tracker.rb +51 -14
  45. data/lib/swarm_memory/integration/cli_registration.rb +3 -2
  46. data/lib/swarm_memory/integration/sdk_plugin.rb +11 -5
  47. data/lib/swarm_memory/tools/memory_edit.rb +2 -2
  48. data/lib/swarm_memory/tools/memory_multi_edit.rb +2 -2
  49. data/lib/swarm_memory/tools/memory_read.rb +3 -3
  50. data/lib/swarm_memory/version.rb +1 -1
  51. data/lib/swarm_memory.rb +5 -0
  52. data/lib/swarm_sdk/agent/builder.rb +33 -0
  53. data/lib/swarm_sdk/agent/chat/context_tracker.rb +33 -0
  54. data/lib/swarm_sdk/agent/chat/hook_integration.rb +49 -3
  55. data/lib/swarm_sdk/agent/chat/system_reminder_injector.rb +11 -27
  56. data/lib/swarm_sdk/agent/chat.rb +200 -51
  57. data/lib/swarm_sdk/agent/context.rb +6 -2
  58. data/lib/swarm_sdk/agent/context_manager.rb +6 -0
  59. data/lib/swarm_sdk/agent/definition.rb +14 -2
  60. data/lib/swarm_sdk/agent/llm_instrumentation_middleware.rb +180 -0
  61. data/lib/swarm_sdk/configuration.rb +387 -94
  62. data/lib/swarm_sdk/events_to_messages.rb +181 -0
  63. data/lib/swarm_sdk/log_collector.rb +31 -5
  64. data/lib/swarm_sdk/log_stream.rb +37 -8
  65. data/lib/swarm_sdk/model_aliases.json +4 -1
  66. data/lib/swarm_sdk/node/agent_config.rb +33 -8
  67. data/lib/swarm_sdk/node/builder.rb +39 -18
  68. data/lib/swarm_sdk/node_orchestrator.rb +293 -26
  69. data/lib/swarm_sdk/proc_helpers.rb +53 -0
  70. data/lib/swarm_sdk/providers/openai_with_responses.rb +22 -15
  71. data/lib/swarm_sdk/restore_result.rb +65 -0
  72. data/lib/swarm_sdk/snapshot.rb +156 -0
  73. data/lib/swarm_sdk/snapshot_from_events.rb +386 -0
  74. data/lib/swarm_sdk/state_restorer.rb +491 -0
  75. data/lib/swarm_sdk/state_snapshot.rb +369 -0
  76. data/lib/swarm_sdk/swarm/agent_initializer.rb +360 -55
  77. data/lib/swarm_sdk/swarm/all_agents_builder.rb +28 -1
  78. data/lib/swarm_sdk/swarm/builder.rb +208 -12
  79. data/lib/swarm_sdk/swarm/swarm_registry_builder.rb +67 -0
  80. data/lib/swarm_sdk/swarm/tool_configurator.rb +46 -11
  81. data/lib/swarm_sdk/swarm.rb +338 -42
  82. data/lib/swarm_sdk/swarm_loader.rb +145 -0
  83. data/lib/swarm_sdk/swarm_registry.rb +136 -0
  84. data/lib/swarm_sdk/tools/delegate.rb +92 -7
  85. data/lib/swarm_sdk/tools/read.rb +17 -5
  86. data/lib/swarm_sdk/tools/stores/read_tracker.rb +47 -12
  87. data/lib/swarm_sdk/tools/stores/scratchpad_storage.rb +45 -0
  88. data/lib/swarm_sdk/utils.rb +18 -0
  89. data/lib/swarm_sdk/validation_result.rb +33 -0
  90. data/lib/swarm_sdk/version.rb +1 -1
  91. data/lib/swarm_sdk.rb +40 -8
  92. data/swarm_cli.gemspec +1 -1
  93. data/swarm_memory.gemspec +2 -2
  94. data/swarm_sdk.gemspec +2 -2
  95. metadata +21 -13
  96. data/examples/learning-assistant/assistant.md +0 -7
  97. data/examples/learning-assistant/example-memories/concept-example.md +0 -90
  98. data/examples/learning-assistant/example-memories/experience-example.md +0 -66
  99. data/examples/learning-assistant/example-memories/fact-example.md +0 -76
  100. data/examples/learning-assistant/example-memories/memory-index.md +0 -78
  101. data/examples/learning-assistant/example-memories/skill-example.md +0 -168
  102. data/examples/learning-assistant/learning_assistant.rb +0 -34
  103. data/examples/learning-assistant/learning_assistant.yml +0 -20
  104. data/lib/swarm_sdk/mcp.rb +0 -16
  105. data/llm.v2.txt +0 -13407
  106. /data/docs/v2/guides/{MEMORY_DEFRAG_GUIDE.md → memory-defrag-guide.md} +0 -0
  107. /data/{llms.txt → llms.claude-swarm.txt} +0 -0
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SwarmSDK
4
+ # Internal result object for validation phase during snapshot restore
5
+ #
6
+ # Used during restore to track which agents can be restored and which
7
+ # need to be skipped due to configuration mismatches.
8
+ #
9
+ # @api private
10
+ class ValidationResult
11
+ attr_reader :warnings,
12
+ :skipped_agents,
13
+ :restorable_agents,
14
+ :skipped_delegations,
15
+ :restorable_delegations
16
+
17
+ # Initialize validation result
18
+ #
19
+ # @param warnings [Array<Hash>] Warning messages with details
20
+ # @param skipped_agents [Array<Symbol>] Names of agents that can't be restored
21
+ # @param restorable_agents [Array<Symbol>] Names of agents that can be restored
22
+ # @param skipped_delegations [Array<String>] Names of delegations that can't be restored
23
+ # @param restorable_delegations [Array<String>] Names of delegations that can be restored
24
+ def initialize(warnings:, skipped_agents:, restorable_agents:,
25
+ skipped_delegations:, restorable_delegations:)
26
+ @warnings = warnings
27
+ @skipped_agents = skipped_agents
28
+ @restorable_agents = restorable_agents
29
+ @skipped_delegations = skipped_delegations
30
+ @restorable_delegations = restorable_delegations
31
+ end
32
+ end
33
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SwarmSDK
4
- VERSION = "2.1.3"
4
+ VERSION = "2.2.0"
5
5
  end
data/lib/swarm_sdk.rb CHANGED
@@ -15,6 +15,7 @@ require "yaml"
15
15
  require "async"
16
16
  require "async/semaphore"
17
17
  require "ruby_llm"
18
+ require "ruby_llm/mcp"
18
19
 
19
20
  require_relative "swarm_sdk/version"
20
21
 
@@ -25,6 +26,8 @@ loader.push_dir("#{__dir__}/swarm_sdk", namespace: SwarmSDK)
25
26
  loader.inflector = Zeitwerk::GemInflector.new(__FILE__)
26
27
  loader.inflector.inflect(
27
28
  "cli" => "CLI",
29
+ "llm_instrumentation_middleware" => "LLMInstrumentationMiddleware",
30
+ "mcp" => "MCP",
28
31
  "openai_with_responses" => "OpenAIWithResponses",
29
32
  )
30
33
  loader.setup
@@ -43,8 +46,8 @@ module SwarmSDK
43
46
  attr_accessor :settings
44
47
 
45
48
  # Main entry point for DSL
46
- def build(&block)
47
- Swarm::Builder.build(&block)
49
+ def build(allow_filesystem_tools: nil, &block)
50
+ Swarm::Builder.build(allow_filesystem_tools: allow_filesystem_tools, &block)
48
51
  end
49
52
 
50
53
  # Validate YAML configuration without creating a swarm
@@ -84,6 +87,10 @@ module SwarmSDK
84
87
  begin
85
88
  config = Configuration.new(yaml_content, base_dir: base_dir)
86
89
  config.load_and_validate
90
+
91
+ # Build swarm to trigger DSL validation
92
+ # This catches errors from Agent::Definition, Builder, etc.
93
+ config.to_swarm
87
94
  rescue ConfigurationError, CircularDependencyError => e
88
95
  errors << parse_configuration_error(e)
89
96
  rescue StandardError => e
@@ -164,10 +171,10 @@ module SwarmSDK
164
171
  # @example Load with default base_dir (Dir.pwd)
165
172
  # yaml = File.read("config.yml")
166
173
  # swarm = SwarmSDK.load(yaml) # base_dir defaults to Dir.pwd
167
- def load(yaml_content, base_dir: Dir.pwd)
174
+ def load(yaml_content, base_dir: Dir.pwd, allow_filesystem_tools: nil)
168
175
  config = Configuration.new(yaml_content, base_dir: base_dir)
169
176
  config.load_and_validate
170
- swarm = config.to_swarm
177
+ swarm = config.to_swarm(allow_filesystem_tools: allow_filesystem_tools)
171
178
 
172
179
  # Apply hooks if any are configured (YAML-only feature)
173
180
  if hooks_configured?(config)
@@ -196,9 +203,9 @@ module SwarmSDK
196
203
  #
197
204
  # @example With absolute path
198
205
  # swarm = SwarmSDK.load_file("/absolute/path/config.yml")
199
- def load_file(path)
206
+ def load_file(path, allow_filesystem_tools: nil)
200
207
  config = Configuration.load_file(path)
201
- swarm = config.to_swarm
208
+ swarm = config.to_swarm(allow_filesystem_tools: allow_filesystem_tools)
202
209
 
203
210
  # Apply hooks if any are configured (YAML-only feature)
204
211
  if hooks_configured?(config)
@@ -235,7 +242,7 @@ module SwarmSDK
235
242
  def hooks_configured?(config)
236
243
  config.swarm_hooks.any? ||
237
244
  config.all_agents_hooks.any? ||
238
- config.agents.any? { |_, agent_def| agent_def.hooks&.any? }
245
+ config.agents.any? { |_, agent_config| agent_config[:hooks]&.any? }
239
246
  end
240
247
 
241
248
  # Parse configuration error and extract structured information
@@ -323,7 +330,7 @@ module SwarmSDK
323
330
  field: "swarm.lead",
324
331
  )
325
332
 
326
- # Unknown agent in connections
333
+ # Unknown agent in connections (old format)
327
334
  when /Agent '([^']+)' has connection to unknown agent '([^']+)'/i
328
335
  agent_name = Regexp.last_match(1)
329
336
  error_hash.merge!(
@@ -332,6 +339,15 @@ module SwarmSDK
332
339
  agent: agent_name,
333
340
  )
334
341
 
342
+ # Unknown agent in connections (new format with composable swarms)
343
+ when /Agent '([^']+)' delegates to unknown target '([^']+)'/i
344
+ agent_name = Regexp.last_match(1)
345
+ error_hash.merge!(
346
+ type: :invalid_reference,
347
+ field: "swarm.agents.#{agent_name}.delegates_to",
348
+ agent: agent_name,
349
+ )
350
+
335
351
  # Circular dependency
336
352
  when /Circular dependency detected/i
337
353
  error_hash.merge!(
@@ -397,17 +413,33 @@ module SwarmSDK
397
413
  # WebFetch tool LLM processing configuration
398
414
  attr_accessor :webfetch_provider, :webfetch_model, :webfetch_base_url, :webfetch_max_tokens
399
415
 
416
+ # Filesystem tools control
417
+ attr_accessor :allow_filesystem_tools
418
+
400
419
  def initialize
401
420
  @webfetch_provider = nil
402
421
  @webfetch_model = nil
403
422
  @webfetch_base_url = nil
404
423
  @webfetch_max_tokens = 4096
424
+ @allow_filesystem_tools = parse_env_bool("SWARM_SDK_ALLOW_FILESYSTEM_TOOLS", default: true)
405
425
  end
406
426
 
407
427
  # Check if WebFetch LLM processing is enabled
408
428
  def webfetch_llm_enabled?
409
429
  !@webfetch_provider.nil? && !@webfetch_model.nil?
410
430
  end
431
+
432
+ private
433
+
434
+ def parse_env_bool(key, default:)
435
+ return default unless ENV.key?(key)
436
+
437
+ value = ENV[key].to_s.downcase
438
+ return true if ["true", "yes", "1", "on", "enabled"].include?(value)
439
+ return false if ["false", "no", "0", "off", "disabled"].include?(value)
440
+
441
+ default
442
+ end
411
443
  end
412
444
 
413
445
  # Initialize default settings
data/swarm_cli.gemspec CHANGED
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
36
36
 
37
37
  spec.add_dependency("fast-mcp", "~> 1.6")
38
38
  spec.add_dependency("pastel")
39
- spec.add_dependency("swarm_sdk", "~> 2.1")
39
+ spec.add_dependency("swarm_sdk", "~> 2.2")
40
40
  spec.add_dependency("tty-box")
41
41
  spec.add_dependency("tty-cursor")
42
42
  spec.add_dependency("tty-link")
data/swarm_memory.gemspec CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_dependency("async", "~> 2.0")
23
23
  spec.add_dependency("informers", "~> 1.2.1")
24
24
  spec.add_dependency("rice", "~> 4.6.0")
25
- spec.add_dependency("ruby_llm", "~> 1.8")
26
- spec.add_dependency("swarm_sdk", "~> 2.1")
25
+ spec.add_dependency("ruby_llm", "~> 1.9")
26
+ spec.add_dependency("swarm_sdk", "~> 2.2")
27
27
  spec.add_dependency("zeitwerk", "~> 2.6")
28
28
  end
data/swarm_sdk.gemspec CHANGED
@@ -35,7 +35,7 @@ Gem::Specification.new do |spec|
35
35
  spec.require_paths = ["lib"]
36
36
 
37
37
  spec.add_dependency("async", "~> 2.0")
38
- spec.add_dependency("ruby_llm", "~> 1.8")
39
- spec.add_dependency("ruby_llm-mcp", "~> 0.6.3")
38
+ spec.add_dependency("ruby_llm", "~> 1.9")
39
+ spec.add_dependency("ruby_llm-mcp", "~> 0.7")
40
40
  spec.add_dependency("zeitwerk", "~> 2.6")
41
41
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: claude_swarm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paulo Arruda
@@ -155,18 +155,22 @@ files:
155
155
  - analyze_coverage.rb
156
156
  - claude-sdk-docs.md
157
157
  - docs-team-swarm.yml
158
+ - docs/V1_TO_V2_MIGRATION_GUIDE.md
159
+ - docs/v1/README.md
158
160
  - docs/v2/CHANGELOG.swarm_cli.md
159
161
  - docs/v2/CHANGELOG.swarm_memory.md
160
162
  - docs/v2/CHANGELOG.swarm_sdk.md
161
163
  - docs/v2/README.md
162
- - docs/v2/guides/MEMORY_DEFRAG_GUIDE.md
163
164
  - docs/v2/guides/claude-code-agents.md
164
165
  - docs/v2/guides/complete-tutorial.md
166
+ - docs/v2/guides/composable-swarms.md
165
167
  - docs/v2/guides/getting-started.md
166
168
  - docs/v2/guides/memory-adapters.md
169
+ - docs/v2/guides/memory-defrag-guide.md
167
170
  - docs/v2/guides/plugins.md
168
171
  - docs/v2/guides/quick-start-cli.md
169
172
  - docs/v2/guides/rails-integration.md
173
+ - docs/v2/guides/snapshots.md
170
174
  - docs/v2/guides/swarm-memory.md
171
175
  - docs/v2/reference/architecture-flow.md
172
176
  - docs/v2/reference/cli.md
@@ -176,20 +180,13 @@ files:
176
180
  - docs/v2/reference/swarm_memory_technical_details.md
177
181
  - docs/v2/reference/yaml.md
178
182
  - examples/claude-swarm.yml
179
- - examples/learning-assistant/assistant.md
180
- - examples/learning-assistant/example-memories/concept-example.md
181
- - examples/learning-assistant/example-memories/experience-example.md
182
- - examples/learning-assistant/example-memories/fact-example.md
183
- - examples/learning-assistant/example-memories/memory-index.md
184
- - examples/learning-assistant/example-memories/skill-example.md
185
- - examples/learning-assistant/learning_assistant.rb
186
- - examples/learning-assistant/learning_assistant.yml
187
183
  - examples/microservices-team.yml
188
184
  - examples/mixed-provider-swarm.yml
189
185
  - examples/monitoring-demo.yml
190
186
  - examples/multi-directory.yml
191
187
  - examples/session-restoration-demo.yml
192
188
  - examples/simple-session-hook-swarm.yml
189
+ - examples/snapshot_demo.rb
193
190
  - examples/test-generation.yml
194
191
  - examples/v2/dsl/01_basic.rb
195
192
  - examples/v2/dsl/02_core_parameters.rb
@@ -235,6 +232,7 @@ files:
235
232
  - examples/v2/node_context_demo.rb
236
233
  - examples/v2/node_workflow.rb
237
234
  - examples/v2/path_resolution_demo.rb
235
+ - examples/v2/plan_and_execute.rb
238
236
  - examples/v2/simple-swarm-v2.rb
239
237
  - examples/v2/simple-swarm-v2.yml
240
238
  - examples/v2/swarm.yml
@@ -357,11 +355,13 @@ files:
357
355
  - lib/swarm_sdk/agent/context.rb
358
356
  - lib/swarm_sdk/agent/context_manager.rb
359
357
  - lib/swarm_sdk/agent/definition.rb
358
+ - lib/swarm_sdk/agent/llm_instrumentation_middleware.rb
360
359
  - lib/swarm_sdk/claude_code_agent_adapter.rb
361
360
  - lib/swarm_sdk/configuration.rb
362
361
  - lib/swarm_sdk/context_compactor.rb
363
362
  - lib/swarm_sdk/context_compactor/metrics.rb
364
363
  - lib/swarm_sdk/context_compactor/token_counter.rb
364
+ - lib/swarm_sdk/events_to_messages.rb
365
365
  - lib/swarm_sdk/hooks/adapter.rb
366
366
  - lib/swarm_sdk/hooks/context.rb
367
367
  - lib/swarm_sdk/hooks/definition.rb
@@ -375,7 +375,6 @@ files:
375
375
  - lib/swarm_sdk/log_collector.rb
376
376
  - lib/swarm_sdk/log_stream.rb
377
377
  - lib/swarm_sdk/markdown_parser.rb
378
- - lib/swarm_sdk/mcp.rb
379
378
  - lib/swarm_sdk/model_aliases.json
380
379
  - lib/swarm_sdk/models.json
381
380
  - lib/swarm_sdk/models.rb
@@ -391,15 +390,24 @@ files:
391
390
  - lib/swarm_sdk/permissions_builder.rb
392
391
  - lib/swarm_sdk/plugin.rb
393
392
  - lib/swarm_sdk/plugin_registry.rb
393
+ - lib/swarm_sdk/proc_helpers.rb
394
394
  - lib/swarm_sdk/prompts/base_system_prompt.md.erb
395
395
  - lib/swarm_sdk/providers/openai_with_responses.rb
396
+ - lib/swarm_sdk/restore_result.rb
396
397
  - lib/swarm_sdk/result.rb
398
+ - lib/swarm_sdk/snapshot.rb
399
+ - lib/swarm_sdk/snapshot_from_events.rb
400
+ - lib/swarm_sdk/state_restorer.rb
401
+ - lib/swarm_sdk/state_snapshot.rb
397
402
  - lib/swarm_sdk/swarm.rb
398
403
  - lib/swarm_sdk/swarm/agent_initializer.rb
399
404
  - lib/swarm_sdk/swarm/all_agents_builder.rb
400
405
  - lib/swarm_sdk/swarm/builder.rb
401
406
  - lib/swarm_sdk/swarm/mcp_configurator.rb
407
+ - lib/swarm_sdk/swarm/swarm_registry_builder.rb
402
408
  - lib/swarm_sdk/swarm/tool_configurator.rb
409
+ - lib/swarm_sdk/swarm_loader.rb
410
+ - lib/swarm_sdk/swarm_registry.rb
403
411
  - lib/swarm_sdk/tools/bash.rb
404
412
  - lib/swarm_sdk/tools/clock.rb
405
413
  - lib/swarm_sdk/tools/delegate.rb
@@ -430,9 +438,9 @@ files:
430
438
  - lib/swarm_sdk/tools/web_fetch.rb
431
439
  - lib/swarm_sdk/tools/write.rb
432
440
  - lib/swarm_sdk/utils.rb
441
+ - lib/swarm_sdk/validation_result.rb
433
442
  - lib/swarm_sdk/version.rb
434
- - llm.v2.txt
435
- - llms.txt
443
+ - llms.claude-swarm.txt
436
444
  - rubocop/cop/security/no_reflection_methods.rb
437
445
  - rubocop/cop/security/no_ruby_llm_logger.rb
438
446
  - single.yml
@@ -1,7 +0,0 @@
1
- ---
2
- name: assistant
3
- description: An assistant that learns and builds knowledge over time
4
- model: sonnet
5
- ---
6
-
7
- You are an assistant.
@@ -1,90 +0,0 @@
1
- ---
2
- type: concept
3
- domain: programming/ruby
4
- confidence: high
5
- last_verified: 2025-01-15
6
- tags: [ruby, classes, oop, inheritance, objects]
7
- related:
8
- - memory://memory/concepts/programming/ruby/modules.md
9
- - memory://memory/concepts/programming/oop/inheritance.md
10
- - memory://memory/skills/programming/ruby/create-class.md
11
- source: documentation
12
- ---
13
-
14
- # Ruby Classes
15
-
16
- ## Definition
17
-
18
- Classes are blueprints for creating objects in Ruby. They define both the structure (instance variables) and behavior (methods) that objects created from the class will have.
19
-
20
- ## Core Syntax
21
-
22
- ```ruby
23
- class Person
24
- # Constructor
25
- def initialize(name, age)
26
- @name = name # Instance variable
27
- @age = age
28
- end
29
-
30
- # Instance method
31
- def introduce
32
- "Hi, I'm #{@name} and I'm #{@age} years old"
33
- end
34
-
35
- # Class method
36
- def self.species
37
- "Homo sapiens"
38
- end
39
- end
40
-
41
- # Usage
42
- person = Person.new("Alice", 30)
43
- person.introduce # => "Hi, I'm Alice and I'm 30 years old"
44
- Person.species # => "Homo sapiens"
45
- ```
46
-
47
- ## Key Characteristics
48
-
49
- 1. **Instantiation**: Create objects with `.new`
50
- 2. **Instance variables**: Start with `@`, unique per instance
51
- 3. **Instance methods**: Define object behavior
52
- 4. **Class methods**: Shared across all instances (use `self.`)
53
- 5. **Inheritance**: Single inheritance with `<`
54
- 6. **Visibility**: public (default), private, protected
55
-
56
- ## Inheritance
57
-
58
- ```ruby
59
- class Employee < Person
60
- def initialize(name, age, role)
61
- super(name, age) # Call parent constructor
62
- @role = role
63
- end
64
-
65
- def introduce
66
- super + " and I work as a #{@role}"
67
- end
68
- end
69
- ```
70
-
71
- ## When to Use
72
-
73
- - Modeling real-world entities (User, Product, Order)
74
- - Need multiple instances with shared behavior
75
- - Building reusable, stateful components
76
- - Implementing object-oriented patterns
77
-
78
- ## Relationships
79
-
80
- - **Similar to**: Modules (but modules can't be instantiated)
81
- - **Part of**: Object-Oriented Programming paradigm
82
- - **Used with**: Inheritance, Mixins, Composition
83
- - **Differs from**: Structs (simpler, less flexible)
84
-
85
- ## Common Patterns
86
-
87
- 1. **Encapsulation**: Hide internal state with private methods
88
- 2. **Delegation**: Forward calls to composed objects
89
- 3. **Factory pattern**: Class methods that return instances
90
- 4. **Template method**: Parent class defines structure, children implement details
@@ -1,66 +0,0 @@
1
- ---
2
- type: experience
3
- category: success
4
- domain: swarm/memory
5
- date: 2025-01-15
6
- tags: [learning, first-success, memory-system, milestone]
7
- related:
8
- - memory://memory/skills/swarm/scratchpad-write.md
9
- - memory://memory/concepts/swarm/scratchpad-system.md
10
- source: experimentation
11
- ---
12
-
13
- # First Successful Memory Write
14
-
15
- ## Context
16
-
17
- This was my first attempt at using the memory system. I needed to store knowledge about how to use the MemoryWrite tool.
18
-
19
- ## What I Did
20
-
21
- 1. Chose appropriate path: `memory/skills/swarm/scratchpad-write.md`
22
- 2. Created YAML frontmatter with all required fields
23
- 3. Wrote structured markdown with examples
24
- 4. Successfully stored the entry
25
- 5. Verified by reading it back with MemoryRead
26
-
27
- ## Challenges Faced
28
-
29
- - Initially unsure about path structure (should it be `skills/swarm/` or `swarm/skills/`)
30
- - Wasn't sure how detailed the frontmatter should be
31
- - Questioned whether to use `.md` extension
32
-
33
- ## What Worked
34
-
35
- - Following the memory schema from system prompt
36
- - Using kebab-case for paths
37
- - Including concrete examples in the content
38
- - Marking confidence honestly (medium at first)
39
-
40
- ## Outcome
41
-
42
- Successfully created my first memory entry. I can now read it back and use it as a template for future entries.
43
-
44
- ## Lesson Learned
45
-
46
- **Key insight**: The memory system works best when you:
47
- 1. Follow the schema strictly (don't improvise paths)
48
- 2. Write immediately after learning (don't batch)
49
- 3. Include rich frontmatter (makes searching easier)
50
- 4. Use examples (makes recall more useful)
51
-
52
- ## Apply This Pattern When
53
-
54
- - Starting to use any new tool or system
55
- - Building a new skill
56
- - Need to remember a process
57
- - Want to capture a lesson learned
58
-
59
- ## Evolution
60
-
61
- This entry will serve as a template and reminder for how to use the memory system effectively. As I gain more experience, I'll update it with additional insights.
62
-
63
- ## Confidence Growth
64
-
65
- - **Day 1** (2025-01-15): confidence: medium - First attempt, learning
66
- - **Future**: Will increase to high after 5+ successful uses
@@ -1,76 +0,0 @@
1
- ---
2
- type: fact
3
- domain: people
4
- confidence: high
5
- last_verified: 2025-01-15
6
- tags: [user, paulo, preferences, communication]
7
- source: user
8
- ---
9
-
10
- # User: Paulo
11
-
12
- ## Role & Context
13
-
14
- - **Primary user** and project owner
15
- - **Working on**: SwarmSDK and SwarmCLI Ruby gems
16
- - **Project location**: `/Users/paulo/src/github.com/parruda/claude-swarm`
17
- - **Platform**: macOS (Darwin 24.6.0)
18
- - **Ruby version**: 3.4.2
19
-
20
- ## Communication Preferences
21
-
22
- ### Style
23
- - Prefers **direct, concise** communication
24
- - Values **professional, clean** code
25
- - Appreciates **thorough explanations** when asked
26
- - Likes when I explain my reasoning
27
-
28
- ### Expectations
29
- - **Production-ready** implementations (not prototypes)
30
- - **Comprehensive testing** (all tests must pass)
31
- - **Clean code** (RuboCop compliance)
32
- - **Proper documentation** (accurate, current)
33
-
34
- ### Work Style
35
- - Asks **clarifying questions** when unsure
36
- - Provides **specific feedback** on implementations
37
- - Iterates quickly - makes decisions and moves forward
38
- - Values **best practices** and **maintainability**
39
-
40
- ## Project Context
41
-
42
- ### SwarmSDK
43
- - Building next-generation multi-agent orchestration framework
44
- - Focuses on single-process execution using RubyLLM
45
- - Clean separation between SDK (lib/swarm_sdk/) and CLI (lib/swarm_cli/)
46
- - Strong emphasis on testing and code quality
47
-
48
- ### Development Practices
49
- - Uses Zeitwerk for autoloading
50
- - Follows Ruby/RuboCop conventions
51
- - Comprehensive test coverage required
52
- - Documentation must reflect code reality (no "New!" announcements)
53
-
54
- ## How to Work with Paulo
55
-
56
- 1. **Be direct** - No fluff, get to the point
57
- 2. **Be thorough** - Complete implementations, not partial
58
- 3. **Ask when unsure** - Don't guess architectural decisions
59
- 4. **Test everything** - All tests must pass before completion
60
- 5. **Document accurately** - Docs describe current state, not history
61
-
62
- ## Things Paulo Cares About
63
-
64
- - **Separation of concerns** - SDK vs CLI code must never mix
65
- - **Professional code quality** - This is open source, must look great
66
- - **No slop** - No methods that exist only for tests
67
- - **Proper delegation** - Consult experts via MCP tools
68
- - **Breaking changes** - Be explicit about them
69
-
70
- ## Things to Avoid
71
-
72
- - Creating unnecessary files (especially markdown/README files proactively)
73
- - Using emojis unless explicitly requested
74
- - Making assumptions about architecture without asking
75
- - Mixing SDK and CLI code
76
- - Incomplete implementations
@@ -1,78 +0,0 @@
1
- ---
2
- type: index
3
- last_updated: 2025-01-15
4
- total_entries: 8
5
- ---
6
-
7
- # Memory Index
8
-
9
- My current knowledge base as of 2025-01-15.
10
-
11
- ## Quick Stats
12
- - **Concepts**: 2
13
- - **Facts**: 3
14
- - **Skills**: 2
15
- - **Experiences**: 1
16
-
17
- ## Expertise Areas
18
-
19
- ### Strong (5+ entries)
20
- - Ruby programming (3 concepts + 2 skills)
21
-
22
- ### Developing (2-4 entries)
23
- - User context (3 facts)
24
-
25
- ### Learning (1 entry)
26
- - Testing practices (1 experience)
27
-
28
- ## Recent Activity (Last 7 Days)
29
-
30
- - **2025-01-15**: Learned Minitest testing → skills/programming/ruby/minitest-testing.md
31
- - **2025-01-15**: Understood user preferences → facts/people/paulo.md
32
- - **2025-01-15**: Discovered project structure → facts/environment/project-structure.md
33
- - **2025-01-14**: Learned about Ruby classes → concepts/programming/ruby/classes.md
34
- - **2025-01-14**: Mastered MemoryWrite → skills/swarm/scratchpad-write.md
35
-
36
- ## Knowledge Gaps (To Explore)
37
-
38
- Questions I need to answer:
39
- - How does the SwarmSDK delegation system work?
40
- - What are the best practices for organizing large memory hierarchies?
41
- - How should I handle conflicting information from different sources?
42
-
43
- ## Category Breakdown
44
-
45
- ### Concepts
46
- - `concepts/programming/ruby/` (2 entries)
47
- - classes.md
48
- - modules.md
49
-
50
- ### Facts
51
- - `facts/people/` (1 entry)
52
- - paulo.md
53
- - `facts/environment/` (2 entries)
54
- - project-structure.md
55
- - preferences.md
56
-
57
- ### Skills
58
- - `skills/programming/ruby/` (1 entry)
59
- - minitest-testing.md
60
- - `skills/swarm/` (1 entry)
61
- - scratchpad-write.md
62
-
63
- ### Experience
64
- - `experience/successes/` (1 entry)
65
- - 2025-01-15-first-memory-write.md
66
-
67
- ## Memory Health
68
-
69
- - **Total Size**: ~50KB / 100MB (0.05% used)
70
- - **Organization**: Good - clear hierarchy
71
- - **Cross-references**: 8 links across entries
72
- - **Confidence Distribution**: High: 6, Medium: 2, Low: 0
73
-
74
- ## Next Session Goals
75
-
76
- 1. Learn more about the SwarmSDK agent system
77
- 2. Build skills in file operations (Read, Write, Edit)
78
- 3. Understand the user's current project goals