robot_lab 0.2.8 → 0.3.1

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 (262) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +65 -0
  3. data/README.md +16 -18
  4. data/lib/robot_lab/ask_user.rb +3 -3
  5. data/lib/robot_lab/config/defaults.yml +5 -5
  6. data/lib/robot_lab/config.rb +2 -2
  7. data/lib/robot_lab/mcp/transports/streamable_http.rb +2 -4
  8. data/lib/robot_lab/memory.rb +16 -7
  9. data/lib/robot_lab/robot/hooking.rb +26 -0
  10. data/lib/robot_lab/robot/result_building.rb +119 -0
  11. data/lib/robot_lab/robot.rb +37 -120
  12. data/lib/robot_lab/run_config.rb +52 -20
  13. data/lib/robot_lab/tool.rb +7 -12
  14. data/lib/robot_lab/version.rb +1 -1
  15. data/lib/robot_lab.rb +3 -3
  16. metadata +15 -274
  17. data/.architecture/AGENTS.md +0 -32
  18. data/.architecture/config.yml +0 -8
  19. data/.architecture/members.yml +0 -60
  20. data/.architecture/reviews/feature-free-will.md +0 -490
  21. data/.architecture/reviews/overall-codebase.md +0 -427
  22. data/.claude/settings.local.json +0 -57
  23. data/.codex/config.toml +0 -2
  24. data/.envrc +0 -6
  25. data/.github/workflows/deploy-github-pages.yml +0 -52
  26. data/.irbrc +0 -6
  27. data/.loki +0 -65
  28. data/.quality/reek_baseline.txt +0 -43
  29. data/.rubocop.yml +0 -10
  30. data/Archspec.rb +0 -44
  31. data/CLAUDE.md +0 -139
  32. data/COMMITS.md +0 -196
  33. data/Rakefile +0 -193
  34. data/_typos.toml +0 -21
  35. data/agent2agent_review.md +0 -192
  36. data/agentf_improvements.md +0 -253
  37. data/agents.md +0 -14
  38. data/docs/api/core/index.md +0 -147
  39. data/docs/api/core/memory.md +0 -578
  40. data/docs/api/core/network.md +0 -553
  41. data/docs/api/core/result.md +0 -211
  42. data/docs/api/core/robot.md +0 -1667
  43. data/docs/api/core/state.md +0 -145
  44. data/docs/api/core/tool.md +0 -520
  45. data/docs/api/errors.md +0 -323
  46. data/docs/api/hooks.md +0 -469
  47. data/docs/api/index.md +0 -137
  48. data/docs/api/mcp/client.md +0 -387
  49. data/docs/api/mcp/index.md +0 -267
  50. data/docs/api/mcp/server.md +0 -252
  51. data/docs/api/mcp/transports.md +0 -339
  52. data/docs/api/messages/index.md +0 -126
  53. data/docs/api/messages/text-message.md +0 -170
  54. data/docs/api/messages/tool-call-message.md +0 -206
  55. data/docs/api/messages/tool-result-message.md +0 -242
  56. data/docs/api/messages/user-message.md +0 -232
  57. data/docs/api/skills.md +0 -423
  58. data/docs/api/streaming/context.md +0 -280
  59. data/docs/api/streaming/events.md +0 -185
  60. data/docs/api/streaming/index.md +0 -156
  61. data/docs/api/support.md +0 -846
  62. data/docs/architecture/core-concepts.md +0 -575
  63. data/docs/architecture/index.md +0 -252
  64. data/docs/architecture/message-flow.md +0 -366
  65. data/docs/architecture/network-orchestration.md +0 -478
  66. data/docs/architecture/robot-execution.md +0 -396
  67. data/docs/architecture/state-management.md +0 -410
  68. data/docs/assets/css/custom.css +0 -56
  69. data/docs/assets/images/robot_lab.jpg +0 -0
  70. data/docs/concepts.md +0 -641
  71. data/docs/examples/basic-chat.md +0 -258
  72. data/docs/examples/index.md +0 -425
  73. data/docs/examples/mcp-server.md +0 -403
  74. data/docs/examples/multi-robot-network.md +0 -476
  75. data/docs/examples/tool-usage.md +0 -468
  76. data/docs/getting-started/configuration.md +0 -645
  77. data/docs/getting-started/index.md +0 -56
  78. data/docs/getting-started/installation.md +0 -200
  79. data/docs/getting-started/quick-start.md +0 -293
  80. data/docs/guides/building-robots.md +0 -1187
  81. data/docs/guides/creating-networks.md +0 -736
  82. data/docs/guides/hooks.md +0 -1206
  83. data/docs/guides/index.md +0 -78
  84. data/docs/guides/knowledge.md +0 -219
  85. data/docs/guides/mcp-integration.md +0 -740
  86. data/docs/guides/memory.md +0 -458
  87. data/docs/guides/observability.md +0 -733
  88. data/docs/guides/streaming.md +0 -323
  89. data/docs/guides/using-tools.md +0 -780
  90. data/docs/index.md +0 -280
  91. data/docs/superpowers/plans/2026-05-06-agentskills.md +0 -1303
  92. data/docs/superpowers/specs/2026-05-06-agentskills-design.md +0 -247
  93. data/examples/.envrc +0 -1
  94. data/examples/01_simple_robot.rb +0 -31
  95. data/examples/02_tools.rb +0 -109
  96. data/examples/03_network.rb +0 -118
  97. data/examples/04_mcp.rb +0 -215
  98. data/examples/05_streaming.rb +0 -137
  99. data/examples/06_prompt_templates.rb +0 -325
  100. data/examples/07_network_memory.rb +0 -313
  101. data/examples/08_llm_config.rb +0 -162
  102. data/examples/09_chaining.rb +0 -251
  103. data/examples/10_memory.rb +0 -315
  104. data/examples/11_network_introspection.rb +0 -239
  105. data/examples/12_message_bus.rb +0 -67
  106. data/examples/13_spawn.rb +0 -85
  107. data/examples/14_rusty_circuit/.envrc +0 -1
  108. data/examples/14_rusty_circuit/.gitignore +0 -1
  109. data/examples/14_rusty_circuit/README.md +0 -1
  110. data/examples/14_rusty_circuit/comic.rb +0 -149
  111. data/examples/14_rusty_circuit/display.rb +0 -217
  112. data/examples/14_rusty_circuit/heckler.rb +0 -65
  113. data/examples/14_rusty_circuit/open_mic.rb +0 -132
  114. data/examples/14_rusty_circuit/prompts/open_mic_comic.md +0 -20
  115. data/examples/14_rusty_circuit/prompts/open_mic_heckler.md +0 -23
  116. data/examples/14_rusty_circuit/prompts/open_mic_scout.md +0 -20
  117. data/examples/14_rusty_circuit/scout.rb +0 -165
  118. data/examples/14_rusty_circuit/show.log +0 -234
  119. data/examples/15_memory_network_and_bus/.envrc +0 -1
  120. data/examples/15_memory_network_and_bus/editor_in_chief.rb +0 -24
  121. data/examples/15_memory_network_and_bus/editorial_pipeline.rb +0 -213
  122. data/examples/15_memory_network_and_bus/linux_writer.rb +0 -80
  123. data/examples/15_memory_network_and_bus/os_editor.rb +0 -48
  124. data/examples/15_memory_network_and_bus/os_writer.rb +0 -49
  125. data/examples/15_memory_network_and_bus/output/combined_article.md +0 -13
  126. data/examples/15_memory_network_and_bus/output/final_article.md +0 -13
  127. data/examples/15_memory_network_and_bus/output/linux_draft.md +0 -7
  128. data/examples/15_memory_network_and_bus/output/mac_draft.md +0 -7
  129. data/examples/15_memory_network_and_bus/output/memory.json +0 -13
  130. data/examples/15_memory_network_and_bus/output/revision_1.md +0 -18
  131. data/examples/15_memory_network_and_bus/output/revision_2.md +0 -13
  132. data/examples/15_memory_network_and_bus/output/windows_draft.md +0 -7
  133. data/examples/15_memory_network_and_bus/prompts/os_advocate.md +0 -13
  134. data/examples/15_memory_network_and_bus/prompts/os_chief.md +0 -13
  135. data/examples/15_memory_network_and_bus/prompts/os_editor.md +0 -13
  136. data/examples/16_writers_room/.envrc +0 -1
  137. data/examples/16_writers_room/display.rb +0 -158
  138. data/examples/16_writers_room/output/.gitignore +0 -4
  139. data/examples/16_writers_room/output/README.md +0 -69
  140. data/examples/16_writers_room/output/opus_001.md +0 -263
  141. data/examples/16_writers_room/output/opus_001_notes.log +0 -470
  142. data/examples/16_writers_room/output/opus_002.md +0 -245
  143. data/examples/16_writers_room/output/opus_002_notes.log +0 -546
  144. data/examples/16_writers_room/output/opus_002_screenplay.md +0 -7989
  145. data/examples/16_writers_room/output/opus_002_screenplay_notes.md +0 -993
  146. data/examples/16_writers_room/prompts/screenplay_writer.md +0 -66
  147. data/examples/16_writers_room/prompts/writer.md +0 -37
  148. data/examples/16_writers_room/room.rb +0 -186
  149. data/examples/16_writers_room/tools.rb +0 -173
  150. data/examples/16_writers_room/writer.rb +0 -121
  151. data/examples/16_writers_room/writers_room.rb +0 -256
  152. data/examples/17_skills.rb +0 -234
  153. data/examples/18_rails/.envrc +0 -3
  154. data/examples/18_rails/.gitignore +0 -5
  155. data/examples/18_rails/Gemfile +0 -11
  156. data/examples/18_rails/README.md +0 -67
  157. data/examples/18_rails/Rakefile +0 -4
  158. data/examples/18_rails/app/controllers/application_controller.rb +0 -4
  159. data/examples/18_rails/app/controllers/chat_controller.rb +0 -50
  160. data/examples/18_rails/app/jobs/application_job.rb +0 -4
  161. data/examples/18_rails/app/jobs/robot_run_job.rb +0 -25
  162. data/examples/18_rails/app/models/application_record.rb +0 -5
  163. data/examples/18_rails/app/models/robot_lab_result.rb +0 -36
  164. data/examples/18_rails/app/models/robot_lab_thread.rb +0 -23
  165. data/examples/18_rails/app/robots/chat_robot.rb +0 -25
  166. data/examples/18_rails/app/tools/time_tool.rb +0 -9
  167. data/examples/18_rails/app/views/chat/_user_message.html.erb +0 -1
  168. data/examples/18_rails/app/views/chat/index.html.erb +0 -67
  169. data/examples/18_rails/app/views/layouts/application.html.erb +0 -49
  170. data/examples/18_rails/bin/dev +0 -7
  171. data/examples/18_rails/bin/rails +0 -6
  172. data/examples/18_rails/bin/setup +0 -15
  173. data/examples/18_rails/config/application.rb +0 -33
  174. data/examples/18_rails/config/cable.yml +0 -2
  175. data/examples/18_rails/config/database.yml +0 -5
  176. data/examples/18_rails/config/environment.rb +0 -4
  177. data/examples/18_rails/config/initializers/robot_lab.rb +0 -11
  178. data/examples/18_rails/config/routes.rb +0 -6
  179. data/examples/18_rails/config.ru +0 -4
  180. data/examples/18_rails/db/migrate/001_create_robot_lab_tables.rb +0 -32
  181. data/examples/19_token_tracking.rb +0 -138
  182. data/examples/20_circuit_breaker.rb +0 -147
  183. data/examples/21_learning_loop.rb +0 -181
  184. data/examples/22_context_compression.rb +0 -172
  185. data/examples/23_convergence.rb +0 -133
  186. data/examples/24_structured_delegation.rb +0 -151
  187. data/examples/25_history_search/conversation.jsonl +0 -30
  188. data/examples/25_history_search.rb +0 -133
  189. data/examples/26_document_store/api_versioning_adr.md +0 -52
  190. data/examples/26_document_store/incident_postmortem.md +0 -46
  191. data/examples/26_document_store/postgres_runbook.md +0 -49
  192. data/examples/26_document_store/redis_caching_guide.md +0 -48
  193. data/examples/26_document_store/sidekiq_guide.md +0 -51
  194. data/examples/26_document_store.rb +0 -140
  195. data/examples/27_incident_response/incident_response.rb +0 -261
  196. data/examples/28_mcp_discovery.rb +0 -113
  197. data/examples/29_ractor_tools.rb +0 -240
  198. data/examples/30_ractor_network.rb +0 -252
  199. data/examples/31_launch_assessment.rb +0 -246
  200. data/examples/32_newsletter_reader.rb +0 -193
  201. data/examples/33_stock_generator.rb +0 -80
  202. data/examples/33_stock_predictor.rb +0 -327
  203. data/examples/34_agentskills.rb +0 -76
  204. data/examples/35_hooks.rb +0 -266
  205. data/examples/README.md +0 -533
  206. data/examples/common.rb +0 -148
  207. data/examples/prompts/assistant.md +0 -5
  208. data/examples/prompts/audit_trail.md +0 -8
  209. data/examples/prompts/billing.md +0 -10
  210. data/examples/prompts/classifier.md +0 -7
  211. data/examples/prompts/comedian.md +0 -6
  212. data/examples/prompts/comedy_critic.md +0 -10
  213. data/examples/prompts/configurable.md +0 -9
  214. data/examples/prompts/dispatcher.md +0 -12
  215. data/examples/prompts/entity_extractor.md +0 -14
  216. data/examples/prompts/escalation.md +0 -42
  217. data/examples/prompts/frontmatter_mcp_test.md +0 -9
  218. data/examples/prompts/frontmatter_named_test.md +0 -5
  219. data/examples/prompts/frontmatter_tools_test.md +0 -6
  220. data/examples/prompts/general.md +0 -7
  221. data/examples/prompts/github_assistant.md +0 -14
  222. data/examples/prompts/helper.md +0 -4
  223. data/examples/prompts/incident_responder.md +0 -18
  224. data/examples/prompts/keyword_extractor.md +0 -11
  225. data/examples/prompts/llm_config_demo.md +0 -20
  226. data/examples/prompts/order_support.md +0 -35
  227. data/examples/prompts/os_advocate.md +0 -13
  228. data/examples/prompts/os_chief.md +0 -13
  229. data/examples/prompts/os_editor.md +0 -13
  230. data/examples/prompts/parameterized_main_test.md +0 -6
  231. data/examples/prompts/pii_redactor.md +0 -7
  232. data/examples/prompts/product_support.md +0 -37
  233. data/examples/prompts/runbook_protocol.md +0 -12
  234. data/examples/prompts/sentiment_analyzer.md +0 -12
  235. data/examples/prompts/skill_a_test.md +0 -4
  236. data/examples/prompts/skill_b_test.md +0 -4
  237. data/examples/prompts/skill_config_test.md +0 -5
  238. data/examples/prompts/skill_cycle_a_test.md +0 -6
  239. data/examples/prompts/skill_cycle_b_test.md +0 -6
  240. data/examples/prompts/skill_description_test.md +0 -4
  241. data/examples/prompts/skill_leaf_test.md +0 -4
  242. data/examples/prompts/skill_nested_test.md +0 -6
  243. data/examples/prompts/skill_refs_main_test.md +0 -6
  244. data/examples/prompts/skill_self_ref_test.md +0 -6
  245. data/examples/prompts/skill_with_mcp_test.md +0 -9
  246. data/examples/prompts/skill_with_params_test.md +0 -6
  247. data/examples/prompts/skill_with_robot_name_test.md +0 -5
  248. data/examples/prompts/skill_with_tools_test.md +0 -6
  249. data/examples/prompts/sre_compliance.md +0 -10
  250. data/examples/prompts/structured_output.md +0 -7
  251. data/examples/prompts/synthesizer.md +0 -17
  252. data/examples/prompts/technical.md +0 -10
  253. data/examples/prompts/template_with_skills_test.md +0 -6
  254. data/examples/prompts/triage.md +0 -22
  255. data/examples/ruboruby.md +0 -423
  256. data/examples/xyzzy.rb +0 -97
  257. data/logfile +0 -8
  258. data/mkdocs.yml +0 -209
  259. data/robot_concurrency.md +0 -38
  260. data/simple_acp_review.md +0 -298
  261. data/temp.md +0 -6
  262. 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).