robot_lab 0.2.1 → 0.2.6

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 (159) hide show
  1. checksums.yaml +4 -4
  2. data/.envrc +1 -0
  3. data/.loki +60 -0
  4. data/.quality/reek_baseline.txt +43 -0
  5. data/.rubocop.yml +5 -167
  6. data/CHANGELOG.md +54 -0
  7. data/README.md +61 -0
  8. data/Rakefile +28 -12
  9. data/docs/api/core/index.md +1 -0
  10. data/docs/api/core/network.md +31 -1
  11. data/docs/api/core/robot.md +91 -5
  12. data/docs/api/errors.md +47 -2
  13. data/docs/api/index.md +3 -0
  14. data/docs/architecture/core-concepts.md +40 -0
  15. data/docs/architecture/network-orchestration.md +8 -0
  16. data/docs/architecture/robot-execution.md +1 -1
  17. data/docs/getting-started/configuration.md +20 -1
  18. data/docs/guides/building-robots.md +39 -1
  19. data/docs/guides/creating-networks.md +6 -1
  20. data/docs/guides/hooks.md +997 -0
  21. data/docs/guides/index.md +5 -0
  22. data/docs/guides/knowledge.md +2 -2
  23. data/docs/guides/observability.md +74 -7
  24. data/docs/guides/using-tools.md +69 -0
  25. data/docs/index.md +1 -1
  26. data/examples/03_network.rb +11 -2
  27. data/examples/34_agentskills.rb +0 -0
  28. data/examples/35_hooks.rb +256 -0
  29. data/examples/README.md +7 -0
  30. data/examples/common.rb +7 -3
  31. data/examples/xyzzy.rb +90 -0
  32. data/lib/robot_lab/agent_skill.rb +5 -4
  33. data/lib/robot_lab/budget/ledger.rb +98 -0
  34. data/lib/robot_lab/capabilities.rb +84 -0
  35. data/lib/robot_lab/config/defaults.yml +10 -0
  36. data/lib/robot_lab/config.rb +4 -4
  37. data/lib/robot_lab/error.rb +34 -4
  38. data/lib/robot_lab/errors.rb +45 -0
  39. data/lib/robot_lab/hook.rb +79 -0
  40. data/lib/robot_lab/hook_context.rb +194 -0
  41. data/lib/robot_lab/hook_registry.rb +55 -0
  42. data/lib/robot_lab/hooks.rb +87 -0
  43. data/lib/robot_lab/mcp/connection_poller.rb +2 -2
  44. data/lib/robot_lab/narrator.rb +87 -0
  45. data/lib/robot_lab/network.rb +77 -20
  46. data/lib/robot_lab/robot/budget.rb +89 -0
  47. data/lib/robot_lab/robot/bus_messaging.rb +76 -12
  48. data/lib/robot_lab/robot/hooking.rb +56 -0
  49. data/lib/robot_lab/robot/mcp_management.rb +8 -2
  50. data/lib/robot_lab/robot/template_rendering.rb +2 -2
  51. data/lib/robot_lab/robot.rb +211 -88
  52. data/lib/robot_lab/run_config.rb +24 -5
  53. data/lib/robot_lab/runnable.rb +51 -0
  54. data/lib/robot_lab/sandbox/null.rb +13 -0
  55. data/lib/robot_lab/sandbox/seatbelt.rb +104 -0
  56. data/lib/robot_lab/sandbox.rb +52 -0
  57. data/lib/robot_lab/script_tool.rb +60 -2
  58. data/lib/robot_lab/task.rb +26 -20
  59. data/lib/robot_lab/tool.rb +52 -11
  60. data/lib/robot_lab/version.rb +1 -1
  61. data/lib/robot_lab.rb +49 -0
  62. data/mkdocs.yml +1 -0
  63. metadata +36 -99
  64. data/examples/temp.md +0 -51
  65. data/site/404.html +0 -2300
  66. data/site/api/core/index.html +0 -2706
  67. data/site/api/core/memory/index.html +0 -3793
  68. data/site/api/core/network/index.html +0 -3500
  69. data/site/api/core/robot/index.html +0 -4566
  70. data/site/api/core/state/index.html +0 -3390
  71. data/site/api/core/tool/index.html +0 -3843
  72. data/site/api/index.html +0 -2635
  73. data/site/api/mcp/client/index.html +0 -3435
  74. data/site/api/mcp/index.html +0 -2783
  75. data/site/api/mcp/server/index.html +0 -3252
  76. data/site/api/mcp/transports/index.html +0 -3352
  77. data/site/api/messages/index.html +0 -2641
  78. data/site/api/messages/text-message/index.html +0 -3087
  79. data/site/api/messages/tool-call-message/index.html +0 -3159
  80. data/site/api/messages/tool-result-message/index.html +0 -3252
  81. data/site/api/messages/user-message/index.html +0 -3212
  82. data/site/api/streaming/context/index.html +0 -3282
  83. data/site/api/streaming/events/index.html +0 -3347
  84. data/site/api/streaming/index.html +0 -2738
  85. data/site/architecture/core-concepts/index.html +0 -3757
  86. data/site/architecture/index.html +0 -2797
  87. data/site/architecture/message-flow/index.html +0 -3238
  88. data/site/architecture/network-orchestration/index.html +0 -3433
  89. data/site/architecture/robot-execution/index.html +0 -3140
  90. data/site/architecture/state-management/index.html +0 -3498
  91. data/site/assets/css/custom.css +0 -56
  92. data/site/assets/images/favicon.png +0 -0
  93. data/site/assets/images/robot_lab.jpg +0 -0
  94. data/site/assets/javascripts/bundle.79ae519e.min.js +0 -16
  95. data/site/assets/javascripts/bundle.79ae519e.min.js.map +0 -7
  96. data/site/assets/javascripts/lunr/min/lunr.ar.min.js +0 -1
  97. data/site/assets/javascripts/lunr/min/lunr.da.min.js +0 -18
  98. data/site/assets/javascripts/lunr/min/lunr.de.min.js +0 -18
  99. data/site/assets/javascripts/lunr/min/lunr.du.min.js +0 -18
  100. data/site/assets/javascripts/lunr/min/lunr.el.min.js +0 -1
  101. data/site/assets/javascripts/lunr/min/lunr.es.min.js +0 -18
  102. data/site/assets/javascripts/lunr/min/lunr.fi.min.js +0 -18
  103. data/site/assets/javascripts/lunr/min/lunr.fr.min.js +0 -18
  104. data/site/assets/javascripts/lunr/min/lunr.he.min.js +0 -1
  105. data/site/assets/javascripts/lunr/min/lunr.hi.min.js +0 -1
  106. data/site/assets/javascripts/lunr/min/lunr.hu.min.js +0 -18
  107. data/site/assets/javascripts/lunr/min/lunr.hy.min.js +0 -1
  108. data/site/assets/javascripts/lunr/min/lunr.it.min.js +0 -18
  109. data/site/assets/javascripts/lunr/min/lunr.ja.min.js +0 -1
  110. data/site/assets/javascripts/lunr/min/lunr.jp.min.js +0 -1
  111. data/site/assets/javascripts/lunr/min/lunr.kn.min.js +0 -1
  112. data/site/assets/javascripts/lunr/min/lunr.ko.min.js +0 -1
  113. data/site/assets/javascripts/lunr/min/lunr.multi.min.js +0 -1
  114. data/site/assets/javascripts/lunr/min/lunr.nl.min.js +0 -18
  115. data/site/assets/javascripts/lunr/min/lunr.no.min.js +0 -18
  116. data/site/assets/javascripts/lunr/min/lunr.pt.min.js +0 -18
  117. data/site/assets/javascripts/lunr/min/lunr.ro.min.js +0 -18
  118. data/site/assets/javascripts/lunr/min/lunr.ru.min.js +0 -18
  119. data/site/assets/javascripts/lunr/min/lunr.sa.min.js +0 -1
  120. data/site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +0 -1
  121. data/site/assets/javascripts/lunr/min/lunr.sv.min.js +0 -18
  122. data/site/assets/javascripts/lunr/min/lunr.ta.min.js +0 -1
  123. data/site/assets/javascripts/lunr/min/lunr.te.min.js +0 -1
  124. data/site/assets/javascripts/lunr/min/lunr.th.min.js +0 -1
  125. data/site/assets/javascripts/lunr/min/lunr.tr.min.js +0 -18
  126. data/site/assets/javascripts/lunr/min/lunr.vi.min.js +0 -1
  127. data/site/assets/javascripts/lunr/min/lunr.zh.min.js +0 -1
  128. data/site/assets/javascripts/lunr/tinyseg.js +0 -206
  129. data/site/assets/javascripts/lunr/wordcut.js +0 -6708
  130. data/site/assets/javascripts/workers/search.2c215733.min.js +0 -42
  131. data/site/assets/javascripts/workers/search.2c215733.min.js.map +0 -7
  132. data/site/assets/stylesheets/main.484c7ddc.min.css +0 -1
  133. data/site/assets/stylesheets/main.484c7ddc.min.css.map +0 -1
  134. data/site/assets/stylesheets/palette.ab4e12ef.min.css +0 -1
  135. data/site/assets/stylesheets/palette.ab4e12ef.min.css.map +0 -1
  136. data/site/concepts/index.html +0 -3455
  137. data/site/examples/basic-chat/index.html +0 -2880
  138. data/site/examples/index.html +0 -2907
  139. data/site/examples/mcp-server/index.html +0 -3018
  140. data/site/examples/multi-robot-network/index.html +0 -3131
  141. data/site/examples/rails-application/index.html +0 -3329
  142. data/site/examples/tool-usage/index.html +0 -3085
  143. data/site/getting-started/configuration/index.html +0 -3745
  144. data/site/getting-started/index.html +0 -2572
  145. data/site/getting-started/installation/index.html +0 -2981
  146. data/site/getting-started/quick-start/index.html +0 -2942
  147. data/site/guides/building-robots/index.html +0 -4290
  148. data/site/guides/creating-networks/index.html +0 -3858
  149. data/site/guides/index.html +0 -2586
  150. data/site/guides/mcp-integration/index.html +0 -3581
  151. data/site/guides/memory/index.html +0 -3586
  152. data/site/guides/rails-integration/index.html +0 -4019
  153. data/site/guides/streaming/index.html +0 -3157
  154. data/site/guides/using-tools/index.html +0 -3802
  155. data/site/index.html +0 -2671
  156. data/site/search/search_index.json +0 -1
  157. data/site/sitemap.xml +0 -183
  158. data/site/sitemap.xml.gz +0 -0
  159. data/site/tags.json +0 -1
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: robot_lab
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dewayne VanHoozer
@@ -149,6 +149,20 @@ dependencies:
149
149
  - - "~>"
