robot_lab 0.3.0 → 0.5.0

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 (274) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +60 -0
  3. data/README.md +29 -19
  4. data/lib/robot_lab/errors.rb +4 -0
  5. data/lib/robot_lab/hook_context.rb +9 -2
  6. data/lib/robot_lab/mcp/registry.rb +99 -0
  7. data/lib/robot_lab/mcp/server.rb +47 -83
  8. data/lib/robot_lab/mcp/server_discovery.rb +22 -9
  9. data/lib/robot_lab/mcp.rb +259 -0
  10. data/lib/robot_lab/robot/mcp_management.rb +159 -105
  11. data/lib/robot_lab/robot/tool_call_gating.rb +144 -0
  12. data/lib/robot_lab/robot.rb +72 -99
  13. data/lib/robot_lab/run_config.rb +3 -2
  14. data/lib/robot_lab/tool.rb +8 -23
  15. data/lib/robot_lab/version.rb +1 -1
  16. data/lib/robot_lab.rb +1 -4
  17. metadata +16 -292
  18. data/.architecture/AGENTS.md +0 -32
  19. data/.architecture/config.yml +0 -8
  20. data/.architecture/members.yml +0 -60
  21. data/.architecture/reviews/feature-free-will.md +0 -490
  22. data/.architecture/reviews/overall-codebase.md +0 -427
  23. data/.claude/settings.local.json +0 -57
  24. data/.codex/config.toml +0 -2
  25. data/.envrc +0 -6
  26. data/.github/workflows/deploy-github-pages.yml +0 -52
  27. data/.irbrc +0 -6
  28. data/.loki +0 -65
  29. data/.quality/reek_baseline.txt +0 -43
  30. data/.rubocop.yml +0 -10
  31. data/Archspec.rb +0 -44
  32. data/CLAUDE.md +0 -141
  33. data/COMMITS.md +0 -196
  34. data/Rakefile +0 -193
  35. data/_typos.toml +0 -21
  36. data/agent2agent_review.md +0 -192
  37. data/agentf_improvements.md +0 -253
  38. data/agents.md +0 -14
  39. data/docs/api/core/index.md +0 -147
  40. data/docs/api/core/memory.md +0 -578
  41. data/docs/api/core/network.md +0 -553
  42. data/docs/api/core/result.md +0 -211
  43. data/docs/api/core/robot.md +0 -1667
  44. data/docs/api/core/state.md +0 -145
  45. data/docs/api/core/tool.md +0 -520
  46. data/docs/api/errors.md +0 -323
  47. data/docs/api/hooks.md +0 -469
  48. data/docs/api/index.md +0 -137
  49. data/docs/api/mcp/client.md +0 -387
  50. data/docs/api/mcp/index.md +0 -267
  51. data/docs/api/mcp/server.md +0 -252
  52. data/docs/api/mcp/transports.md +0 -339
  53. data/docs/api/messages/index.md +0 -126
  54. data/docs/api/messages/text-message.md +0 -170
  55. data/docs/api/messages/tool-call-message.md +0 -206
  56. data/docs/api/messages/tool-result-message.md +0 -242
  57. data/docs/api/messages/user-message.md +0 -232
  58. data/docs/api/skills.md +0 -423
  59. data/docs/api/streaming/context.md +0 -280
  60. data/docs/api/streaming/events.md +0 -185
  61. data/docs/api/streaming/index.md +0 -156
  62. data/docs/api/support.md +0 -846
  63. data/docs/architecture/core-concepts.md +0 -575
  64. data/docs/architecture/index.md +0 -252
  65. data/docs/architecture/message-flow.md +0 -366
  66. data/docs/architecture/network-orchestration.md +0 -478
  67. data/docs/architecture/robot-execution.md +0 -396
  68. data/docs/architecture/state-management.md +0 -410
  69. data/docs/assets/css/custom.css +0 -56
  70. data/docs/assets/images/robot_lab.jpg +0 -0
  71. data/docs/concepts.md +0 -641
  72. data/docs/examples/basic-chat.md +0 -258
  73. data/docs/examples/index.md +0 -425
  74. data/docs/examples/mcp-server.md +0 -403
  75. data/docs/examples/multi-robot-network.md +0 -476
  76. data/docs/examples/tool-usage.md +0 -468
  77. data/docs/getting-started/configuration.md +0 -645
  78. data/docs/getting-started/index.md +0 -56
  79. data/docs/getting-started/installation.md +0 -197
  80. data/docs/getting-started/quick-start.md +0 -293
  81. data/docs/guides/building-robots.md +0 -1187
  82. data/docs/guides/creating-networks.md +0 -736
  83. data/docs/guides/hooks.md +0 -1206
  84. data/docs/guides/index.md +0 -78
  85. data/docs/guides/knowledge.md +0 -219
  86. data/docs/guides/mcp-integration.md +0 -740
  87. data/docs/guides/memory.md +0 -458
  88. data/docs/guides/observability.md +0 -733
  89. data/docs/guides/streaming.md +0 -323
  90. data/docs/guides/using-tools.md +0 -780
  91. data/docs/index.md +0 -280
  92. data/docs/superpowers/plans/2026-05-06-agentskills.md +0 -1303
  93. data/docs/superpowers/specs/2026-05-06-agentskills-design.md +0 -247
  94. data/examples/.envrc +0 -3
  95. data/examples/01_simple_robot.rb +0 -31
  96. data/examples/02_tools.rb +0 -109
  97. data/examples/03_network.rb +0 -118
  98. data/examples/04_mcp.rb +0 -217
  99. data/examples/05_streaming.rb +0 -137
  100. data/examples/06_prompt_templates.rb +0 -325
  101. data/examples/07_network_memory.rb +0 -313
  102. data/examples/08_llm_config.rb +0 -162
  103. data/examples/09_chaining.rb +0 -251
  104. data/examples/10_memory.rb +0 -315
  105. data/examples/11_network_introspection.rb +0 -239
  106. data/examples/12_message_bus.rb +0 -67
  107. data/examples/13_spawn.rb +0 -85
  108. data/examples/14_rusty_circuit/.envrc +0 -1
  109. data/examples/14_rusty_circuit/.gitignore +0 -1
  110. data/examples/14_rusty_circuit/README.md +0 -1
  111. data/examples/14_rusty_circuit/comic.rb +0 -149
  112. data/examples/14_rusty_circuit/display.rb +0 -217
  113. data/examples/14_rusty_circuit/heckler.rb +0 -65
  114. data/examples/14_rusty_circuit/open_mic.rb +0 -132
  115. data/examples/14_rusty_circuit/prompts/open_mic_comic.md +0 -20
  116. data/examples/14_rusty_circuit/prompts/open_mic_heckler.md +0 -23
  117. data/examples/14_rusty_circuit/prompts/open_mic_scout.md +0 -20
  118. data/examples/14_rusty_circuit/scout.rb +0 -165
  119. data/examples/14_rusty_circuit/show.log +0 -234
  120. data/examples/15_memory_network_and_bus/.envrc +0 -1
  121. data/examples/15_memory_network_and_bus/README.md +0 -66
  122. data/examples/15_memory_network_and_bus/editor_in_chief.rb +0 -24
  123. data/examples/15_memory_network_and_bus/editorial_pipeline.rb +0 -213
  124. data/examples/15_memory_network_and_bus/linux_writer.rb +0 -80
  125. data/examples/15_memory_network_and_bus/os_editor.rb +0 -48
  126. data/examples/15_memory_network_and_bus/os_writer.rb +0 -49
  127. data/examples/15_memory_network_and_bus/output/combined_article.md +0 -11
  128. data/examples/15_memory_network_and_bus/output/final_article.md +0 -8
  129. data/examples/15_memory_network_and_bus/output/linux_draft.md +0 -7
  130. data/examples/15_memory_network_and_bus/output/mac_draft.md +0 -7
  131. data/examples/15_memory_network_and_bus/output/memory.json +0 -13
  132. data/examples/15_memory_network_and_bus/output/revision_1.md +0 -29
  133. data/examples/15_memory_network_and_bus/output/revision_2.md +0 -50
  134. data/examples/15_memory_network_and_bus/output/revision_3.md +0 -8
  135. data/examples/15_memory_network_and_bus/output/windows_draft.md +0 -7
  136. data/examples/15_memory_network_and_bus/prompts/os_advocate.md +0 -13
  137. data/examples/15_memory_network_and_bus/prompts/os_chief.md +0 -13
  138. data/examples/15_memory_network_and_bus/prompts/os_editor.md +0 -13
  139. data/examples/16_writers_room/.envrc +0 -1
  140. data/examples/16_writers_room/display.rb +0 -158
  141. data/examples/16_writers_room/output/.gitignore +0 -4
  142. data/examples/16_writers_room/output/README.md +0 -69
  143. data/examples/16_writers_room/output/opus_001.md +0 -263
  144. data/examples/16_writers_room/output/opus_001_notes.log +0 -470
  145. data/examples/16_writers_room/output/opus_002.md +0 -245
  146. data/examples/16_writers_room/output/opus_002_notes.log +0 -546
  147. data/examples/16_writers_room/output/opus_002_screenplay.md +0 -7989
  148. data/examples/16_writers_room/output/opus_002_screenplay_notes.md +0 -993
  149. data/examples/16_writers_room/prompts/screenplay_writer.md +0 -66
  150. data/examples/16_writers_room/prompts/writer.md +0 -37
  151. data/examples/16_writers_room/room.rb +0 -186
  152. data/examples/16_writers_room/tools.rb +0 -173
  153. data/examples/16_writers_room/writer.rb +0 -121
  154. data/examples/16_writers_room/writers_room.rb +0 -256
  155. data/examples/17_skills.rb +0 -234
  156. data/examples/18_rails/.envrc +0 -3
  157. data/examples/18_rails/.gitignore +0 -5
  158. data/examples/18_rails/Gemfile +0 -11
  159. data/examples/18_rails/README.md +0 -67
  160. data/examples/18_rails/Rakefile +0 -4
  161. data/examples/18_rails/app/controllers/application_controller.rb +0 -4
  162. data/examples/18_rails/app/controllers/chat_controller.rb +0 -50
  163. data/examples/18_rails/app/jobs/application_job.rb +0 -4
  164. data/examples/18_rails/app/jobs/robot_run_job.rb +0 -25
  165. data/examples/18_rails/app/models/application_record.rb +0 -5
  166. data/examples/18_rails/app/models/robot_lab_result.rb +0 -36
  167. data/examples/18_rails/app/models/robot_lab_thread.rb +0 -23
  168. data/examples/18_rails/app/robots/chat_robot.rb +0 -25
  169. data/examples/18_rails/app/tools/time_tool.rb +0 -9
  170. data/examples/18_rails/app/views/chat/_user_message.html.erb +0 -1
  171. data/examples/18_rails/app/views/chat/index.html.erb +0 -67
  172. data/examples/18_rails/app/views/layouts/application.html.erb +0 -49
  173. data/examples/18_rails/bin/dev +0 -7
  174. data/examples/18_rails/bin/rails +0 -6
  175. data/examples/18_rails/bin/setup +0 -15
  176. data/examples/18_rails/config/application.rb +0 -33
  177. data/examples/18_rails/config/cable.yml +0 -2
  178. data/examples/18_rails/config/database.yml +0 -5
  179. data/examples/18_rails/config/environment.rb +0 -4
  180. data/examples/18_rails/config/initializers/robot_lab.rb +0 -11
  181. data/examples/18_rails/config/routes.rb +0 -6
  182. data/examples/18_rails/config.ru +0 -4
  183. data/examples/18_rails/db/migrate/001_create_robot_lab_tables.rb +0 -32
  184. data/examples/19_token_tracking.rb +0 -138
  185. data/examples/20_circuit_breaker.rb +0 -147
  186. data/examples/21_learning_loop.rb +0 -181
  187. data/examples/22_context_compression.rb +0 -172
  188. data/examples/23_convergence.rb +0 -133
  189. data/examples/24_structured_delegation.rb +0 -151
  190. data/examples/25_history_search/conversation.jsonl +0 -30
  191. data/examples/25_history_search.rb +0 -133
  192. data/examples/26_document_store/api_versioning_adr.md +0 -52
  193. data/examples/26_document_store/incident_postmortem.md +0 -46
  194. data/examples/26_document_store/postgres_runbook.md +0 -49
  195. data/examples/26_document_store/redis_caching_guide.md +0 -48
  196. data/examples/26_document_store/sidekiq_guide.md +0 -51
  197. data/examples/26_document_store.rb +0 -140
  198. data/examples/27_incident_response/README.md +0 -65
  199. data/examples/27_incident_response/incident_response.rb +0 -261
  200. data/examples/28_mcp_discovery.rb +0 -113
  201. data/examples/29_ractor_tools.rb +0 -240
  202. data/examples/30_ractor_network.rb +0 -252
  203. data/examples/31_launch_assessment.rb +0 -246
  204. data/examples/32_newsletter_reader.rb +0 -193
  205. data/examples/33_stock_generator.rb +0 -80
  206. data/examples/33_stock_predictor.rb +0 -327
  207. data/examples/34_agentskills.rb +0 -76
  208. data/examples/35_hooks.rb +0 -266
  209. data/examples/README.md +0 -550
  210. data/examples/common.rb +0 -180
  211. data/examples/prompts/assistant.md +0 -5
  212. data/examples/prompts/audit_trail.md +0 -8
  213. data/examples/prompts/billing.md +0 -10
  214. data/examples/prompts/classifier.md +0 -7
  215. data/examples/prompts/comedian.md +0 -6
  216. data/examples/prompts/comedy_critic.md +0 -10
  217. data/examples/prompts/configurable.md +0 -9
  218. data/examples/prompts/dispatcher.md +0 -12
  219. data/examples/prompts/entity_extractor.md +0 -14
  220. data/examples/prompts/escalation.md +0 -42
  221. data/examples/prompts/frontmatter_mcp_test.md +0 -9
  222. data/examples/prompts/frontmatter_named_test.md +0 -5
  223. data/examples/prompts/frontmatter_tools_test.md +0 -6
  224. data/examples/prompts/general.md +0 -7
  225. data/examples/prompts/github_assistant.md +0 -14
  226. data/examples/prompts/helper.md +0 -4
  227. data/examples/prompts/incident_responder.md +0 -18
  228. data/examples/prompts/keyword_extractor.md +0 -11
  229. data/examples/prompts/llm_config_demo.md +0 -20
  230. data/examples/prompts/order_support.md +0 -35
  231. data/examples/prompts/os_advocate.md +0 -13
  232. data/examples/prompts/os_chief.md +0 -13
  233. data/examples/prompts/os_editor.md +0 -13
  234. data/examples/prompts/parameterized_main_test.md +0 -6
  235. data/examples/prompts/pii_redactor.md +0 -7
  236. data/examples/prompts/product_support.md +0 -37
  237. data/examples/prompts/runbook_protocol.md +0 -12
  238. data/examples/prompts/sentiment_analyzer.md +0 -12
  239. data/examples/prompts/skill_a_test.md +0 -4
  240. data/examples/prompts/skill_b_test.md +0 -4
  241. data/examples/prompts/skill_config_test.md +0 -5
  242. data/examples/prompts/skill_cycle_a_test.md +0 -6
  243. data/examples/prompts/skill_cycle_b_test.md +0 -6
  244. data/examples/prompts/skill_description_test.md +0 -4
  245. data/examples/prompts/skill_leaf_test.md +0 -4
  246. data/examples/prompts/skill_nested_test.md +0 -6
  247. data/examples/prompts/skill_refs_main_test.md +0 -6
  248. data/examples/prompts/skill_self_ref_test.md +0 -6
  249. data/examples/prompts/skill_with_mcp_test.md +0 -9
  250. data/examples/prompts/skill_with_params_test.md +0 -6
  251. data/examples/prompts/skill_with_robot_name_test.md +0 -5
  252. data/examples/prompts/skill_with_tools_test.md +0 -6
  253. data/examples/prompts/sre_compliance.md +0 -10
  254. data/examples/prompts/structured_output.md +0 -7
  255. data/examples/prompts/synthesizer.md +0 -17
  256. data/examples/prompts/technical.md +0 -10
  257. data/examples/prompts/template_with_skills_test.md +0 -6
  258. data/examples/prompts/triage.md +0 -22
  259. data/examples/ruboruby.md +0 -423
  260. data/examples/run_all.rb +0 -60
  261. data/examples/xyzzy.rb +0 -97
  262. data/lib/robot_lab/mcp/client.rb +0 -223
  263. data/lib/robot_lab/mcp/connection_poller.rb +0 -195
  264. data/lib/robot_lab/mcp/transports/base.rb +0 -64
  265. data/lib/robot_lab/mcp/transports/sse.rb +0 -120
  266. data/lib/robot_lab/mcp/transports/stdio.rb +0 -170
  267. data/lib/robot_lab/mcp/transports/streamable_http.rb +0 -141
  268. data/lib/robot_lab/mcp/transports/websocket.rb +0 -111
  269. data/logfile +0 -8
  270. data/mkdocs.yml +0 -209
  271. data/robot_concurrency.md +0 -38
  272. data/simple_acp_review.md +0 -298
  273. data/temp.md +0 -6
  274. data/tool_manifest_plan.md +0 -155
