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