150
150
  - !ruby/object:Gem::Version
151
151
  version: '0.4'
152
+ - !ruby/object:Gem::Dependency
153
+ name: ractor_queue
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '0.2'
159
+ type: :runtime
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '0.2'
152
166
  - !ruby/object:Gem::Dependency
153
167
  name: async-http
154
168
  requirement: !ruby/object:Gem::Requirement
@@ -186,7 +200,7 @@ description: |
186
200
  durable learning (robot_lab-durable), Ractor concurrency (robot_lab-ractor), and
187
201
  document storage (robot_lab-document_store).
188
202
  email:
189
- - dewayne@vanhoozer.me
203
+ - dvanhoozer@gmail.com
190
204
  executables: []
191
205
  extensions: []
192
206
  extra_rdoc_files: []
@@ -201,6 +215,8 @@ files:
201
215
  - ".envrc"
202
216
  - ".github/workflows/deploy-github-pages.yml"
203
217
  - ".irbrc"
218
+ - ".loki"
219
+ - ".quality/reek_baseline.txt"
204
220
  - ".rubocop.yml"
205
221
  - CHANGELOG.md
206
222
  - CLAUDE.md
@@ -252,6 +268,7 @@ files:
252
268
  - docs/getting-started/quick-start.md
253
269
  - docs/guides/building-robots.md
