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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +1 -1
- data/lib/robot_lab/mcp/transports/streamable_http.rb +1 -1
- data/lib/robot_lab/version.rb +1 -1
- metadata +3 -253
- data/.architecture/AGENTS.md +0 -32
- data/.architecture/config.yml +0 -8
- data/.architecture/members.yml +0 -60
- data/.architecture/reviews/feature-free-will.md +0 -490
- data/.architecture/reviews/overall-codebase.md +0 -427
- data/.claude/settings.local.json +0 -57
- data/.codex/config.toml +0 -2
- data/.envrc +0 -6
- data/.github/workflows/deploy-github-pages.yml +0 -52
- data/.irbrc +0 -6
- data/.loki +0 -65
- data/.quality/reek_baseline.txt +0 -43
- data/.rubocop.yml +0 -10
- data/Archspec.rb +0 -44
- data/CLAUDE.md +0 -141
- data/COMMITS.md +0 -196
- data/Rakefile +0 -193
- data/_typos.toml +0 -21
- data/agent2agent_review.md +0 -192
- data/agentf_improvements.md +0 -253
- data/agents.md +0 -14
- data/docs/api/core/index.md +0 -147
- data/docs/api/core/memory.md +0 -578
- data/docs/api/core/network.md +0 -553
- data/docs/api/core/result.md +0 -211
- data/docs/api/core/robot.md +0 -1667
- data/docs/api/core/state.md +0 -145
- data/docs/api/core/tool.md +0 -520
- data/docs/api/errors.md +0 -323
- data/docs/api/hooks.md +0 -469
- data/docs/api/index.md +0 -137
- data/docs/api/mcp/client.md +0 -387
- data/docs/api/mcp/index.md +0 -267
- data/docs/api/mcp/server.md +0 -252
- data/docs/api/mcp/transports.md +0 -339
- data/docs/api/messages/index.md +0 -126
- data/docs/api/messages/text-message.md +0 -170
- data/docs/api/messages/tool-call-message.md +0 -206
- data/docs/api/messages/tool-result-message.md +0 -242
- data/docs/api/messages/user-message.md +0 -232
- data/docs/api/skills.md +0 -423
- data/docs/api/streaming/context.md +0 -280
- data/docs/api/streaming/events.md +0 -185
- data/docs/api/streaming/index.md +0 -156
- data/docs/api/support.md +0 -846
- data/docs/architecture/core-concepts.md +0 -575
- data/docs/architecture/index.md +0 -252
- data/docs/architecture/message-flow.md +0 -366
- data/docs/architecture/network-orchestration.md +0 -478
- data/docs/architecture/robot-execution.md +0 -396
- data/docs/architecture/state-management.md +0 -410
- data/docs/assets/css/custom.css +0 -56
- data/docs/assets/images/robot_lab.jpg +0 -0
- data/docs/concepts.md +0 -641
- data/docs/examples/basic-chat.md +0 -258
- data/docs/examples/index.md +0 -425
- data/docs/examples/mcp-server.md +0 -403
- data/docs/examples/multi-robot-network.md +0 -476
- data/docs/examples/tool-usage.md +0 -468
- data/docs/getting-started/configuration.md +0 -645
- data/docs/getting-started/index.md +0 -56
- data/docs/getting-started/installation.md +0 -197
- data/docs/getting-started/quick-start.md +0 -293
- data/docs/guides/building-robots.md +0 -1187
- data/docs/guides/creating-networks.md +0 -736
- data/docs/guides/hooks.md +0 -1206
- data/docs/guides/index.md +0 -78
- data/docs/guides/knowledge.md +0 -219
- data/docs/guides/mcp-integration.md +0 -740
- data/docs/guides/memory.md +0 -458
- data/docs/guides/observability.md +0 -733
- data/docs/guides/streaming.md +0 -323
- data/docs/guides/using-tools.md +0 -780
- data/docs/index.md +0 -280
- data/docs/superpowers/plans/2026-05-06-agentskills.md +0 -1303
- data/docs/superpowers/specs/2026-05-06-agentskills-design.md +0 -247
- data/examples/.envrc +0 -3
- data/examples/01_simple_robot.rb +0 -31
- data/examples/02_tools.rb +0 -109
- data/examples/03_network.rb +0 -118
- data/examples/04_mcp.rb +0 -217
- data/examples/05_streaming.rb +0 -137
- data/examples/06_prompt_templates.rb +0 -325
- data/examples/07_network_memory.rb +0 -313
- data/examples/08_llm_config.rb +0 -162
- data/examples/09_chaining.rb +0 -251
- data/examples/10_memory.rb +0 -315
- data/examples/11_network_introspection.rb +0 -239
- data/examples/12_message_bus.rb +0 -67
- data/examples/13_spawn.rb +0 -85
- data/examples/14_rusty_circuit/.envrc +0 -1
- data/examples/14_rusty_circuit/.gitignore +0 -1
- data/examples/14_rusty_circuit/README.md +0 -1
- data/examples/14_rusty_circuit/comic.rb +0 -149
- data/examples/14_rusty_circuit/display.rb +0 -217
- data/examples/14_rusty_circuit/heckler.rb +0 -65
- data/examples/14_rusty_circuit/open_mic.rb +0 -132
- data/examples/14_rusty_circuit/prompts/open_mic_comic.md +0 -20
- data/examples/14_rusty_circuit/prompts/open_mic_heckler.md +0 -23
- data/examples/14_rusty_circuit/prompts/open_mic_scout.md +0 -20
- data/examples/14_rusty_circuit/scout.rb +0 -165
- data/examples/14_rusty_circuit/show.log +0 -234
- data/examples/15_memory_network_and_bus/.envrc +0 -1
- data/examples/15_memory_network_and_bus/README.md +0 -66
- data/examples/15_memory_network_and_bus/editor_in_chief.rb +0 -24
- data/examples/15_memory_network_and_bus/editorial_pipeline.rb +0 -213
- data/examples/15_memory_network_and_bus/linux_writer.rb +0 -80
- data/examples/15_memory_network_and_bus/os_editor.rb +0 -48
- data/examples/15_memory_network_and_bus/os_writer.rb +0 -49
- data/examples/15_memory_network_and_bus/output/combined_article.md +0 -11
- data/examples/15_memory_network_and_bus/output/final_article.md +0 -8
- data/examples/15_memory_network_and_bus/output/linux_draft.md +0 -7
- data/examples/15_memory_network_and_bus/output/mac_draft.md +0 -7
- data/examples/15_memory_network_and_bus/output/memory.json +0 -13
- data/examples/15_memory_network_and_bus/output/revision_1.md +0 -29
- data/examples/15_memory_network_and_bus/output/revision_2.md +0 -50
- data/examples/15_memory_network_and_bus/output/revision_3.md +0 -8
- data/examples/15_memory_network_and_bus/output/windows_draft.md +0 -7
- data/examples/15_memory_network_and_bus/prompts/os_advocate.md +0 -13
- data/examples/15_memory_network_and_bus/prompts/os_chief.md +0 -13
- data/examples/15_memory_network_and_bus/prompts/os_editor.md +0 -13
- data/examples/16_writers_room/.envrc +0 -1
- data/examples/16_writers_room/display.rb +0 -158
- data/examples/16_writers_room/output/.gitignore +0 -4
- data/examples/16_writers_room/output/README.md +0 -69
- data/examples/16_writers_room/output/opus_001.md +0 -263
- data/examples/16_writers_room/output/opus_001_notes.log +0 -470
- data/examples/16_writers_room/output/opus_002.md +0 -245
- data/examples/16_writers_room/output/opus_002_notes.log +0 -546
- data/examples/16_writers_room/output/opus_002_screenplay.md +0 -7989
- data/examples/16_writers_room/output/opus_002_screenplay_notes.md +0 -993
- data/examples/16_writers_room/prompts/screenplay_writer.md +0 -66
- data/examples/16_writers_room/prompts/writer.md +0 -37
- data/examples/16_writers_room/room.rb +0 -186
- data/examples/16_writers_room/tools.rb +0 -173
- data/examples/16_writers_room/writer.rb +0 -121
- data/examples/16_writers_room/writers_room.rb +0 -256
- data/examples/17_skills.rb +0 -234
- data/examples/18_rails/.envrc +0 -3
- data/examples/18_rails/.gitignore +0 -5
- data/examples/18_rails/Gemfile +0 -11
- data/examples/18_rails/README.md +0 -67
- data/examples/18_rails/Rakefile +0 -4
- data/examples/18_rails/app/controllers/application_controller.rb +0 -4
- data/examples/18_rails/app/controllers/chat_controller.rb +0 -50
- data/examples/18_rails/app/jobs/application_job.rb +0 -4
- data/examples/18_rails/app/jobs/robot_run_job.rb +0 -25
- data/examples/18_rails/app/models/application_record.rb +0 -5
- data/examples/18_rails/app/models/robot_lab_result.rb +0 -36
- data/examples/18_rails/app/models/robot_lab_thread.rb +0 -23
- data/examples/18_rails/app/robots/chat_robot.rb +0 -25
- data/examples/18_rails/app/tools/time_tool.rb +0 -9
- data/examples/18_rails/app/views/chat/_user_message.html.erb +0 -1
- data/examples/18_rails/app/views/chat/index.html.erb +0 -67
- data/examples/18_rails/app/views/layouts/application.html.erb +0 -49
- data/examples/18_rails/bin/dev +0 -7
- data/examples/18_rails/bin/rails +0 -6
- data/examples/18_rails/bin/setup +0 -15
- data/examples/18_rails/config/application.rb +0 -33
- data/examples/18_rails/config/cable.yml +0 -2
- data/examples/18_rails/config/database.yml +0 -5
- data/examples/18_rails/config/environment.rb +0 -4
- data/examples/18_rails/config/initializers/robot_lab.rb +0 -11
- data/examples/18_rails/config/routes.rb +0 -6
- data/examples/18_rails/config.ru +0 -4
- data/examples/18_rails/db/migrate/001_create_robot_lab_tables.rb +0 -32
- data/examples/19_token_tracking.rb +0 -138
- data/examples/20_circuit_breaker.rb +0 -147
- data/examples/21_learning_loop.rb +0 -181
- data/examples/22_context_compression.rb +0 -172
- data/examples/23_convergence.rb +0 -133
- data/examples/24_structured_delegation.rb +0 -151
- data/examples/25_history_search/conversation.jsonl +0 -30
- data/examples/25_history_search.rb +0 -133
- data/examples/26_document_store/api_versioning_adr.md +0 -52
- data/examples/26_document_store/incident_postmortem.md +0 -46
- data/examples/26_document_store/postgres_runbook.md +0 -49
- data/examples/26_document_store/redis_caching_guide.md +0 -48
- data/examples/26_document_store/sidekiq_guide.md +0 -51
- data/examples/26_document_store.rb +0 -140
- data/examples/27_incident_response/README.md +0 -65
- data/examples/27_incident_response/incident_response.rb +0 -261
- data/examples/28_mcp_discovery.rb +0 -113
- data/examples/29_ractor_tools.rb +0 -240
- data/examples/30_ractor_network.rb +0 -252
- data/examples/31_launch_assessment.rb +0 -246
- data/examples/32_newsletter_reader.rb +0 -193
- data/examples/33_stock_generator.rb +0 -80
- data/examples/33_stock_predictor.rb +0 -327
- data/examples/34_agentskills.rb +0 -76
- data/examples/35_hooks.rb +0 -266
- data/examples/README.md +0 -550
- data/examples/common.rb +0 -180
- data/examples/prompts/assistant.md +0 -5
- data/examples/prompts/audit_trail.md +0 -8
- data/examples/prompts/billing.md +0 -10
- data/examples/prompts/classifier.md +0 -7
- data/examples/prompts/comedian.md +0 -6
- data/examples/prompts/comedy_critic.md +0 -10
- data/examples/prompts/configurable.md +0 -9
- data/examples/prompts/dispatcher.md +0 -12
- data/examples/prompts/entity_extractor.md +0 -14
- data/examples/prompts/escalation.md +0 -42
- data/examples/prompts/frontmatter_mcp_test.md +0 -9
- data/examples/prompts/frontmatter_named_test.md +0 -5
- data/examples/prompts/frontmatter_tools_test.md +0 -6
- data/examples/prompts/general.md +0 -7
- data/examples/prompts/github_assistant.md +0 -14
- data/examples/prompts/helper.md +0 -4
- data/examples/prompts/incident_responder.md +0 -18
- data/examples/prompts/keyword_extractor.md +0 -11
- data/examples/prompts/llm_config_demo.md +0 -20
- data/examples/prompts/order_support.md +0 -35
- data/examples/prompts/os_advocate.md +0 -13
- data/examples/prompts/os_chief.md +0 -13
- data/examples/prompts/os_editor.md +0 -13
- data/examples/prompts/parameterized_main_test.md +0 -6
- data/examples/prompts/pii_redactor.md +0 -7
- data/examples/prompts/product_support.md +0 -37
- data/examples/prompts/runbook_protocol.md +0 -12
- data/examples/prompts/sentiment_analyzer.md +0 -12
- data/examples/prompts/skill_a_test.md +0 -4
- data/examples/prompts/skill_b_test.md +0 -4
- data/examples/prompts/skill_config_test.md +0 -5
- data/examples/prompts/skill_cycle_a_test.md +0 -6
- data/examples/prompts/skill_cycle_b_test.md +0 -6
- data/examples/prompts/skill_description_test.md +0 -4
- data/examples/prompts/skill_leaf_test.md +0 -4
- data/examples/prompts/skill_nested_test.md +0 -6
- data/examples/prompts/skill_refs_main_test.md +0 -6
- data/examples/prompts/skill_self_ref_test.md +0 -6
- data/examples/prompts/skill_with_mcp_test.md +0 -9
- data/examples/prompts/skill_with_params_test.md +0 -6
- data/examples/prompts/skill_with_robot_name_test.md +0 -5
- data/examples/prompts/skill_with_tools_test.md +0 -6
- data/examples/prompts/sre_compliance.md +0 -10
- data/examples/prompts/structured_output.md +0 -7
- data/examples/prompts/synthesizer.md +0 -17
- data/examples/prompts/technical.md +0 -10
- data/examples/prompts/template_with_skills_test.md +0 -6
- data/examples/prompts/triage.md +0 -22
- data/examples/ruboruby.md +0 -423
- data/examples/run_all.rb +0 -60
- data/examples/xyzzy.rb +0 -97
- data/logfile +0 -8
- data/mkdocs.yml +0 -209
- data/robot_concurrency.md +0 -38
- data/simple_acp_review.md +0 -298
- data/temp.md +0 -6
- 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).
|