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.
- checksums.yaml +4 -4
- data/.envrc +1 -0
- data/.loki +60 -0
- data/.quality/reek_baseline.txt +43 -0
- data/.rubocop.yml +5 -167
- data/CHANGELOG.md +54 -0
- data/README.md +61 -0
- data/Rakefile +28 -12
- data/docs/api/core/index.md +1 -0
- data/docs/api/core/network.md +31 -1
- data/docs/api/core/robot.md +91 -5
- data/docs/api/errors.md +47 -2
- data/docs/api/index.md +3 -0
- data/docs/architecture/core-concepts.md +40 -0
- data/docs/architecture/network-orchestration.md +8 -0
- data/docs/architecture/robot-execution.md +1 -1
- data/docs/getting-started/configuration.md +20 -1
- data/docs/guides/building-robots.md +39 -1
- data/docs/guides/creating-networks.md +6 -1
- data/docs/guides/hooks.md +997 -0
- data/docs/guides/index.md +5 -0
- data/docs/guides/knowledge.md +2 -2
- data/docs/guides/observability.md +74 -7
- data/docs/guides/using-tools.md +69 -0
- data/docs/index.md +1 -1
- data/examples/03_network.rb +11 -2
- data/examples/34_agentskills.rb +0 -0
- data/examples/35_hooks.rb +256 -0
- data/examples/README.md +7 -0
- data/examples/common.rb +7 -3
- data/examples/xyzzy.rb +90 -0
- data/lib/robot_lab/agent_skill.rb +5 -4
- data/lib/robot_lab/budget/ledger.rb +98 -0
- data/lib/robot_lab/capabilities.rb +84 -0
- data/lib/robot_lab/config/defaults.yml +10 -0
- data/lib/robot_lab/config.rb +4 -4
- data/lib/robot_lab/error.rb +34 -4
- data/lib/robot_lab/errors.rb +45 -0
- data/lib/robot_lab/hook.rb +79 -0
- data/lib/robot_lab/hook_context.rb +194 -0
- data/lib/robot_lab/hook_registry.rb +55 -0
- data/lib/robot_lab/hooks.rb +87 -0
- data/lib/robot_lab/mcp/connection_poller.rb +2 -2
- data/lib/robot_lab/narrator.rb +87 -0
- data/lib/robot_lab/network.rb +77 -20
- data/lib/robot_lab/robot/budget.rb +89 -0
- data/lib/robot_lab/robot/bus_messaging.rb +76 -12
- data/lib/robot_lab/robot/hooking.rb +56 -0
- data/lib/robot_lab/robot/mcp_management.rb +8 -2
- data/lib/robot_lab/robot/template_rendering.rb +2 -2
- data/lib/robot_lab/robot.rb +211 -88
- data/lib/robot_lab/run_config.rb +24 -5
- data/lib/robot_lab/runnable.rb +51 -0
- data/lib/robot_lab/sandbox/null.rb +13 -0
- data/lib/robot_lab/sandbox/seatbelt.rb +104 -0
- data/lib/robot_lab/sandbox.rb +52 -0
- data/lib/robot_lab/script_tool.rb +60 -2
- data/lib/robot_lab/task.rb +26 -20
- data/lib/robot_lab/tool.rb +52 -11
- data/lib/robot_lab/version.rb +1 -1
- data/lib/robot_lab.rb +49 -0
- data/mkdocs.yml +1 -0
- metadata +36 -99
- data/examples/temp.md +0 -51
- data/site/404.html +0 -2300
- data/site/api/core/index.html +0 -2706
- data/site/api/core/memory/index.html +0 -3793
- data/site/api/core/network/index.html +0 -3500
- data/site/api/core/robot/index.html +0 -4566
- data/site/api/core/state/index.html +0 -3390
- data/site/api/core/tool/index.html +0 -3843
- data/site/api/index.html +0 -2635
- data/site/api/mcp/client/index.html +0 -3435
- data/site/api/mcp/index.html +0 -2783
- data/site/api/mcp/server/index.html +0 -3252
- data/site/api/mcp/transports/index.html +0 -3352
- data/site/api/messages/index.html +0 -2641
- data/site/api/messages/text-message/index.html +0 -3087
- data/site/api/messages/tool-call-message/index.html +0 -3159
- data/site/api/messages/tool-result-message/index.html +0 -3252
- data/site/api/messages/user-message/index.html +0 -3212
- data/site/api/streaming/context/index.html +0 -3282
- data/site/api/streaming/events/index.html +0 -3347
- data/site/api/streaming/index.html +0 -2738
- data/site/architecture/core-concepts/index.html +0 -3757
- data/site/architecture/index.html +0 -2797
- data/site/architecture/message-flow/index.html +0 -3238
- data/site/architecture/network-orchestration/index.html +0 -3433
- data/site/architecture/robot-execution/index.html +0 -3140
- data/site/architecture/state-management/index.html +0 -3498
- data/site/assets/css/custom.css +0 -56
- data/site/assets/images/favicon.png +0 -0
- data/site/assets/images/robot_lab.jpg +0 -0
- data/site/assets/javascripts/bundle.79ae519e.min.js +0 -16
- data/site/assets/javascripts/bundle.79ae519e.min.js.map +0 -7
- data/site/assets/javascripts/lunr/min/lunr.ar.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.da.min.js +0 -18
- data/site/assets/javascripts/lunr/min/lunr.de.min.js +0 -18
- data/site/assets/javascripts/lunr/min/lunr.du.min.js +0 -18
- data/site/assets/javascripts/lunr/min/lunr.el.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.es.min.js +0 -18
- data/site/assets/javascripts/lunr/min/lunr.fi.min.js +0 -18
- data/site/assets/javascripts/lunr/min/lunr.fr.min.js +0 -18
- data/site/assets/javascripts/lunr/min/lunr.he.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.hi.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.hu.min.js +0 -18
- data/site/assets/javascripts/lunr/min/lunr.hy.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.it.min.js +0 -18
- data/site/assets/javascripts/lunr/min/lunr.ja.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.jp.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.kn.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.ko.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.multi.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.nl.min.js +0 -18
- data/site/assets/javascripts/lunr/min/lunr.no.min.js +0 -18
- data/site/assets/javascripts/lunr/min/lunr.pt.min.js +0 -18
- data/site/assets/javascripts/lunr/min/lunr.ro.min.js +0 -18
- data/site/assets/javascripts/lunr/min/lunr.ru.min.js +0 -18
- data/site/assets/javascripts/lunr/min/lunr.sa.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.sv.min.js +0 -18
- data/site/assets/javascripts/lunr/min/lunr.ta.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.te.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.th.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.tr.min.js +0 -18
- data/site/assets/javascripts/lunr/min/lunr.vi.min.js +0 -1
- data/site/assets/javascripts/lunr/min/lunr.zh.min.js +0 -1
- data/site/assets/javascripts/lunr/tinyseg.js +0 -206
- data/site/assets/javascripts/lunr/wordcut.js +0 -6708
- data/site/assets/javascripts/workers/search.2c215733.min.js +0 -42
- data/site/assets/javascripts/workers/search.2c215733.min.js.map +0 -7
- data/site/assets/stylesheets/main.484c7ddc.min.css +0 -1
- data/site/assets/stylesheets/main.484c7ddc.min.css.map +0 -1
- data/site/assets/stylesheets/palette.ab4e12ef.min.css +0 -1
- data/site/assets/stylesheets/palette.ab4e12ef.min.css.map +0 -1
- data/site/concepts/index.html +0 -3455
- data/site/examples/basic-chat/index.html +0 -2880
- data/site/examples/index.html +0 -2907
- data/site/examples/mcp-server/index.html +0 -3018
- data/site/examples/multi-robot-network/index.html +0 -3131
- data/site/examples/rails-application/index.html +0 -3329
- data/site/examples/tool-usage/index.html +0 -3085
- data/site/getting-started/configuration/index.html +0 -3745
- data/site/getting-started/index.html +0 -2572
- data/site/getting-started/installation/index.html +0 -2981
- data/site/getting-started/quick-start/index.html +0 -2942
- data/site/guides/building-robots/index.html +0 -4290
- data/site/guides/creating-networks/index.html +0 -3858
- data/site/guides/index.html +0 -2586
- data/site/guides/mcp-integration/index.html +0 -3581
- data/site/guides/memory/index.html +0 -3586
- data/site/guides/rails-integration/index.html +0 -4019
- data/site/guides/streaming/index.html +0 -3157
- data/site/guides/using-tools/index.html +0 -3802
- data/site/index.html +0 -2671
- data/site/search/search_index.json +0 -1
- data/site/sitemap.xml +0 -183
- data/site/sitemap.xml.gz +0 -0
- 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.
|
|
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
|
-
-
|
|
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/
|
|
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.
|
|
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.
|