254
270
  - docs/guides/creating-networks.md
271
+ - docs/guides/hooks.md
255
272
  - docs/guides/index.md
256
273
  - docs/guides/knowledge.md
257
274
  - docs/guides/mcp-integration.md
@@ -372,6 +389,7 @@ files:
372
389
  - examples/33_stock_generator.rb
373
390
  - examples/33_stock_predictor.rb
374
391
  - examples/34_agentskills.rb
392
+ - examples/35_hooks.rb
375
393
  - examples/README.md
376
394
  - examples/common.rb
377
395
  - examples/prompts/assistant.md
@@ -423,19 +441,26 @@ files:
423
441
  - examples/prompts/template_with_skills_test.md
424
442
  - examples/prompts/triage.md
425
443
  - examples/ruboruby.md
426
- - examples/temp.md
444
+ - examples/xyzzy.rb
427
445
  - lib/robot_lab.rb
428
446
  - lib/robot_lab/agent_skill.rb
429
447
  - lib/robot_lab/agent_skill_catalog.rb
430
448
  - lib/robot_lab/ask_user.rb
449
+ - lib/robot_lab/budget/ledger.rb
431
450
  - lib/robot_lab/bus_poller.rb
451
+ - lib/robot_lab/capabilities.rb
432
452
  - lib/robot_lab/config.rb