data/docs/index.md DELETED
@@ -1,280 +0,0 @@
1
- # RobotLab
2
-
3
- > [!CAUTION]
4
- > This gem is under active development. APIs and features may change without notice. See the [CHANGELOG](https://github.com/MadBomber/robot_lab/blob/main/CHANGELOG.md) for details.
5
-
6
- <table>
7
- <tr>
8
- <td width="50%" align="center" valign="top">
9
- <img src="assets/images/robot_lab.jpg" alt="RobotLab"><br>
10
- <em>"Build robots. Solve problems."</em>
11
- </td>
12
- <td width="50%" valign="top">
13
- RobotLab is a Ruby gem that enables you to build sophisticated AI applications using multiple specialized robots (LLM agents) that work together to accomplish complex tasks.<br><br>
14
- Each robot is backed by a persistent LLM chat, configured with keyword arguments, and run with a simple positional message. Robots can be orchestrated through networks with task-based pipelines, share information through a reactive memory system, and connect to external tools via the Model Context Protocol (MCP).
15
- </td>
16
- </tr>
17
- </table>
18
-
19
- ## Key Features
20
-
21
- <div class="grid cards" markdown>
22
-
23
- - :material-robot:{ .lg .middle } **Multi-Robot Architecture**
24
-
25
- ---
26
-
27
- Build applications with multiple specialized Robots (AI agents), each with persistent chat and memory.
28
-
29
- [:octicons-arrow-right-24: Learn more](architecture/core-concepts.md)
30
-
31
- - :material-transit-connection-variant:{ .lg .middle } **Network Orchestration**
32
-
33
- ---
34
-
35
- Connect robots in task-based pipelines using SimpleFlow with sequential, parallel, and conditional execution.
36
-
37
- [:octicons-arrow-right-24: Creating Networks](guides/creating-networks.md)
38
-
39
- - :material-file-document-outline:{ .lg .middle } **Prompt Templates**
40
-
41
- ---
42
-
43
- Self-contained `.md` files with YAML front matter that define a complete robot: prompt, tools, MCP, model, and skills.
44
-
45
- [:octicons-arrow-right-24: Building Robots](guides/building-robots.md)
46
-
47
- - :material-puzzle-outline:{ .lg .middle } **Composable Skills**
48
-
49
- ---
50
-
51
- Mix reusable prompt behaviors into any robot. Skills expand depth-first with automatic cycle detection and config cascading.
52
-
53
- [:octicons-arrow-right-24: Skills Guide](guides/building-robots.md#composable-skills)
54
-
55
- - :material-tools:{ .lg .middle } **Extensible Tools**
56
-
57
- ---
58
-
59
- Give robots custom capabilities via `RobotLab::Tool` subclasses with graceful error handling. Errors are returned to the LLM as plain text.
60
-
61
- [:octicons-arrow-right-24: Using Tools](guides/using-tools.md)
62
-
63
- - :material-account-question:{ .lg .middle } **Human-in-the-Loop**
64
-
65
- ---
66
-
67
- The `AskUser` tool lets robots ask users questions interactively with open-ended text, multiple choice, and default values.
68
-
69
- [:octicons-arrow-right-24: Using Tools](guides/using-tools.md)
70
-
71
- - :material-play-speed:{ .lg .middle } **Content Streaming**
72
-
73
- ---
74
-
75
- Stream LLM responses in real-time via stored `on_content:` callbacks, per-call blocks, or both together.
76
-
77
- [:octicons-arrow-right-24: Streaming Guide](guides/streaming.md)
78
-
79
- - :material-server-network:{ .lg .middle } **MCP Integration**
80
-
81
- ---
82
-
83
- Connect to Model Context Protocol servers to extend robot capabilities with external tools.
84
-
85
- [:octicons-arrow-right-24: MCP Guide](guides/mcp-integration.md)
86
-
87
- - :material-memory:{ .lg .middle } **Reactive Memory**
88
-
89
- ---
90
-
91
- Robots share data through a reactive key-value memory system with subscriptions, blocking reads, and optional Redis backend.
92
-
93
- [:octicons-arrow-right-24: Memory System](guides/memory.md)
94
-
95
- - :material-message-arrow-right-outline:{ .lg .middle } **Message Bus**
96
-
97
- ---
98
-
99
- Bidirectional, cyclic communication between robots via TypedBus for negotiation loops and convergence patterns.
100
-
101
- [:octicons-arrow-right-24: Message Bus](architecture/core-concepts.md#message-bus)
102
-
103
- - :material-creation:{ .lg .middle } **Dynamic Spawning**
104
-
105
- ---
106
-
107
- Robots create new specialist robots at runtime using `spawn`. The bus is created lazily with no upfront wiring required.
108
-
109
- [:octicons-arrow-right-24: Examples](examples/index.md#spawning-robots)
110
-
111
- - :material-layers-outline:{ .lg .middle } **Layered Configuration**
112
-
113
- ---
114
-
115
- Cascading config from YAML files, environment variables, and `RunConfig` objects that flow through the network-robot hierarchy.
116
-
117
- [:octicons-arrow-right-24: Configuration](getting-started/configuration.md)
118
-
119
- - :material-shield-check:{ .lg .middle } **Observability & Safety**
120
-
121
- ---
122
-
123
- Token tracking, `max_tool_rounds` circuit breaker, `doom_loop_threshold` pattern detection, and `auto_compact` context window management keep robots reliable in production.
124
-
125
- [:octicons-arrow-right-24: Observability Guide](guides/observability.md)
126
-
127
- - :material-brain:{ .lg .middle } **Runtime Skill Matching**
128
-
129
- ---
130
-
131
- `AgentSkillMatching` selects the most relevant `AgentSkill` files from a catalog directory via semantic similarity before each `run()`, injecting only what the robot needs.
132
-
133
- [:octicons-arrow-right-24: Using Tools](guides/using-tools.md)
134
-
135
- - :material-book-open-outline:{ .lg .middle } **Knowledge & Retrieval**
136
-
137
- ---
138
-
139
- `robot.search_history` for semantic search over conversation turns, and `memory.store_document` / `memory.search_documents` for embedding-based RAG.
140
-
141
- [:octicons-arrow-right-24: Knowledge Guide](guides/knowledge.md)
142
-
143
- </div>
144
-
145
- > [!NOTE]
146
- > A few of the features above need a gem the core `robot_lab` gem does not install.
147
- > **Knowledge & Retrieval** (`memory.store_document` / `memory.search_documents`)
148
- > and **Runtime Skill Matching** (`AgentSkill` catalogs) both require
149
- > `robot_lab-document_store`; the Redis backing for **Reactive Memory** requires
150
- > `redis`; Ractor parallelism requires `robot_lab-ractor`; and
151
- > `robot.compress_history` requires `classifier`. See
152
- > [Optional Dependencies](getting-started/installation.md#optional-dependencies).
153
-
154
- ## Extension Gems
155
-
156
- These optional gems extend RobotLab with additional capabilities:
157
-
158
- | Gem | What it adds |
159
- |-----|-------------|
160
- | [robot_lab-a2a](https://github.com/MadBomber/robot_lab-a2a) | Agent2Agent (A2A) protocol adapter over HTTP + SSE |
161
- | [robot_lab-audit](https://github.com/MadBomber/robot_lab-audit) | SQLite-backed execution audit log, wired through the Hook system |
162
- | [robot_lab-discovery](https://github.com/MadBomber/robot_lab-discovery) | Zero-configuration mDNS/DNS-SD robot discovery on the local network |
163
- | [robot_lab-document_store](https://github.com/MadBomber/robot_lab-document_store) | Embedding-based semantic document search powered by fastembed |
164
- | [robot_lab-durable](https://github.com/MadBomber/robot_lab-durable) | HTM-backed long-term memory — robots accumulate and recall learned facts across sessions |
165
- | [robot_lab-ractor](https://github.com/MadBomber/robot_lab-ractor) | CPU parallelism for `ractor_safe` tools and robot networks via Ruby Ractors |
166
- | [robot_lab-rails](https://github.com/MadBomber/robot_lab-rails) | Rails Engine, generators, `RobotLab::Job` base class, Turbo Stream broadcasting |
167
- | [robot_lab-to](https://github.com/MadBomber/robot_lab-to) | Autonomous overnight agent loop — iterate a robot toward an objective, committing each step |
168
- | [robot_lab-web](https://github.com/MadBomber/robot_lab-web) | Rails-free Sinatra + HTMX browser console that streams a robot's run over SSE |
169
-
170
- > [!NOTE]
171
- > The Rails Engine, generators, `RobotLab::Job`, and Turbo broadcasting are
172
- > **only** in `robot_lab-rails`. The core gem ships no Railtie and no generators.
173
- > The former `robot_lab-acp` gem is retired and superseded by `robot_lab-a2a`.
174
-
175
- ## Quick Example
176
-
177
- ```ruby
178
- require "robot_lab"
179
-
180
- # Configuration is automatic via environment variables, YAML files, or defaults.
181
- # Set API keys via env vars:
182
- # ROBOT_LAB_RUBY_LLM__ANTHROPIC_API_KEY=sk-ant-...
183
- #
184
- # Or place a config file at ~/.config/robot_lab/robot_lab.yml
185
- # (the filename repeats the app name; config.yml is never read). Keys go at the
186
- # top level, or under a section named for the current environment
187
- # (development:/test:/production:). Only a `defaults:` wrapper is ignored.
188
- # Access config values: RobotLab.config.ruby_llm.model #=> "claude-sonnet-4"
189
-
190
- # Create a robot with keyword arguments
191
- robot = RobotLab.build(
192
- name: "assistant",
193
- system_prompt: "You are a helpful assistant. Answer questions clearly and concisely.",
194
- model: "claude-sonnet-4"
195
- )
196
-
197
- # Run the robot with a positional string argument
198
- result = robot.run("What is the capital of France?")
199
-
200
- puts result.last_text_content
201
- # => "The capital of France is Paris."
202
-
203
- # Memory persists across runs
204
- robot.run("Remember that my favorite color is blue.")
205
- result = robot.run("What is my favorite color?")
206
- puts result.last_text_content
207
- # => "Your favorite color is blue."
208
-
209
- # Chaining configuration
210
- robot.with_instructions("Be extra concise.").with_temperature(0.3).run("Explain Ruby in one sentence.")
211
- ```
212
-
213
- > [!IMPORTANT]
214
- > `Robot#run` defaults to `tools: :none` and `mcp: :none`, so a plain
215
- > `robot.run("...")` sends the model **no tools** even when you attached them
216
- > with `local_tools:` or `mcp:` at build time. Ask for them on the run:
217
- >
218
- > ```ruby
219
- > robot.run("...", tools: :inherit) # attached local tools
220
- > robot.run("...", mcp: :inherit, tools: :inherit) # MCP servers and their tools
221
- > ```
222
-
223
- ## Supported LLM Providers
224
-
225
- RobotLab supports multiple LLM providers through the [ruby_llm](https://github.com/crmne/ruby_llm) library:
226
-
227
- | Provider | Models |
228
- |----------|--------|
229
- | **Anthropic** | Claude Opus 4, Claude Sonnet 4, Claude Haiku 3.5 |
230
- | **OpenAI** | GPT-4o, GPT-4, o1, o3 |
231
- | **Google** | Gemini 2.5 Pro, Gemini 2.5 Flash |
232
- | **DeepSeek** | DeepSeek V3, DeepSeek R1 |
233
- | **AWS Bedrock** | Claude models via AWS Bedrock |
234
- | **Google Vertex AI** | Gemini models via Vertex AI |
235
- | **Ollama** | Local models via Ollama |
236
- | **OpenRouter** | Multi-provider routing |
237
- | **Mistral** | Mistral Large, Mistral Medium |
238
- | **xAI** | Grok models |
239
-
240
- ## Installation
241
-
242
- Add RobotLab to your Gemfile:
243
-
244
- ```ruby
245
- gem "robot_lab"
246
- ```
247
-
248
- Or install directly:
249
-
250
- ```bash
251
- gem install robot_lab
252
- ```
253
-
254
- [:octicons-arrow-right-24: Full Installation Guide](getting-started/installation.md)
255
-
256
- ## Next Steps
257
-
258
- <div class="grid cards" markdown>
259
-
260
- - [:octicons-rocket-24: **Quick Start**](getting-started/quick-start.md)
261
-
262
- Get up and running in 5 minutes
263
-
264
- - [:octicons-book-24: **Concepts**](concepts.md)
265
-
266
- Understand the core concepts
267
-
268
- - [:octicons-code-24: **Examples**](examples/index.md)
269
-
270
- See RobotLab in action
271
-
272
- - [:octicons-gear-24: **API Reference**](api/index.md)
273
-
274
- Detailed API documentation
275
-
276
- </div>
277
-
278
- ## License
279
-
280
- RobotLab is released under the [MIT License](https://opensource.org/licenses/MIT).