433
453
  - lib/robot_lab/config/defaults.yml
434
454
  - lib/robot_lab/convergence.rb
435
455
  - lib/robot_lab/delegation_future.rb
436
456
  - lib/robot_lab/doom_loop_detector.rb
437
457
  - lib/robot_lab/error.rb
458
+ - lib/robot_lab/errors.rb
438
459
  - lib/robot_lab/history_compressor.rb
460
+ - lib/robot_lab/hook.rb
461
+ - lib/robot_lab/hook_context.rb
462
+ - lib/robot_lab/hook_registry.rb
463
+ - lib/robot_lab/hooks.rb
439
464
  - lib/robot_lab/mcp/client.rb
440
465
  - lib/robot_lab/mcp/connection_poller.rb
441
466
  - lib/robot_lab/mcp/server.rb
@@ -448,16 +473,23 @@ files:
448
473
  - lib/robot_lab/memory.rb
449
474
  - lib/robot_lab/memory_change.rb
450
475
  - lib/robot_lab/message.rb
476
+ - lib/robot_lab/narrator.rb
451
477
  - lib/robot_lab/network.rb
452
478
  - lib/robot_lab/robot.rb
453
479
  - lib/robot_lab/robot/agent_skill_matching.rb
480
+ - lib/robot_lab/robot/budget.rb
454
481
  - lib/robot_lab/robot/bus_messaging.rb
455
482
  - lib/robot_lab/robot/history_search.rb
483
+ - lib/robot_lab/robot/hooking.rb
456
484
  - lib/robot_lab/robot/mcp_management.rb
457
485
  - lib/robot_lab/robot/template_rendering.rb
458
486
  - lib/robot_lab/robot_message.rb
459
487
  - lib/robot_lab/robot_result.rb
460
488
  - lib/robot_lab/run_config.rb
489
+ - lib/robot_lab/runnable.rb
490
+ - lib/robot_lab/sandbox.rb
491
+ - lib/robot_lab/sandbox/null.rb
492
+ - lib/robot_lab/sandbox/seatbelt.rb
461
493
  - lib/robot_lab/script_tool.rb
462
494
  - lib/robot_lab/state_proxy.rb
463
495
  - lib/robot_lab/streaming/context.rb
@@ -477,101 +509,6 @@ files:
477
509
  - robot_concurrency.md
478
510
  - sig/robot_lab.rbs
479
511
  - simple_acp_review.md
480
- - site/404.html
481
- - site/api/core/index.html
482
- - site/api/core/memory/index.html
483
- - site/api/core/network/index.html
484
- - site/api/core/robot/index.html
485
- - site/api/core/state/index.html
486
- - site/api/core/tool/index.html
487
- - site/api/index.html
488
- - site/api/mcp/client/index.html
489
- - site/api/mcp/index.html
490
- - site/api/mcp/server/index.html
491
- - site/api/mcp/transports/index.html
492
- - site/api/messages/index.html
493
- - site/api/messages/text-message/index.html
494
- - site/api/messages/tool-call-message/index.html
495
- - site/api/messages/tool-result-message/index.html
496
- - site/api/messages/user-message/index.html
497
- - site/api/streaming/context/index.html
498
- - site/api/streaming/events/index.html
499
- - site/api/streaming/index.html
500
- - site/architecture/core-concepts/index.html
501
- - site/architecture/index.html
502
- - site/architecture/message-flow/index.html
503
- - site/architecture/network-orchestration/index.html
504
- - site/architecture/robot-execution/index.html
505
- - site/architecture/state-management/index.html
506
- - site/assets/css/custom.css
507
- - site/assets/images/favicon.png
508
- - site/assets/images/robot_lab.jpg
509
- - site/assets/javascripts/bundle.79ae519e.min.js
510
- - site/assets/javascripts/bundle.79ae519e.min.js.map
511
- - site/assets/javascripts/lunr/min/lunr.ar.min.js
512
- - site/assets/javascripts/lunr/min/lunr.da.min.js
513
- - site/assets/javascripts/lunr/min/lunr.de.min.js
514
- - site/assets/javascripts/lunr/min/lunr.du.min.js
515
- - site/assets/javascripts/lunr/min/lunr.el.min.js
516
- - site/assets/javascripts/lunr/min/lunr.es.min.js
517
- - site/assets/javascripts/lunr/min/lunr.fi.min.js
518
- - site/assets/javascripts/lunr/min/lunr.fr.min.js
519
- - site/assets/javascripts/lunr/min/lunr.he.min.js
520
- - site/assets/javascripts/lunr/min/lunr.hi.min.js
521
- - site/assets/javascripts/lunr/min/lunr.hu.min.js
522
- - site/assets/javascripts/lunr/min/lunr.hy.min.js
523
- - site/assets/javascripts/lunr/min/lunr.it.min.js
524
- - site/assets/javascripts/lunr/min/lunr.ja.min.js
525
- - site/assets/javascripts/lunr/min/lunr.jp.min.js
526
- - site/assets/javascripts/lunr/min/lunr.kn.min.js
527
- - site/assets/javascripts/lunr/min/lunr.ko.min.js
528
- - site/assets/javascripts/lunr/min/lunr.multi.min.js
529
- - site/assets/javascripts/lunr/min/lunr.nl.min.js
530
- - site/assets/javascripts/lunr/min/lunr.no.min.js
531
- - site/assets/javascripts/lunr/min/lunr.pt.min.js
532
- - site/assets/javascripts/lunr/min/lunr.ro.min.js
533
- - site/assets/javascripts/lunr/min/lunr.ru.min.js
534
- - site/assets/javascripts/lunr/min/lunr.sa.min.js
535
- - site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js
536
- - site/assets/javascripts/lunr/min/lunr.sv.min.js
537
- - site/assets/javascripts/lunr/min/lunr.ta.min.js
538
- - site/assets/javascripts/lunr/min/lunr.te.min.js
539
- - site/assets/javascripts/lunr/min/lunr.th.min.js
540
- - site/assets/javascripts/lunr/min/lunr.tr.min.js
541
- - site/assets/javascripts/lunr/min/lunr.vi.min.js
542
- - site/assets/javascripts/lunr/min/lunr.zh.min.js
543
- - site/assets/javascripts/lunr/tinyseg.js
544
- - site/assets/javascripts/lunr/wordcut.js
545
- - site/assets/javascripts/workers/search.2c215733.min.js
546
- - site/assets/javascripts/workers/search.2c215733.min.js.map
547
- - site/assets/stylesheets/main.484c7ddc.min.css
548
- - site/assets/stylesheets/main.484c7ddc.min.css.map
549
- - site/assets/stylesheets/palette.ab4e12ef.min.css
550
- - site/assets/stylesheets/palette.ab4e12ef.min.css.map
551
- - site/concepts/index.html
552
- - site/examples/basic-chat/index.html
553
- - site/examples/index.html
554
- - site/examples/mcp-server/index.html
555
- - site/examples/multi-robot-network/index.html
556
- - site/examples/rails-application/index.html
557
- - site/examples/tool-usage/index.html
558
- - site/getting-started/configuration/index.html
559
- - site/getting-started/index.html
560
- - site/getting-started/installation/index.html
561
- - site/getting-started/quick-start/index.html
562
- - site/guides/building-robots/index.html
563
- - site/guides/creating-networks/index.html
564
- - site/guides/index.html
565
- - site/guides/mcp-integration/index.html
566
- - site/guides/memory/index.html
567
- - site/guides/rails-integration/index.html
568
- - site/guides/streaming/index.html
569
- - site/guides/using-tools/index.html
570
- - site/index.html
571
- - site/search/search_index.json
572
- - site/sitemap.xml
573
- - site/sitemap.xml.gz
574
- - site/tags.json
575
512
  - temp.md
576
513
  - tool_manifest_plan.md
577
514
  homepage: https://github.com/MadBomber/robot_lab
@@ -599,7 +536,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
599
536
  - !ruby/object:Gem::Version
600
537
  version: '0'
601
538
  requirements: []
602
- rubygems_version: 4.0.11
539
+ rubygems_version: 4.0.17
603
540
  specification_version: 4
604
541
  summary: Ruby framework for building and orchestrating multi-robot LLM workflows
605
542
  test_files: []
data/examples/temp.md DELETED
@@ -1,51 +0,0 @@
1
- ## RoboRuby Ruby AI Newsletter Summary – Issue 29 (April 30, 2026)
2
-
3
- ### 🔥 **Headline Story: Ruby's I/O Revolution for AI Workloads**
4
-
5
- Performance is now the narrative. [Carmine Paolino's work on Solid Queue](https://paolino.me/solid-queue-doesnt-need-a-thread-per-job/) shows fiber-based concurrency nets **12% throughput gains** for LLM streaming tasks—and [Shopify just proved it scales](https://speakerdeck.com/ioquatix/surviving-black-friday-329-billion-requests-with-falcon): 329 billion requests during 2025 Black Friday on Falcon (Samuel Williams' fiber-based server), peaking at 1.5M req/sec with zero drops. The message is clear: threads are legacy; fibers are the future for AI-heavy I/O patterns that spend 99% of their time waiting on tokens and webhooks. Ruby's defaults are catching up to its workloads.
6
-
7
- ---
8
-
9
- ### **Headline Story #2: Matz Ships a Compiler in a Month (with Claude)**
10
-
11
- [Spinel](https://github.com/matz/spinel)—Matz's new ahead-of-time Ruby compiler built in ~30 days with Claude as co-author—produces standalone native executables via whole-program type inference and optimized C emission. The kicker: it drops `eval`, `instance_eval`, `class_eval`, `send`, `method_missing`, and `define_method`. Dynamic metaprogramming was always about code compression for humans; with AI writing the alternative on your behalf, static Ruby becomes viable. At RubyKaigi, Matz revealed 1/3 of Ruby core already writes 50% of code with AI; he writes 100% his way. [Sam Ruby's Roundhouse transpiler](https://intertwingly.net/blog/2026/04/28/Round-Trip.html) proves the concept: two `make` commands from a fresh clone yield a real Rails app running on localhost as a single native binary. The door to Spinel-compiled Rails is open.
12
-
13
- ---
14
-
15
- ### **Headline Story #3: Rails Gets Its First AI-Native Command**
16
-
17
- [`rails query` shipped in Rails 8.2](https://github.com/basecamp/console1984/pull/154)—a CLI designed for AI agents to safely examine production databases with **structured JSON output** instead of unstructured strings. It prevents destructive commands, returns explicit `columns`, `rows`, and `meta`, provides pagination cursors and generated SQL, and emits auditable `query.rails` notifications. Lewis Buckley also released a [Claude Code skill](https://github.com/lewispb/rails-query-skill) teaching Claude to translate natural questions into `bin/rails query` calls. This is Rails designing agent-native interfaces directly into the runtime—not documentation, not third-party gems.
18
-
19
- ---
20
-
21
- ### **Notable Gems & Tools**
22
-
23
- - **[LLM Cost Tracker](https://github.com/sergey-homenko/llm_cost_tracker)** — Logs every LLM API call with token counts, costs, latency; includes a mountable dashboard and budget guardrails.
24
- - **[Ragents](https://github.com/activeagents/ragents)** — Ruby AI agent framework using Ractors for isolated parallel execution; near-linear scaling for agent swarms on Ruby 4.x.
25
- - **[Inkmark](https://github.com/yaroslav/inkmark)** — AI-first Markdown gem (built on Rust's pulldown-cmark) for RAG pipelines with heading-based chunking, block-aware truncation, and structured extraction.
26
- - **[Kernai](https://github.com/Eth3rnit3/kernai)** — Minimal agentic framework with deterministic loops, progressive skill discovery, and MCP integration for lightweight portability.
27
- - **[Kreuzcrawl](https://github.com/kreuzberg-dev/kreuzcrawl)** — High-performance Rust web crawler with Ruby bindings, MCP server for agents, and headless browser rendering.
28
- - **[llm.rb v5.4.0](https://0x1eef.github.io/x/llm.rb/file.CHANGELOG.html)** — Database persistence for contexts, agentic loops, context compaction, and scoped MCP client lifecycle.
29
-
30
- ---
31
-
32
- ### **Key Articles & Tutorials**
33
-
34
- - **[Ruby Concurrency: What Actually Happens](https://paolino.me/ruby-concurrency-what-actually-happens/)** — Carmine's definitive explainer on fibers vs. threads, addressing real questions from the community with corrections from core committer Jean Boussier.
35
- - **[PII Filtering for RubyLLM with Top Secret](https://thoughtbot.com/blog/ruby-llm-top-secret)** — Steve Polito on filtering sensitive data before sending to LLM providers; integrates cleanly with ActiveRecord chats.
36
- - **[Claude Code for the Semi-Reluctant Rails Developer](https://robbyonrails.com/claude-code-curious-rails-developers/)** — Robby Russell's practical guide on model selection, testing workflows, debugging, and minimal CLAUDE.md configuration.
37
- - **[Rails Security Auditor](https://maquina.app/documentation/ai-tools/rails-security-auditor/)** — Claude Code plugin that scans Rails apps across 10 security categories and can auto-fix issues.
38
-
39
- ---
40
-
41
- ### **Quick Takes**
42
-
43
- - 🎯 **New Announcements:** [Compound Engineering v3](https://x.com/trevin/status/2047066108763770998) unified the agentic plugin namespace; [Ruby CrewAI](https://github.com/MuhammadIbtisam/ruby-crewai) wraps CrewAI's HTTP API for multi-agent orchestration; [RailsPress](https://railspress.org/) is a mountable Rails 8 blogging engine with AI-agent-friendly REST APIs.
44
- - 🏗️ **Tools for Agents:** [Stripe Link for Agents](https://x.com/stripe/status/2049529444092838116) lets AI spend on user behalf via scoped merchant tokens; [Cursor's @cursor/sdk](https://cursor.com/blog/typescript-sdk) exposes its own runtime so you can run coding agents from CI/CD; [Cloudflare Artifacts](https://blog.cloudflare.com/artifacts-git-for-agents-beta/) is a Git-compatible versioned filesystem for agent state.
45
- - 📊 **Model Sizing:** Bojie Li's [Incompressible Knowledge Probes](https://01.me/research/ikp/) calibrate closed LLM sizes—GPT-5.5 at ~9T params, Claude Opus at ~4.7T, Gemini 2.5 Pro at ~1.2T.
46
- - 🎤 **Conference Alert:** [Rails World 2026](https://rubyonrails.org/2026/4/23/big-rails-world-2026-update-CFP) (Sept 23–24 in Austin) now emphasizes AI-native development; CFP closes May 16th.
47
- - 📈 **Community Pulse:** [2026 Rails Community Survey](https://blog.planetargon.com/blog/entries/the-2026-ruby-on-rails-community-survey-is-open) now asks about AI tool usage, JS frameworks, and infrastructure—open through July 3rd.
48
-
49
- ---
50
-
51
- **Bottom Line:** Ruby's ecosystem is doubling down on event-driven I/O, native compilation, and agent-native tooling. The era of threads-by-default and human-first interfaces is over. If your Rails app handles long-tail I/O or needs production-safe agent introspection, the framework is building for you now.