robot_lab 0.1.0 → 0.2.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/.architecture/AGENTS.md +32 -0
- data/.architecture/config.yml +8 -0
- data/.architecture/members.yml +60 -0
- data/.architecture/reviews/feature-free-will.md +490 -0
- data/.architecture/reviews/overall-codebase.md +427 -0
- data/.claude/settings.local.json +57 -0
- data/.codex/config.toml +2 -0
- data/.irbrc +2 -2
- data/.rubocop.yml +172 -0
- data/CHANGELOG.md +72 -0
- data/CLAUDE.md +139 -0
- data/README.md +91 -95
- data/Rakefile +109 -3
- data/agent2agent_review.md +192 -0
- data/agentf_improvements.md +253 -0
- data/agents.md +14 -0
- data/docs/examples/index.md +37 -2
- data/docs/getting-started/configuration.md +20 -7
- data/docs/guides/index.md +16 -16
- data/docs/guides/knowledge.md +7 -1
- data/docs/guides/observability.md +132 -0
- data/docs/index.md +30 -3
- data/docs/superpowers/plans/2026-05-06-agentskills.md +1303 -0
- data/docs/superpowers/specs/2026-05-06-agentskills-design.md +247 -0
- data/examples/.envrc +1 -0
- data/examples/01_simple_robot.rb +5 -9
- data/examples/02_tools.rb +5 -9
- data/examples/03_network.rb +8 -9
- data/examples/04_mcp.rb +21 -29
- data/examples/05_streaming.rb +12 -18
- data/examples/06_prompt_templates.rb +11 -19
- data/examples/07_network_memory.rb +16 -31
- data/examples/08_llm_config.rb +10 -22
- data/examples/09_chaining.rb +16 -27
- data/examples/10_memory.rb +12 -28
- data/examples/11_network_introspection.rb +15 -29
- data/examples/12_message_bus.rb +5 -12
- data/examples/13_spawn.rb +5 -10
- data/examples/14_rusty_circuit/.envrc +1 -0
- data/examples/14_rusty_circuit/comic.rb +2 -0
- data/examples/14_rusty_circuit/heckler.rb +1 -1
- data/examples/14_rusty_circuit/open_mic.rb +1 -3
- data/examples/14_rusty_circuit/scout.rb +2 -0
- data/examples/15_memory_network_and_bus/.envrc +1 -0
- data/examples/15_memory_network_and_bus/editorial_pipeline.rb +6 -3
- data/examples/15_memory_network_and_bus/linux_writer.rb +1 -1
- data/examples/15_memory_network_and_bus/output/combined_article.md +6 -6
- data/examples/15_memory_network_and_bus/output/final_article.md +6 -8
- data/examples/15_memory_network_and_bus/output/linux_draft.md +4 -2
- data/examples/15_memory_network_and_bus/output/mac_draft.md +3 -3
- data/examples/15_memory_network_and_bus/output/memory.json +6 -6
- data/examples/15_memory_network_and_bus/output/revision_1.md +10 -11
- data/examples/15_memory_network_and_bus/output/revision_2.md +6 -8
- data/examples/15_memory_network_and_bus/output/windows_draft.md +3 -3
- data/examples/16_writers_room/.envrc +1 -0
- data/examples/16_writers_room/writers_room.rb +2 -4
- data/examples/17_skills.rb +8 -17
- data/examples/18_rails/Gemfile +1 -0
- data/examples/19_token_tracking.rb +9 -15
- data/examples/20_circuit_breaker.rb +10 -19
- data/examples/21_learning_loop.rb +11 -20
- data/examples/22_context_compression.rb +6 -13
- data/examples/23_convergence.rb +6 -17
- data/examples/24_structured_delegation.rb +11 -15
- data/examples/25_history_search.rb +5 -12
- data/examples/26_document_store.rb +6 -13
- data/examples/27_incident_response/incident_response.rb +4 -5
- data/examples/28_mcp_discovery.rb +8 -11
- data/examples/29_ractor_tools.rb +4 -9
- data/examples/30_ractor_network.rb +10 -19
- data/examples/31_launch_assessment.rb +10 -23
- data/examples/32_newsletter_reader.rb +188 -0
- data/examples/33_stock_generator.rb +80 -0
- data/examples/33_stock_predictor.rb +306 -0
- data/examples/34_agentskills.rb +72 -0
- data/examples/README.md +1 -1
- data/examples/common.rb +76 -0
- data/examples/ruboruby.md +423 -0
- data/examples/temp.md +51 -0
- data/lib/robot_lab/agent_skill.rb +63 -0
- data/lib/robot_lab/agent_skill_catalog.rb +74 -0
- data/lib/robot_lab/ask_user.rb +2 -2
- data/lib/robot_lab/bus_poller.rb +12 -5
- data/lib/robot_lab/config.rb +1 -12
- data/lib/robot_lab/delegation_future.rb +1 -1
- data/lib/robot_lab/doom_loop_detector.rb +98 -0
- data/lib/robot_lab/history_compressor.rb +4 -10
- data/lib/robot_lab/mcp/client.rb +1 -2
- data/lib/robot_lab/mcp/connection_poller.rb +3 -3
- data/lib/robot_lab/mcp/server.rb +1 -1
- data/lib/robot_lab/mcp/server_discovery.rb +0 -2
- data/lib/robot_lab/memory.rb +32 -27
- data/lib/robot_lab/memory_change.rb +2 -2
- data/lib/robot_lab/message.rb +4 -4
- data/lib/robot_lab/network.rb +11 -6
- data/lib/robot_lab/robot/agent_skill_matching.rb +99 -0
- data/lib/robot_lab/robot/bus_messaging.rb +9 -27
- data/lib/robot_lab/robot/history_search.rb +4 -1
- data/lib/robot_lab/robot/mcp_management.rb +5 -11
- data/lib/robot_lab/robot/template_rendering.rb +60 -40
- data/lib/robot_lab/robot.rb +323 -206
- data/lib/robot_lab/robot_result.rb +6 -5
- data/lib/robot_lab/run_config.rb +5 -11
- data/lib/robot_lab/script_tool.rb +76 -0
- data/lib/robot_lab/state_proxy.rb +7 -5
- data/lib/robot_lab/tool.rb +3 -3
- data/lib/robot_lab/tool_config.rb +1 -1
- data/lib/robot_lab/tool_manifest.rb +5 -7
- data/lib/robot_lab/user_message.rb +2 -2
- data/lib/robot_lab/version.rb +1 -1
- data/lib/robot_lab/waiter.rb +1 -1
- data/lib/robot_lab.rb +41 -52
- data/logfile +8 -0
- data/mkdocs.yml +2 -3
- data/robot_concurrency.md +38 -0
- data/simple_acp_review.md +298 -0
- data/site/404.html +2300 -0
- data/site/api/core/index.html +2706 -0
- data/site/api/core/memory/index.html +3793 -0
- data/site/api/core/network/index.html +3500 -0
- data/site/api/core/robot/index.html +4566 -0
- data/site/api/core/state/index.html +3390 -0
- data/site/api/core/tool/index.html +3843 -0
- data/site/api/index.html +2635 -0
- data/site/api/mcp/client/index.html +3435 -0
- data/site/api/mcp/index.html +2783 -0
- data/site/api/mcp/server/index.html +3252 -0
- data/site/api/mcp/transports/index.html +3352 -0
- data/site/api/messages/index.html +2641 -0
- data/site/api/messages/text-message/index.html +3087 -0
- data/site/api/messages/tool-call-message/index.html +3159 -0
- data/site/api/messages/tool-result-message/index.html +3252 -0
- data/site/api/messages/user-message/index.html +3212 -0
- data/site/api/streaming/context/index.html +3282 -0
- data/site/api/streaming/events/index.html +3347 -0
- data/site/api/streaming/index.html +2738 -0
- data/site/architecture/core-concepts/index.html +3757 -0
- data/site/architecture/index.html +2797 -0
- data/site/architecture/message-flow/index.html +3238 -0
- data/site/architecture/network-orchestration/index.html +3433 -0
- data/site/architecture/robot-execution/index.html +3140 -0
- data/site/architecture/state-management/index.html +3498 -0
- data/site/assets/css/custom.css +56 -0
- data/site/assets/images/favicon.png +0 -0
- data/site/assets/images/robot_lab.jpg +0 -0
- data/site/assets/javascripts/bundle.79ae519e.min.js +16 -0
- data/site/assets/javascripts/bundle.79ae519e.min.js.map +7 -0
- data/site/assets/javascripts/lunr/min/lunr.ar.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.da.min.js +18 -0
- data/site/assets/javascripts/lunr/min/lunr.de.min.js +18 -0
- data/site/assets/javascripts/lunr/min/lunr.du.min.js +18 -0
- data/site/assets/javascripts/lunr/min/lunr.el.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.es.min.js +18 -0
- data/site/assets/javascripts/lunr/min/lunr.fi.min.js +18 -0
- data/site/assets/javascripts/lunr/min/lunr.fr.min.js +18 -0
- data/site/assets/javascripts/lunr/min/lunr.he.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.hi.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.hu.min.js +18 -0
- data/site/assets/javascripts/lunr/min/lunr.hy.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.it.min.js +18 -0
- data/site/assets/javascripts/lunr/min/lunr.ja.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.jp.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.kn.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.ko.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.multi.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.nl.min.js +18 -0
- data/site/assets/javascripts/lunr/min/lunr.no.min.js +18 -0
- data/site/assets/javascripts/lunr/min/lunr.pt.min.js +18 -0
- data/site/assets/javascripts/lunr/min/lunr.ro.min.js +18 -0
- data/site/assets/javascripts/lunr/min/lunr.ru.min.js +18 -0
- data/site/assets/javascripts/lunr/min/lunr.sa.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.sv.min.js +18 -0
- data/site/assets/javascripts/lunr/min/lunr.ta.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.te.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.th.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.tr.min.js +18 -0
- data/site/assets/javascripts/lunr/min/lunr.vi.min.js +1 -0
- data/site/assets/javascripts/lunr/min/lunr.zh.min.js +1 -0
- data/site/assets/javascripts/lunr/tinyseg.js +206 -0
- data/site/assets/javascripts/lunr/wordcut.js +6708 -0
- data/site/assets/javascripts/workers/search.2c215733.min.js +42 -0
- data/site/assets/javascripts/workers/search.2c215733.min.js.map +7 -0
- data/site/assets/stylesheets/main.484c7ddc.min.css +1 -0
- data/site/assets/stylesheets/main.484c7ddc.min.css.map +1 -0
- data/site/assets/stylesheets/palette.ab4e12ef.min.css +1 -0
- data/site/assets/stylesheets/palette.ab4e12ef.min.css.map +1 -0
- data/site/concepts/index.html +3455 -0
- data/site/examples/basic-chat/index.html +2880 -0
- data/site/examples/index.html +2907 -0
- data/site/examples/mcp-server/index.html +3018 -0
- data/site/examples/multi-robot-network/index.html +3131 -0
- data/site/examples/rails-application/index.html +3329 -0
- data/site/examples/tool-usage/index.html +3085 -0
- data/site/getting-started/configuration/index.html +3745 -0
- data/site/getting-started/index.html +2572 -0
- data/site/getting-started/installation/index.html +2981 -0
- data/site/getting-started/quick-start/index.html +2942 -0
- data/site/guides/building-robots/index.html +4290 -0
- data/site/guides/creating-networks/index.html +3858 -0
- data/site/guides/index.html +2586 -0
- data/site/guides/mcp-integration/index.html +3581 -0
- data/site/guides/memory/index.html +3586 -0
- data/site/guides/rails-integration/index.html +4019 -0
- data/site/guides/streaming/index.html +3157 -0
- data/site/guides/using-tools/index.html +3802 -0
- data/site/index.html +2671 -0
- data/site/search/search_index.json +1 -0
- data/site/sitemap.xml +183 -0
- data/site/sitemap.xml.gz +0 -0
- data/site/tags.json +1 -0
- data/temp.md +6 -0
- data/tool_manifest_plan.md +155 -0
- metadata +154 -92
- data/docs/examples/rails-application.md +0 -419
- data/docs/guides/ractor-parallelism.md +0 -364
- data/docs/guides/rails-integration.md +0 -681
- data/docs/superpowers/plans/2026-04-14-ractor-integration.md +0 -1538
- data/docs/superpowers/specs/2026-04-14-ractor-integration-design.md +0 -258
- data/lib/generators/robot_lab/install_generator.rb +0 -90
- data/lib/generators/robot_lab/job_generator.rb +0 -40
- data/lib/generators/robot_lab/robot_generator.rb +0 -55
- data/lib/generators/robot_lab/templates/initializer.rb.tt +0 -42
- data/lib/generators/robot_lab/templates/job.rb.tt +0 -21
- data/lib/generators/robot_lab/templates/migration.rb.tt +0 -32
- data/lib/generators/robot_lab/templates/result_model.rb.tt +0 -52
- data/lib/generators/robot_lab/templates/robot.rb.tt +0 -31
- data/lib/generators/robot_lab/templates/robot_job.rb.tt +0 -18
- data/lib/generators/robot_lab/templates/robot_test.rb.tt +0 -34
- data/lib/generators/robot_lab/templates/routing_robot.rb.tt +0 -59
- data/lib/generators/robot_lab/templates/thread_model.rb.tt +0 -40
- data/lib/robot_lab/document_store.rb +0 -155
- data/lib/robot_lab/ractor_boundary.rb +0 -42
- data/lib/robot_lab/ractor_job.rb +0 -37
- data/lib/robot_lab/ractor_memory_proxy.rb +0 -85
- data/lib/robot_lab/ractor_network_scheduler.rb +0 -154
- data/lib/robot_lab/ractor_worker_pool.rb +0 -117
- data/lib/robot_lab/rails_integration/engine.rb +0 -29
- data/lib/robot_lab/rails_integration/job.rb +0 -158
- data/lib/robot_lab/rails_integration/railtie.rb +0 -51
- data/lib/robot_lab/rails_integration/turbo_stream_callbacks.rb +0 -72
|
@@ -0,0 +1,4290 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en" class="no-js">
|
|
4
|
+
<head>
|
|
5
|
+
|
|
6
|
+
<meta charset="utf-8">
|
|
7
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
8
|
+
|
|
9
|
+
<meta name="description" content="Multi-robot LLM workflow orchestration for Ruby">
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
<meta name="author" content="Dewayne VanHoozer">
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
<link rel="canonical" href="https://madbomber.github.io/robot_lab/guides/building-robots/">
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
<link rel="prev" href="../">
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
<link rel="next" href="../creating-networks/">
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
<link rel="icon" href="../../assets/images/favicon.png">
|
|
28
|
+
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.1">
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<title>Building Robots - RobotLab</title>
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
<link rel="stylesheet" href="../../assets/stylesheets/main.484c7ddc.min.css">
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css">
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
53
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
|
54
|
+
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
<link rel="stylesheet" href="../../assets/css/custom.css">
|
|
59
|
+
|
|
60
|
+
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
</head>
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-purple" data-md-color-accent="amber">
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
|
82
|
+
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
|
83
|
+
<label class="md-overlay" for="__drawer"></label>
|
|
84
|
+
<div data-md-component="skip">
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
<a href="#building-robots" class="md-skip">
|
|
88
|
+
Skip to content
|
|
89
|
+
</a>
|
|
90
|
+
|
|
91
|
+
</div>
|
|
92
|
+
<div data-md-component="announce">
|
|
93
|
+
|
|
94
|
+
</div>
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
<header class="md-header md-header--shadow md-header--lifted" data-md-component="header">
|
|
102
|
+
<nav class="md-header__inner md-grid" aria-label="Header">
|
|
103
|
+
<a href="../.." title="RobotLab" class="md-header__button md-logo" aria-label="RobotLab" data-md-component="logo">
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a2 2 0 0 1 2 2c0 .74-.4 1.39-1 1.73V7h1a7 7 0 0 1 7 7h1a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-1v1a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-1H2a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1h1a7 7 0 0 1 7-7h1V5.73c-.6-.34-1-.99-1-1.73a2 2 0 0 1 2-2M7.5 13A2.5 2.5 0 0 0 5 15.5 2.5 2.5 0 0 0 7.5 18a2.5 2.5 0 0 0 2.5-2.5A2.5 2.5 0 0 0 7.5 13m9 0a2.5 2.5 0 0 0-2.5 2.5 2.5 2.5 0 0 0 2.5 2.5 2.5 2.5 0 0 0 2.5-2.5 2.5 2.5 0 0 0-2.5-2.5"/></svg>
|
|
107
|
+
|
|
108
|
+
</a>
|
|
109
|
+
<label class="md-header__button md-icon" for="__drawer">
|
|
110
|
+
|
|
111
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
|
112
|
+
</label>
|
|
113
|
+
<div class="md-header__title" data-md-component="header-title">
|
|
114
|
+
<div class="md-header__ellipsis">
|
|
115
|
+
<div class="md-header__topic">
|
|
116
|
+
<span class="md-ellipsis">
|
|
117
|
+
RobotLab
|
|
118
|
+
</span>
|
|
119
|
+
</div>
|
|
120
|
+
<div class="md-header__topic" data-md-component="header-topic">
|
|
121
|
+
<span class="md-ellipsis">
|
|
122
|
+
|
|
123
|
+
Building Robots
|
|
124
|
+
|
|
125
|
+
</span>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
<form class="md-header__option" data-md-component="palette">
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="deep-purple" data-md-color-accent="amber" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
|
|
137
|
+
|
|
138
|
+
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
|
|
139
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
|
|
140
|
+
</label>
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="deep-purple" data-md-color-accent="amber" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
|
|
147
|
+
|
|
148
|
+
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
|
|
149
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
|
|
150
|
+
</label>
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
</form>
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
<label class="md-header__button md-icon" for="__search">
|
|
164
|
+
|
|
165
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
|
166
|
+
</label>
|
|
167
|
+
<div class="md-search" data-md-component="search" role="dialog">
|
|
168
|
+
<label class="md-search__overlay" for="__search"></label>
|
|
169
|
+
<div class="md-search__inner" role="search">
|
|
170
|
+
<form class="md-search__form" name="search">
|
|
171
|
+
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
|
172
|
+
<label class="md-search__icon md-icon" for="__search">
|
|
173
|
+
|
|
174
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
|
175
|
+
|
|
176
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
|
177
|
+
</label>
|
|
178
|
+
<nav class="md-search__options" aria-label="Search">
|
|
179
|
+
|
|
180
|
+
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
|
|
181
|
+
|
|
182
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
|
|
183
|
+
</a>
|
|
184
|
+
|
|
185
|
+
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
|
186
|
+
|
|
187
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
|
188
|
+
</button>
|
|
189
|
+
</nav>
|
|
190
|
+
|
|
191
|
+
<div class="md-search__suggest" data-md-component="search-suggest"></div>
|
|
192
|
+
|
|
193
|
+
</form>
|
|
194
|
+
<div class="md-search__output">
|
|
195
|
+
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
|
196
|
+
<div class="md-search-result" data-md-component="search-result">
|
|
197
|
+
<div class="md-search-result__meta">
|
|
198
|
+
Initializing search
|
|
199
|
+
</div>
|
|
200
|
+
<ol class="md-search-result__list" role="presentation"></ol>
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
</div>
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
<div class="md-header__source">
|
|
210
|
+
<a href="https://github.com/madbomber/robot_lab" title="Go to repository" class="md-source" data-md-component="source">
|
|
211
|
+
<div class="md-source__icon md-icon">
|
|
212
|
+
|
|
213
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
|
|
214
|
+
</div>
|
|
215
|
+
<div class="md-source__repository">
|
|
216
|
+
madbomber/robot_lab
|
|
217
|
+
</div>
|
|
218
|
+
</a>
|
|
219
|
+
</div>
|
|
220
|
+
|
|
221
|
+
</nav>
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
|
226
|
+
<div class="md-grid">
|
|
227
|
+
<ul class="md-tabs__list">
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
<li class="md-tabs__item">
|
|
237
|
+
<a href="../.." class="md-tabs__link">
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
Home
|
|
244
|
+
|
|
245
|
+
</a>
|
|
246
|
+
</li>
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
<li class="md-tabs__item">
|
|
259
|
+
<a href="../../getting-started/" class="md-tabs__link">
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
Getting Started
|
|
266
|
+
|
|
267
|
+
</a>
|
|
268
|
+
</li>
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
<li class="md-tabs__item">
|
|
281
|
+
<a href="../../architecture/" class="md-tabs__link">
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
Architecture
|
|
288
|
+
|
|
289
|
+
</a>
|
|
290
|
+
</li>
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
<li class="md-tabs__item md-tabs__item--active">
|
|
305
|
+
<a href="../" class="md-tabs__link">
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
Guides
|
|
312
|
+
|
|
313
|
+
</a>
|
|
314
|
+
</li>
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
<li class="md-tabs__item">
|
|
327
|
+
<a href="../../api/" class="md-tabs__link">
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
API Reference
|
|
334
|
+
|
|
335
|
+
</a>
|
|
336
|
+
</li>
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
<li class="md-tabs__item">
|
|
349
|
+
<a href="../../examples/" class="md-tabs__link">
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
Examples
|
|
356
|
+
|
|
357
|
+
</a>
|
|
358
|
+
</li>
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
</ul>
|
|
364
|
+
</div>
|
|
365
|
+
</nav>
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
</header>
|
|
369
|
+
|
|
370
|
+
<div class="md-container" data-md-component="container">
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
<main class="md-main" data-md-component="main">
|
|
376
|
+
<div class="md-main__inner md-grid">
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
|
381
|
+
<div class="md-sidebar__scrollwrap">
|
|
382
|
+
<div class="md-sidebar__inner">
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
|
390
|
+
<label class="md-nav__title" for="__drawer">
|
|
391
|
+
<a href="../.." title="RobotLab" class="md-nav__button md-logo" aria-label="RobotLab" data-md-component="logo">
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a2 2 0 0 1 2 2c0 .74-.4 1.39-1 1.73V7h1a7 7 0 0 1 7 7h1a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-1v1a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-1H2a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1h1a7 7 0 0 1 7-7h1V5.73c-.6-.34-1-.99-1-1.73a2 2 0 0 1 2-2M7.5 13A2.5 2.5 0 0 0 5 15.5 2.5 2.5 0 0 0 7.5 18a2.5 2.5 0 0 0 2.5-2.5A2.5 2.5 0 0 0 7.5 13m9 0a2.5 2.5 0 0 0-2.5 2.5 2.5 2.5 0 0 0 2.5 2.5 2.5 2.5 0 0 0 2.5-2.5 2.5 2.5 0 0 0-2.5-2.5"/></svg>
|
|
395
|
+
|
|
396
|
+
</a>
|
|
397
|
+
RobotLab
|
|
398
|
+
</label>
|
|
399
|
+
|
|
400
|
+
<div class="md-nav__source">
|
|
401
|
+
<a href="https://github.com/madbomber/robot_lab" title="Go to repository" class="md-source" data-md-component="source">
|
|
402
|
+
<div class="md-source__icon md-icon">
|
|
403
|
+
|
|
404
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
|
|
405
|
+
</div>
|
|
406
|
+
<div class="md-source__repository">
|
|
407
|
+
madbomber/robot_lab
|
|
408
|
+
</div>
|
|
409
|
+
</a>
|
|
410
|
+
</div>
|
|
411
|
+
|
|
412
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
<li class="md-nav__item md-nav__item--nested">
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" >
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
<div class="md-nav__link md-nav__container">
|
|
444
|
+
<a href="../.." class="md-nav__link ">
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
<span class="md-ellipsis">
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
Home
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
</span>
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
</a>
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
<label class="md-nav__link " for="__nav_1" id="__nav_1_label" tabindex="0">
|
|
463
|
+
<span class="md-nav__icon md-icon"></span>
|
|
464
|
+
</label>
|
|
465
|
+
|
|
466
|
+
</div>
|
|
467
|
+
|
|
468
|
+
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
|
|
469
|
+
<label class="md-nav__title" for="__nav_1">
|
|
470
|
+
<span class="md-nav__icon md-icon"></span>
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
Home
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
</label>
|
|
477
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
<li class="md-nav__item">
|
|
488
|
+
<a href="../../concepts/" class="md-nav__link">
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
<span class="md-ellipsis">
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
Concepts
|
|
496
|
+
|
|
497
|
+
|
|
498
|
+
|
|
499
|
+
</span>
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
</a>
|
|
504
|
+
</li>
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
</ul>
|
|
510
|
+
</nav>
|
|
511
|
+
|
|
512
|
+
</li>
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
|
|
531
|
+
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
|
|
536
|
+
|
|
537
|
+
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
|
|
542
|
+
<li class="md-nav__item md-nav__item--nested">
|
|
543
|
+
|
|
544
|
+
|
|
545
|
+
|
|
546
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
<div class="md-nav__link md-nav__container">
|
|
550
|
+
<a href="../../getting-started/" class="md-nav__link ">
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
|
|
554
|
+
<span class="md-ellipsis">
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
Getting Started
|
|
558
|
+
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
</span>
|
|
562
|
+
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
</a>
|
|
566
|
+
|
|
567
|
+
|
|
568
|
+
<label class="md-nav__link " for="__nav_2" id="__nav_2_label" tabindex="0">
|
|
569
|
+
<span class="md-nav__icon md-icon"></span>
|
|
570
|
+
</label>
|
|
571
|
+
|
|
572
|
+
</div>
|
|
573
|
+
|
|
574
|
+
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
|
|
575
|
+
<label class="md-nav__title" for="__nav_2">
|
|
576
|
+
<span class="md-nav__icon md-icon"></span>
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
Getting Started
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
</label>
|
|
583
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
|
584
|
+
|
|
585
|
+
|
|
586
|
+
|
|
587
|
+
|
|
588
|
+
|
|
589
|
+
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
|
|
593
|
+
<li class="md-nav__item">
|
|
594
|
+
<a href="../../getting-started/installation/" class="md-nav__link">
|
|
595
|
+
|
|
596
|
+
|
|
597
|
+
|
|
598
|
+
<span class="md-ellipsis">
|
|
599
|
+
|
|
600
|
+
|
|
601
|
+
Installation
|
|
602
|
+
|
|
603
|
+
|
|
604
|
+
|
|
605
|
+
</span>
|
|
606
|
+
|
|
607
|
+
|
|
608
|
+
|
|
609
|
+
</a>
|
|
610
|
+
</li>
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
|
|
614
|
+
|
|
615
|
+
|
|
616
|
+
|
|
617
|
+
|
|
618
|
+
|
|
619
|
+
|
|
620
|
+
|
|
621
|
+
<li class="md-nav__item">
|
|
622
|
+
<a href="../../getting-started/quick-start/" class="md-nav__link">
|
|
623
|
+
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
<span class="md-ellipsis">
|
|
627
|
+
|
|
628
|
+
|
|
629
|
+
Quick Start
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
|
|
633
|
+
</span>
|
|
634
|
+
|
|
635
|
+
|
|
636
|
+
|
|
637
|
+
</a>
|
|
638
|
+
</li>
|
|
639
|
+
|
|
640
|
+
|
|
641
|
+
|
|
642
|
+
|
|
643
|
+
|
|
644
|
+
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
|
|
648
|
+
|
|
649
|
+
<li class="md-nav__item">
|
|
650
|
+
<a href="../../getting-started/configuration/" class="md-nav__link">
|
|
651
|
+
|
|
652
|
+
|
|
653
|
+
|
|
654
|
+
<span class="md-ellipsis">
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
Configuration
|
|
658
|
+
|
|
659
|
+
|
|
660
|
+
|
|
661
|
+
</span>
|
|
662
|
+
|
|
663
|
+
|
|
664
|
+
|
|
665
|
+
</a>
|
|
666
|
+
</li>
|
|
667
|
+
|
|
668
|
+
|
|
669
|
+
|
|
670
|
+
|
|
671
|
+
</ul>
|
|
672
|
+
</nav>
|
|
673
|
+
|
|
674
|
+
</li>
|
|
675
|
+
|
|
676
|
+
|
|
677
|
+
|
|
678
|
+
|
|
679
|
+
|
|
680
|
+
|
|
681
|
+
|
|
682
|
+
|
|
683
|
+
|
|
684
|
+
|
|
685
|
+
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
|
|
689
|
+
|
|
690
|
+
|
|
691
|
+
|
|
692
|
+
|
|
693
|
+
|
|
694
|
+
|
|
695
|
+
|
|
696
|
+
|
|
697
|
+
|
|
698
|
+
|
|
699
|
+
|
|
700
|
+
|
|
701
|
+
|
|
702
|
+
|
|
703
|
+
|
|
704
|
+
|
|
705
|
+
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
<li class="md-nav__item md-nav__item--nested">
|
|
709
|
+
|
|
710
|
+
|
|
711
|
+
|
|
712
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
|
|
713
|
+
|
|
714
|
+
|
|
715
|
+
<div class="md-nav__link md-nav__container">
|
|
716
|
+
<a href="../../architecture/" class="md-nav__link ">
|
|
717
|
+
|
|
718
|
+
|
|
719
|
+
|
|
720
|
+
<span class="md-ellipsis">
|
|
721
|
+
|
|
722
|
+
|
|
723
|
+
Architecture
|
|
724
|
+
|
|
725
|
+
|
|
726
|
+
|
|
727
|
+
</span>
|
|
728
|
+
|
|
729
|
+
|
|
730
|
+
|
|
731
|
+
</a>
|
|
732
|
+
|
|
733
|
+
|
|
734
|
+
<label class="md-nav__link " for="__nav_3" id="__nav_3_label" tabindex="0">
|
|
735
|
+
<span class="md-nav__icon md-icon"></span>
|
|
736
|
+
</label>
|
|
737
|
+
|
|
738
|
+
</div>
|
|
739
|
+
|
|
740
|
+
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
|
|
741
|
+
<label class="md-nav__title" for="__nav_3">
|
|
742
|
+
<span class="md-nav__icon md-icon"></span>
|
|
743
|
+
|
|
744
|
+
|
|
745
|
+
Architecture
|
|
746
|
+
|
|
747
|
+
|
|
748
|
+
</label>
|
|
749
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
|
750
|
+
|
|
751
|
+
|
|
752
|
+
|
|
753
|
+
|
|
754
|
+
|
|
755
|
+
|
|
756
|
+
|
|
757
|
+
|
|
758
|
+
|
|
759
|
+
<li class="md-nav__item">
|
|
760
|
+
<a href="../../architecture/core-concepts/" class="md-nav__link">
|
|
761
|
+
|
|
762
|
+
|
|
763
|
+
|
|
764
|
+
<span class="md-ellipsis">
|
|
765
|
+
|
|
766
|
+
|
|
767
|
+
Core Concepts
|
|
768
|
+
|
|
769
|
+
|
|
770
|
+
|
|
771
|
+
</span>
|
|
772
|
+
|
|
773
|
+
|
|
774
|
+
|
|
775
|
+
</a>
|
|
776
|
+
</li>
|
|
777
|
+
|
|
778
|
+
|
|
779
|
+
|
|
780
|
+
|
|
781
|
+
|
|
782
|
+
|
|
783
|
+
|
|
784
|
+
|
|
785
|
+
|
|
786
|
+
|
|
787
|
+
<li class="md-nav__item">
|
|
788
|
+
<a href="../../architecture/robot-execution/" class="md-nav__link">
|
|
789
|
+
|
|
790
|
+
|
|
791
|
+
|
|
792
|
+
<span class="md-ellipsis">
|
|
793
|
+
|
|
794
|
+
|
|
795
|
+
Robot Execution
|
|
796
|
+
|
|
797
|
+
|
|
798
|
+
|
|
799
|
+
</span>
|
|
800
|
+
|
|
801
|
+
|
|
802
|
+
|
|
803
|
+
</a>
|
|
804
|
+
</li>
|
|
805
|
+
|
|
806
|
+
|
|
807
|
+
|
|
808
|
+
|
|
809
|
+
|
|
810
|
+
|
|
811
|
+
|
|
812
|
+
|
|
813
|
+
|
|
814
|
+
|
|
815
|
+
<li class="md-nav__item">
|
|
816
|
+
<a href="../../architecture/network-orchestration/" class="md-nav__link">
|
|
817
|
+
|
|
818
|
+
|
|
819
|
+
|
|
820
|
+
<span class="md-ellipsis">
|
|
821
|
+
|
|
822
|
+
|
|
823
|
+
Network Orchestration
|
|
824
|
+
|
|
825
|
+
|
|
826
|
+
|
|
827
|
+
</span>
|
|
828
|
+
|
|
829
|
+
|
|
830
|
+
|
|
831
|
+
</a>
|
|
832
|
+
</li>
|
|
833
|
+
|
|
834
|
+
|
|
835
|
+
|
|
836
|
+
|
|
837
|
+
|
|
838
|
+
|
|
839
|
+
|
|
840
|
+
|
|
841
|
+
|
|
842
|
+
|
|
843
|
+
<li class="md-nav__item">
|
|
844
|
+
<a href="../../architecture/state-management/" class="md-nav__link">
|
|
845
|
+
|
|
846
|
+
|
|
847
|
+
|
|
848
|
+
<span class="md-ellipsis">
|
|
849
|
+
|
|
850
|
+
|
|
851
|
+
State Management
|
|
852
|
+
|
|
853
|
+
|
|
854
|
+
|
|
855
|
+
</span>
|
|
856
|
+
|
|
857
|
+
|
|
858
|
+
|
|
859
|
+
</a>
|
|
860
|
+
</li>
|
|
861
|
+
|
|
862
|
+
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
|
|
866
|
+
|
|
867
|
+
|
|
868
|
+
|
|
869
|
+
|
|
870
|
+
|
|
871
|
+
<li class="md-nav__item">
|
|
872
|
+
<a href="../../architecture/message-flow/" class="md-nav__link">
|
|
873
|
+
|
|
874
|
+
|
|
875
|
+
|
|
876
|
+
<span class="md-ellipsis">
|
|
877
|
+
|
|
878
|
+
|
|
879
|
+
Message Flow
|
|
880
|
+
|
|
881
|
+
|
|
882
|
+
|
|
883
|
+
</span>
|
|
884
|
+
|
|
885
|
+
|
|
886
|
+
|
|
887
|
+
</a>
|
|
888
|
+
</li>
|
|
889
|
+
|
|
890
|
+
|
|
891
|
+
|
|
892
|
+
|
|
893
|
+
</ul>
|
|
894
|
+
</nav>
|
|
895
|
+
|
|
896
|
+
</li>
|
|
897
|
+
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
|
|
901
|
+
|
|
902
|
+
|
|
903
|
+
|
|
904
|
+
|
|
905
|
+
|
|
906
|
+
|
|
907
|
+
|
|
908
|
+
|
|
909
|
+
|
|
910
|
+
|
|
911
|
+
|
|
912
|
+
|
|
913
|
+
|
|
914
|
+
|
|
915
|
+
|
|
916
|
+
|
|
917
|
+
|
|
918
|
+
|
|
919
|
+
|
|
920
|
+
|
|
921
|
+
|
|
922
|
+
|
|
923
|
+
|
|
924
|
+
|
|
925
|
+
|
|
926
|
+
|
|
927
|
+
|
|
928
|
+
|
|
929
|
+
|
|
930
|
+
|
|
931
|
+
|
|
932
|
+
|
|
933
|
+
|
|
934
|
+
|
|
935
|
+
|
|
936
|
+
|
|
937
|
+
|
|
938
|
+
|
|
939
|
+
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
|
|
940
|
+
|
|
941
|
+
|
|
942
|
+
|
|
943
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" checked>
|
|
944
|
+
|
|
945
|
+
|
|
946
|
+
<div class="md-nav__link md-nav__container">
|
|
947
|
+
<a href="../" class="md-nav__link ">
|
|
948
|
+
|
|
949
|
+
|
|
950
|
+
|
|
951
|
+
<span class="md-ellipsis">
|
|
952
|
+
|
|
953
|
+
|
|
954
|
+
Guides
|
|
955
|
+
|
|
956
|
+
|
|
957
|
+
|
|
958
|
+
</span>
|
|
959
|
+
|
|
960
|
+
|
|
961
|
+
|
|
962
|
+
</a>
|
|
963
|
+
|
|
964
|
+
|
|
965
|
+
<label class="md-nav__link " for="__nav_4" id="__nav_4_label" tabindex="">
|
|
966
|
+
<span class="md-nav__icon md-icon"></span>
|
|
967
|
+
</label>
|
|
968
|
+
|
|
969
|
+
</div>
|
|
970
|
+
|
|
971
|
+
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="true">
|
|
972
|
+
<label class="md-nav__title" for="__nav_4">
|
|
973
|
+
<span class="md-nav__icon md-icon"></span>
|
|
974
|
+
|
|
975
|
+
|
|
976
|
+
Guides
|
|
977
|
+
|
|
978
|
+
|
|
979
|
+
</label>
|
|
980
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
|
981
|
+
|
|
982
|
+
|
|
983
|
+
|
|
984
|
+
|
|
985
|
+
|
|
986
|
+
|
|
987
|
+
|
|
988
|
+
|
|
989
|
+
|
|
990
|
+
|
|
991
|
+
|
|
992
|
+
<li class="md-nav__item md-nav__item--active">
|
|
993
|
+
|
|
994
|
+
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
|
995
|
+
|
|
996
|
+
|
|
997
|
+
|
|
998
|
+
|
|
999
|
+
|
|
1000
|
+
<label class="md-nav__link md-nav__link--active" for="__toc">
|
|
1001
|
+
|
|
1002
|
+
|
|
1003
|
+
|
|
1004
|
+
<span class="md-ellipsis">
|
|
1005
|
+
|
|
1006
|
+
|
|
1007
|
+
Building Robots
|
|
1008
|
+
|
|
1009
|
+
|
|
1010
|
+
|
|
1011
|
+
</span>
|
|
1012
|
+
|
|
1013
|
+
|
|
1014
|
+
|
|
1015
|
+
<span class="md-nav__icon md-icon"></span>
|
|
1016
|
+
</label>
|
|
1017
|
+
|
|
1018
|
+
<a href="./" class="md-nav__link md-nav__link--active">
|
|
1019
|
+
|
|
1020
|
+
|
|
1021
|
+
|
|
1022
|
+
<span class="md-ellipsis">
|
|
1023
|
+
|
|
1024
|
+
|
|
1025
|
+
Building Robots
|
|
1026
|
+
|
|
1027
|
+
|
|
1028
|
+
|
|
1029
|
+
</span>
|
|
1030
|
+
|
|
1031
|
+
|
|
1032
|
+
|
|
1033
|
+
</a>
|
|
1034
|
+
|
|
1035
|
+
|
|
1036
|
+
|
|
1037
|
+
|
|
1038
|
+
|
|
1039
|
+
<nav class="md-nav md-nav--secondary" aria-label="On this page">
|
|
1040
|
+
|
|
1041
|
+
|
|
1042
|
+
|
|
1043
|
+
|
|
1044
|
+
|
|
1045
|
+
|
|
1046
|
+
<label class="md-nav__title" for="__toc">
|
|
1047
|
+
<span class="md-nav__icon md-icon"></span>
|
|
1048
|
+
On this page
|
|
1049
|
+
</label>
|
|
1050
|
+
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
1051
|
+
|
|
1052
|
+
<li class="md-nav__item">
|
|
1053
|
+
<a href="#basic-robot" class="md-nav__link">
|
|
1054
|
+
<span class="md-ellipsis">
|
|
1055
|
+
|
|
1056
|
+
Basic Robot
|
|
1057
|
+
|
|
1058
|
+
</span>
|
|
1059
|
+
</a>
|
|
1060
|
+
|
|
1061
|
+
</li>
|
|
1062
|
+
|
|
1063
|
+
<li class="md-nav__item">
|
|
1064
|
+
<a href="#robot-properties" class="md-nav__link">
|
|
1065
|
+
<span class="md-ellipsis">
|
|
1066
|
+
|
|
1067
|
+
Robot Properties
|
|
1068
|
+
|
|
1069
|
+
</span>
|
|
1070
|
+
</a>
|
|
1071
|
+
|
|
1072
|
+
<nav class="md-nav" aria-label="Robot Properties">
|
|
1073
|
+
<ul class="md-nav__list">
|
|
1074
|
+
|
|
1075
|
+
<li class="md-nav__item">
|
|
1076
|
+
<a href="#name" class="md-nav__link">
|
|
1077
|
+
<span class="md-ellipsis">
|
|
1078
|
+
|
|
1079
|
+
Name
|
|
1080
|
+
|
|
1081
|
+
</span>
|
|
1082
|
+
</a>
|
|
1083
|
+
|
|
1084
|
+
</li>
|
|
1085
|
+
|
|
1086
|
+
<li class="md-nav__item">
|
|
1087
|
+
<a href="#description" class="md-nav__link">
|
|
1088
|
+
<span class="md-ellipsis">
|
|
1089
|
+
|
|
1090
|
+
Description
|
|
1091
|
+
|
|
1092
|
+
</span>
|
|
1093
|
+
</a>
|
|
1094
|
+
|
|
1095
|
+
</li>
|
|
1096
|
+
|
|
1097
|
+
<li class="md-nav__item">
|
|
1098
|
+
<a href="#model" class="md-nav__link">
|
|
1099
|
+
<span class="md-ellipsis">
|
|
1100
|
+
|
|
1101
|
+
Model
|
|
1102
|
+
|
|
1103
|
+
</span>
|
|
1104
|
+
</a>
|
|
1105
|
+
|
|
1106
|
+
</li>
|
|
1107
|
+
|
|
1108
|
+
<li class="md-nav__item">
|
|
1109
|
+
<a href="#system-prompt" class="md-nav__link">
|
|
1110
|
+
<span class="md-ellipsis">
|
|
1111
|
+
|
|
1112
|
+
System Prompt
|
|
1113
|
+
|
|
1114
|
+
</span>
|
|
1115
|
+
</a>
|
|
1116
|
+
|
|
1117
|
+
</li>
|
|
1118
|
+
|
|
1119
|
+
</ul>
|
|
1120
|
+
</nav>
|
|
1121
|
+
|
|
1122
|
+
</li>
|
|
1123
|
+
|
|
1124
|
+
<li class="md-nav__item">
|
|
1125
|
+
<a href="#template-files" class="md-nav__link">
|
|
1126
|
+
<span class="md-ellipsis">
|
|
1127
|
+
|
|
1128
|
+
Template Files
|
|
1129
|
+
|
|
1130
|
+
</span>
|
|
1131
|
+
</a>
|
|
1132
|
+
|
|
1133
|
+
<nav class="md-nav" aria-label="Template Files">
|
|
1134
|
+
<ul class="md-nav__list">
|
|
1135
|
+
|
|
1136
|
+
<li class="md-nav__item">
|
|
1137
|
+
<a href="#template-format" class="md-nav__link">
|
|
1138
|
+
<span class="md-ellipsis">
|
|
1139
|
+
|
|
1140
|
+
Template Format
|
|
1141
|
+
|
|
1142
|
+
</span>
|
|
1143
|
+
</a>
|
|
1144
|
+
|
|
1145
|
+
</li>
|
|
1146
|
+
|
|
1147
|
+
<li class="md-nav__item">
|
|
1148
|
+
<a href="#front-matter-configuration" class="md-nav__link">
|
|
1149
|
+
<span class="md-ellipsis">
|
|
1150
|
+
|
|
1151
|
+
Front Matter Configuration
|
|
1152
|
+
|
|
1153
|
+
</span>
|
|
1154
|
+
</a>
|
|
1155
|
+
|
|
1156
|
+
</li>
|
|
1157
|
+
|
|
1158
|
+
<li class="md-nav__item">
|
|
1159
|
+
<a href="#self-contained-templates" class="md-nav__link">
|
|
1160
|
+
<span class="md-ellipsis">
|
|
1161
|
+
|
|
1162
|
+
Self-Contained Templates
|
|
1163
|
+
|
|
1164
|
+
</span>
|
|
1165
|
+
</a>
|
|
1166
|
+
|
|
1167
|
+
</li>
|
|
1168
|
+
|
|
1169
|
+
<li class="md-nav__item">
|
|
1170
|
+
<a href="#tools-in-front-matter" class="md-nav__link">
|
|
1171
|
+
<span class="md-ellipsis">
|
|
1172
|
+
|
|
1173
|
+
Tools in Front Matter
|
|
1174
|
+
|
|
1175
|
+
</span>
|
|
1176
|
+
</a>
|
|
1177
|
+
|
|
1178
|
+
</li>
|
|
1179
|
+
|
|
1180
|
+
<li class="md-nav__item">
|
|
1181
|
+
<a href="#mcp-in-front-matter" class="md-nav__link">
|
|
1182
|
+
<span class="md-ellipsis">
|
|
1183
|
+
|
|
1184
|
+
MCP in Front Matter
|
|
1185
|
+
|
|
1186
|
+
</span>
|
|
1187
|
+
</a>
|
|
1188
|
+
|
|
1189
|
+
</li>
|
|
1190
|
+
|
|
1191
|
+
<li class="md-nav__item">
|
|
1192
|
+
<a href="#template-with-system-prompt" class="md-nav__link">
|
|
1193
|
+
<span class="md-ellipsis">
|
|
1194
|
+
|
|
1195
|
+
Template with System Prompt
|
|
1196
|
+
|
|
1197
|
+
</span>
|
|
1198
|
+
</a>
|
|
1199
|
+
|
|
1200
|
+
</li>
|
|
1201
|
+
|
|
1202
|
+
</ul>
|
|
1203
|
+
</nav>
|
|
1204
|
+
|
|
1205
|
+
</li>
|
|
1206
|
+
|
|
1207
|
+
<li class="md-nav__item">
|
|
1208
|
+
<a href="#composable-skills" class="md-nav__link">
|
|
1209
|
+
<span class="md-ellipsis">
|
|
1210
|
+
|
|
1211
|
+
Composable Skills
|
|
1212
|
+
|
|
1213
|
+
</span>
|
|
1214
|
+
</a>
|
|
1215
|
+
|
|
1216
|
+
<nav class="md-nav" aria-label="Composable Skills">
|
|
1217
|
+
<ul class="md-nav__list">
|
|
1218
|
+
|
|
1219
|
+
<li class="md-nav__item">
|
|
1220
|
+
<a href="#why-skills" class="md-nav__link">
|
|
1221
|
+
<span class="md-ellipsis">
|
|
1222
|
+
|
|
1223
|
+
Why Skills?
|
|
1224
|
+
|
|
1225
|
+
</span>
|
|
1226
|
+
</a>
|
|
1227
|
+
|
|
1228
|
+
</li>
|
|
1229
|
+
|
|
1230
|
+
<li class="md-nav__item">
|
|
1231
|
+
<a href="#defining-a-skill" class="md-nav__link">
|
|
1232
|
+
<span class="md-ellipsis">
|
|
1233
|
+
|
|
1234
|
+
Defining a Skill
|
|
1235
|
+
|
|
1236
|
+
</span>
|
|
1237
|
+
</a>
|
|
1238
|
+
|
|
1239
|
+
</li>
|
|
1240
|
+
|
|
1241
|
+
<li class="md-nav__item">
|
|
1242
|
+
<a href="#using-skills-via-constructor" class="md-nav__link">
|
|
1243
|
+
<span class="md-ellipsis">
|
|
1244
|
+
|
|
1245
|
+
Using Skills via Constructor
|
|
1246
|
+
|
|
1247
|
+
</span>
|
|
1248
|
+
</a>
|
|
1249
|
+
|
|
1250
|
+
</li>
|
|
1251
|
+
|
|
1252
|
+
<li class="md-nav__item">
|
|
1253
|
+
<a href="#using-skills-via-front-matter" class="md-nav__link">
|
|
1254
|
+
<span class="md-ellipsis">
|
|
1255
|
+
|
|
1256
|
+
Using Skills via Front Matter
|
|
1257
|
+
|
|
1258
|
+
</span>
|
|
1259
|
+
</a>
|
|
1260
|
+
|
|
1261
|
+
</li>
|
|
1262
|
+
|
|
1263
|
+
<li class="md-nav__item">
|
|
1264
|
+
<a href="#nested-skills" class="md-nav__link">
|
|
1265
|
+
<span class="md-ellipsis">
|
|
1266
|
+
|
|
1267
|
+
Nested Skills
|
|
1268
|
+
|
|
1269
|
+
</span>
|
|
1270
|
+
</a>
|
|
1271
|
+
|
|
1272
|
+
</li>
|
|
1273
|
+
|
|
1274
|
+
<li class="md-nav__item">
|
|
1275
|
+
<a href="#cycle-detection" class="md-nav__link">
|
|
1276
|
+
<span class="md-ellipsis">
|
|
1277
|
+
|
|
1278
|
+
Cycle Detection
|
|
1279
|
+
|
|
1280
|
+
</span>
|
|
1281
|
+
</a>
|
|
1282
|
+
|
|
1283
|
+
</li>
|
|
1284
|
+
|
|
1285
|
+
<li class="md-nav__item">
|
|
1286
|
+
<a href="#config-cascade" class="md-nav__link">
|
|
1287
|
+
<span class="md-ellipsis">
|
|
1288
|
+
|
|
1289
|
+
Config Cascade
|
|
1290
|
+
|
|
1291
|
+
</span>
|
|
1292
|
+
</a>
|
|
1293
|
+
|
|
1294
|
+
</li>
|
|
1295
|
+
|
|
1296
|
+
<li class="md-nav__item">
|
|
1297
|
+
<a href="#skills-without-a-main-template" class="md-nav__link">
|
|
1298
|
+
<span class="md-ellipsis">
|
|
1299
|
+
|
|
1300
|
+
Skills Without a Main Template
|
|
1301
|
+
|
|
1302
|
+
</span>
|
|
1303
|
+
</a>
|
|
1304
|
+
|
|
1305
|
+
</li>
|
|
1306
|
+
|
|
1307
|
+
<li class="md-nav__item">
|
|
1308
|
+
<a href="#shared-context" class="md-nav__link">
|
|
1309
|
+
<span class="md-ellipsis">
|
|
1310
|
+
|
|
1311
|
+
Shared Context
|
|
1312
|
+
|
|
1313
|
+
</span>
|
|
1314
|
+
</a>
|
|
1315
|
+
|
|
1316
|
+
</li>
|
|
1317
|
+
|
|
1318
|
+
</ul>
|
|
1319
|
+
</nav>
|
|
1320
|
+
|
|
1321
|
+
</li>
|
|
1322
|
+
|
|
1323
|
+
<li class="md-nav__item">
|
|
1324
|
+
<a href="#adding-tools" class="md-nav__link">
|
|
1325
|
+
<span class="md-ellipsis">
|
|
1326
|
+
|
|
1327
|
+
Adding Tools
|
|
1328
|
+
|
|
1329
|
+
</span>
|
|
1330
|
+
</a>
|
|
1331
|
+
|
|
1332
|
+
</li>
|
|
1333
|
+
|
|
1334
|
+
<li class="md-nav__item">
|
|
1335
|
+
<a href="#mcp-configuration" class="md-nav__link">
|
|
1336
|
+
<span class="md-ellipsis">
|
|
1337
|
+
|
|
1338
|
+
MCP Configuration
|
|
1339
|
+
|
|
1340
|
+
</span>
|
|
1341
|
+
</a>
|
|
1342
|
+
|
|
1343
|
+
</li>
|
|
1344
|
+
|
|
1345
|
+
<li class="md-nav__item">
|
|
1346
|
+
<a href="#chaining-configuration" class="md-nav__link">
|
|
1347
|
+
<span class="md-ellipsis">
|
|
1348
|
+
|
|
1349
|
+
Chaining Configuration
|
|
1350
|
+
|
|
1351
|
+
</span>
|
|
1352
|
+
</a>
|
|
1353
|
+
|
|
1354
|
+
<nav class="md-nav" aria-label="Chaining Configuration">
|
|
1355
|
+
<ul class="md-nav__list">
|
|
1356
|
+
|
|
1357
|
+
<li class="md-nav__item">
|
|
1358
|
+
<a href="#available-chain-methods" class="md-nav__link">
|
|
1359
|
+
<span class="md-ellipsis">
|
|
1360
|
+
|
|
1361
|
+
Available Chain Methods
|
|
1362
|
+
|
|
1363
|
+
</span>
|
|
1364
|
+
</a>
|
|
1365
|
+
|
|
1366
|
+
</li>
|
|
1367
|
+
|
|
1368
|
+
</ul>
|
|
1369
|
+
</nav>
|
|
1370
|
+
|
|
1371
|
+
</li>
|
|
1372
|
+
|
|
1373
|
+
<li class="md-nav__item">
|
|
1374
|
+
<a href="#running-robots" class="md-nav__link">
|
|
1375
|
+
<span class="md-ellipsis">
|
|
1376
|
+
|
|
1377
|
+
Running Robots
|
|
1378
|
+
|
|
1379
|
+
</span>
|
|
1380
|
+
</a>
|
|
1381
|
+
|
|
1382
|
+
<nav class="md-nav" aria-label="Running Robots">
|
|
1383
|
+
<ul class="md-nav__list">
|
|
1384
|
+
|
|
1385
|
+
<li class="md-nav__item">
|
|
1386
|
+
<a href="#standalone" class="md-nav__link">
|
|
1387
|
+
<span class="md-ellipsis">
|
|
1388
|
+
|
|
1389
|
+
Standalone
|
|
1390
|
+
|
|
1391
|
+
</span>
|
|
1392
|
+
</a>
|
|
1393
|
+
|
|
1394
|
+
</li>
|
|
1395
|
+
|
|
1396
|
+
<li class="md-nav__item">
|
|
1397
|
+
<a href="#with-runtime-memory" class="md-nav__link">
|
|
1398
|
+
<span class="md-ellipsis">
|
|
1399
|
+
|
|
1400
|
+
With Runtime Memory
|
|
1401
|
+
|
|
1402
|
+
</span>
|
|
1403
|
+
</a>
|
|
1404
|
+
|
|
1405
|
+
</li>
|
|
1406
|
+
|
|
1407
|
+
<li class="md-nav__item">
|
|
1408
|
+
<a href="#in-a-network" class="md-nav__link">
|
|
1409
|
+
<span class="md-ellipsis">
|
|
1410
|
+
|
|
1411
|
+
In a Network
|
|
1412
|
+
|
|
1413
|
+
</span>
|
|
1414
|
+
</a>
|
|
1415
|
+
|
|
1416
|
+
</li>
|
|
1417
|
+
|
|
1418
|
+
<li class="md-nav__item">
|
|
1419
|
+
<a href="#with-streaming" class="md-nav__link">
|
|
1420
|
+
<span class="md-ellipsis">
|
|
1421
|
+
|
|
1422
|
+
With Streaming
|
|
1423
|
+
|
|
1424
|
+
</span>
|
|
1425
|
+
</a>
|
|
1426
|
+
|
|
1427
|
+
</li>
|
|
1428
|
+
|
|
1429
|
+
</ul>
|
|
1430
|
+
</nav>
|
|
1431
|
+
|
|
1432
|
+
</li>
|
|
1433
|
+
|
|
1434
|
+
<li class="md-nav__item">
|
|
1435
|
+
<a href="#robot-patterns" class="md-nav__link">
|
|
1436
|
+
<span class="md-ellipsis">
|
|
1437
|
+
|
|
1438
|
+
Robot Patterns
|
|
1439
|
+
|
|
1440
|
+
</span>
|
|
1441
|
+
</a>
|
|
1442
|
+
|
|
1443
|
+
<nav class="md-nav" aria-label="Robot Patterns">
|
|
1444
|
+
<ul class="md-nav__list">
|
|
1445
|
+
|
|
1446
|
+
<li class="md-nav__item">
|
|
1447
|
+
<a href="#classifier-robot" class="md-nav__link">
|
|
1448
|
+
<span class="md-ellipsis">
|
|
1449
|
+
|
|
1450
|
+
Classifier Robot
|
|
1451
|
+
|
|
1452
|
+
</span>
|
|
1453
|
+
</a>
|
|
1454
|
+
|
|
1455
|
+
</li>
|
|
1456
|
+
|
|
1457
|
+
<li class="md-nav__item">
|
|
1458
|
+
<a href="#specialist-robot" class="md-nav__link">
|
|
1459
|
+
<span class="md-ellipsis">
|
|
1460
|
+
|
|
1461
|
+
Specialist Robot
|
|
1462
|
+
|
|
1463
|
+
</span>
|
|
1464
|
+
</a>
|
|
1465
|
+
|
|
1466
|
+
</li>
|
|
1467
|
+
|
|
1468
|
+
<li class="md-nav__item">
|
|
1469
|
+
<a href="#summarizer-robot" class="md-nav__link">
|
|
1470
|
+
<span class="md-ellipsis">
|
|
1471
|
+
|
|
1472
|
+
Summarizer Robot
|
|
1473
|
+
|
|
1474
|
+
</span>
|
|
1475
|
+
</a>
|
|
1476
|
+
|
|
1477
|
+
</li>
|
|
1478
|
+
|
|
1479
|
+
<li class="md-nav__item">
|
|
1480
|
+
<a href="#bus-connected-robot" class="md-nav__link">
|
|
1481
|
+
<span class="md-ellipsis">
|
|
1482
|
+
|
|
1483
|
+
Bus-Connected Robot
|
|
1484
|
+
|
|
1485
|
+
</span>
|
|
1486
|
+
</a>
|
|
1487
|
+
|
|
1488
|
+
</li>
|
|
1489
|
+
|
|
1490
|
+
<li class="md-nav__item">
|
|
1491
|
+
<a href="#spawning-robots-dynamically" class="md-nav__link">
|
|
1492
|
+
<span class="md-ellipsis">
|
|
1493
|
+
|
|
1494
|
+
Spawning Robots Dynamically
|
|
1495
|
+
|
|
1496
|
+
</span>
|
|
1497
|
+
</a>
|
|
1498
|
+
|
|
1499
|
+
</li>
|
|
1500
|
+
|
|
1501
|
+
</ul>
|
|
1502
|
+
</nav>
|
|
1503
|
+
|
|
1504
|
+
</li>
|
|
1505
|
+
|
|
1506
|
+
<li class="md-nav__item">
|
|
1507
|
+
<a href="#configuration" class="md-nav__link">
|
|
1508
|
+
<span class="md-ellipsis">
|
|
1509
|
+
|
|
1510
|
+
Configuration
|
|
1511
|
+
|
|
1512
|
+
</span>
|
|
1513
|
+
</a>
|
|
1514
|
+
|
|
1515
|
+
</li>
|
|
1516
|
+
|
|
1517
|
+
<li class="md-nav__item">
|
|
1518
|
+
<a href="#best-practices" class="md-nav__link">
|
|
1519
|
+
<span class="md-ellipsis">
|
|
1520
|
+
|
|
1521
|
+
Best Practices
|
|
1522
|
+
|
|
1523
|
+
</span>
|
|
1524
|
+
</a>
|
|
1525
|
+
|
|
1526
|
+
<nav class="md-nav" aria-label="Best Practices">
|
|
1527
|
+
<ul class="md-nav__list">
|
|
1528
|
+
|
|
1529
|
+
<li class="md-nav__item">
|
|
1530
|
+
<a href="#1-clear-focused-prompts" class="md-nav__link">
|
|
1531
|
+
<span class="md-ellipsis">
|
|
1532
|
+
|
|
1533
|
+
1. Clear, Focused Prompts
|
|
1534
|
+
|
|
1535
|
+
</span>
|
|
1536
|
+
</a>
|
|
1537
|
+
|
|
1538
|
+
</li>
|
|
1539
|
+
|
|
1540
|
+
<li class="md-nav__item">
|
|
1541
|
+
<a href="#2-compose-behaviors-with-skills" class="md-nav__link">
|
|
1542
|
+
<span class="md-ellipsis">
|
|
1543
|
+
|
|
1544
|
+
2. Compose Behaviors with Skills
|
|
1545
|
+
|
|
1546
|
+
</span>
|
|
1547
|
+
</a>
|
|
1548
|
+
|
|
1549
|
+
</li>
|
|
1550
|
+
|
|
1551
|
+
<li class="md-nav__item">
|
|
1552
|
+
<a href="#3-use-templates-for-reusable-prompts" class="md-nav__link">
|
|
1553
|
+
<span class="md-ellipsis">
|
|
1554
|
+
|
|
1555
|
+
3. Use Templates for Reusable Prompts
|
|
1556
|
+
|
|
1557
|
+
</span>
|
|
1558
|
+
</a>
|
|
1559
|
+
|
|
1560
|
+
</li>
|
|
1561
|
+
|
|
1562
|
+
<li class="md-nav__item">
|
|
1563
|
+
<a href="#4-handle-tool-errors-gracefully" class="md-nav__link">
|
|
1564
|
+
<span class="md-ellipsis">
|
|
1565
|
+
|
|
1566
|
+
4. Handle Tool Errors Gracefully
|
|
1567
|
+
|
|
1568
|
+
</span>
|
|
1569
|
+
</a>
|
|
1570
|
+
|
|
1571
|
+
</li>
|
|
1572
|
+
|
|
1573
|
+
</ul>
|
|
1574
|
+
</nav>
|
|
1575
|
+
|
|
1576
|
+
</li>
|
|
1577
|
+
|
|
1578
|
+
<li class="md-nav__item">
|
|
1579
|
+
<a href="#next-steps" class="md-nav__link">
|
|
1580
|
+
<span class="md-ellipsis">
|
|
1581
|
+
|
|
1582
|
+
Next Steps
|
|
1583
|
+
|
|
1584
|
+
</span>
|
|
1585
|
+
</a>
|
|
1586
|
+
|
|
1587
|
+
</li>
|
|
1588
|
+
|
|
1589
|
+
</ul>
|
|
1590
|
+
|
|
1591
|
+
</nav>
|
|
1592
|
+
|
|
1593
|
+
</li>
|
|
1594
|
+
|
|
1595
|
+
|
|
1596
|
+
|
|
1597
|
+
|
|
1598
|
+
|
|
1599
|
+
|
|
1600
|
+
|
|
1601
|
+
|
|
1602
|
+
|
|
1603
|
+
|
|
1604
|
+
<li class="md-nav__item">
|
|
1605
|
+
<a href="../creating-networks/" class="md-nav__link">
|
|
1606
|
+
|
|
1607
|
+
|
|
1608
|
+
|
|
1609
|
+
<span class="md-ellipsis">
|
|
1610
|
+
|
|
1611
|
+
|
|
1612
|
+
Creating Networks
|
|
1613
|
+
|
|
1614
|
+
|
|
1615
|
+
|
|
1616
|
+
</span>
|
|
1617
|
+
|
|
1618
|
+
|
|
1619
|
+
|
|
1620
|
+
</a>
|
|
1621
|
+
</li>
|
|
1622
|
+
|
|
1623
|
+
|
|
1624
|
+
|
|
1625
|
+
|
|
1626
|
+
|
|
1627
|
+
|
|
1628
|
+
|
|
1629
|
+
|
|
1630
|
+
|
|
1631
|
+
|
|
1632
|
+
<li class="md-nav__item">
|
|
1633
|
+
<a href="../using-tools/" class="md-nav__link">
|
|
1634
|
+
|
|
1635
|
+
|
|
1636
|
+
|
|
1637
|
+
<span class="md-ellipsis">
|
|
1638
|
+
|
|
1639
|
+
|
|
1640
|
+
Using Tools
|
|
1641
|
+
|
|
1642
|
+
|
|
1643
|
+
|
|
1644
|
+
</span>
|
|
1645
|
+
|
|
1646
|
+
|
|
1647
|
+
|
|
1648
|
+
</a>
|
|
1649
|
+
</li>
|
|
1650
|
+
|
|
1651
|
+
|
|
1652
|
+
|
|
1653
|
+
|
|
1654
|
+
|
|
1655
|
+
|
|
1656
|
+
|
|
1657
|
+
|
|
1658
|
+
|
|
1659
|
+
|
|
1660
|
+
<li class="md-nav__item">
|
|
1661
|
+
<a href="../mcp-integration/" class="md-nav__link">
|
|
1662
|
+
|
|
1663
|
+
|
|
1664
|
+
|
|
1665
|
+
<span class="md-ellipsis">
|
|
1666
|
+
|
|
1667
|
+
|
|
1668
|
+
MCP Integration
|
|
1669
|
+
|
|
1670
|
+
|
|
1671
|
+
|
|
1672
|
+
</span>
|
|
1673
|
+
|
|
1674
|
+
|
|
1675
|
+
|
|
1676
|
+
</a>
|
|
1677
|
+
</li>
|
|
1678
|
+
|
|
1679
|
+
|
|
1680
|
+
|
|
1681
|
+
|
|
1682
|
+
|
|
1683
|
+
|
|
1684
|
+
|
|
1685
|
+
|
|
1686
|
+
|
|
1687
|
+
|
|
1688
|
+
<li class="md-nav__item">
|
|
1689
|
+
<a href="../streaming/" class="md-nav__link">
|
|
1690
|
+
|
|
1691
|
+
|
|
1692
|
+
|
|
1693
|
+
<span class="md-ellipsis">
|
|
1694
|
+
|
|
1695
|
+
|
|
1696
|
+
Streaming Responses
|
|
1697
|
+
|
|
1698
|
+
|
|
1699
|
+
|
|
1700
|
+
</span>
|
|
1701
|
+
|
|
1702
|
+
|
|
1703
|
+
|
|
1704
|
+
</a>
|
|
1705
|
+
</li>
|
|
1706
|
+
|
|
1707
|
+
|
|
1708
|
+
|
|
1709
|
+
|
|
1710
|
+
|
|
1711
|
+
|
|
1712
|
+
|
|
1713
|
+
|
|
1714
|
+
|
|
1715
|
+
|
|
1716
|
+
<li class="md-nav__item">
|
|
1717
|
+
<a href="../memory/" class="md-nav__link">
|
|
1718
|
+
|
|
1719
|
+
|
|
1720
|
+
|
|
1721
|
+
<span class="md-ellipsis">
|
|
1722
|
+
|
|
1723
|
+
|
|
1724
|
+
Memory System
|
|
1725
|
+
|
|
1726
|
+
|
|
1727
|
+
|
|
1728
|
+
</span>
|
|
1729
|
+
|
|
1730
|
+
|
|
1731
|
+
|
|
1732
|
+
</a>
|
|
1733
|
+
</li>
|
|
1734
|
+
|
|
1735
|
+
|
|
1736
|
+
|
|
1737
|
+
|
|
1738
|
+
|
|
1739
|
+
|
|
1740
|
+
|
|
1741
|
+
|
|
1742
|
+
|
|
1743
|
+
|
|
1744
|
+
<li class="md-nav__item">
|
|
1745
|
+
<a href="../rails-integration/" class="md-nav__link">
|
|
1746
|
+
|
|
1747
|
+
|
|
1748
|
+
|
|
1749
|
+
<span class="md-ellipsis">
|
|
1750
|
+
|
|
1751
|
+
|
|
1752
|
+
Rails Integration
|
|
1753
|
+
|
|
1754
|
+
|
|
1755
|
+
|
|
1756
|
+
</span>
|
|
1757
|
+
|
|
1758
|
+
|
|
1759
|
+
|
|
1760
|
+
</a>
|
|
1761
|
+
</li>
|
|
1762
|
+
|
|
1763
|
+
|
|
1764
|
+
|
|
1765
|
+
|
|
1766
|
+
</ul>
|
|
1767
|
+
</nav>
|
|
1768
|
+
|
|
1769
|
+
</li>
|
|
1770
|
+
|
|
1771
|
+
|
|
1772
|
+
|
|
1773
|
+
|
|
1774
|
+
|
|
1775
|
+
|
|
1776
|
+
|
|
1777
|
+
|
|
1778
|
+
|
|
1779
|
+
|
|
1780
|
+
|
|
1781
|
+
|
|
1782
|
+
|
|
1783
|
+
|
|
1784
|
+
|
|
1785
|
+
|
|
1786
|
+
|
|
1787
|
+
|
|
1788
|
+
|
|
1789
|
+
|
|
1790
|
+
|
|
1791
|
+
|
|
1792
|
+
|
|
1793
|
+
|
|
1794
|
+
|
|
1795
|
+
|
|
1796
|
+
|
|
1797
|
+
|
|
1798
|
+
|
|
1799
|
+
|
|
1800
|
+
|
|
1801
|
+
<li class="md-nav__item md-nav__item--nested">
|
|
1802
|
+
|
|
1803
|
+
|
|
1804
|
+
|
|
1805
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
|
|
1806
|
+
|
|
1807
|
+
|
|
1808
|
+
<div class="md-nav__link md-nav__container">
|
|
1809
|
+
<a href="../../api/" class="md-nav__link ">
|
|
1810
|
+
|
|
1811
|
+
|
|
1812
|
+
|
|
1813
|
+
<span class="md-ellipsis">
|
|
1814
|
+
|
|
1815
|
+
|
|
1816
|
+
API Reference
|
|
1817
|
+
|
|
1818
|
+
|
|
1819
|
+
|
|
1820
|
+
</span>
|
|
1821
|
+
|
|
1822
|
+
|
|
1823
|
+
|
|
1824
|
+
</a>
|
|
1825
|
+
|
|
1826
|
+
|
|
1827
|
+
<label class="md-nav__link " for="__nav_5" id="__nav_5_label" tabindex="0">
|
|
1828
|
+
<span class="md-nav__icon md-icon"></span>
|
|
1829
|
+
</label>
|
|
1830
|
+
|
|
1831
|
+
</div>
|
|
1832
|
+
|
|
1833
|
+
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
|
|
1834
|
+
<label class="md-nav__title" for="__nav_5">
|
|
1835
|
+
<span class="md-nav__icon md-icon"></span>
|
|
1836
|
+
|
|
1837
|
+
|
|
1838
|
+
API Reference
|
|
1839
|
+
|
|
1840
|
+
|
|
1841
|
+
</label>
|
|
1842
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
|
1843
|
+
|
|
1844
|
+
|
|
1845
|
+
|
|
1846
|
+
|
|
1847
|
+
|
|
1848
|
+
|
|
1849
|
+
|
|
1850
|
+
|
|
1851
|
+
|
|
1852
|
+
|
|
1853
|
+
|
|
1854
|
+
|
|
1855
|
+
|
|
1856
|
+
|
|
1857
|
+
|
|
1858
|
+
|
|
1859
|
+
|
|
1860
|
+
|
|
1861
|
+
|
|
1862
|
+
|
|
1863
|
+
|
|
1864
|
+
|
|
1865
|
+
|
|
1866
|
+
|
|
1867
|
+
|
|
1868
|
+
|
|
1869
|
+
|
|
1870
|
+
|
|
1871
|
+
|
|
1872
|
+
|
|
1873
|
+
|
|
1874
|
+
|
|
1875
|
+
|
|
1876
|
+
<li class="md-nav__item md-nav__item--nested">
|
|
1877
|
+
|
|
1878
|
+
|
|
1879
|
+
|
|
1880
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_2" >
|
|
1881
|
+
|
|
1882
|
+
|
|
1883
|
+
<div class="md-nav__link md-nav__container">
|
|
1884
|
+
<a href="../../api/core/" class="md-nav__link ">
|
|
1885
|
+
|
|
1886
|
+
|
|
1887
|
+
|
|
1888
|
+
<span class="md-ellipsis">
|
|
1889
|
+
|
|
1890
|
+
|
|
1891
|
+
Core Classes
|
|
1892
|
+
|
|
1893
|
+
|
|
1894
|
+
|
|
1895
|
+
</span>
|
|
1896
|
+
|
|
1897
|
+
|
|
1898
|
+
|
|
1899
|
+
</a>
|
|
1900
|
+
|
|
1901
|
+
|
|
1902
|
+
<label class="md-nav__link " for="__nav_5_2" id="__nav_5_2_label" tabindex="0">
|
|
1903
|
+
<span class="md-nav__icon md-icon"></span>
|
|
1904
|
+
</label>
|
|
1905
|
+
|
|
1906
|
+
</div>
|
|
1907
|
+
|
|
1908
|
+
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false">
|
|
1909
|
+
<label class="md-nav__title" for="__nav_5_2">
|
|
1910
|
+
<span class="md-nav__icon md-icon"></span>
|
|
1911
|
+
|
|
1912
|
+
|
|
1913
|
+
Core Classes
|
|
1914
|
+
|
|
1915
|
+
|
|
1916
|
+
</label>
|
|
1917
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
|
1918
|
+
|
|
1919
|
+
|
|
1920
|
+
|
|
1921
|
+
|
|
1922
|
+
|
|
1923
|
+
|
|
1924
|
+
|
|
1925
|
+
|
|
1926
|
+
|
|
1927
|
+
<li class="md-nav__item">
|
|
1928
|
+
<a href="../../api/core/robot/" class="md-nav__link">
|
|
1929
|
+
|
|
1930
|
+
|
|
1931
|
+
|
|
1932
|
+
<span class="md-ellipsis">
|
|
1933
|
+
|
|
1934
|
+
|
|
1935
|
+
Robot
|
|
1936
|
+
|
|
1937
|
+
|
|
1938
|
+
|
|
1939
|
+
</span>
|
|
1940
|
+
|
|
1941
|
+
|
|
1942
|
+
|
|
1943
|
+
</a>
|
|
1944
|
+
</li>
|
|
1945
|
+
|
|
1946
|
+
|
|
1947
|
+
|
|
1948
|
+
|
|
1949
|
+
|
|
1950
|
+
|
|
1951
|
+
|
|
1952
|
+
|
|
1953
|
+
|
|
1954
|
+
|
|
1955
|
+
<li class="md-nav__item">
|
|
1956
|
+
<a href="../../api/core/network/" class="md-nav__link">
|
|
1957
|
+
|
|
1958
|
+
|
|
1959
|
+
|
|
1960
|
+
<span class="md-ellipsis">
|
|
1961
|
+
|
|
1962
|
+
|
|
1963
|
+
Network
|
|
1964
|
+
|
|
1965
|
+
|
|
1966
|
+
|
|
1967
|
+
</span>
|
|
1968
|
+
|
|
1969
|
+
|
|
1970
|
+
|
|
1971
|
+
</a>
|
|
1972
|
+
</li>
|
|
1973
|
+
|
|
1974
|
+
|
|
1975
|
+
|
|
1976
|
+
|
|
1977
|
+
|
|
1978
|
+
|
|
1979
|
+
|
|
1980
|
+
|
|
1981
|
+
|
|
1982
|
+
|
|
1983
|
+
<li class="md-nav__item">
|
|
1984
|
+
<a href="../../api/core/state/" class="md-nav__link">
|
|
1985
|
+
|
|
1986
|
+
|
|
1987
|
+
|
|
1988
|
+
<span class="md-ellipsis">
|
|
1989
|
+
|
|
1990
|
+
|
|
1991
|
+
State
|
|
1992
|
+
|
|
1993
|
+
|
|
1994
|
+
|
|
1995
|
+
</span>
|
|
1996
|
+
|
|
1997
|
+
|
|
1998
|
+
|
|
1999
|
+
</a>
|
|
2000
|
+
</li>
|
|
2001
|
+
|
|
2002
|
+
|
|
2003
|
+
|
|
2004
|
+
|
|
2005
|
+
|
|
2006
|
+
|
|
2007
|
+
|
|
2008
|
+
|
|
2009
|
+
|
|
2010
|
+
|
|
2011
|
+
<li class="md-nav__item">
|
|
2012
|
+
<a href="../../api/core/tool/" class="md-nav__link">
|
|
2013
|
+
|
|
2014
|
+
|
|
2015
|
+
|
|
2016
|
+
<span class="md-ellipsis">
|
|
2017
|
+
|
|
2018
|
+
|
|
2019
|
+
Tool
|
|
2020
|
+
|
|
2021
|
+
|
|
2022
|
+
|
|
2023
|
+
</span>
|
|
2024
|
+
|
|
2025
|
+
|
|
2026
|
+
|
|
2027
|
+
</a>
|
|
2028
|
+
</li>
|
|
2029
|
+
|
|
2030
|
+
|
|
2031
|
+
|
|
2032
|
+
|
|
2033
|
+
|
|
2034
|
+
|
|
2035
|
+
|
|
2036
|
+
|
|
2037
|
+
|
|
2038
|
+
|
|
2039
|
+
<li class="md-nav__item">
|
|
2040
|
+
<a href="../../api/core/memory/" class="md-nav__link">
|
|
2041
|
+
|
|
2042
|
+
|
|
2043
|
+
|
|
2044
|
+
<span class="md-ellipsis">
|
|
2045
|
+
|
|
2046
|
+
|
|
2047
|
+
Memory
|
|
2048
|
+
|
|
2049
|
+
|
|
2050
|
+
|
|
2051
|
+
</span>
|
|
2052
|
+
|
|
2053
|
+
|
|
2054
|
+
|
|
2055
|
+
</a>
|
|
2056
|
+
</li>
|
|
2057
|
+
|
|
2058
|
+
|
|
2059
|
+
|
|
2060
|
+
|
|
2061
|
+
</ul>
|
|
2062
|
+
</nav>
|
|
2063
|
+
|
|
2064
|
+
</li>
|
|
2065
|
+
|
|
2066
|
+
|
|
2067
|
+
|
|
2068
|
+
|
|
2069
|
+
|
|
2070
|
+
|
|
2071
|
+
|
|
2072
|
+
|
|
2073
|
+
|
|
2074
|
+
|
|
2075
|
+
|
|
2076
|
+
|
|
2077
|
+
|
|
2078
|
+
|
|
2079
|
+
|
|
2080
|
+
|
|
2081
|
+
|
|
2082
|
+
|
|
2083
|
+
|
|
2084
|
+
|
|
2085
|
+
|
|
2086
|
+
|
|
2087
|
+
|
|
2088
|
+
|
|
2089
|
+
|
|
2090
|
+
|
|
2091
|
+
|
|
2092
|
+
|
|
2093
|
+
|
|
2094
|
+
|
|
2095
|
+
|
|
2096
|
+
|
|
2097
|
+
<li class="md-nav__item md-nav__item--nested">
|
|
2098
|
+
|
|
2099
|
+
|
|
2100
|
+
|
|
2101
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_3" >
|
|
2102
|
+
|
|
2103
|
+
|
|
2104
|
+
<div class="md-nav__link md-nav__container">
|
|
2105
|
+
<a href="../../api/messages/" class="md-nav__link ">
|
|
2106
|
+
|
|
2107
|
+
|
|
2108
|
+
|
|
2109
|
+
<span class="md-ellipsis">
|
|
2110
|
+
|
|
2111
|
+
|
|
2112
|
+
Messages
|
|
2113
|
+
|
|
2114
|
+
|
|
2115
|
+
|
|
2116
|
+
</span>
|
|
2117
|
+
|
|
2118
|
+
|
|
2119
|
+
|
|
2120
|
+
</a>
|
|
2121
|
+
|
|
2122
|
+
|
|
2123
|
+
<label class="md-nav__link " for="__nav_5_3" id="__nav_5_3_label" tabindex="0">
|
|
2124
|
+
<span class="md-nav__icon md-icon"></span>
|
|
2125
|
+
</label>
|
|
2126
|
+
|
|
2127
|
+
</div>
|
|
2128
|
+
|
|
2129
|
+
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_3_label" aria-expanded="false">
|
|
2130
|
+
<label class="md-nav__title" for="__nav_5_3">
|
|
2131
|
+
<span class="md-nav__icon md-icon"></span>
|
|
2132
|
+
|
|
2133
|
+
|
|
2134
|
+
Messages
|
|
2135
|
+
|
|
2136
|
+
|
|
2137
|
+
</label>
|
|
2138
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
|
2139
|
+
|
|
2140
|
+
|
|
2141
|
+
|
|
2142
|
+
|
|
2143
|
+
|
|
2144
|
+
|
|
2145
|
+
|
|
2146
|
+
|
|
2147
|
+
|
|
2148
|
+
<li class="md-nav__item">
|
|
2149
|
+
<a href="../../api/messages/user-message/" class="md-nav__link">
|
|
2150
|
+
|
|
2151
|
+
|
|
2152
|
+
|
|
2153
|
+
<span class="md-ellipsis">
|
|
2154
|
+
|
|
2155
|
+
|
|
2156
|
+
UserMessage
|
|
2157
|
+
|
|
2158
|
+
|
|
2159
|
+
|
|
2160
|
+
</span>
|
|
2161
|
+
|
|
2162
|
+
|
|
2163
|
+
|
|
2164
|
+
</a>
|
|
2165
|
+
</li>
|
|
2166
|
+
|
|
2167
|
+
|
|
2168
|
+
|
|
2169
|
+
|
|
2170
|
+
|
|
2171
|
+
|
|
2172
|
+
|
|
2173
|
+
|
|
2174
|
+
|
|
2175
|
+
|
|
2176
|
+
<li class="md-nav__item">
|
|
2177
|
+
<a href="../../api/messages/text-message/" class="md-nav__link">
|
|
2178
|
+
|
|
2179
|
+
|
|
2180
|
+
|
|
2181
|
+
<span class="md-ellipsis">
|
|
2182
|
+
|
|
2183
|
+
|
|
2184
|
+
TextMessage
|
|
2185
|
+
|
|
2186
|
+
|
|
2187
|
+
|
|
2188
|
+
</span>
|
|
2189
|
+
|
|
2190
|
+
|
|
2191
|
+
|
|
2192
|
+
</a>
|
|
2193
|
+
</li>
|
|
2194
|
+
|
|
2195
|
+
|
|
2196
|
+
|
|
2197
|
+
|
|
2198
|
+
|
|
2199
|
+
|
|
2200
|
+
|
|
2201
|
+
|
|
2202
|
+
|
|
2203
|
+
|
|
2204
|
+
<li class="md-nav__item">
|
|
2205
|
+
<a href="../../api/messages/tool-call-message/" class="md-nav__link">
|
|
2206
|
+
|
|
2207
|
+
|
|
2208
|
+
|
|
2209
|
+
<span class="md-ellipsis">
|
|
2210
|
+
|
|
2211
|
+
|
|
2212
|
+
ToolCallMessage
|
|
2213
|
+
|
|
2214
|
+
|
|
2215
|
+
|
|
2216
|
+
</span>
|
|
2217
|
+
|
|
2218
|
+
|
|
2219
|
+
|
|
2220
|
+
</a>
|
|
2221
|
+
</li>
|
|
2222
|
+
|
|
2223
|
+
|
|
2224
|
+
|
|
2225
|
+
|
|
2226
|
+
|
|
2227
|
+
|
|
2228
|
+
|
|
2229
|
+
|
|
2230
|
+
|
|
2231
|
+
|
|
2232
|
+
<li class="md-nav__item">
|
|
2233
|
+
<a href="../../api/messages/tool-result-message/" class="md-nav__link">
|
|
2234
|
+
|
|
2235
|
+
|
|
2236
|
+
|
|
2237
|
+
<span class="md-ellipsis">
|
|
2238
|
+
|
|
2239
|
+
|
|
2240
|
+
ToolResultMessage
|
|
2241
|
+
|
|
2242
|
+
|
|
2243
|
+
|
|
2244
|
+
</span>
|
|
2245
|
+
|
|
2246
|
+
|
|
2247
|
+
|
|
2248
|
+
</a>
|
|
2249
|
+
</li>
|
|
2250
|
+
|
|
2251
|
+
|
|
2252
|
+
|
|
2253
|
+
|
|
2254
|
+
</ul>
|
|
2255
|
+
</nav>
|
|
2256
|
+
|
|
2257
|
+
</li>
|
|
2258
|
+
|
|
2259
|
+
|
|
2260
|
+
|
|
2261
|
+
|
|
2262
|
+
|
|
2263
|
+
|
|
2264
|
+
|
|
2265
|
+
|
|
2266
|
+
|
|
2267
|
+
|
|
2268
|
+
|
|
2269
|
+
|
|
2270
|
+
|
|
2271
|
+
|
|
2272
|
+
|
|
2273
|
+
|
|
2274
|
+
|
|
2275
|
+
|
|
2276
|
+
|
|
2277
|
+
|
|
2278
|
+
|
|
2279
|
+
|
|
2280
|
+
|
|
2281
|
+
|
|
2282
|
+
|
|
2283
|
+
|
|
2284
|
+
|
|
2285
|
+
|
|
2286
|
+
|
|
2287
|
+
|
|
2288
|
+
<li class="md-nav__item md-nav__item--nested">
|
|
2289
|
+
|
|
2290
|
+
|
|
2291
|
+
|
|
2292
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_4" >
|
|
2293
|
+
|
|
2294
|
+
|
|
2295
|
+
<div class="md-nav__link md-nav__container">
|
|
2296
|
+
<a href="../../api/mcp/" class="md-nav__link ">
|
|
2297
|
+
|
|
2298
|
+
|
|
2299
|
+
|
|
2300
|
+
<span class="md-ellipsis">
|
|
2301
|
+
|
|
2302
|
+
|
|
2303
|
+
MCP
|
|
2304
|
+
|
|
2305
|
+
|
|
2306
|
+
|
|
2307
|
+
</span>
|
|
2308
|
+
|
|
2309
|
+
|
|
2310
|
+
|
|
2311
|
+
</a>
|
|
2312
|
+
|
|
2313
|
+
|
|
2314
|
+
<label class="md-nav__link " for="__nav_5_4" id="__nav_5_4_label" tabindex="0">
|
|
2315
|
+
<span class="md-nav__icon md-icon"></span>
|
|
2316
|
+
</label>
|
|
2317
|
+
|
|
2318
|
+
</div>
|
|
2319
|
+
|
|
2320
|
+
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_4_label" aria-expanded="false">
|
|
2321
|
+
<label class="md-nav__title" for="__nav_5_4">
|
|
2322
|
+
<span class="md-nav__icon md-icon"></span>
|
|
2323
|
+
|
|
2324
|
+
|
|
2325
|
+
MCP
|
|
2326
|
+
|
|
2327
|
+
|
|
2328
|
+
</label>
|
|
2329
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
|
2330
|
+
|
|
2331
|
+
|
|
2332
|
+
|
|
2333
|
+
|
|
2334
|
+
|
|
2335
|
+
|
|
2336
|
+
|
|
2337
|
+
|
|
2338
|
+
|
|
2339
|
+
<li class="md-nav__item">
|
|
2340
|
+
<a href="../../api/mcp/client/" class="md-nav__link">
|
|
2341
|
+
|
|
2342
|
+
|
|
2343
|
+
|
|
2344
|
+
<span class="md-ellipsis">
|
|
2345
|
+
|
|
2346
|
+
|
|
2347
|
+
Client
|
|
2348
|
+
|
|
2349
|
+
|
|
2350
|
+
|
|
2351
|
+
</span>
|
|
2352
|
+
|
|
2353
|
+
|
|
2354
|
+
|
|
2355
|
+
</a>
|
|
2356
|
+
</li>
|
|
2357
|
+
|
|
2358
|
+
|
|
2359
|
+
|
|
2360
|
+
|
|
2361
|
+
|
|
2362
|
+
|
|
2363
|
+
|
|
2364
|
+
|
|
2365
|
+
|
|
2366
|
+
|
|
2367
|
+
<li class="md-nav__item">
|
|
2368
|
+
<a href="../../api/mcp/server/" class="md-nav__link">
|
|
2369
|
+
|
|
2370
|
+
|
|
2371
|
+
|
|
2372
|
+
<span class="md-ellipsis">
|
|
2373
|
+
|
|
2374
|
+
|
|
2375
|
+
Server
|
|
2376
|
+
|
|
2377
|
+
|
|
2378
|
+
|
|
2379
|
+
</span>
|
|
2380
|
+
|
|
2381
|
+
|
|
2382
|
+
|
|
2383
|
+
</a>
|
|
2384
|
+
</li>
|
|
2385
|
+
|
|
2386
|
+
|
|
2387
|
+
|
|
2388
|
+
|
|
2389
|
+
|
|
2390
|
+
|
|
2391
|
+
|
|
2392
|
+
|
|
2393
|
+
|
|
2394
|
+
|
|
2395
|
+
<li class="md-nav__item">
|
|
2396
|
+
<a href="../../api/mcp/transports/" class="md-nav__link">
|
|
2397
|
+
|
|
2398
|
+
|
|
2399
|
+
|
|
2400
|
+
<span class="md-ellipsis">
|
|
2401
|
+
|
|
2402
|
+
|
|
2403
|
+
Transports
|
|
2404
|
+
|
|
2405
|
+
|
|
2406
|
+
|
|
2407
|
+
</span>
|
|
2408
|
+
|
|
2409
|
+
|
|
2410
|
+
|
|
2411
|
+
</a>
|
|
2412
|
+
</li>
|
|
2413
|
+
|
|
2414
|
+
|
|
2415
|
+
|
|
2416
|
+
|
|
2417
|
+
</ul>
|
|
2418
|
+
</nav>
|
|
2419
|
+
|
|
2420
|
+
</li>
|
|
2421
|
+
|
|
2422
|
+
|
|
2423
|
+
|
|
2424
|
+
|
|
2425
|
+
|
|
2426
|
+
|
|
2427
|
+
|
|
2428
|
+
|
|
2429
|
+
|
|
2430
|
+
|
|
2431
|
+
|
|
2432
|
+
|
|
2433
|
+
|
|
2434
|
+
|
|
2435
|
+
|
|
2436
|
+
|
|
2437
|
+
|
|
2438
|
+
|
|
2439
|
+
|
|
2440
|
+
|
|
2441
|
+
|
|
2442
|
+
|
|
2443
|
+
|
|
2444
|
+
|
|
2445
|
+
|
|
2446
|
+
|
|
2447
|
+
|
|
2448
|
+
|
|
2449
|
+
<li class="md-nav__item md-nav__item--nested">
|
|
2450
|
+
|
|
2451
|
+
|
|
2452
|
+
|
|
2453
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_5" >
|
|
2454
|
+
|
|
2455
|
+
|
|
2456
|
+
<div class="md-nav__link md-nav__container">
|
|
2457
|
+
<a href="../../api/streaming/" class="md-nav__link ">
|
|
2458
|
+
|
|
2459
|
+
|
|
2460
|
+
|
|
2461
|
+
<span class="md-ellipsis">
|
|
2462
|
+
|
|
2463
|
+
|
|
2464
|
+
Streaming
|
|
2465
|
+
|
|
2466
|
+
|
|
2467
|
+
|
|
2468
|
+
</span>
|
|
2469
|
+
|
|
2470
|
+
|
|
2471
|
+
|
|
2472
|
+
</a>
|
|
2473
|
+
|
|
2474
|
+
|
|
2475
|
+
<label class="md-nav__link " for="__nav_5_5" id="__nav_5_5_label" tabindex="0">
|
|
2476
|
+
<span class="md-nav__icon md-icon"></span>
|
|
2477
|
+
</label>
|
|
2478
|
+
|
|
2479
|
+
</div>
|
|
2480
|
+
|
|
2481
|
+
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_5_label" aria-expanded="false">
|
|
2482
|
+
<label class="md-nav__title" for="__nav_5_5">
|
|
2483
|
+
<span class="md-nav__icon md-icon"></span>
|
|
2484
|
+
|
|
2485
|
+
|
|
2486
|
+
Streaming
|
|
2487
|
+
|
|
2488
|
+
|
|
2489
|
+
</label>
|
|
2490
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
|
2491
|
+
|
|
2492
|
+
|
|
2493
|
+
|
|
2494
|
+
|
|
2495
|
+
|
|
2496
|
+
|
|
2497
|
+
|
|
2498
|
+
|
|
2499
|
+
|
|
2500
|
+
<li class="md-nav__item">
|
|
2501
|
+
<a href="../../api/streaming/context/" class="md-nav__link">
|
|
2502
|
+
|
|
2503
|
+
|
|
2504
|
+
|
|
2505
|
+
<span class="md-ellipsis">
|
|
2506
|
+
|
|
2507
|
+
|
|
2508
|
+
Context
|
|
2509
|
+
|
|
2510
|
+
|
|
2511
|
+
|
|
2512
|
+
</span>
|
|
2513
|
+
|
|
2514
|
+
|
|
2515
|
+
|
|
2516
|
+
</a>
|
|
2517
|
+
</li>
|
|
2518
|
+
|
|
2519
|
+
|
|
2520
|
+
|
|
2521
|
+
|
|
2522
|
+
|
|
2523
|
+
|
|
2524
|
+
|
|
2525
|
+
|
|
2526
|
+
|
|
2527
|
+
|
|
2528
|
+
<li class="md-nav__item">
|
|
2529
|
+
<a href="../../api/streaming/events/" class="md-nav__link">
|
|
2530
|
+
|
|
2531
|
+
|
|
2532
|
+
|
|
2533
|
+
<span class="md-ellipsis">
|
|
2534
|
+
|
|
2535
|
+
|
|
2536
|
+
Events
|
|
2537
|
+
|
|
2538
|
+
|
|
2539
|
+
|
|
2540
|
+
</span>
|
|
2541
|
+
|
|
2542
|
+
|
|
2543
|
+
|
|
2544
|
+
</a>
|
|
2545
|
+
</li>
|
|
2546
|
+
|
|
2547
|
+
|
|
2548
|
+
|
|
2549
|
+
|
|
2550
|
+
</ul>
|
|
2551
|
+
</nav>
|
|
2552
|
+
|
|
2553
|
+
</li>
|
|
2554
|
+
|
|
2555
|
+
|
|
2556
|
+
|
|
2557
|
+
|
|
2558
|
+
</ul>
|
|
2559
|
+
</nav>
|
|
2560
|
+
|
|
2561
|
+
</li>
|
|
2562
|
+
|
|
2563
|
+
|
|
2564
|
+
|
|
2565
|
+
|
|
2566
|
+
|
|
2567
|
+
|
|
2568
|
+
|
|
2569
|
+
|
|
2570
|
+
|
|
2571
|
+
|
|
2572
|
+
|
|
2573
|
+
|
|
2574
|
+
|
|
2575
|
+
|
|
2576
|
+
|
|
2577
|
+
|
|
2578
|
+
|
|
2579
|
+
|
|
2580
|
+
|
|
2581
|
+
|
|
2582
|
+
|
|
2583
|
+
|
|
2584
|
+
|
|
2585
|
+
|
|
2586
|
+
|
|
2587
|
+
|
|
2588
|
+
|
|
2589
|
+
|
|
2590
|
+
|
|
2591
|
+
|
|
2592
|
+
|
|
2593
|
+
|
|
2594
|
+
|
|
2595
|
+
<li class="md-nav__item md-nav__item--nested">
|
|
2596
|
+
|
|
2597
|
+
|
|
2598
|
+
|
|
2599
|
+
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
|
|
2600
|
+
|
|
2601
|
+
|
|
2602
|
+
<div class="md-nav__link md-nav__container">
|
|
2603
|
+
<a href="../../examples/" class="md-nav__link ">
|
|
2604
|
+
|
|
2605
|
+
|
|
2606
|
+
|
|
2607
|
+
<span class="md-ellipsis">
|
|
2608
|
+
|
|
2609
|
+
|
|
2610
|
+
Examples
|
|
2611
|
+
|
|
2612
|
+
|
|
2613
|
+
|
|
2614
|
+
</span>
|
|
2615
|
+
|
|
2616
|
+
|
|
2617
|
+
|
|
2618
|
+
</a>
|
|
2619
|
+
|
|
2620
|
+
|
|
2621
|
+
<label class="md-nav__link " for="__nav_6" id="__nav_6_label" tabindex="0">
|
|
2622
|
+
<span class="md-nav__icon md-icon"></span>
|
|
2623
|
+
</label>
|
|
2624
|
+
|
|
2625
|
+
</div>
|
|
2626
|
+
|
|
2627
|
+
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
|
|
2628
|
+
<label class="md-nav__title" for="__nav_6">
|
|
2629
|
+
<span class="md-nav__icon md-icon"></span>
|
|
2630
|
+
|
|
2631
|
+
|
|
2632
|
+
Examples
|
|
2633
|
+
|
|
2634
|
+
|
|
2635
|
+
</label>
|
|
2636
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
|
2637
|
+
|
|
2638
|
+
|
|
2639
|
+
|
|
2640
|
+
|
|
2641
|
+
|
|
2642
|
+
|
|
2643
|
+
|
|
2644
|
+
|
|
2645
|
+
|
|
2646
|
+
<li class="md-nav__item">
|
|
2647
|
+
<a href="../../examples/basic-chat/" class="md-nav__link">
|
|
2648
|
+
|
|
2649
|
+
|
|
2650
|
+
|
|
2651
|
+
<span class="md-ellipsis">
|
|
2652
|
+
|
|
2653
|
+
|
|
2654
|
+
Basic Chat
|
|
2655
|
+
|
|
2656
|
+
|
|
2657
|
+
|
|
2658
|
+
</span>
|
|
2659
|
+
|
|
2660
|
+
|
|
2661
|
+
|
|
2662
|
+
</a>
|
|
2663
|
+
</li>
|
|
2664
|
+
|
|
2665
|
+
|
|
2666
|
+
|
|
2667
|
+
|
|
2668
|
+
|
|
2669
|
+
|
|
2670
|
+
|
|
2671
|
+
|
|
2672
|
+
|
|
2673
|
+
|
|
2674
|
+
<li class="md-nav__item">
|
|
2675
|
+
<a href="../../examples/multi-robot-network/" class="md-nav__link">
|
|
2676
|
+
|
|
2677
|
+
|
|
2678
|
+
|
|
2679
|
+
<span class="md-ellipsis">
|
|
2680
|
+
|
|
2681
|
+
|
|
2682
|
+
Multi-Robot Network
|
|
2683
|
+
|
|
2684
|
+
|
|
2685
|
+
|
|
2686
|
+
</span>
|
|
2687
|
+
|
|
2688
|
+
|
|
2689
|
+
|
|
2690
|
+
</a>
|
|
2691
|
+
</li>
|
|
2692
|
+
|
|
2693
|
+
|
|
2694
|
+
|
|
2695
|
+
|
|
2696
|
+
|
|
2697
|
+
|
|
2698
|
+
|
|
2699
|
+
|
|
2700
|
+
|
|
2701
|
+
|
|
2702
|
+
<li class="md-nav__item">
|
|
2703
|
+
<a href="../../examples/tool-usage/" class="md-nav__link">
|
|
2704
|
+
|
|
2705
|
+
|
|
2706
|
+
|
|
2707
|
+
<span class="md-ellipsis">
|
|
2708
|
+
|
|
2709
|
+
|
|
2710
|
+
Tool Usage
|
|
2711
|
+
|
|
2712
|
+
|
|
2713
|
+
|
|
2714
|
+
</span>
|
|
2715
|
+
|
|
2716
|
+
|
|
2717
|
+
|
|
2718
|
+
</a>
|
|
2719
|
+
</li>
|
|
2720
|
+
|
|
2721
|
+
|
|
2722
|
+
|
|
2723
|
+
|
|
2724
|
+
|
|
2725
|
+
|
|
2726
|
+
|
|
2727
|
+
|
|
2728
|
+
|
|
2729
|
+
|
|
2730
|
+
<li class="md-nav__item">
|
|
2731
|
+
<a href="../../examples/mcp-server/" class="md-nav__link">
|
|
2732
|
+
|
|
2733
|
+
|
|
2734
|
+
|
|
2735
|
+
<span class="md-ellipsis">
|
|
2736
|
+
|
|
2737
|
+
|
|
2738
|
+
MCP Server
|
|
2739
|
+
|
|
2740
|
+
|
|
2741
|
+
|
|
2742
|
+
</span>
|
|
2743
|
+
|
|
2744
|
+
|
|
2745
|
+
|
|
2746
|
+
</a>
|
|
2747
|
+
</li>
|
|
2748
|
+
|
|
2749
|
+
|
|
2750
|
+
|
|
2751
|
+
|
|
2752
|
+
|
|
2753
|
+
|
|
2754
|
+
|
|
2755
|
+
|
|
2756
|
+
|
|
2757
|
+
|
|
2758
|
+
<li class="md-nav__item">
|
|
2759
|
+
<a href="../../examples/rails-application/" class="md-nav__link">
|
|
2760
|
+
|
|
2761
|
+
|
|
2762
|
+
|
|
2763
|
+
<span class="md-ellipsis">
|
|
2764
|
+
|
|
2765
|
+
|
|
2766
|
+
Rails Application
|
|
2767
|
+
|
|
2768
|
+
|
|
2769
|
+
|
|
2770
|
+
</span>
|
|
2771
|
+
|
|
2772
|
+
|
|
2773
|
+
|
|
2774
|
+
</a>
|
|
2775
|
+
</li>
|
|
2776
|
+
|
|
2777
|
+
|
|
2778
|
+
|
|
2779
|
+
|
|
2780
|
+
</ul>
|
|
2781
|
+
</nav>
|
|
2782
|
+
|
|
2783
|
+
</li>
|
|
2784
|
+
|
|
2785
|
+
|
|
2786
|
+
|
|
2787
|
+
</ul>
|
|
2788
|
+
</nav>
|
|
2789
|
+
</div>
|
|
2790
|
+
</div>
|
|
2791
|
+
</div>
|
|
2792
|
+
|
|
2793
|
+
|
|
2794
|
+
|
|
2795
|
+
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
|
2796
|
+
<div class="md-sidebar__scrollwrap">
|
|
2797
|
+
<div class="md-sidebar__inner">
|
|
2798
|
+
|
|
2799
|
+
|
|
2800
|
+
|
|
2801
|
+
|
|
2802
|
+
<nav class="md-nav md-nav--secondary" aria-label="On this page">
|
|
2803
|
+
|
|
2804
|
+
|
|
2805
|
+
|
|
2806
|
+
|
|
2807
|
+
|
|
2808
|
+
|
|
2809
|
+
<label class="md-nav__title" for="__toc">
|
|
2810
|
+
<span class="md-nav__icon md-icon"></span>
|
|
2811
|
+
On this page
|
|
2812
|
+
</label>
|
|
2813
|
+
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
2814
|
+
|
|
2815
|
+
<li class="md-nav__item">
|
|
2816
|
+
<a href="#basic-robot" class="md-nav__link">
|
|
2817
|
+
<span class="md-ellipsis">
|
|
2818
|
+
|
|
2819
|
+
Basic Robot
|
|
2820
|
+
|
|
2821
|
+
</span>
|
|
2822
|
+
</a>
|
|
2823
|
+
|
|
2824
|
+
</li>
|
|
2825
|
+
|
|
2826
|
+
<li class="md-nav__item">
|
|
2827
|
+
<a href="#robot-properties" class="md-nav__link">
|
|
2828
|
+
<span class="md-ellipsis">
|
|
2829
|
+
|
|
2830
|
+
Robot Properties
|
|
2831
|
+
|
|
2832
|
+
</span>
|
|
2833
|
+
</a>
|
|
2834
|
+
|
|
2835
|
+
<nav class="md-nav" aria-label="Robot Properties">
|
|
2836
|
+
<ul class="md-nav__list">
|
|
2837
|
+
|
|
2838
|
+
<li class="md-nav__item">
|
|
2839
|
+
<a href="#name" class="md-nav__link">
|
|
2840
|
+
<span class="md-ellipsis">
|
|
2841
|
+
|
|
2842
|
+
Name
|
|
2843
|
+
|
|
2844
|
+
</span>
|
|
2845
|
+
</a>
|
|
2846
|
+
|
|
2847
|
+
</li>
|
|
2848
|
+
|
|
2849
|
+
<li class="md-nav__item">
|
|
2850
|
+
<a href="#description" class="md-nav__link">
|
|
2851
|
+
<span class="md-ellipsis">
|
|
2852
|
+
|
|
2853
|
+
Description
|
|
2854
|
+
|
|
2855
|
+
</span>
|
|
2856
|
+
</a>
|
|
2857
|
+
|
|
2858
|
+
</li>
|
|
2859
|
+
|
|
2860
|
+
<li class="md-nav__item">
|
|
2861
|
+
<a href="#model" class="md-nav__link">
|
|
2862
|
+
<span class="md-ellipsis">
|
|
2863
|
+
|
|
2864
|
+
Model
|
|
2865
|
+
|
|
2866
|
+
</span>
|
|
2867
|
+
</a>
|
|
2868
|
+
|
|
2869
|
+
</li>
|
|
2870
|
+
|
|
2871
|
+
<li class="md-nav__item">
|
|
2872
|
+
<a href="#system-prompt" class="md-nav__link">
|
|
2873
|
+
<span class="md-ellipsis">
|
|
2874
|
+
|
|
2875
|
+
System Prompt
|
|
2876
|
+
|
|
2877
|
+
</span>
|
|
2878
|
+
</a>
|
|
2879
|
+
|
|
2880
|
+
</li>
|
|
2881
|
+
|
|
2882
|
+
</ul>
|
|
2883
|
+
</nav>
|
|
2884
|
+
|
|
2885
|
+
</li>
|
|
2886
|
+
|
|
2887
|
+
<li class="md-nav__item">
|
|
2888
|
+
<a href="#template-files" class="md-nav__link">
|
|
2889
|
+
<span class="md-ellipsis">
|
|
2890
|
+
|
|
2891
|
+
Template Files
|
|
2892
|
+
|
|
2893
|
+
</span>
|
|
2894
|
+
</a>
|
|
2895
|
+
|
|
2896
|
+
<nav class="md-nav" aria-label="Template Files">
|
|
2897
|
+
<ul class="md-nav__list">
|
|
2898
|
+
|
|
2899
|
+
<li class="md-nav__item">
|
|
2900
|
+
<a href="#template-format" class="md-nav__link">
|
|
2901
|
+
<span class="md-ellipsis">
|
|
2902
|
+
|
|
2903
|
+
Template Format
|
|
2904
|
+
|
|
2905
|
+
</span>
|
|
2906
|
+
</a>
|
|
2907
|
+
|
|
2908
|
+
</li>
|
|
2909
|
+
|
|
2910
|
+
<li class="md-nav__item">
|
|
2911
|
+
<a href="#front-matter-configuration" class="md-nav__link">
|
|
2912
|
+
<span class="md-ellipsis">
|
|
2913
|
+
|
|
2914
|
+
Front Matter Configuration
|
|
2915
|
+
|
|
2916
|
+
</span>
|
|
2917
|
+
</a>
|
|
2918
|
+
|
|
2919
|
+
</li>
|
|
2920
|
+
|
|
2921
|
+
<li class="md-nav__item">
|
|
2922
|
+
<a href="#self-contained-templates" class="md-nav__link">
|
|
2923
|
+
<span class="md-ellipsis">
|
|
2924
|
+
|
|
2925
|
+
Self-Contained Templates
|
|
2926
|
+
|
|
2927
|
+
</span>
|
|
2928
|
+
</a>
|
|
2929
|
+
|
|
2930
|
+
</li>
|
|
2931
|
+
|
|
2932
|
+
<li class="md-nav__item">
|
|
2933
|
+
<a href="#tools-in-front-matter" class="md-nav__link">
|
|
2934
|
+
<span class="md-ellipsis">
|
|
2935
|
+
|
|
2936
|
+
Tools in Front Matter
|
|
2937
|
+
|
|
2938
|
+
</span>
|
|
2939
|
+
</a>
|
|
2940
|
+
|
|
2941
|
+
</li>
|
|
2942
|
+
|
|
2943
|
+
<li class="md-nav__item">
|
|
2944
|
+
<a href="#mcp-in-front-matter" class="md-nav__link">
|
|
2945
|
+
<span class="md-ellipsis">
|
|
2946
|
+
|
|
2947
|
+
MCP in Front Matter
|
|
2948
|
+
|
|
2949
|
+
</span>
|
|
2950
|
+
</a>
|
|
2951
|
+
|
|
2952
|
+
</li>
|
|
2953
|
+
|
|
2954
|
+
<li class="md-nav__item">
|
|
2955
|
+
<a href="#template-with-system-prompt" class="md-nav__link">
|
|
2956
|
+
<span class="md-ellipsis">
|
|
2957
|
+
|
|
2958
|
+
Template with System Prompt
|
|
2959
|
+
|
|
2960
|
+
</span>
|
|
2961
|
+
</a>
|
|
2962
|
+
|
|
2963
|
+
</li>
|
|
2964
|
+
|
|
2965
|
+
</ul>
|
|
2966
|
+
</nav>
|
|
2967
|
+
|
|
2968
|
+
</li>
|
|
2969
|
+
|
|
2970
|
+
<li class="md-nav__item">
|
|
2971
|
+
<a href="#composable-skills" class="md-nav__link">
|
|
2972
|
+
<span class="md-ellipsis">
|
|
2973
|
+
|
|
2974
|
+
Composable Skills
|
|
2975
|
+
|
|
2976
|
+
</span>
|
|
2977
|
+
</a>
|
|
2978
|
+
|
|
2979
|
+
<nav class="md-nav" aria-label="Composable Skills">
|
|
2980
|
+
<ul class="md-nav__list">
|
|
2981
|
+
|
|
2982
|
+
<li class="md-nav__item">
|
|
2983
|
+
<a href="#why-skills" class="md-nav__link">
|
|
2984
|
+
<span class="md-ellipsis">
|
|
2985
|
+
|
|
2986
|
+
Why Skills?
|
|
2987
|
+
|
|
2988
|
+
</span>
|
|
2989
|
+
</a>
|
|
2990
|
+
|
|
2991
|
+
</li>
|
|
2992
|
+
|
|
2993
|
+
<li class="md-nav__item">
|
|
2994
|
+
<a href="#defining-a-skill" class="md-nav__link">
|
|
2995
|
+
<span class="md-ellipsis">
|
|
2996
|
+
|
|
2997
|
+
Defining a Skill
|
|
2998
|
+
|
|
2999
|
+
</span>
|
|
3000
|
+
</a>
|
|
3001
|
+
|
|
3002
|
+
</li>
|
|
3003
|
+
|
|
3004
|
+
<li class="md-nav__item">
|
|
3005
|
+
<a href="#using-skills-via-constructor" class="md-nav__link">
|
|
3006
|
+
<span class="md-ellipsis">
|
|
3007
|
+
|
|
3008
|
+
Using Skills via Constructor
|
|
3009
|
+
|
|
3010
|
+
</span>
|
|
3011
|
+
</a>
|
|
3012
|
+
|
|
3013
|
+
</li>
|
|
3014
|
+
|
|
3015
|
+
<li class="md-nav__item">
|
|
3016
|
+
<a href="#using-skills-via-front-matter" class="md-nav__link">
|
|
3017
|
+
<span class="md-ellipsis">
|
|
3018
|
+
|
|
3019
|
+
Using Skills via Front Matter
|
|
3020
|
+
|
|
3021
|
+
</span>
|
|
3022
|
+
</a>
|
|
3023
|
+
|
|
3024
|
+
</li>
|
|
3025
|
+
|
|
3026
|
+
<li class="md-nav__item">
|
|
3027
|
+
<a href="#nested-skills" class="md-nav__link">
|
|
3028
|
+
<span class="md-ellipsis">
|
|
3029
|
+
|
|
3030
|
+
Nested Skills
|
|
3031
|
+
|
|
3032
|
+
</span>
|
|
3033
|
+
</a>
|
|
3034
|
+
|
|
3035
|
+
</li>
|
|
3036
|
+
|
|
3037
|
+
<li class="md-nav__item">
|
|
3038
|
+
<a href="#cycle-detection" class="md-nav__link">
|
|
3039
|
+
<span class="md-ellipsis">
|
|
3040
|
+
|
|
3041
|
+
Cycle Detection
|
|
3042
|
+
|
|
3043
|
+
</span>
|
|
3044
|
+
</a>
|
|
3045
|
+
|
|
3046
|
+
</li>
|
|
3047
|
+
|
|
3048
|
+
<li class="md-nav__item">
|
|
3049
|
+
<a href="#config-cascade" class="md-nav__link">
|
|
3050
|
+
<span class="md-ellipsis">
|
|
3051
|
+
|
|
3052
|
+
Config Cascade
|
|
3053
|
+
|
|
3054
|
+
</span>
|
|
3055
|
+
</a>
|
|
3056
|
+
|
|
3057
|
+
</li>
|
|
3058
|
+
|
|
3059
|
+
<li class="md-nav__item">
|
|
3060
|
+
<a href="#skills-without-a-main-template" class="md-nav__link">
|
|
3061
|
+
<span class="md-ellipsis">
|
|
3062
|
+
|
|
3063
|
+
Skills Without a Main Template
|
|
3064
|
+
|
|
3065
|
+
</span>
|
|
3066
|
+
</a>
|
|
3067
|
+
|
|
3068
|
+
</li>
|
|
3069
|
+
|
|
3070
|
+
<li class="md-nav__item">
|
|
3071
|
+
<a href="#shared-context" class="md-nav__link">
|
|
3072
|
+
<span class="md-ellipsis">
|
|
3073
|
+
|
|
3074
|
+
Shared Context
|
|
3075
|
+
|
|
3076
|
+
</span>
|
|
3077
|
+
</a>
|
|
3078
|
+
|
|
3079
|
+
</li>
|
|
3080
|
+
|
|
3081
|
+
</ul>
|
|
3082
|
+
</nav>
|
|
3083
|
+
|
|
3084
|
+
</li>
|
|
3085
|
+
|
|
3086
|
+
<li class="md-nav__item">
|
|
3087
|
+
<a href="#adding-tools" class="md-nav__link">
|
|
3088
|
+
<span class="md-ellipsis">
|
|
3089
|
+
|
|
3090
|
+
Adding Tools
|
|
3091
|
+
|
|
3092
|
+
</span>
|
|
3093
|
+
</a>
|
|
3094
|
+
|
|
3095
|
+
</li>
|
|
3096
|
+
|
|
3097
|
+
<li class="md-nav__item">
|
|
3098
|
+
<a href="#mcp-configuration" class="md-nav__link">
|
|
3099
|
+
<span class="md-ellipsis">
|
|
3100
|
+
|
|
3101
|
+
MCP Configuration
|
|
3102
|
+
|
|
3103
|
+
</span>
|
|
3104
|
+
</a>
|
|
3105
|
+
|
|
3106
|
+
</li>
|
|
3107
|
+
|
|
3108
|
+
<li class="md-nav__item">
|
|
3109
|
+
<a href="#chaining-configuration" class="md-nav__link">
|
|
3110
|
+
<span class="md-ellipsis">
|
|
3111
|
+
|
|
3112
|
+
Chaining Configuration
|
|
3113
|
+
|
|
3114
|
+
</span>
|
|
3115
|
+
</a>
|
|
3116
|
+
|
|
3117
|
+
<nav class="md-nav" aria-label="Chaining Configuration">
|
|
3118
|
+
<ul class="md-nav__list">
|
|
3119
|
+
|
|
3120
|
+
<li class="md-nav__item">
|
|
3121
|
+
<a href="#available-chain-methods" class="md-nav__link">
|
|
3122
|
+
<span class="md-ellipsis">
|
|
3123
|
+
|
|
3124
|
+
Available Chain Methods
|
|
3125
|
+
|
|
3126
|
+
</span>
|
|
3127
|
+
</a>
|
|
3128
|
+
|
|
3129
|
+
</li>
|
|
3130
|
+
|
|
3131
|
+
</ul>
|
|
3132
|
+
</nav>
|
|
3133
|
+
|
|
3134
|
+
</li>
|
|
3135
|
+
|
|
3136
|
+
<li class="md-nav__item">
|
|
3137
|
+
<a href="#running-robots" class="md-nav__link">
|
|
3138
|
+
<span class="md-ellipsis">
|
|
3139
|
+
|
|
3140
|
+
Running Robots
|
|
3141
|
+
|
|
3142
|
+
</span>
|
|
3143
|
+
</a>
|
|
3144
|
+
|
|
3145
|
+
<nav class="md-nav" aria-label="Running Robots">
|
|
3146
|
+
<ul class="md-nav__list">
|
|
3147
|
+
|
|
3148
|
+
<li class="md-nav__item">
|
|
3149
|
+
<a href="#standalone" class="md-nav__link">
|
|
3150
|
+
<span class="md-ellipsis">
|
|
3151
|
+
|
|
3152
|
+
Standalone
|
|
3153
|
+
|
|
3154
|
+
</span>
|
|
3155
|
+
</a>
|
|
3156
|
+
|
|
3157
|
+
</li>
|
|
3158
|
+
|
|
3159
|
+
<li class="md-nav__item">
|
|
3160
|
+
<a href="#with-runtime-memory" class="md-nav__link">
|
|
3161
|
+
<span class="md-ellipsis">
|
|
3162
|
+
|
|
3163
|
+
With Runtime Memory
|
|
3164
|
+
|
|
3165
|
+
</span>
|
|
3166
|
+
</a>
|
|
3167
|
+
|
|
3168
|
+
</li>
|
|
3169
|
+
|
|
3170
|
+
<li class="md-nav__item">
|
|
3171
|
+
<a href="#in-a-network" class="md-nav__link">
|
|
3172
|
+
<span class="md-ellipsis">
|
|
3173
|
+
|
|
3174
|
+
In a Network
|
|
3175
|
+
|
|
3176
|
+
</span>
|
|
3177
|
+
</a>
|
|
3178
|
+
|
|
3179
|
+
</li>
|
|
3180
|
+
|
|
3181
|
+
<li class="md-nav__item">
|
|
3182
|
+
<a href="#with-streaming" class="md-nav__link">
|
|
3183
|
+
<span class="md-ellipsis">
|
|
3184
|
+
|
|
3185
|
+
With Streaming
|
|
3186
|
+
|
|
3187
|
+
</span>
|
|
3188
|
+
</a>
|
|
3189
|
+
|
|
3190
|
+
</li>
|
|
3191
|
+
|
|
3192
|
+
</ul>
|
|
3193
|
+
</nav>
|
|
3194
|
+
|
|
3195
|
+
</li>
|
|
3196
|
+
|
|
3197
|
+
<li class="md-nav__item">
|
|
3198
|
+
<a href="#robot-patterns" class="md-nav__link">
|
|
3199
|
+
<span class="md-ellipsis">
|
|
3200
|
+
|
|
3201
|
+
Robot Patterns
|
|
3202
|
+
|
|
3203
|
+
</span>
|
|
3204
|
+
</a>
|
|
3205
|
+
|
|
3206
|
+
<nav class="md-nav" aria-label="Robot Patterns">
|
|
3207
|
+
<ul class="md-nav__list">
|
|
3208
|
+
|
|
3209
|
+
<li class="md-nav__item">
|
|
3210
|
+
<a href="#classifier-robot" class="md-nav__link">
|
|
3211
|
+
<span class="md-ellipsis">
|
|
3212
|
+
|
|
3213
|
+
Classifier Robot
|
|
3214
|
+
|
|
3215
|
+
</span>
|
|
3216
|
+
</a>
|
|
3217
|
+
|
|
3218
|
+
</li>
|
|
3219
|
+
|
|
3220
|
+
<li class="md-nav__item">
|
|
3221
|
+
<a href="#specialist-robot" class="md-nav__link">
|
|
3222
|
+
<span class="md-ellipsis">
|
|
3223
|
+
|
|
3224
|
+
Specialist Robot
|
|
3225
|
+
|
|
3226
|
+
</span>
|
|
3227
|
+
</a>
|
|
3228
|
+
|
|
3229
|
+
</li>
|
|
3230
|
+
|
|
3231
|
+
<li class="md-nav__item">
|
|
3232
|
+
<a href="#summarizer-robot" class="md-nav__link">
|
|
3233
|
+
<span class="md-ellipsis">
|
|
3234
|
+
|
|
3235
|
+
Summarizer Robot
|
|
3236
|
+
|
|
3237
|
+
</span>
|
|
3238
|
+
</a>
|
|
3239
|
+
|
|
3240
|
+
</li>
|
|
3241
|
+
|
|
3242
|
+
<li class="md-nav__item">
|
|
3243
|
+
<a href="#bus-connected-robot" class="md-nav__link">
|
|
3244
|
+
<span class="md-ellipsis">
|
|
3245
|
+
|
|
3246
|
+
Bus-Connected Robot
|
|
3247
|
+
|
|
3248
|
+
</span>
|
|
3249
|
+
</a>
|
|
3250
|
+
|
|
3251
|
+
</li>
|
|
3252
|
+
|
|
3253
|
+
<li class="md-nav__item">
|
|
3254
|
+
<a href="#spawning-robots-dynamically" class="md-nav__link">
|
|
3255
|
+
<span class="md-ellipsis">
|
|
3256
|
+
|
|
3257
|
+
Spawning Robots Dynamically
|
|
3258
|
+
|
|
3259
|
+
</span>
|
|
3260
|
+
</a>
|
|
3261
|
+
|
|
3262
|
+
</li>
|
|
3263
|
+
|
|
3264
|
+
</ul>
|
|
3265
|
+
</nav>
|
|
3266
|
+
|
|
3267
|
+
</li>
|
|
3268
|
+
|
|
3269
|
+
<li class="md-nav__item">
|
|
3270
|
+
<a href="#configuration" class="md-nav__link">
|
|
3271
|
+
<span class="md-ellipsis">
|
|
3272
|
+
|
|
3273
|
+
Configuration
|
|
3274
|
+
|
|
3275
|
+
</span>
|
|
3276
|
+
</a>
|
|
3277
|
+
|
|
3278
|
+
</li>
|
|
3279
|
+
|
|
3280
|
+
<li class="md-nav__item">
|
|
3281
|
+
<a href="#best-practices" class="md-nav__link">
|
|
3282
|
+
<span class="md-ellipsis">
|
|
3283
|
+
|
|
3284
|
+
Best Practices
|
|
3285
|
+
|
|
3286
|
+
</span>
|
|
3287
|
+
</a>
|
|
3288
|
+
|
|
3289
|
+
<nav class="md-nav" aria-label="Best Practices">
|
|
3290
|
+
<ul class="md-nav__list">
|
|
3291
|
+
|
|
3292
|
+
<li class="md-nav__item">
|
|
3293
|
+
<a href="#1-clear-focused-prompts" class="md-nav__link">
|
|
3294
|
+
<span class="md-ellipsis">
|
|
3295
|
+
|
|
3296
|
+
1. Clear, Focused Prompts
|
|
3297
|
+
|
|
3298
|
+
</span>
|
|
3299
|
+
</a>
|
|
3300
|
+
|
|
3301
|
+
</li>
|
|
3302
|
+
|
|
3303
|
+
<li class="md-nav__item">
|
|
3304
|
+
<a href="#2-compose-behaviors-with-skills" class="md-nav__link">
|
|
3305
|
+
<span class="md-ellipsis">
|
|
3306
|
+
|
|
3307
|
+
2. Compose Behaviors with Skills
|
|
3308
|
+
|
|
3309
|
+
</span>
|
|
3310
|
+
</a>
|
|
3311
|
+
|
|
3312
|
+
</li>
|
|
3313
|
+
|
|
3314
|
+
<li class="md-nav__item">
|
|
3315
|
+
<a href="#3-use-templates-for-reusable-prompts" class="md-nav__link">
|
|
3316
|
+
<span class="md-ellipsis">
|
|
3317
|
+
|
|
3318
|
+
3. Use Templates for Reusable Prompts
|
|
3319
|
+
|
|
3320
|
+
</span>
|
|
3321
|
+
</a>
|
|
3322
|
+
|
|
3323
|
+
</li>
|
|
3324
|
+
|
|
3325
|
+
<li class="md-nav__item">
|
|
3326
|
+
<a href="#4-handle-tool-errors-gracefully" class="md-nav__link">
|
|
3327
|
+
<span class="md-ellipsis">
|
|
3328
|
+
|
|
3329
|
+
4. Handle Tool Errors Gracefully
|
|
3330
|
+
|
|
3331
|
+
</span>
|
|
3332
|
+
</a>
|
|
3333
|
+
|
|
3334
|
+
</li>
|
|
3335
|
+
|
|
3336
|
+
</ul>
|
|
3337
|
+
</nav>
|
|
3338
|
+
|
|
3339
|
+
</li>
|
|
3340
|
+
|
|
3341
|
+
<li class="md-nav__item">
|
|
3342
|
+
<a href="#next-steps" class="md-nav__link">
|
|
3343
|
+
<span class="md-ellipsis">
|
|
3344
|
+
|
|
3345
|
+
Next Steps
|
|
3346
|
+
|
|
3347
|
+
</span>
|
|
3348
|
+
</a>
|
|
3349
|
+
|
|
3350
|
+
</li>
|
|
3351
|
+
|
|
3352
|
+
</ul>
|
|
3353
|
+
|
|
3354
|
+
</nav>
|
|
3355
|
+
</div>
|
|
3356
|
+
</div>
|
|
3357
|
+
</div>
|
|
3358
|
+
|
|
3359
|
+
|
|
3360
|
+
|
|
3361
|
+
<div class="md-content" data-md-component="content">
|
|
3362
|
+
|
|
3363
|
+
|
|
3364
|
+
|
|
3365
|
+
|
|
3366
|
+
|
|
3367
|
+
|
|
3368
|
+
|
|
3369
|
+
<article class="md-content__inner md-typeset">
|
|
3370
|
+
|
|
3371
|
+
|
|
3372
|
+
|
|
3373
|
+
|
|
3374
|
+
|
|
3375
|
+
<a href="https://github.com/madbomber/robot_lab/edit/main/docs/guides/building-robots.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
|
3376
|
+
|
|
3377
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
|
|
3378
|
+
</a>
|
|
3379
|
+
|
|
3380
|
+
|
|
3381
|
+
|
|
3382
|
+
|
|
3383
|
+
|
|
3384
|
+
<a href="https://github.com/madbomber/robot_lab/raw/main/docs/guides/building-robots.md" title="View source of this page" class="md-content__button md-icon">
|
|
3385
|
+
|
|
3386
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg>
|
|
3387
|
+
</a>
|
|
3388
|
+
|
|
3389
|
+
|
|
3390
|
+
|
|
3391
|
+
<h1 id="building-robots">Building Robots<a class="headerlink" href="#building-robots" title="Permanent link">¶</a></h1>
|
|
3392
|
+
<p>This guide covers everything you need to know about creating robots in RobotLab.</p>
|
|
3393
|
+
<h2 id="basic-robot">Basic Robot<a class="headerlink" href="#basic-robot" title="Permanent link">¶</a></h2>
|
|
3394
|
+
<p>Create a robot using the <code>RobotLab.build</code> factory method with keyword arguments:</p>
|
|
3395
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3396
|
+
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"assistant"</span><span class="p">,</span>
|
|
3397
|
+
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="s2">"You are a helpful assistant."</span>
|
|
3398
|
+
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="p">)</span>
|
|
3399
|
+
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a>
|
|
3400
|
+
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">robot</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="s2">"Hello!"</span><span class="p">)</span>
|
|
3401
|
+
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="nb">puts</span><span class="w"> </span><span class="n">result</span><span class="o">.</span><span class="n">last_text_content</span>
|
|
3402
|
+
</span></code></pre></div>
|
|
3403
|
+
<h2 id="robot-properties">Robot Properties<a class="headerlink" href="#robot-properties" title="Permanent link">¶</a></h2>
|
|
3404
|
+
<h3 id="name">Name<a class="headerlink" href="#name" title="Permanent link">¶</a></h3>
|
|
3405
|
+
<p>A unique identifier used for routing and logging. If omitted, an auto-generated name is used:</p>
|
|
3406
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"support_agent"</span><span class="p">,</span><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="s2">"..."</span><span class="p">)</span>
|
|
3407
|
+
</span></code></pre></div>
|
|
3408
|
+
<h3 id="description">Description<a class="headerlink" href="#description" title="Permanent link">¶</a></h3>
|
|
3409
|
+
<p>Describes what the robot does (useful for routing decisions):</p>
|
|
3410
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3411
|
+
</span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"support_agent"</span><span class="p">,</span>
|
|
3412
|
+
</span><span id="__span-2-3"><a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span><span class="ss">description</span><span class="p">:</span><span class="w"> </span><span class="s2">"Handles customer support inquiries about orders and refunds"</span><span class="p">,</span>
|
|
3413
|
+
</span><span id="__span-2-4"><a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="s2">"..."</span>
|
|
3414
|
+
</span><span id="__span-2-5"><a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="p">)</span>
|
|
3415
|
+
</span></code></pre></div>
|
|
3416
|
+
<h3 id="model">Model<a class="headerlink" href="#model" title="Permanent link">¶</a></h3>
|
|
3417
|
+
<p>The LLM model to use. Defaults to the value in <code>RobotLab.config.ruby_llm.model</code>:</p>
|
|
3418
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3419
|
+
</span><span id="__span-3-2"><a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"writer"</span><span class="p">,</span>
|
|
3420
|
+
</span><span id="__span-3-3"><a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="w"> </span><span class="ss">model</span><span class="p">:</span><span class="w"> </span><span class="s2">"claude-sonnet-4"</span><span class="p">,</span>
|
|
3421
|
+
</span><span id="__span-3-4"><a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="s2">"You are a creative writer."</span>
|
|
3422
|
+
</span><span id="__span-3-5"><a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a><span class="p">)</span>
|
|
3423
|
+
</span></code></pre></div>
|
|
3424
|
+
<h3 id="system-prompt">System Prompt<a class="headerlink" href="#system-prompt" title="Permanent link">¶</a></h3>
|
|
3425
|
+
<p>An inline string that defines the robot's personality and behavior:</p>
|
|
3426
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3427
|
+
</span><span id="__span-4-2"><a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"support"</span><span class="p">,</span>
|
|
3428
|
+
</span><span id="__span-4-3"><a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="o"><<~</span><span class="dl">PROMPT</span>
|
|
3429
|
+
</span><span id="__span-4-4"><a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a><span class="sh"> You are a customer support specialist for TechCo.</span>
|
|
3430
|
+
</span><span id="__span-4-5"><a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a>
|
|
3431
|
+
</span><span id="__span-4-6"><a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a><span class="sh"> Your responsibilities:</span>
|
|
3432
|
+
</span><span id="__span-4-7"><a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a><span class="sh"> - Answer questions about products and services</span>
|
|
3433
|
+
</span><span id="__span-4-8"><a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a><span class="sh"> - Help resolve order issues</span>
|
|
3434
|
+
</span><span id="__span-4-9"><a id="__codelineno-4-9" name="__codelineno-4-9" href="#__codelineno-4-9"></a><span class="sh"> - Provide friendly, professional assistance</span>
|
|
3435
|
+
</span><span id="__span-4-10"><a id="__codelineno-4-10" name="__codelineno-4-10" href="#__codelineno-4-10"></a>
|
|
3436
|
+
</span><span id="__span-4-11"><a id="__codelineno-4-11" name="__codelineno-4-11" href="#__codelineno-4-11"></a><span class="sh"> Always be polite and acknowledge the customer's concerns.</span>
|
|
3437
|
+
</span><span id="__span-4-12"><a id="__codelineno-4-12" name="__codelineno-4-12" href="#__codelineno-4-12"></a><span class="dl"> PROMPT</span>
|
|
3438
|
+
</span><span id="__span-4-13"><a id="__codelineno-4-13" name="__codelineno-4-13" href="#__codelineno-4-13"></a><span class="p">)</span>
|
|
3439
|
+
</span></code></pre></div>
|
|
3440
|
+
<h2 id="template-files">Template Files<a class="headerlink" href="#template-files" title="Permanent link">¶</a></h2>
|
|
3441
|
+
<p>Templates are <code>.md</code> files managed by <a href="https://github.com/MadBomber/prompt_manager">prompt_manager</a>. Reference a template by symbol; RobotLab resolves it through the configured template path.</p>
|
|
3442
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-5-1"><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="c1"># Reference template by symbol (loads prompts/support.md)</span>
|
|
3443
|
+
</span><span id="__span-5-2"><a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3444
|
+
</span><span id="__span-5-3"><a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"support"</span><span class="p">,</span>
|
|
3445
|
+
</span><span id="__span-5-4"><a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a><span class="w"> </span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:support</span><span class="p">,</span>
|
|
3446
|
+
</span><span id="__span-5-5"><a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a><span class="w"> </span><span class="ss">context</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="ss">company</span><span class="p">:</span><span class="w"> </span><span class="s2">"TechCo"</span><span class="p">,</span><span class="w"> </span><span class="ss">tone</span><span class="p">:</span><span class="w"> </span><span class="s2">"friendly"</span><span class="w"> </span><span class="p">}</span>
|
|
3447
|
+
</span><span id="__span-5-6"><a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a><span class="p">)</span>
|
|
3448
|
+
</span></code></pre></div>
|
|
3449
|
+
<h3 id="template-format">Template Format<a class="headerlink" href="#template-format" title="Permanent link">¶</a></h3>
|
|
3450
|
+
<p>Templates use <code>.md</code> files with YAML front matter:</p>
|
|
3451
|
+
<div class="language-markdown highlight"><span class="filename">prompts/support.md</span><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>---
|
|
3452
|
+
</span><span id="__span-6-2"><a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a>description: Customer support assistant
|
|
3453
|
+
</span><span id="__span-6-3"><a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a>parameters:
|
|
3454
|
+
</span><span id="__span-6-4"><a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a> company: "Acme"
|
|
3455
|
+
</span><span id="__span-6-5"><a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a> tone: "professional"
|
|
3456
|
+
</span><span id="__span-6-6"><a id="__codelineno-6-6" name="__codelineno-6-6" href="#__codelineno-6-6"></a>model: claude-sonnet-4
|
|
3457
|
+
</span><span id="__span-6-7"><a id="__codelineno-6-7" name="__codelineno-6-7" href="#__codelineno-6-7"></a><span class="gu">temperature: 0.7</span>
|
|
3458
|
+
</span><span id="__span-6-8"><a id="__codelineno-6-8" name="__codelineno-6-8" href="#__codelineno-6-8"></a><span class="gu">---</span>
|
|
3459
|
+
</span><span id="__span-6-9"><a id="__codelineno-6-9" name="__codelineno-6-9" href="#__codelineno-6-9"></a>You are a support agent for <%= company %>.
|
|
3460
|
+
</span><span id="__span-6-10"><a id="__codelineno-6-10" name="__codelineno-6-10" href="#__codelineno-6-10"></a>Your tone should be <%= tone %>.
|
|
3461
|
+
</span></code></pre></div>
|
|
3462
|
+
<h3 id="front-matter-configuration">Front Matter Configuration<a class="headerlink" href="#front-matter-configuration" title="Permanent link">¶</a></h3>
|
|
3463
|
+
<p>The following YAML front matter keys are applied to the robot's chat automatically:</p>
|
|
3464
|
+
<p><strong>LLM Configuration:</strong></p>
|
|
3465
|
+
<table>
|
|
3466
|
+
<thead>
|
|
3467
|
+
<tr>
|
|
3468
|
+
<th>Key</th>
|
|
3469
|
+
<th>Description</th>
|
|
3470
|
+
</tr>
|
|
3471
|
+
</thead>
|
|
3472
|
+
<tbody>
|
|
3473
|
+
<tr>
|
|
3474
|
+
<td><code>model</code></td>
|
|
3475
|
+
<td>Override the LLM model</td>
|
|
3476
|
+
</tr>
|
|
3477
|
+
<tr>
|
|
3478
|
+
<td><code>temperature</code></td>
|
|
3479
|
+
<td>Controls randomness (0.0 - 1.0)</td>
|
|
3480
|
+
</tr>
|
|
3481
|
+
<tr>
|
|
3482
|
+
<td><code>top_p</code></td>
|
|
3483
|
+
<td>Nucleus sampling threshold</td>
|
|
3484
|
+
</tr>
|
|
3485
|
+
<tr>
|
|
3486
|
+
<td><code>top_k</code></td>
|
|
3487
|
+
<td>Top-k sampling</td>
|
|
3488
|
+
</tr>
|
|
3489
|
+
<tr>
|
|
3490
|
+
<td><code>max_tokens</code></td>
|
|
3491
|
+
<td>Maximum tokens in response</td>
|
|
3492
|
+
</tr>
|
|
3493
|
+
<tr>
|
|
3494
|
+
<td><code>presence_penalty</code></td>
|
|
3495
|
+
<td>Penalize based on presence</td>
|
|
3496
|
+
</tr>
|
|
3497
|
+
<tr>
|
|
3498
|
+
<td><code>frequency_penalty</code></td>
|
|
3499
|
+
<td>Penalize based on frequency</td>
|
|
3500
|
+
</tr>
|
|
3501
|
+
<tr>
|
|
3502
|
+
<td><code>stop</code></td>
|
|
3503
|
+
<td>Stop sequences</td>
|
|
3504
|
+
</tr>
|
|
3505
|
+
</tbody>
|
|
3506
|
+
</table>
|
|
3507
|
+
<p><strong>Robot Identity and Capabilities:</strong></p>
|
|
3508
|
+
<table>
|
|
3509
|
+
<thead>
|
|
3510
|
+
<tr>
|
|
3511
|
+
<th>Key</th>
|
|
3512
|
+
<th>Description</th>
|
|
3513
|
+
</tr>
|
|
3514
|
+
</thead>
|
|
3515
|
+
<tbody>
|
|
3516
|
+
<tr>
|
|
3517
|
+
<td><code>robot_name</code></td>
|
|
3518
|
+
<td>Override the robot's name (when constructor uses the default)</td>
|
|
3519
|
+
</tr>
|
|
3520
|
+
<tr>
|
|
3521
|
+
<td><code>description</code></td>
|
|
3522
|
+
<td>Human-readable description of the robot</td>
|
|
3523
|
+
</tr>
|
|
3524
|
+
<tr>
|
|
3525
|
+
<td><code>tools</code></td>
|
|
3526
|
+
<td>Array of tool class names (resolved via <code>Object.const_get</code>)</td>
|
|
3527
|
+
</tr>
|
|
3528
|
+
<tr>
|
|
3529
|
+
<td><code>mcp</code></td>
|
|
3530
|
+
<td>Array of MCP server configurations</td>
|
|
3531
|
+
</tr>
|
|
3532
|
+
<tr>
|
|
3533
|
+
<td><code>skills</code></td>
|
|
3534
|
+
<td>Array of skill template symbols to prepend (see <a href="#composable-skills">Composable Skills</a>)</td>
|
|
3535
|
+
</tr>
|
|
3536
|
+
</tbody>
|
|
3537
|
+
</table>
|
|
3538
|
+
<p>Constructor-provided values always take precedence over frontmatter values.</p>
|
|
3539
|
+
<h3 id="self-contained-templates">Self-Contained Templates<a class="headerlink" href="#self-contained-templates" title="Permanent link">¶</a></h3>
|
|
3540
|
+
<p>Templates can declare everything a robot needs — identity, tools, MCP servers, and LLM config — making the <code>.md</code> file a complete robot definition:</p>
|
|
3541
|
+
<div class="language-markdown highlight"><span class="filename">prompts/github_assistant.md</span><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>---
|
|
3542
|
+
</span><span id="__span-7-2"><a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a>description: GitHub assistant with MCP tool access
|
|
3543
|
+
</span><span id="__span-7-3"><a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a>robot_name: github_bot
|
|
3544
|
+
</span><span id="__span-7-4"><a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a>mcp:
|
|
3545
|
+
</span><span id="__span-7-5"><a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a><span class="w"> </span><span class="k">-</span><span class="w"> </span>name: github
|
|
3546
|
+
</span><span id="__span-7-6"><a id="__codelineno-7-6" name="__codelineno-7-6" href="#__codelineno-7-6"></a> transport: stdio
|
|
3547
|
+
</span><span id="__span-7-7"><a id="__codelineno-7-7" name="__codelineno-7-7" href="#__codelineno-7-7"></a> command: npx
|
|
3548
|
+
</span><span id="__span-7-8"><a id="__codelineno-7-8" name="__codelineno-7-8" href="#__codelineno-7-8"></a> args: ["-y", "@modelcontextprotocol/server-github"]
|
|
3549
|
+
</span><span id="__span-7-9"><a id="__codelineno-7-9" name="__codelineno-7-9" href="#__codelineno-7-9"></a>model: claude-sonnet-4
|
|
3550
|
+
</span><span id="__span-7-10"><a id="__codelineno-7-10" name="__codelineno-7-10" href="#__codelineno-7-10"></a><span class="gu">temperature: 0.3</span>
|
|
3551
|
+
</span><span id="__span-7-11"><a id="__codelineno-7-11" name="__codelineno-7-11" href="#__codelineno-7-11"></a><span class="gu">---</span>
|
|
3552
|
+
</span><span id="__span-7-12"><a id="__codelineno-7-12" name="__codelineno-7-12" href="#__codelineno-7-12"></a>You are a helpful GitHub assistant with access to GitHub tools via MCP.
|
|
3553
|
+
</span><span id="__span-7-13"><a id="__codelineno-7-13" name="__codelineno-7-13" href="#__codelineno-7-13"></a>Use the available tools to help answer questions about GitHub repositories.
|
|
3554
|
+
</span></code></pre></div>
|
|
3555
|
+
<p>Build the robot with minimal constructor arguments:</p>
|
|
3556
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-8-1"><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="c1"># Template provides name, description, MCP config, model, and temperature</span>
|
|
3557
|
+
</span><span id="__span-8-2"><a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:github_assistant</span><span class="p">)</span>
|
|
3558
|
+
</span></code></pre></div>
|
|
3559
|
+
<h3 id="tools-in-front-matter">Tools in Front Matter<a class="headerlink" href="#tools-in-front-matter" title="Permanent link">¶</a></h3>
|
|
3560
|
+
<p>Declare tool classes by name in the <code>tools:</code> key. RobotLab resolves each string to a Ruby constant and instantiates it:</p>
|
|
3561
|
+
<div class="language-markdown highlight"><span class="filename">prompts/order_support.md</span><pre><span></span><code><span id="__span-9-1"><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>---
|
|
3562
|
+
</span><span id="__span-9-2"><a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>description: Order support specialist
|
|
3563
|
+
</span><span id="__span-9-3"><a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a>tools:
|
|
3564
|
+
</span><span id="__span-9-4"><a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a><span class="w"> </span><span class="k">-</span><span class="w"> </span>OrderLookup
|
|
3565
|
+
</span><span id="__span-9-5"><a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a><span class="gu"> - RefundProcessor</span>
|
|
3566
|
+
</span><span id="__span-9-6"><a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a><span class="gu">---</span>
|
|
3567
|
+
</span><span id="__span-9-7"><a id="__codelineno-9-7" name="__codelineno-9-7" href="#__codelineno-9-7"></a>You help customers with order inquiries and refunds.
|
|
3568
|
+
</span></code></pre></div>
|
|
3569
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-10-1"><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="c1"># Tools are loaded from frontmatter — no local_tools: needed</span>
|
|
3570
|
+
</span><span id="__span-10-2"><a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:order_support</span><span class="p">)</span>
|
|
3571
|
+
</span></code></pre></div>
|
|
3572
|
+
<p>Tool classes must be defined and loaded before the robot is built. If a tool name cannot be resolved, it is skipped with a warning.</p>
|
|
3573
|
+
<p>Constructor <code>local_tools:</code> overrides frontmatter <code>tools:</code> when provided:</p>
|
|
3574
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-11-1"><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="c1"># Constructor tools take precedence over frontmatter tools</span>
|
|
3575
|
+
</span><span id="__span-11-2"><a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3576
|
+
</span><span id="__span-11-3"><a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="w"> </span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:order_support</span><span class="p">,</span>
|
|
3577
|
+
</span><span id="__span-11-4"><a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a><span class="w"> </span><span class="ss">local_tools</span><span class="p">:</span><span class="w"> </span><span class="o">[</span><span class="no">OrderLookup</span><span class="o">]</span><span class="w"> </span><span class="c1"># Only OrderLookup, not RefundProcessor</span>
|
|
3578
|
+
</span><span id="__span-11-5"><a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a><span class="p">)</span>
|
|
3579
|
+
</span></code></pre></div>
|
|
3580
|
+
<h3 id="mcp-in-front-matter">MCP in Front Matter<a class="headerlink" href="#mcp-in-front-matter" title="Permanent link">¶</a></h3>
|
|
3581
|
+
<p>Declare MCP server configurations directly in the template:</p>
|
|
3582
|
+
<div class="language-markdown highlight"><span class="filename">prompts/developer.md</span><pre><span></span><code><span id="__span-12-1"><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>---
|
|
3583
|
+
</span><span id="__span-12-2"><a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a>description: Developer assistant with filesystem access
|
|
3584
|
+
</span><span id="__span-12-3"><a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a>mcp:
|
|
3585
|
+
</span><span id="__span-12-4"><a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a><span class="w"> </span><span class="k">-</span><span class="w"> </span>name: filesystem
|
|
3586
|
+
</span><span id="__span-12-5"><a id="__codelineno-12-5" name="__codelineno-12-5" href="#__codelineno-12-5"></a> transport: stdio
|
|
3587
|
+
</span><span id="__span-12-6"><a id="__codelineno-12-6" name="__codelineno-12-6" href="#__codelineno-12-6"></a> command: mcp-server-filesystem
|
|
3588
|
+
</span><span id="__span-12-7"><a id="__codelineno-12-7" name="__codelineno-12-7" href="#__codelineno-12-7"></a><span class="gu"> args: ["--root", "/home/user/projects"]</span>
|
|
3589
|
+
</span><span id="__span-12-8"><a id="__codelineno-12-8" name="__codelineno-12-8" href="#__codelineno-12-8"></a><span class="gu">---</span>
|
|
3590
|
+
</span><span id="__span-12-9"><a id="__codelineno-12-9" name="__codelineno-12-9" href="#__codelineno-12-9"></a>You are a developer assistant with filesystem access.
|
|
3591
|
+
</span></code></pre></div>
|
|
3592
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-13-1"><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:developer</span><span class="p">)</span>
|
|
3593
|
+
</span></code></pre></div>
|
|
3594
|
+
<p>Constructor <code>mcp:</code> overrides frontmatter <code>mcp:</code> when provided.</p>
|
|
3595
|
+
<h3 id="template-with-system-prompt">Template with System Prompt<a class="headerlink" href="#template-with-system-prompt" title="Permanent link">¶</a></h3>
|
|
3596
|
+
<p>You can combine a template and an inline system prompt. Both are applied to the chat -- the template first, then the system prompt is appended as additional instructions:</p>
|
|
3597
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-14-1"><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3598
|
+
</span><span id="__span-14-2"><a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"support"</span><span class="p">,</span>
|
|
3599
|
+
</span><span id="__span-14-3"><a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a><span class="w"> </span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:support</span><span class="p">,</span>
|
|
3600
|
+
</span><span id="__span-14-4"><a id="__codelineno-14-4" name="__codelineno-14-4" href="#__codelineno-14-4"></a><span class="w"> </span><span class="ss">context</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="ss">company</span><span class="p">:</span><span class="w"> </span><span class="s2">"TechCo"</span><span class="w"> </span><span class="p">},</span>
|
|
3601
|
+
</span><span id="__span-14-5"><a id="__codelineno-14-5" name="__codelineno-14-5" href="#__codelineno-14-5"></a><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="s2">"Always respond in Spanish."</span>
|
|
3602
|
+
</span><span id="__span-14-6"><a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a><span class="p">)</span>
|
|
3603
|
+
</span></code></pre></div>
|
|
3604
|
+
<h2 id="composable-skills">Composable Skills<a class="headerlink" href="#composable-skills" title="Permanent link">¶</a></h2>
|
|
3605
|
+
<p>Skills let you compose robot behaviors from reusable templates without creating a dedicated template for every combination. A skill is just a regular template whose prompt body gets prepended before the main template's body.</p>
|
|
3606
|
+
<h3 id="why-skills">Why Skills?<a class="headerlink" href="#why-skills" title="Permanent link">¶</a></h3>
|
|
3607
|
+
<p>Consider a support agent that needs to:</p>
|
|
3608
|
+
<ul>
|
|
3609
|
+
<li>Ask clarifying questions before acting</li>
|
|
3610
|
+
<li>Detect customer sentiment</li>
|
|
3611
|
+
<li>Respond in structured JSON</li>
|
|
3612
|
+
</ul>
|
|
3613
|
+
<p>Without skills, you'd create a single monolithic template or copy-paste shared instructions across templates. With skills, each behavior is a standalone template that can be mixed into any robot.</p>
|
|
3614
|
+
<h3 id="defining-a-skill">Defining a Skill<a class="headerlink" href="#defining-a-skill" title="Permanent link">¶</a></h3>
|
|
3615
|
+
<p>A skill is a standard <code>.md</code> template file. There is no special syntax — any template can be used as a skill:</p>
|
|
3616
|
+
<div class="language-markdown highlight"><span class="filename">prompts/clarifier.md</span><pre><span></span><code><span id="__span-15-1"><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>---
|
|
3617
|
+
</span><span id="__span-15-2"><a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a><span class="gu">description: Ask clarifying questions before acting</span>
|
|
3618
|
+
</span><span id="__span-15-3"><a id="__codelineno-15-3" name="__codelineno-15-3" href="#__codelineno-15-3"></a><span class="gu">---</span>
|
|
3619
|
+
</span><span id="__span-15-4"><a id="__codelineno-15-4" name="__codelineno-15-4" href="#__codelineno-15-4"></a>Before answering, consider whether the user's request is ambiguous.
|
|
3620
|
+
</span><span id="__span-15-5"><a id="__codelineno-15-5" name="__codelineno-15-5" href="#__codelineno-15-5"></a>If so, ask one focused clarifying question before proceeding.
|
|
3621
|
+
</span></code></pre></div>
|
|
3622
|
+
<div class="language-markdown highlight"><span class="filename">prompts/json_responder.md</span><pre><span></span><code><span id="__span-16-1"><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>---
|
|
3623
|
+
</span><span id="__span-16-2"><a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a>description: Respond in structured JSON
|
|
3624
|
+
</span><span id="__span-16-3"><a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a><span class="gu">temperature: 0.2</span>
|
|
3625
|
+
</span><span id="__span-16-4"><a id="__codelineno-16-4" name="__codelineno-16-4" href="#__codelineno-16-4"></a><span class="gu">---</span>
|
|
3626
|
+
</span><span id="__span-16-5"><a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a>Always respond with valid JSON. Use this structure:
|
|
3627
|
+
</span><span id="__span-16-6"><a id="__codelineno-16-6" name="__codelineno-16-6" href="#__codelineno-16-6"></a>{"answer": "...", "confidence": 0.0-1.0, "sources": [...]}
|
|
3628
|
+
</span></code></pre></div>
|
|
3629
|
+
<h3 id="using-skills-via-constructor">Using Skills via Constructor<a class="headerlink" href="#using-skills-via-constructor" title="Permanent link">¶</a></h3>
|
|
3630
|
+
<p>Pass <code>skills:</code> as a symbol or array of symbols:</p>
|
|
3631
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-17-1"><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a><span class="c1"># Single skill</span>
|
|
3632
|
+
</span><span id="__span-17-2"><a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3633
|
+
</span><span id="__span-17-3"><a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"bot"</span><span class="p">,</span>
|
|
3634
|
+
</span><span id="__span-17-4"><a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a><span class="w"> </span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:support</span><span class="p">,</span>
|
|
3635
|
+
</span><span id="__span-17-5"><a id="__codelineno-17-5" name="__codelineno-17-5" href="#__codelineno-17-5"></a><span class="w"> </span><span class="ss">skills</span><span class="p">:</span><span class="w"> </span><span class="ss">:clarifier</span>
|
|
3636
|
+
</span><span id="__span-17-6"><a id="__codelineno-17-6" name="__codelineno-17-6" href="#__codelineno-17-6"></a><span class="p">)</span>
|
|
3637
|
+
</span><span id="__span-17-7"><a id="__codelineno-17-7" name="__codelineno-17-7" href="#__codelineno-17-7"></a>
|
|
3638
|
+
</span><span id="__span-17-8"><a id="__codelineno-17-8" name="__codelineno-17-8" href="#__codelineno-17-8"></a><span class="c1"># Multiple skills</span>
|
|
3639
|
+
</span><span id="__span-17-9"><a id="__codelineno-17-9" name="__codelineno-17-9" href="#__codelineno-17-9"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3640
|
+
</span><span id="__span-17-10"><a id="__codelineno-17-10" name="__codelineno-17-10" href="#__codelineno-17-10"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"bot"</span><span class="p">,</span>
|
|
3641
|
+
</span><span id="__span-17-11"><a id="__codelineno-17-11" name="__codelineno-17-11" href="#__codelineno-17-11"></a><span class="w"> </span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:support</span><span class="p">,</span>
|
|
3642
|
+
</span><span id="__span-17-12"><a id="__codelineno-17-12" name="__codelineno-17-12" href="#__codelineno-17-12"></a><span class="w"> </span><span class="ss">skills</span><span class="p">:</span><span class="w"> </span><span class="o">[</span><span class="ss">:clarifier</span><span class="p">,</span><span class="w"> </span><span class="ss">:json_responder</span><span class="o">]</span><span class="p">,</span>
|
|
3643
|
+
</span><span id="__span-17-13"><a id="__codelineno-17-13" name="__codelineno-17-13" href="#__codelineno-17-13"></a><span class="w"> </span><span class="ss">context</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="ss">company</span><span class="p">:</span><span class="w"> </span><span class="s2">"Acme Corp"</span><span class="w"> </span><span class="p">}</span>
|
|
3644
|
+
</span><span id="__span-17-14"><a id="__codelineno-17-14" name="__codelineno-17-14" href="#__codelineno-17-14"></a><span class="p">)</span>
|
|
3645
|
+
</span></code></pre></div>
|
|
3646
|
+
<p>The resulting system prompt is composed in order: clarifier body, then json_responder body, then the main support template body.</p>
|
|
3647
|
+
<h3 id="using-skills-via-front-matter">Using Skills via Front Matter<a class="headerlink" href="#using-skills-via-front-matter" title="Permanent link">¶</a></h3>
|
|
3648
|
+
<p>Templates can declare skills directly in their front matter:</p>
|
|
3649
|
+
<div class="language-markdown highlight"><span class="filename">prompts/smart_support.md</span><pre><span></span><code><span id="__span-18-1"><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a>---
|
|
3650
|
+
</span><span id="__span-18-2"><a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a>description: Support agent with built-in skills
|
|
3651
|
+
</span><span id="__span-18-3"><a id="__codelineno-18-3" name="__codelineno-18-3" href="#__codelineno-18-3"></a>skills:
|
|
3652
|
+
</span><span id="__span-18-4"><a id="__codelineno-18-4" name="__codelineno-18-4" href="#__codelineno-18-4"></a><span class="w"> </span><span class="k">-</span><span class="w"> </span>clarifier
|
|
3653
|
+
</span><span id="__span-18-5"><a id="__codelineno-18-5" name="__codelineno-18-5" href="#__codelineno-18-5"></a><span class="w"> </span><span class="k">-</span><span class="w"> </span>json_responder
|
|
3654
|
+
</span><span id="__span-18-6"><a id="__codelineno-18-6" name="__codelineno-18-6" href="#__codelineno-18-6"></a>parameters:
|
|
3655
|
+
</span><span id="__span-18-7"><a id="__codelineno-18-7" name="__codelineno-18-7" href="#__codelineno-18-7"></a><span class="gu"> company: null</span>
|
|
3656
|
+
</span><span id="__span-18-8"><a id="__codelineno-18-8" name="__codelineno-18-8" href="#__codelineno-18-8"></a><span class="gu">---</span>
|
|
3657
|
+
</span><span id="__span-18-9"><a id="__codelineno-18-9" name="__codelineno-18-9" href="#__codelineno-18-9"></a>You are a support agent for <%= company %>.
|
|
3658
|
+
</span><span id="__span-18-10"><a id="__codelineno-18-10" name="__codelineno-18-10" href="#__codelineno-18-10"></a>Help customers with their inquiries.
|
|
3659
|
+
</span></code></pre></div>
|
|
3660
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-19-1"><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a><span class="c1"># Skills are loaded from front matter automatically</span>
|
|
3661
|
+
</span><span id="__span-19-2"><a id="__codelineno-19-2" name="__codelineno-19-2" href="#__codelineno-19-2"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3662
|
+
</span><span id="__span-19-3"><a id="__codelineno-19-3" name="__codelineno-19-3" href="#__codelineno-19-3"></a><span class="w"> </span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:smart_support</span><span class="p">,</span>
|
|
3663
|
+
</span><span id="__span-19-4"><a id="__codelineno-19-4" name="__codelineno-19-4" href="#__codelineno-19-4"></a><span class="w"> </span><span class="ss">context</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="ss">company</span><span class="p">:</span><span class="w"> </span><span class="s2">"Acme Corp"</span><span class="w"> </span><span class="p">}</span>
|
|
3664
|
+
</span><span id="__span-19-5"><a id="__codelineno-19-5" name="__codelineno-19-5" href="#__codelineno-19-5"></a><span class="p">)</span>
|
|
3665
|
+
</span></code></pre></div>
|
|
3666
|
+
<p>Constructor <code>skills:</code> and front matter <code>skills:</code> are combined — constructor skills are processed first, then front matter skills.</p>
|
|
3667
|
+
<h3 id="nested-skills">Nested Skills<a class="headerlink" href="#nested-skills" title="Permanent link">¶</a></h3>
|
|
3668
|
+
<p>Skills can reference other skills, enabling layered composition:</p>
|
|
3669
|
+
<div class="language-markdown highlight"><span class="filename">prompts/safety.md</span><pre><span></span><code><span id="__span-20-1"><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a>---
|
|
3670
|
+
</span><span id="__span-20-2"><a id="__codelineno-20-2" name="__codelineno-20-2" href="#__codelineno-20-2"></a>description: Safety guidelines
|
|
3671
|
+
</span><span id="__span-20-3"><a id="__codelineno-20-3" name="__codelineno-20-3" href="#__codelineno-20-3"></a>skills:
|
|
3672
|
+
</span><span id="__span-20-4"><a id="__codelineno-20-4" name="__codelineno-20-4" href="#__codelineno-20-4"></a><span class="w"> </span><span class="k">-</span><span class="w"> </span>content_filter
|
|
3673
|
+
</span><span id="__span-20-5"><a id="__codelineno-20-5" name="__codelineno-20-5" href="#__codelineno-20-5"></a><span class="gu"> - pii_redactor</span>
|
|
3674
|
+
</span><span id="__span-20-6"><a id="__codelineno-20-6" name="__codelineno-20-6" href="#__codelineno-20-6"></a><span class="gu">---</span>
|
|
3675
|
+
</span><span id="__span-20-7"><a id="__codelineno-20-7" name="__codelineno-20-7" href="#__codelineno-20-7"></a>Follow all safety guidelines when responding.
|
|
3676
|
+
</span></code></pre></div>
|
|
3677
|
+
<p>Nested skills are expanded depth-first. For the example above, the prompt order would be: content_filter, pii_redactor, safety, then the main template.</p>
|
|
3678
|
+
<h3 id="cycle-detection">Cycle Detection<a class="headerlink" href="#cycle-detection" title="Permanent link">¶</a></h3>
|
|
3679
|
+
<p>If skills form a cycle (A references B, B references A), RobotLab detects it automatically, logs a warning, and skips the duplicate. This prevents infinite loops.</p>
|
|
3680
|
+
<h3 id="config-cascade">Config Cascade<a class="headerlink" href="#config-cascade" title="Permanent link">¶</a></h3>
|
|
3681
|
+
<p>Skills can include LLM configuration in their front matter. Config cascades in processing order — later values override earlier ones:</p>
|
|
3682
|
+
<div class="language-markdown highlight"><span class="filename">prompts/creative_mode.md</span><pre><span></span><code><span id="__span-21-1"><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a>---
|
|
3683
|
+
</span><span id="__span-21-2"><a id="__codelineno-21-2" name="__codelineno-21-2" href="#__codelineno-21-2"></a>description: Enable creative responses
|
|
3684
|
+
</span><span id="__span-21-3"><a id="__codelineno-21-3" name="__codelineno-21-3" href="#__codelineno-21-3"></a>temperature: 0.9
|
|
3685
|
+
</span><span id="__span-21-4"><a id="__codelineno-21-4" name="__codelineno-21-4" href="#__codelineno-21-4"></a><span class="gu">top_p: 0.95</span>
|
|
3686
|
+
</span><span id="__span-21-5"><a id="__codelineno-21-5" name="__codelineno-21-5" href="#__codelineno-21-5"></a><span class="gu">---</span>
|
|
3687
|
+
</span><span id="__span-21-6"><a id="__codelineno-21-6" name="__codelineno-21-6" href="#__codelineno-21-6"></a>Be creative and imaginative in your responses.
|
|
3688
|
+
</span></code></pre></div>
|
|
3689
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-22-1"><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3690
|
+
</span><span id="__span-22-2"><a id="__codelineno-22-2" name="__codelineno-22-2" href="#__codelineno-22-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"writer"</span><span class="p">,</span>
|
|
3691
|
+
</span><span id="__span-22-3"><a id="__codelineno-22-3" name="__codelineno-22-3" href="#__codelineno-22-3"></a><span class="w"> </span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:article_writer</span><span class="p">,</span>
|
|
3692
|
+
</span><span id="__span-22-4"><a id="__codelineno-22-4" name="__codelineno-22-4" href="#__codelineno-22-4"></a><span class="w"> </span><span class="ss">skills</span><span class="p">:</span><span class="w"> </span><span class="o">[</span><span class="ss">:creative_mode</span><span class="o">]</span>
|
|
3693
|
+
</span><span id="__span-22-5"><a id="__codelineno-22-5" name="__codelineno-22-5" href="#__codelineno-22-5"></a><span class="p">)</span>
|
|
3694
|
+
</span><span id="__span-22-6"><a id="__codelineno-22-6" name="__codelineno-22-6" href="#__codelineno-22-6"></a><span class="c1"># temperature is 0.9 from the skill (unless the main template or constructor overrides it)</span>
|
|
3695
|
+
</span></code></pre></div>
|
|
3696
|
+
<p>The precedence order (highest wins):</p>
|
|
3697
|
+
<ol>
|
|
3698
|
+
<li>Constructor kwargs (<code>temperature: 0.3</code>)</li>
|
|
3699
|
+
<li>Main template front matter</li>
|
|
3700
|
+
<li>Later skills override earlier skills</li>
|
|
3701
|
+
<li>First skill in the list</li>
|
|
3702
|
+
</ol>
|
|
3703
|
+
<h3 id="skills-without-a-main-template">Skills Without a Main Template<a class="headerlink" href="#skills-without-a-main-template" title="Permanent link">¶</a></h3>
|
|
3704
|
+
<p>Skills work without a main template — useful for quick composition:</p>
|
|
3705
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-23-1"><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3706
|
+
</span><span id="__span-23-2"><a id="__codelineno-23-2" name="__codelineno-23-2" href="#__codelineno-23-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"safe_bot"</span><span class="p">,</span>
|
|
3707
|
+
</span><span id="__span-23-3"><a id="__codelineno-23-3" name="__codelineno-23-3" href="#__codelineno-23-3"></a><span class="w"> </span><span class="ss">skills</span><span class="p">:</span><span class="w"> </span><span class="o">[</span><span class="ss">:safety</span><span class="p">,</span><span class="w"> </span><span class="ss">:json_responder</span><span class="o">]</span><span class="p">,</span>
|
|
3708
|
+
</span><span id="__span-23-4"><a id="__codelineno-23-4" name="__codelineno-23-4" href="#__codelineno-23-4"></a><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="s2">"You answer questions about our product."</span>
|
|
3709
|
+
</span><span id="__span-23-5"><a id="__codelineno-23-5" name="__codelineno-23-5" href="#__codelineno-23-5"></a><span class="p">)</span>
|
|
3710
|
+
</span></code></pre></div>
|
|
3711
|
+
<h3 id="shared-context">Shared Context<a class="headerlink" href="#shared-context" title="Permanent link">¶</a></h3>
|
|
3712
|
+
<p>All skills and the main template render with the same <code>context:</code> hash. Define parameters in each skill's front matter and pass values through the shared context:</p>
|
|
3713
|
+
<div class="language-markdown highlight"><span class="filename">prompts/branded.md</span><pre><span></span><code><span id="__span-24-1"><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a>---
|
|
3714
|
+
</span><span id="__span-24-2"><a id="__codelineno-24-2" name="__codelineno-24-2" href="#__codelineno-24-2"></a>description: Brand-aware responses
|
|
3715
|
+
</span><span id="__span-24-3"><a id="__codelineno-24-3" name="__codelineno-24-3" href="#__codelineno-24-3"></a>parameters:
|
|
3716
|
+
</span><span id="__span-24-4"><a id="__codelineno-24-4" name="__codelineno-24-4" href="#__codelineno-24-4"></a><span class="gu"> company_name: null</span>
|
|
3717
|
+
</span><span id="__span-24-5"><a id="__codelineno-24-5" name="__codelineno-24-5" href="#__codelineno-24-5"></a><span class="gu">---</span>
|
|
3718
|
+
</span><span id="__span-24-6"><a id="__codelineno-24-6" name="__codelineno-24-6" href="#__codelineno-24-6"></a>You represent <%= company_name %>. Always maintain brand voice.
|
|
3719
|
+
</span></code></pre></div>
|
|
3720
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-25-1"><a id="__codelineno-25-1" name="__codelineno-25-1" href="#__codelineno-25-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3721
|
+
</span><span id="__span-25-2"><a id="__codelineno-25-2" name="__codelineno-25-2" href="#__codelineno-25-2"></a><span class="w"> </span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:support</span><span class="p">,</span>
|
|
3722
|
+
</span><span id="__span-25-3"><a id="__codelineno-25-3" name="__codelineno-25-3" href="#__codelineno-25-3"></a><span class="w"> </span><span class="ss">skills</span><span class="p">:</span><span class="w"> </span><span class="o">[</span><span class="ss">:branded</span><span class="o">]</span><span class="p">,</span>
|
|
3723
|
+
</span><span id="__span-25-4"><a id="__codelineno-25-4" name="__codelineno-25-4" href="#__codelineno-25-4"></a><span class="w"> </span><span class="ss">context</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="ss">company_name</span><span class="p">:</span><span class="w"> </span><span class="s2">"Acme Corp"</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="c1"># shared with all skills</span>
|
|
3724
|
+
</span><span id="__span-25-5"><a id="__codelineno-25-5" name="__codelineno-25-5" href="#__codelineno-25-5"></a><span class="p">)</span>
|
|
3725
|
+
</span></code></pre></div>
|
|
3726
|
+
<h2 id="adding-tools">Adding Tools<a class="headerlink" href="#adding-tools" title="Permanent link">¶</a></h2>
|
|
3727
|
+
<p>Give robots capabilities via the <code>local_tools:</code> parameter. Tools can be <code>RubyLLM::Tool</code> subclasses or <code>RobotLab::Tool</code> instances:</p>
|
|
3728
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-26-1"><a id="__codelineno-26-1" name="__codelineno-26-1" href="#__codelineno-26-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3729
|
+
</span><span id="__span-26-2"><a id="__codelineno-26-2" name="__codelineno-26-2" href="#__codelineno-26-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"order_assistant"</span><span class="p">,</span>
|
|
3730
|
+
</span><span id="__span-26-3"><a id="__codelineno-26-3" name="__codelineno-26-3" href="#__codelineno-26-3"></a><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="s2">"You help customers with orders."</span><span class="p">,</span>
|
|
3731
|
+
</span><span id="__span-26-4"><a id="__codelineno-26-4" name="__codelineno-26-4" href="#__codelineno-26-4"></a><span class="w"> </span><span class="ss">local_tools</span><span class="p">:</span><span class="w"> </span><span class="o">[</span><span class="no">OrderLookup</span><span class="p">,</span><span class="w"> </span><span class="no">InventoryCheck</span><span class="o">]</span>
|
|
3732
|
+
</span><span id="__span-26-5"><a id="__codelineno-26-5" name="__codelineno-26-5" href="#__codelineno-26-5"></a><span class="p">)</span>
|
|
3733
|
+
</span></code></pre></div>
|
|
3734
|
+
<p>See the <a href="../using-tools/">Using Tools</a> guide for details on defining tools.</p>
|
|
3735
|
+
<h2 id="mcp-configuration">MCP Configuration<a class="headerlink" href="#mcp-configuration" title="Permanent link">¶</a></h2>
|
|
3736
|
+
<p>Connect to MCP (Model Context Protocol) servers via the <code>mcp:</code> parameter:</p>
|
|
3737
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-27-1"><a id="__codelineno-27-1" name="__codelineno-27-1" href="#__codelineno-27-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3738
|
+
</span><span id="__span-27-2"><a id="__codelineno-27-2" name="__codelineno-27-2" href="#__codelineno-27-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"coder"</span><span class="p">,</span>
|
|
3739
|
+
</span><span id="__span-27-3"><a id="__codelineno-27-3" name="__codelineno-27-3" href="#__codelineno-27-3"></a><span class="w"> </span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:developer</span><span class="p">,</span>
|
|
3740
|
+
</span><span id="__span-27-4"><a id="__codelineno-27-4" name="__codelineno-27-4" href="#__codelineno-27-4"></a><span class="w"> </span><span class="ss">mcp</span><span class="p">:</span><span class="w"> </span><span class="o">[</span>
|
|
3741
|
+
</span><span id="__span-27-5"><a id="__codelineno-27-5" name="__codelineno-27-5" href="#__codelineno-27-5"></a><span class="w"> </span><span class="p">{</span>
|
|
3742
|
+
</span><span id="__span-27-6"><a id="__codelineno-27-6" name="__codelineno-27-6" href="#__codelineno-27-6"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"filesystem"</span><span class="p">,</span>
|
|
3743
|
+
</span><span id="__span-27-7"><a id="__codelineno-27-7" name="__codelineno-27-7" href="#__codelineno-27-7"></a><span class="w"> </span><span class="ss">transport</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="ss">type</span><span class="p">:</span><span class="w"> </span><span class="s2">"stdio"</span><span class="p">,</span><span class="w"> </span><span class="ss">command</span><span class="p">:</span><span class="w"> </span><span class="s2">"mcp-server-fs"</span><span class="p">,</span><span class="w"> </span><span class="ss">args</span><span class="p">:</span><span class="w"> </span><span class="o">[</span><span class="s2">"--root"</span><span class="p">,</span><span class="w"> </span><span class="s2">"/data"</span><span class="o">]</span><span class="w"> </span><span class="p">}</span>
|
|
3744
|
+
</span><span id="__span-27-8"><a id="__codelineno-27-8" name="__codelineno-27-8" href="#__codelineno-27-8"></a><span class="w"> </span><span class="p">}</span>
|
|
3745
|
+
</span><span id="__span-27-9"><a id="__codelineno-27-9" name="__codelineno-27-9" href="#__codelineno-27-9"></a><span class="w"> </span><span class="o">]</span>
|
|
3746
|
+
</span><span id="__span-27-10"><a id="__codelineno-27-10" name="__codelineno-27-10" href="#__codelineno-27-10"></a><span class="p">)</span>
|
|
3747
|
+
</span></code></pre></div>
|
|
3748
|
+
<p>MCP configuration supports hierarchical resolution:</p>
|
|
3749
|
+
<table>
|
|
3750
|
+
<thead>
|
|
3751
|
+
<tr>
|
|
3752
|
+
<th>Value</th>
|
|
3753
|
+
<th>Behavior</th>
|
|
3754
|
+
</tr>
|
|
3755
|
+
</thead>
|
|
3756
|
+
<tbody>
|
|
3757
|
+
<tr>
|
|
3758
|
+
<td><code>:none</code></td>
|
|
3759
|
+
<td>No MCP servers (default)</td>
|
|
3760
|
+
</tr>
|
|
3761
|
+
<tr>
|
|
3762
|
+
<td><code>:inherit</code></td>
|
|
3763
|
+
<td>Use parent network/config MCP servers</td>
|
|
3764
|
+
</tr>
|
|
3765
|
+
<tr>
|
|
3766
|
+
<td><code>[...]</code></td>
|
|
3767
|
+
<td>Explicit array of server configurations</td>
|
|
3768
|
+
</tr>
|
|
3769
|
+
</tbody>
|
|
3770
|
+
</table>
|
|
3771
|
+
<p>See the <a href="../mcp-integration/">MCP Integration</a> guide for transport types and advanced patterns.</p>
|
|
3772
|
+
<h2 id="chaining-configuration">Chaining Configuration<a class="headerlink" href="#chaining-configuration" title="Permanent link">¶</a></h2>
|
|
3773
|
+
<p>Robots support <code>with_*</code> method chaining for runtime reconfiguration. Each method returns <code>self</code> for fluent usage:</p>
|
|
3774
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-28-1"><a id="__codelineno-28-1" name="__codelineno-28-1" href="#__codelineno-28-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"bot"</span><span class="p">)</span>
|
|
3775
|
+
</span><span id="__span-28-2"><a id="__codelineno-28-2" name="__codelineno-28-2" href="#__codelineno-28-2"></a>
|
|
3776
|
+
</span><span id="__span-28-3"><a id="__codelineno-28-3" name="__codelineno-28-3" href="#__codelineno-28-3"></a><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">robot</span>
|
|
3777
|
+
</span><span id="__span-28-4"><a id="__codelineno-28-4" name="__codelineno-28-4" href="#__codelineno-28-4"></a><span class="w"> </span><span class="o">.</span><span class="n">with_instructions</span><span class="p">(</span><span class="s2">"Be concise and direct."</span><span class="p">)</span>
|
|
3778
|
+
</span><span id="__span-28-5"><a id="__codelineno-28-5" name="__codelineno-28-5" href="#__codelineno-28-5"></a><span class="w"> </span><span class="o">.</span><span class="n">with_temperature</span><span class="p">(</span><span class="mi">0</span><span class="o">.</span><span class="mi">9</span><span class="p">)</span>
|
|
3779
|
+
</span><span id="__span-28-6"><a id="__codelineno-28-6" name="__codelineno-28-6" href="#__codelineno-28-6"></a><span class="w"> </span><span class="o">.</span><span class="n">with_model</span><span class="p">(</span><span class="s2">"claude-sonnet-4"</span><span class="p">)</span>
|
|
3780
|
+
</span><span id="__span-28-7"><a id="__codelineno-28-7" name="__codelineno-28-7" href="#__codelineno-28-7"></a><span class="w"> </span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="s2">"Summarize quantum computing in one sentence."</span><span class="p">)</span>
|
|
3781
|
+
</span></code></pre></div>
|
|
3782
|
+
<h3 id="available-chain-methods">Available Chain Methods<a class="headerlink" href="#available-chain-methods" title="Permanent link">¶</a></h3>
|
|
3783
|
+
<table>
|
|
3784
|
+
<thead>
|
|
3785
|
+
<tr>
|
|
3786
|
+
<th>Method</th>
|
|
3787
|
+
<th>Description</th>
|
|
3788
|
+
</tr>
|
|
3789
|
+
</thead>
|
|
3790
|
+
<tbody>
|
|
3791
|
+
<tr>
|
|
3792
|
+
<td><code>with_model(id)</code></td>
|
|
3793
|
+
<td>Change the LLM model</td>
|
|
3794
|
+
</tr>
|
|
3795
|
+
<tr>
|
|
3796
|
+
<td><code>with_instructions(text)</code></td>
|
|
3797
|
+
<td>Set system instructions</td>
|
|
3798
|
+
</tr>
|
|
3799
|
+
<tr>
|
|
3800
|
+
<td><code>with_temperature(val)</code></td>
|
|
3801
|
+
<td>Set temperature</td>
|
|
3802
|
+
</tr>
|
|
3803
|
+
<tr>
|
|
3804
|
+
<td><code>with_top_p(val)</code></td>
|
|
3805
|
+
<td>Set nucleus sampling</td>
|
|
3806
|
+
</tr>
|
|
3807
|
+
<tr>
|
|
3808
|
+
<td><code>with_top_k(val)</code></td>
|
|
3809
|
+
<td>Set top-k sampling</td>
|
|
3810
|
+
</tr>
|
|
3811
|
+
<tr>
|
|
3812
|
+
<td><code>with_max_tokens(val)</code></td>
|
|
3813
|
+
<td>Set max output tokens</td>
|
|
3814
|
+
</tr>
|
|
3815
|
+
<tr>
|
|
3816
|
+
<td><code>with_presence_penalty(val)</code></td>
|
|
3817
|
+
<td>Set presence penalty</td>
|
|
3818
|
+
</tr>
|
|
3819
|
+
<tr>
|
|
3820
|
+
<td><code>with_frequency_penalty(val)</code></td>
|
|
3821
|
+
<td>Set frequency penalty</td>
|
|
3822
|
+
</tr>
|
|
3823
|
+
<tr>
|
|
3824
|
+
<td><code>with_stop(sequences)</code></td>
|
|
3825
|
+
<td>Set stop sequences</td>
|
|
3826
|
+
</tr>
|
|
3827
|
+
<tr>
|
|
3828
|
+
<td><code>with_tool(tool)</code></td>
|
|
3829
|
+
<td>Add a single tool</td>
|
|
3830
|
+
</tr>
|
|
3831
|
+
<tr>
|
|
3832
|
+
<td><code>with_tools(*tools)</code></td>
|
|
3833
|
+
<td>Add multiple tools</td>
|
|
3834
|
+
</tr>
|
|
3835
|
+
<tr>
|
|
3836
|
+
<td><code>with_template(id, **ctx)</code></td>
|
|
3837
|
+
<td>Apply a prompt template</td>
|
|
3838
|
+
</tr>
|
|
3839
|
+
<tr>
|
|
3840
|
+
<td><code>with_schema(schema)</code></td>
|
|
3841
|
+
<td>Set structured output schema</td>
|
|
3842
|
+
</tr>
|
|
3843
|
+
<tr>
|
|
3844
|
+
<td><code>with_thinking(config)</code></td>
|
|
3845
|
+
<td>Enable extended thinking</td>
|
|
3846
|
+
</tr>
|
|
3847
|
+
<tr>
|
|
3848
|
+
<td><code>with_bus(bus)</code></td>
|
|
3849
|
+
<td>Connect to a message bus (creates one if nil)</td>
|
|
3850
|
+
</tr>
|
|
3851
|
+
</tbody>
|
|
3852
|
+
</table>
|
|
3853
|
+
<h2 id="running-robots">Running Robots<a class="headerlink" href="#running-robots" title="Permanent link">¶</a></h2>
|
|
3854
|
+
<h3 id="standalone">Standalone<a class="headerlink" href="#standalone" title="Permanent link">¶</a></h3>
|
|
3855
|
+
<p>Run a robot directly with a string message:</p>
|
|
3856
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-29-1"><a id="__codelineno-29-1" name="__codelineno-29-1" href="#__codelineno-29-1"></a><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">robot</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="s2">"Hello!"</span><span class="p">)</span>
|
|
3857
|
+
</span><span id="__span-29-2"><a id="__codelineno-29-2" name="__codelineno-29-2" href="#__codelineno-29-2"></a><span class="nb">puts</span><span class="w"> </span><span class="n">result</span><span class="o">.</span><span class="n">last_text_content</span>
|
|
3858
|
+
</span></code></pre></div>
|
|
3859
|
+
<p>The <code>run</code> method returns a <code>RobotResult</code> with:</p>
|
|
3860
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-30-1"><a id="__codelineno-30-1" name="__codelineno-30-1" href="#__codelineno-30-1"></a><span class="n">result</span><span class="o">.</span><span class="n">last_text_content</span><span class="w"> </span><span class="c1"># => "Hi there! How can I help?"</span>
|
|
3861
|
+
</span><span id="__span-30-2"><a id="__codelineno-30-2" name="__codelineno-30-2" href="#__codelineno-30-2"></a><span class="n">result</span><span class="o">.</span><span class="n">output</span><span class="w"> </span><span class="c1"># => Array of output messages</span>
|
|
3862
|
+
</span><span id="__span-30-3"><a id="__codelineno-30-3" name="__codelineno-30-3" href="#__codelineno-30-3"></a><span class="n">result</span><span class="o">.</span><span class="n">tool_calls</span><span class="w"> </span><span class="c1"># => Array of tool call results</span>
|
|
3863
|
+
</span><span id="__span-30-4"><a id="__codelineno-30-4" name="__codelineno-30-4" href="#__codelineno-30-4"></a><span class="n">result</span><span class="o">.</span><span class="n">robot_name</span><span class="w"> </span><span class="c1"># => "assistant"</span>
|
|
3864
|
+
</span><span id="__span-30-5"><a id="__codelineno-30-5" name="__codelineno-30-5" href="#__codelineno-30-5"></a><span class="n">result</span><span class="o">.</span><span class="n">stop_reason</span><span class="w"> </span><span class="c1"># => stop reason from the LLM</span>
|
|
3865
|
+
</span></code></pre></div>
|
|
3866
|
+
<h3 id="with-runtime-memory">With Runtime Memory<a class="headerlink" href="#with-runtime-memory" title="Permanent link">¶</a></h3>
|
|
3867
|
+
<p>Inject memory values for a single run:</p>
|
|
3868
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-31-1"><a id="__codelineno-31-1" name="__codelineno-31-1" href="#__codelineno-31-1"></a><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">robot</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="s2">"What's my account status?"</span><span class="p">,</span><span class="w"> </span><span class="ss">memory</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="ss">user_id</span><span class="p">:</span><span class="w"> </span><span class="mi">123</span><span class="w"> </span><span class="p">})</span>
|
|
3869
|
+
</span></code></pre></div>
|
|
3870
|
+
<h3 id="in-a-network">In a Network<a class="headerlink" href="#in-a-network" title="Permanent link">¶</a></h3>
|
|
3871
|
+
<p>Run through a network for orchestration:</p>
|
|
3872
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-32-1"><a id="__codelineno-32-1" name="__codelineno-32-1" href="#__codelineno-32-1"></a><span class="n">network</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">create_network</span><span class="p">(</span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"pipeline"</span><span class="p">)</span><span class="w"> </span><span class="k">do</span>
|
|
3873
|
+
</span><span id="__span-32-2"><a id="__codelineno-32-2" name="__codelineno-32-2" href="#__codelineno-32-2"></a><span class="w"> </span><span class="n">task</span><span class="w"> </span><span class="ss">:assistant</span><span class="p">,</span><span class="w"> </span><span class="n">robot</span><span class="p">,</span><span class="w"> </span><span class="ss">depends_on</span><span class="p">:</span><span class="w"> </span><span class="ss">:none</span>
|
|
3874
|
+
</span><span id="__span-32-3"><a id="__codelineno-32-3" name="__codelineno-32-3" href="#__codelineno-32-3"></a><span class="k">end</span>
|
|
3875
|
+
</span><span id="__span-32-4"><a id="__codelineno-32-4" name="__codelineno-32-4" href="#__codelineno-32-4"></a>
|
|
3876
|
+
</span><span id="__span-32-5"><a id="__codelineno-32-5" name="__codelineno-32-5" href="#__codelineno-32-5"></a><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">network</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="ss">message</span><span class="p">:</span><span class="w"> </span><span class="s2">"Hello!"</span><span class="p">)</span>
|
|
3877
|
+
</span><span id="__span-32-6"><a id="__codelineno-32-6" name="__codelineno-32-6" href="#__codelineno-32-6"></a><span class="nb">puts</span><span class="w"> </span><span class="n">result</span><span class="o">.</span><span class="n">value</span><span class="o">.</span><span class="n">last_text_content</span>
|
|
3878
|
+
</span></code></pre></div>
|
|
3879
|
+
<h3 id="with-streaming">With Streaming<a class="headerlink" href="#with-streaming" title="Permanent link">¶</a></h3>
|
|
3880
|
+
<p>Stream LLM content in real-time using a stored callback, a per-call block, or both. Each receives a <a href="https://rubyllm.com/streaming/#basic-streaming"><code>RubyLLM::Chunk</code></a> object — use <code>chunk.content</code> for the text delta. Chunks also carry <code>model_id</code>, <code>tool_calls</code>, <code>thinking</code>, and token usage on the final chunk. See the <a href="../../api/core/robot/#streaming">Streaming API reference</a> for the full chunk interface.</p>
|
|
3881
|
+
<p><strong>Stored callback</strong> — wired at build time, fires on every <code>run()</code>:</p>
|
|
3882
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-33-1"><a id="__codelineno-33-1" name="__codelineno-33-1" href="#__codelineno-33-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3883
|
+
</span><span id="__span-33-2"><a id="__codelineno-33-2" name="__codelineno-33-2" href="#__codelineno-33-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"assistant"</span><span class="p">,</span>
|
|
3884
|
+
</span><span id="__span-33-3"><a id="__codelineno-33-3" name="__codelineno-33-3" href="#__codelineno-33-3"></a><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="s2">"You are helpful."</span><span class="p">,</span>
|
|
3885
|
+
</span><span id="__span-33-4"><a id="__codelineno-33-4" name="__codelineno-33-4" href="#__codelineno-33-4"></a><span class="w"> </span><span class="ss">on_content</span><span class="p">:</span><span class="w"> </span><span class="o">-></span><span class="p">(</span><span class="n">chunk</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nb">print</span><span class="w"> </span><span class="n">chunk</span><span class="o">.</span><span class="n">content</span><span class="w"> </span><span class="p">}</span>
|
|
3886
|
+
</span><span id="__span-33-5"><a id="__codelineno-33-5" name="__codelineno-33-5" href="#__codelineno-33-5"></a><span class="p">)</span>
|
|
3887
|
+
</span><span id="__span-33-6"><a id="__codelineno-33-6" name="__codelineno-33-6" href="#__codelineno-33-6"></a><span class="n">robot</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="s2">"Tell me a story"</span><span class="p">)</span><span class="w"> </span><span class="c1"># streams automatically</span>
|
|
3888
|
+
</span></code></pre></div>
|
|
3889
|
+
<p><strong>Per-call block</strong> — passed to <code>run()</code>:</p>
|
|
3890
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-34-1"><a id="__codelineno-34-1" name="__codelineno-34-1" href="#__codelineno-34-1"></a><span class="n">robot</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="s2">"Tell me a story"</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="o">|</span><span class="n">chunk</span><span class="o">|</span><span class="w"> </span><span class="nb">print</span><span class="w"> </span><span class="n">chunk</span><span class="o">.</span><span class="n">content</span><span class="w"> </span><span class="p">}</span>
|
|
3891
|
+
</span></code></pre></div>
|
|
3892
|
+
<p><strong>Both together</strong> — stored fires first, then the block:</p>
|
|
3893
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-35-1"><a id="__codelineno-35-1" name="__codelineno-35-1" href="#__codelineno-35-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3894
|
+
</span><span id="__span-35-2"><a id="__codelineno-35-2" name="__codelineno-35-2" href="#__codelineno-35-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"assistant"</span><span class="p">,</span>
|
|
3895
|
+
</span><span id="__span-35-3"><a id="__codelineno-35-3" name="__codelineno-35-3" href="#__codelineno-35-3"></a><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="s2">"You are helpful."</span><span class="p">,</span>
|
|
3896
|
+
</span><span id="__span-35-4"><a id="__codelineno-35-4" name="__codelineno-35-4" href="#__codelineno-35-4"></a><span class="w"> </span><span class="ss">on_content</span><span class="p">:</span><span class="w"> </span><span class="o">-></span><span class="p">(</span><span class="n">chunk</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">log_chunk</span><span class="p">(</span><span class="n">chunk</span><span class="o">.</span><span class="n">content</span><span class="p">)</span><span class="w"> </span><span class="p">}</span>
|
|
3897
|
+
</span><span id="__span-35-5"><a id="__codelineno-35-5" name="__codelineno-35-5" href="#__codelineno-35-5"></a><span class="p">)</span>
|
|
3898
|
+
</span><span id="__span-35-6"><a id="__codelineno-35-6" name="__codelineno-35-6" href="#__codelineno-35-6"></a><span class="n">robot</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="s2">"Tell me a story"</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="o">|</span><span class="n">chunk</span><span class="o">|</span><span class="w"> </span><span class="n">stream_to_client</span><span class="p">(</span><span class="n">chunk</span><span class="o">.</span><span class="n">content</span><span class="p">)</span><span class="w"> </span><span class="p">}</span>
|
|
3899
|
+
</span></code></pre></div>
|
|
3900
|
+
<p>The <code>on_content</code> callback participates in the RunConfig cascade, so it can be set at the config level and inherited by robots:</p>
|
|
3901
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-36-1"><a id="__codelineno-36-1" name="__codelineno-36-1" href="#__codelineno-36-1"></a><span class="n">config</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">::</span><span class="no">RunConfig</span><span class="o">.</span><span class="n">new</span><span class="p">(</span>
|
|
3902
|
+
</span><span id="__span-36-2"><a id="__codelineno-36-2" name="__codelineno-36-2" href="#__codelineno-36-2"></a><span class="w"> </span><span class="ss">on_content</span><span class="p">:</span><span class="w"> </span><span class="o">-></span><span class="p">(</span><span class="n">chunk</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">broadcast</span><span class="p">(</span><span class="n">chunk</span><span class="o">.</span><span class="n">content</span><span class="p">)</span><span class="w"> </span><span class="p">}</span>
|
|
3903
|
+
</span><span id="__span-36-3"><a id="__codelineno-36-3" name="__codelineno-36-3" href="#__codelineno-36-3"></a><span class="p">)</span>
|
|
3904
|
+
</span><span id="__span-36-4"><a id="__codelineno-36-4" name="__codelineno-36-4" href="#__codelineno-36-4"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"bot"</span><span class="p">,</span><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="s2">"..."</span><span class="p">,</span><span class="w"> </span><span class="ss">config</span><span class="p">:</span><span class="w"> </span><span class="n">config</span><span class="p">)</span>
|
|
3905
|
+
</span></code></pre></div>
|
|
3906
|
+
<p>You can also monitor tool activity via callbacks:</p>
|
|
3907
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-37-1"><a id="__codelineno-37-1" name="__codelineno-37-1" href="#__codelineno-37-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3908
|
+
</span><span id="__span-37-2"><a id="__codelineno-37-2" name="__codelineno-37-2" href="#__codelineno-37-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"assistant"</span><span class="p">,</span>
|
|
3909
|
+
</span><span id="__span-37-3"><a id="__codelineno-37-3" name="__codelineno-37-3" href="#__codelineno-37-3"></a><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="s2">"..."</span><span class="p">,</span>
|
|
3910
|
+
</span><span id="__span-37-4"><a id="__codelineno-37-4" name="__codelineno-37-4" href="#__codelineno-37-4"></a><span class="w"> </span><span class="ss">on_tool_call</span><span class="p">:</span><span class="w"> </span><span class="o">-></span><span class="p">(</span><span class="n">tool_call</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nb">puts</span><span class="w"> </span><span class="s2">"Calling: </span><span class="si">#{</span><span class="n">tool_call</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">"</span><span class="w"> </span><span class="p">},</span>
|
|
3911
|
+
</span><span id="__span-37-5"><a id="__codelineno-37-5" name="__codelineno-37-5" href="#__codelineno-37-5"></a><span class="w"> </span><span class="ss">on_tool_result</span><span class="p">:</span><span class="w"> </span><span class="o">-></span><span class="p">(</span><span class="n">result</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nb">puts</span><span class="w"> </span><span class="s2">"Result: </span><span class="si">#{</span><span class="n">result</span><span class="si">}</span><span class="s2">"</span><span class="w"> </span><span class="p">}</span>
|
|
3912
|
+
</span><span id="__span-37-6"><a id="__codelineno-37-6" name="__codelineno-37-6" href="#__codelineno-37-6"></a><span class="p">)</span>
|
|
3913
|
+
</span></code></pre></div>
|
|
3914
|
+
<h2 id="robot-patterns">Robot Patterns<a class="headerlink" href="#robot-patterns" title="Permanent link">¶</a></h2>
|
|
3915
|
+
<h3 id="classifier-robot">Classifier Robot<a class="headerlink" href="#classifier-robot" title="Permanent link">¶</a></h3>
|
|
3916
|
+
<p>Route requests to specialized handlers. Subclass <code>RobotLab::Robot</code> and override <code>call</code> for custom pipeline behavior:</p>
|
|
3917
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-38-1"><a id="__codelineno-38-1" name="__codelineno-38-1" href="#__codelineno-38-1"></a><span class="k">class</span><span class="w"> </span><span class="nc">ClassifierRobot</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">::</span><span class="no">Robot</span>
|
|
3918
|
+
</span><span id="__span-38-2"><a id="__codelineno-38-2" name="__codelineno-38-2" href="#__codelineno-38-2"></a><span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">call</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
|
3919
|
+
</span><span id="__span-38-3"><a id="__codelineno-38-3" name="__codelineno-38-3" href="#__codelineno-38-3"></a><span class="w"> </span><span class="n">context</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">extract_run_context</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
|
3920
|
+
</span><span id="__span-38-4"><a id="__codelineno-38-4" name="__codelineno-38-4" href="#__codelineno-38-4"></a><span class="w"> </span><span class="n">message</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">context</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="ss">:message</span><span class="p">)</span>
|
|
3921
|
+
</span><span id="__span-38-5"><a id="__codelineno-38-5" name="__codelineno-38-5" href="#__codelineno-38-5"></a><span class="w"> </span><span class="n">robot_result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">run</span><span class="p">(</span><span class="n">message</span><span class="p">,</span><span class="w"> </span><span class="o">**</span><span class="n">context</span><span class="p">)</span>
|
|
3922
|
+
</span><span id="__span-38-6"><a id="__codelineno-38-6" name="__codelineno-38-6" href="#__codelineno-38-6"></a>
|
|
3923
|
+
</span><span id="__span-38-7"><a id="__codelineno-38-7" name="__codelineno-38-7" href="#__codelineno-38-7"></a><span class="w"> </span><span class="n">new_result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">result</span>
|
|
3924
|
+
</span><span id="__span-38-8"><a id="__codelineno-38-8" name="__codelineno-38-8" href="#__codelineno-38-8"></a><span class="w"> </span><span class="o">.</span><span class="n">with_context</span><span class="p">(</span><span class="vi">@name</span><span class="o">.</span><span class="n">to_sym</span><span class="p">,</span><span class="w"> </span><span class="n">robot_result</span><span class="p">)</span>
|
|
3925
|
+
</span><span id="__span-38-9"><a id="__codelineno-38-9" name="__codelineno-38-9" href="#__codelineno-38-9"></a><span class="w"> </span><span class="o">.</span><span class="n">continue</span><span class="p">(</span><span class="n">robot_result</span><span class="p">)</span>
|
|
3926
|
+
</span><span id="__span-38-10"><a id="__codelineno-38-10" name="__codelineno-38-10" href="#__codelineno-38-10"></a>
|
|
3927
|
+
</span><span id="__span-38-11"><a id="__codelineno-38-11" name="__codelineno-38-11" href="#__codelineno-38-11"></a><span class="w"> </span><span class="n">category</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">robot_result</span><span class="o">.</span><span class="n">last_text_content</span><span class="o">.</span><span class="n">to_s</span><span class="o">.</span><span class="n">strip</span><span class="o">.</span><span class="n">downcase</span>
|
|
3928
|
+
</span><span id="__span-38-12"><a id="__codelineno-38-12" name="__codelineno-38-12" href="#__codelineno-38-12"></a>
|
|
3929
|
+
</span><span id="__span-38-13"><a id="__codelineno-38-13" name="__codelineno-38-13" href="#__codelineno-38-13"></a><span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="n">category</span>
|
|
3930
|
+
</span><span id="__span-38-14"><a id="__codelineno-38-14" name="__codelineno-38-14" href="#__codelineno-38-14"></a><span class="w"> </span><span class="k">when</span><span class="w"> </span><span class="sr">/billing/</span><span class="w"> </span><span class="k">then</span><span class="w"> </span><span class="n">new_result</span><span class="o">.</span><span class="n">activate</span><span class="p">(</span><span class="ss">:billing</span><span class="p">)</span>
|
|
3931
|
+
</span><span id="__span-38-15"><a id="__codelineno-38-15" name="__codelineno-38-15" href="#__codelineno-38-15"></a><span class="w"> </span><span class="k">when</span><span class="w"> </span><span class="sr">/technical/</span><span class="w"> </span><span class="k">then</span><span class="w"> </span><span class="n">new_result</span><span class="o">.</span><span class="n">activate</span><span class="p">(</span><span class="ss">:technical</span><span class="p">)</span>
|
|
3932
|
+
</span><span id="__span-38-16"><a id="__codelineno-38-16" name="__codelineno-38-16" href="#__codelineno-38-16"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">new_result</span><span class="o">.</span><span class="n">activate</span><span class="p">(</span><span class="ss">:general</span><span class="p">)</span>
|
|
3933
|
+
</span><span id="__span-38-17"><a id="__codelineno-38-17" name="__codelineno-38-17" href="#__codelineno-38-17"></a><span class="w"> </span><span class="k">end</span>
|
|
3934
|
+
</span><span id="__span-38-18"><a id="__codelineno-38-18" name="__codelineno-38-18" href="#__codelineno-38-18"></a><span class="w"> </span><span class="k">end</span>
|
|
3935
|
+
</span><span id="__span-38-19"><a id="__codelineno-38-19" name="__codelineno-38-19" href="#__codelineno-38-19"></a><span class="k">end</span>
|
|
3936
|
+
</span><span id="__span-38-20"><a id="__codelineno-38-20" name="__codelineno-38-20" href="#__codelineno-38-20"></a>
|
|
3937
|
+
</span><span id="__span-38-21"><a id="__codelineno-38-21" name="__codelineno-38-21" href="#__codelineno-38-21"></a><span class="n">classifier</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">ClassifierRobot</span><span class="o">.</span><span class="n">new</span><span class="p">(</span>
|
|
3938
|
+
</span><span id="__span-38-22"><a id="__codelineno-38-22" name="__codelineno-38-22" href="#__codelineno-38-22"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"classifier"</span><span class="p">,</span>
|
|
3939
|
+
</span><span id="__span-38-23"><a id="__codelineno-38-23" name="__codelineno-38-23" href="#__codelineno-38-23"></a><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="o"><<~</span><span class="dl">PROMPT</span>
|
|
3940
|
+
</span><span id="__span-38-24"><a id="__codelineno-38-24" name="__codelineno-38-24" href="#__codelineno-38-24"></a><span class="sh"> Classify the user's message into exactly one category:</span>
|
|
3941
|
+
</span><span id="__span-38-25"><a id="__codelineno-38-25" name="__codelineno-38-25" href="#__codelineno-38-25"></a><span class="sh"> - billing</span>
|
|
3942
|
+
</span><span id="__span-38-26"><a id="__codelineno-38-26" name="__codelineno-38-26" href="#__codelineno-38-26"></a><span class="sh"> - technical</span>
|
|
3943
|
+
</span><span id="__span-38-27"><a id="__codelineno-38-27" name="__codelineno-38-27" href="#__codelineno-38-27"></a><span class="sh"> - general</span>
|
|
3944
|
+
</span><span id="__span-38-28"><a id="__codelineno-38-28" name="__codelineno-38-28" href="#__codelineno-38-28"></a><span class="sh"> Respond with only the category name, nothing else.</span>
|
|
3945
|
+
</span><span id="__span-38-29"><a id="__codelineno-38-29" name="__codelineno-38-29" href="#__codelineno-38-29"></a><span class="dl"> PROMPT</span>
|
|
3946
|
+
</span><span id="__span-38-30"><a id="__codelineno-38-30" name="__codelineno-38-30" href="#__codelineno-38-30"></a><span class="p">)</span>
|
|
3947
|
+
</span></code></pre></div>
|
|
3948
|
+
<h3 id="specialist-robot">Specialist Robot<a class="headerlink" href="#specialist-robot" title="Permanent link">¶</a></h3>
|
|
3949
|
+
<p>Handle specific domains with template and tools:</p>
|
|
3950
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-39-1"><a id="__codelineno-39-1" name="__codelineno-39-1" href="#__codelineno-39-1"></a><span class="n">billing_specialist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3951
|
+
</span><span id="__span-39-2"><a id="__codelineno-39-2" name="__codelineno-39-2" href="#__codelineno-39-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"billing_specialist"</span><span class="p">,</span>
|
|
3952
|
+
</span><span id="__span-39-3"><a id="__codelineno-39-3" name="__codelineno-39-3" href="#__codelineno-39-3"></a><span class="w"> </span><span class="ss">description</span><span class="p">:</span><span class="w"> </span><span class="s2">"Handles billing and payment inquiries"</span><span class="p">,</span>
|
|
3953
|
+
</span><span id="__span-39-4"><a id="__codelineno-39-4" name="__codelineno-39-4" href="#__codelineno-39-4"></a><span class="w"> </span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:billing</span><span class="p">,</span>
|
|
3954
|
+
</span><span id="__span-39-5"><a id="__codelineno-39-5" name="__codelineno-39-5" href="#__codelineno-39-5"></a><span class="w"> </span><span class="ss">context</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="ss">department</span><span class="p">:</span><span class="w"> </span><span class="s2">"billing"</span><span class="w"> </span><span class="p">},</span>
|
|
3955
|
+
</span><span id="__span-39-6"><a id="__codelineno-39-6" name="__codelineno-39-6" href="#__codelineno-39-6"></a><span class="w"> </span><span class="ss">local_tools</span><span class="p">:</span><span class="w"> </span><span class="o">[</span><span class="no">InvoiceLookup</span><span class="p">,</span><span class="w"> </span><span class="no">RefundProcessor</span><span class="o">]</span>
|
|
3956
|
+
</span><span id="__span-39-7"><a id="__codelineno-39-7" name="__codelineno-39-7" href="#__codelineno-39-7"></a><span class="p">)</span>
|
|
3957
|
+
</span></code></pre></div>
|
|
3958
|
+
<h3 id="summarizer-robot">Summarizer Robot<a class="headerlink" href="#summarizer-robot" title="Permanent link">¶</a></h3>
|
|
3959
|
+
<p>Condense information:</p>
|
|
3960
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-40-1"><a id="__codelineno-40-1" name="__codelineno-40-1" href="#__codelineno-40-1"></a><span class="n">summarizer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
3961
|
+
</span><span id="__span-40-2"><a id="__codelineno-40-2" name="__codelineno-40-2" href="#__codelineno-40-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"summarizer"</span><span class="p">,</span>
|
|
3962
|
+
</span><span id="__span-40-3"><a id="__codelineno-40-3" name="__codelineno-40-3" href="#__codelineno-40-3"></a><span class="w"> </span><span class="ss">description</span><span class="p">:</span><span class="w"> </span><span class="s2">"Summarizes conversations and documents"</span><span class="p">,</span>
|
|
3963
|
+
</span><span id="__span-40-4"><a id="__codelineno-40-4" name="__codelineno-40-4" href="#__codelineno-40-4"></a><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="o"><<~</span><span class="dl">PROMPT</span>
|
|
3964
|
+
</span><span id="__span-40-5"><a id="__codelineno-40-5" name="__codelineno-40-5" href="#__codelineno-40-5"></a><span class="sh"> Create concise summaries of the provided content.</span>
|
|
3965
|
+
</span><span id="__span-40-6"><a id="__codelineno-40-6" name="__codelineno-40-6" href="#__codelineno-40-6"></a><span class="sh"> Focus on key points and actionable items.</span>
|
|
3966
|
+
</span><span id="__span-40-7"><a id="__codelineno-40-7" name="__codelineno-40-7" href="#__codelineno-40-7"></a><span class="sh"> Use bullet points for clarity.</span>
|
|
3967
|
+
</span><span id="__span-40-8"><a id="__codelineno-40-8" name="__codelineno-40-8" href="#__codelineno-40-8"></a><span class="dl"> PROMPT</span>
|
|
3968
|
+
</span><span id="__span-40-9"><a id="__codelineno-40-9" name="__codelineno-40-9" href="#__codelineno-40-9"></a><span class="p">)</span>
|
|
3969
|
+
</span></code></pre></div>
|
|
3970
|
+
<h3 id="bus-connected-robot">Bus-Connected Robot<a class="headerlink" href="#bus-connected-robot" title="Permanent link">¶</a></h3>
|
|
3971
|
+
<p>Enable bidirectional communication between robots using a message bus. This pattern supports negotiation loops and convergence:</p>
|
|
3972
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-41-1"><a id="__codelineno-41-1" name="__codelineno-41-1" href="#__codelineno-41-1"></a><span class="n">bus</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">TypedBus</span><span class="o">::</span><span class="no">MessageBus</span><span class="o">.</span><span class="n">new</span>
|
|
3973
|
+
</span><span id="__span-41-2"><a id="__codelineno-41-2" name="__codelineno-41-2" href="#__codelineno-41-2"></a>
|
|
3974
|
+
</span><span id="__span-41-3"><a id="__codelineno-41-3" name="__codelineno-41-3" href="#__codelineno-41-3"></a><span class="k">class</span><span class="w"> </span><span class="nc">Comedian</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">::</span><span class="no">Robot</span>
|
|
3975
|
+
</span><span id="__span-41-4"><a id="__codelineno-41-4" name="__codelineno-41-4" href="#__codelineno-41-4"></a><span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">initialize</span><span class="p">(</span><span class="ss">bus</span><span class="p">:)</span>
|
|
3976
|
+
</span><span id="__span-41-5"><a id="__codelineno-41-5" name="__codelineno-41-5" href="#__codelineno-41-5"></a><span class="w"> </span><span class="k">super</span><span class="p">(</span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"bob"</span><span class="p">,</span><span class="w"> </span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:comedian</span><span class="p">,</span><span class="w"> </span><span class="ss">bus</span><span class="p">:</span><span class="w"> </span><span class="n">bus</span><span class="p">)</span>
|
|
3977
|
+
</span><span id="__span-41-6"><a id="__codelineno-41-6" name="__codelineno-41-6" href="#__codelineno-41-6"></a><span class="w"> </span><span class="n">on_message</span><span class="w"> </span><span class="k">do</span><span class="w"> </span><span class="o">|</span><span class="n">message</span><span class="o">|</span>
|
|
3978
|
+
</span><span id="__span-41-7"><a id="__codelineno-41-7" name="__codelineno-41-7" href="#__codelineno-41-7"></a><span class="w"> </span><span class="n">joke</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">run</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">content</span><span class="o">.</span><span class="n">to_s</span><span class="p">)</span><span class="o">.</span><span class="n">last_text_content</span><span class="o">.</span><span class="n">strip</span>
|
|
3979
|
+
</span><span id="__span-41-8"><a id="__codelineno-41-8" name="__codelineno-41-8" href="#__codelineno-41-8"></a><span class="w"> </span><span class="n">send_reply</span><span class="p">(</span><span class="ss">to</span><span class="p">:</span><span class="w"> </span><span class="n">message</span><span class="o">.</span><span class="n">from</span><span class="o">.</span><span class="n">to_sym</span><span class="p">,</span><span class="w"> </span><span class="ss">content</span><span class="p">:</span><span class="w"> </span><span class="n">joke</span><span class="p">,</span><span class="w"> </span><span class="ss">in_reply_to</span><span class="p">:</span><span class="w"> </span><span class="n">message</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
|
3980
|
+
</span><span id="__span-41-9"><a id="__codelineno-41-9" name="__codelineno-41-9" href="#__codelineno-41-9"></a><span class="w"> </span><span class="k">end</span>
|
|
3981
|
+
</span><span id="__span-41-10"><a id="__codelineno-41-10" name="__codelineno-41-10" href="#__codelineno-41-10"></a><span class="w"> </span><span class="k">end</span>
|
|
3982
|
+
</span><span id="__span-41-11"><a id="__codelineno-41-11" name="__codelineno-41-11" href="#__codelineno-41-11"></a><span class="k">end</span>
|
|
3983
|
+
</span><span id="__span-41-12"><a id="__codelineno-41-12" name="__codelineno-41-12" href="#__codelineno-41-12"></a>
|
|
3984
|
+
</span><span id="__span-41-13"><a id="__codelineno-41-13" name="__codelineno-41-13" href="#__codelineno-41-13"></a><span class="k">class</span><span class="w"> </span><span class="nc">ComedyCritic</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">::</span><span class="no">Robot</span>
|
|
3985
|
+
</span><span id="__span-41-14"><a id="__codelineno-41-14" name="__codelineno-41-14" href="#__codelineno-41-14"></a><span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">initialize</span><span class="p">(</span><span class="ss">bus</span><span class="p">:)</span>
|
|
3986
|
+
</span><span id="__span-41-15"><a id="__codelineno-41-15" name="__codelineno-41-15" href="#__codelineno-41-15"></a><span class="w"> </span><span class="k">super</span><span class="p">(</span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"alice"</span><span class="p">,</span><span class="w"> </span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:comedy_critic</span><span class="p">,</span><span class="w"> </span><span class="ss">bus</span><span class="p">:</span><span class="w"> </span><span class="n">bus</span><span class="p">)</span>
|
|
3987
|
+
</span><span id="__span-41-16"><a id="__codelineno-41-16" name="__codelineno-41-16" href="#__codelineno-41-16"></a><span class="w"> </span><span class="vi">@accepted</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kp">false</span>
|
|
3988
|
+
</span><span id="__span-41-17"><a id="__codelineno-41-17" name="__codelineno-41-17" href="#__codelineno-41-17"></a><span class="w"> </span><span class="n">on_message</span><span class="w"> </span><span class="k">do</span><span class="w"> </span><span class="o">|</span><span class="n">message</span><span class="o">|</span>
|
|
3989
|
+
</span><span id="__span-41-18"><a id="__codelineno-41-18" name="__codelineno-41-18" href="#__codelineno-41-18"></a><span class="w"> </span><span class="n">verdict</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">run</span><span class="p">(</span><span class="s2">"Evaluate: </span><span class="si">#{</span><span class="n">message</span><span class="o">.</span><span class="n">content</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">last_text_content</span><span class="o">.</span><span class="n">strip</span>
|
|
3990
|
+
</span><span id="__span-41-19"><a id="__codelineno-41-19" name="__codelineno-41-19" href="#__codelineno-41-19"></a><span class="w"> </span><span class="vi">@accepted</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">verdict</span><span class="o">.</span><span class="n">start_with?</span><span class="p">(</span><span class="s2">"FUNNY"</span><span class="p">)</span>
|
|
3991
|
+
</span><span id="__span-41-20"><a id="__codelineno-41-20" name="__codelineno-41-20" href="#__codelineno-41-20"></a><span class="w"> </span><span class="n">send_message</span><span class="p">(</span><span class="ss">to</span><span class="p">:</span><span class="w"> </span><span class="ss">:bob</span><span class="p">,</span><span class="w"> </span><span class="ss">content</span><span class="p">:</span><span class="w"> </span><span class="s2">"Try again."</span><span class="p">)</span><span class="w"> </span><span class="k">unless</span><span class="w"> </span><span class="vi">@accepted</span>
|
|
3992
|
+
</span><span id="__span-41-21"><a id="__codelineno-41-21" name="__codelineno-41-21" href="#__codelineno-41-21"></a><span class="w"> </span><span class="k">end</span>
|
|
3993
|
+
</span><span id="__span-41-22"><a id="__codelineno-41-22" name="__codelineno-41-22" href="#__codelineno-41-22"></a><span class="w"> </span><span class="k">end</span>
|
|
3994
|
+
</span><span id="__span-41-23"><a id="__codelineno-41-23" name="__codelineno-41-23" href="#__codelineno-41-23"></a><span class="w"> </span><span class="kp">attr_reader</span><span class="w"> </span><span class="ss">:accepted</span>
|
|
3995
|
+
</span><span id="__span-41-24"><a id="__codelineno-41-24" name="__codelineno-41-24" href="#__codelineno-41-24"></a><span class="k">end</span>
|
|
3996
|
+
</span><span id="__span-41-25"><a id="__codelineno-41-25" name="__codelineno-41-25" href="#__codelineno-41-25"></a>
|
|
3997
|
+
</span><span id="__span-41-26"><a id="__codelineno-41-26" name="__codelineno-41-26" href="#__codelineno-41-26"></a><span class="n">bob</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">Comedian</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="ss">bus</span><span class="p">:</span><span class="w"> </span><span class="n">bus</span><span class="p">)</span>
|
|
3998
|
+
</span><span id="__span-41-27"><a id="__codelineno-41-27" name="__codelineno-41-27" href="#__codelineno-41-27"></a><span class="n">alice</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">ComedyCritic</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="ss">bus</span><span class="p">:</span><span class="w"> </span><span class="n">bus</span><span class="p">)</span>
|
|
3999
|
+
</span><span id="__span-41-28"><a id="__codelineno-41-28" name="__codelineno-41-28" href="#__codelineno-41-28"></a><span class="n">alice</span><span class="o">.</span><span class="n">send_message</span><span class="p">(</span><span class="ss">to</span><span class="p">:</span><span class="w"> </span><span class="ss">:bob</span><span class="p">,</span><span class="w"> </span><span class="ss">content</span><span class="p">:</span><span class="w"> </span><span class="s2">"Tell me a funny robot joke."</span><span class="p">)</span>
|
|
4000
|
+
</span></code></pre></div>
|
|
4001
|
+
<p>The <code>on_message</code> block arity controls delivery handling:
|
|
4002
|
+
- <strong>1 argument</strong> <code>|message|</code> — auto-acknowledges before calling
|
|
4003
|
+
- <strong>2 arguments</strong> <code>|delivery, message|</code> — manual <code>delivery.ack!</code> / <code>delivery.nack!</code></p>
|
|
4004
|
+
<p>See <a href="../../architecture/core-concepts/#message-bus">Message Bus</a> for details.</p>
|
|
4005
|
+
<h3 id="spawning-robots-dynamically">Spawning Robots Dynamically<a class="headerlink" href="#spawning-robots-dynamically" title="Permanent link">¶</a></h3>
|
|
4006
|
+
<p>Create new robots at runtime using <code>spawn</code>. The bus is created lazily — no upfront wiring required:</p>
|
|
4007
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-42-1"><a id="__codelineno-42-1" name="__codelineno-42-1" href="#__codelineno-42-1"></a><span class="k">class</span><span class="w"> </span><span class="nc">Dispatcher</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">::</span><span class="no">Robot</span>
|
|
4008
|
+
</span><span id="__span-42-2"><a id="__codelineno-42-2" name="__codelineno-42-2" href="#__codelineno-42-2"></a><span class="w"> </span><span class="kp">attr_reader</span><span class="w"> </span><span class="ss">:spawned</span>
|
|
4009
|
+
</span><span id="__span-42-3"><a id="__codelineno-42-3" name="__codelineno-42-3" href="#__codelineno-42-3"></a>
|
|
4010
|
+
</span><span id="__span-42-4"><a id="__codelineno-42-4" name="__codelineno-42-4" href="#__codelineno-42-4"></a><span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">initialize</span><span class="p">(</span><span class="ss">bus</span><span class="p">:</span><span class="w"> </span><span class="kp">nil</span><span class="p">)</span>
|
|
4011
|
+
</span><span id="__span-42-5"><a id="__codelineno-42-5" name="__codelineno-42-5" href="#__codelineno-42-5"></a><span class="w"> </span><span class="k">super</span><span class="p">(</span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"dispatcher"</span><span class="p">,</span><span class="w"> </span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:dispatcher</span><span class="p">,</span><span class="w"> </span><span class="ss">bus</span><span class="p">:</span><span class="w"> </span><span class="n">bus</span><span class="p">)</span>
|
|
4012
|
+
</span><span id="__span-42-6"><a id="__codelineno-42-6" name="__codelineno-42-6" href="#__codelineno-42-6"></a><span class="w"> </span><span class="vi">@spawned</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{}</span>
|
|
4013
|
+
</span><span id="__span-42-7"><a id="__codelineno-42-7" name="__codelineno-42-7" href="#__codelineno-42-7"></a>
|
|
4014
|
+
</span><span id="__span-42-8"><a id="__codelineno-42-8" name="__codelineno-42-8" href="#__codelineno-42-8"></a><span class="w"> </span><span class="n">on_message</span><span class="w"> </span><span class="k">do</span><span class="w"> </span><span class="o">|</span><span class="n">message</span><span class="o">|</span>
|
|
4015
|
+
</span><span id="__span-42-9"><a id="__codelineno-42-9" name="__codelineno-42-9" href="#__codelineno-42-9"></a><span class="w"> </span><span class="nb">puts</span><span class="w"> </span><span class="s2">"</span><span class="si">#{</span><span class="n">message</span><span class="o">.</span><span class="n">from</span><span class="si">}</span><span class="s2"> replied: </span><span class="si">#{</span><span class="n">message</span><span class="o">.</span><span class="n">content</span><span class="o">.</span><span class="n">to_s</span><span class="o">.</span><span class="n">lines</span><span class="o">.</span><span class="n">first</span><span class="o">&.</span><span class="n">strip</span><span class="si">}</span><span class="s2">"</span>
|
|
4016
|
+
</span><span id="__span-42-10"><a id="__codelineno-42-10" name="__codelineno-42-10" href="#__codelineno-42-10"></a><span class="w"> </span><span class="k">end</span>
|
|
4017
|
+
</span><span id="__span-42-11"><a id="__codelineno-42-11" name="__codelineno-42-11" href="#__codelineno-42-11"></a><span class="w"> </span><span class="k">end</span>
|
|
4018
|
+
</span><span id="__span-42-12"><a id="__codelineno-42-12" name="__codelineno-42-12" href="#__codelineno-42-12"></a>
|
|
4019
|
+
</span><span id="__span-42-13"><a id="__codelineno-42-13" name="__codelineno-42-13" href="#__codelineno-42-13"></a><span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">dispatch</span><span class="p">(</span><span class="n">question</span><span class="p">)</span>
|
|
4020
|
+
</span><span id="__span-42-14"><a id="__codelineno-42-14" name="__codelineno-42-14" href="#__codelineno-42-14"></a><span class="w"> </span><span class="c1"># Ask LLM what specialist to create</span>
|
|
4021
|
+
</span><span id="__span-42-15"><a id="__codelineno-42-15" name="__codelineno-42-15" href="#__codelineno-42-15"></a><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">run</span><span class="p">(</span><span class="n">question</span><span class="p">)</span><span class="o">.</span><span class="n">last_text_content</span><span class="o">.</span><span class="n">strip</span>
|
|
4022
|
+
</span><span id="__span-42-16"><a id="__codelineno-42-16" name="__codelineno-42-16" href="#__codelineno-42-16"></a><span class="w"> </span><span class="n">role</span><span class="p">,</span><span class="w"> </span><span class="n">instruction</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">plan</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span>
|
|
4023
|
+
</span><span id="__span-42-17"><a id="__codelineno-42-17" name="__codelineno-42-17" href="#__codelineno-42-17"></a><span class="w"> </span><span class="n">role</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">role</span><span class="o">.</span><span class="n">strip</span><span class="o">.</span><span class="n">downcase</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/\s+/</span><span class="p">,</span><span class="w"> </span><span class="s2">"_"</span><span class="p">)</span>
|
|
4024
|
+
</span><span id="__span-42-18"><a id="__codelineno-42-18" name="__codelineno-42-18" href="#__codelineno-42-18"></a>
|
|
4025
|
+
</span><span id="__span-42-19"><a id="__codelineno-42-19" name="__codelineno-42-19" href="#__codelineno-42-19"></a><span class="w"> </span><span class="c1"># Spawn (or reuse) a specialist</span>
|
|
4026
|
+
</span><span id="__span-42-20"><a id="__codelineno-42-20" name="__codelineno-42-20" href="#__codelineno-42-20"></a><span class="w"> </span><span class="n">specialist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="vi">@spawned</span><span class="o">[</span><span class="n">role</span><span class="o">]</span><span class="w"> </span><span class="o">||=</span><span class="w"> </span><span class="n">spawn</span><span class="p">(</span>
|
|
4027
|
+
</span><span id="__span-42-21"><a id="__codelineno-42-21" name="__codelineno-42-21" href="#__codelineno-42-21"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="n">role</span><span class="p">,</span>
|
|
4028
|
+
</span><span id="__span-42-22"><a id="__codelineno-42-22" name="__codelineno-42-22" href="#__codelineno-42-22"></a><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="n">instruction</span><span class="o">&.</span><span class="n">strip</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="s2">"You are a helpful </span><span class="si">#{</span><span class="n">role</span><span class="si">}</span><span class="s2">."</span>
|
|
4029
|
+
</span><span id="__span-42-23"><a id="__codelineno-42-23" name="__codelineno-42-23" href="#__codelineno-42-23"></a><span class="w"> </span><span class="p">)</span>
|
|
4030
|
+
</span><span id="__span-42-24"><a id="__codelineno-42-24" name="__codelineno-42-24" href="#__codelineno-42-24"></a>
|
|
4031
|
+
</span><span id="__span-42-25"><a id="__codelineno-42-25" name="__codelineno-42-25" href="#__codelineno-42-25"></a><span class="w"> </span><span class="c1"># Have the specialist answer and reply</span>
|
|
4032
|
+
</span><span id="__span-42-26"><a id="__codelineno-42-26" name="__codelineno-42-26" href="#__codelineno-42-26"></a><span class="w"> </span><span class="n">answer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">specialist</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">question</span><span class="p">)</span><span class="o">.</span><span class="n">last_text_content</span><span class="o">.</span><span class="n">strip</span>
|
|
4033
|
+
</span><span id="__span-42-27"><a id="__codelineno-42-27" name="__codelineno-42-27" href="#__codelineno-42-27"></a><span class="w"> </span><span class="n">specialist</span><span class="o">.</span><span class="n">send_message</span><span class="p">(</span><span class="ss">to</span><span class="p">:</span><span class="w"> </span><span class="ss">:dispatcher</span><span class="p">,</span><span class="w"> </span><span class="ss">content</span><span class="p">:</span><span class="w"> </span><span class="n">answer</span><span class="p">)</span>
|
|
4034
|
+
</span><span id="__span-42-28"><a id="__codelineno-42-28" name="__codelineno-42-28" href="#__codelineno-42-28"></a><span class="w"> </span><span class="k">end</span>
|
|
4035
|
+
</span><span id="__span-42-29"><a id="__codelineno-42-29" name="__codelineno-42-29" href="#__codelineno-42-29"></a><span class="k">end</span>
|
|
4036
|
+
</span></code></pre></div>
|
|
4037
|
+
<p>Key features of <code>spawn</code>:</p>
|
|
4038
|
+
<ul>
|
|
4039
|
+
<li>Creates a child robot on the same bus as the parent</li>
|
|
4040
|
+
<li>Creates a bus lazily if the parent doesn't have one</li>
|
|
4041
|
+
<li>Spawned robots can immediately send and receive messages</li>
|
|
4042
|
+
<li>Multiple robots with the same name enable fan-out messaging</li>
|
|
4043
|
+
</ul>
|
|
4044
|
+
<p>Robots can also join a bus after creation:</p>
|
|
4045
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-43-1"><a id="__codelineno-43-1" name="__codelineno-43-1" href="#__codelineno-43-1"></a><span class="n">bot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"latecomer"</span><span class="p">,</span><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="s2">"Hello."</span><span class="p">)</span>
|
|
4046
|
+
</span><span id="__span-43-2"><a id="__codelineno-43-2" name="__codelineno-43-2" href="#__codelineno-43-2"></a><span class="n">bot</span><span class="o">.</span><span class="n">with_bus</span><span class="p">(</span><span class="n">existing_bus</span><span class="p">)</span><span class="w"> </span><span class="c1"># now connected and can send/receive messages</span>
|
|
4047
|
+
</span></code></pre></div>
|
|
4048
|
+
<h2 id="configuration">Configuration<a class="headerlink" href="#configuration" title="Permanent link">¶</a></h2>
|
|
4049
|
+
<p>RobotLab uses <code>MywayConfig</code> for configuration. Access the config object directly -- there is no <code>RobotLab.configure</code> block:</p>
|
|
4050
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-44-1"><a id="__codelineno-44-1" name="__codelineno-44-1" href="#__codelineno-44-1"></a><span class="no">RobotLab</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">ruby_llm</span><span class="o">.</span><span class="n">model</span><span class="w"> </span><span class="c1"># => "claude-sonnet-4"</span>
|
|
4051
|
+
</span><span id="__span-44-2"><a id="__codelineno-44-2" name="__codelineno-44-2" href="#__codelineno-44-2"></a><span class="no">RobotLab</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">ruby_llm</span><span class="o">.</span><span class="n">request_timeout</span><span class="w"> </span><span class="c1"># => 120</span>
|
|
4052
|
+
</span></code></pre></div>
|
|
4053
|
+
<p>Configuration is loaded from:</p>
|
|
4054
|
+
<ul>
|
|
4055
|
+
<li>Bundled defaults (<code>lib/robot_lab/config/defaults.yml</code>)</li>
|
|
4056
|
+
<li>Environment-specific overrides (development, test, production)</li>
|
|
4057
|
+
<li>XDG config files (<code>~/.config/robot_lab/config.yml</code>)</li>
|
|
4058
|
+
<li>Project config (<code>./config/robot_lab.yml</code>)</li>
|
|
4059
|
+
<li>Environment variables (<code>ROBOT_LAB_*</code> prefix)</li>
|
|
4060
|
+
</ul>
|
|
4061
|
+
<h2 id="best-practices">Best Practices<a class="headerlink" href="#best-practices" title="Permanent link">¶</a></h2>
|
|
4062
|
+
<h3 id="1-clear-focused-prompts">1. Clear, Focused Prompts<a class="headerlink" href="#1-clear-focused-prompts" title="Permanent link">¶</a></h3>
|
|
4063
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-45-1"><a id="__codelineno-45-1" name="__codelineno-45-1" href="#__codelineno-45-1"></a><span class="c1"># Good: Specific and focused</span>
|
|
4064
|
+
</span><span id="__span-45-2"><a id="__codelineno-45-2" name="__codelineno-45-2" href="#__codelineno-45-2"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
4065
|
+
</span><span id="__span-45-3"><a id="__codelineno-45-3" name="__codelineno-45-3" href="#__codelineno-45-3"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"reviewer"</span><span class="p">,</span>
|
|
4066
|
+
</span><span id="__span-45-4"><a id="__codelineno-45-4" name="__codelineno-45-4" href="#__codelineno-45-4"></a><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="o"><<~</span><span class="dl">PROMPT</span>
|
|
4067
|
+
</span><span id="__span-45-5"><a id="__codelineno-45-5" name="__codelineno-45-5" href="#__codelineno-45-5"></a><span class="sh"> You are a code reviewer. Review code for:</span>
|
|
4068
|
+
</span><span id="__span-45-6"><a id="__codelineno-45-6" name="__codelineno-45-6" href="#__codelineno-45-6"></a><span class="sh"> - Security vulnerabilities</span>
|
|
4069
|
+
</span><span id="__span-45-7"><a id="__codelineno-45-7" name="__codelineno-45-7" href="#__codelineno-45-7"></a><span class="sh"> - Performance issues</span>
|
|
4070
|
+
</span><span id="__span-45-8"><a id="__codelineno-45-8" name="__codelineno-45-8" href="#__codelineno-45-8"></a><span class="sh"> - Best practice violations</span>
|
|
4071
|
+
</span><span id="__span-45-9"><a id="__codelineno-45-9" name="__codelineno-45-9" href="#__codelineno-45-9"></a>
|
|
4072
|
+
</span><span id="__span-45-10"><a id="__codelineno-45-10" name="__codelineno-45-10" href="#__codelineno-45-10"></a><span class="sh"> Provide specific line numbers and suggestions.</span>
|
|
4073
|
+
</span><span id="__span-45-11"><a id="__codelineno-45-11" name="__codelineno-45-11" href="#__codelineno-45-11"></a><span class="dl"> PROMPT</span>
|
|
4074
|
+
</span><span id="__span-45-12"><a id="__codelineno-45-12" name="__codelineno-45-12" href="#__codelineno-45-12"></a><span class="p">)</span>
|
|
4075
|
+
</span><span id="__span-45-13"><a id="__codelineno-45-13" name="__codelineno-45-13" href="#__codelineno-45-13"></a>
|
|
4076
|
+
</span><span id="__span-45-14"><a id="__codelineno-45-14" name="__codelineno-45-14" href="#__codelineno-45-14"></a><span class="c1"># Bad: Vague and unfocused</span>
|
|
4077
|
+
</span><span id="__span-45-15"><a id="__codelineno-45-15" name="__codelineno-45-15" href="#__codelineno-45-15"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
4078
|
+
</span><span id="__span-45-16"><a id="__codelineno-45-16" name="__codelineno-45-16" href="#__codelineno-45-16"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"reviewer"</span><span class="p">,</span>
|
|
4079
|
+
</span><span id="__span-45-17"><a id="__codelineno-45-17" name="__codelineno-45-17" href="#__codelineno-45-17"></a><span class="w"> </span><span class="ss">system_prompt</span><span class="p">:</span><span class="w"> </span><span class="s2">"You help with code stuff."</span>
|
|
4080
|
+
</span><span id="__span-45-18"><a id="__codelineno-45-18" name="__codelineno-45-18" href="#__codelineno-45-18"></a><span class="p">)</span>
|
|
4081
|
+
</span></code></pre></div>
|
|
4082
|
+
<h3 id="2-compose-behaviors-with-skills">2. Compose Behaviors with Skills<a class="headerlink" href="#2-compose-behaviors-with-skills" title="Permanent link">¶</a></h3>
|
|
4083
|
+
<p>Instead of creating monolithic templates, break behaviors into composable skills:</p>
|
|
4084
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-46-1"><a id="__codelineno-46-1" name="__codelineno-46-1" href="#__codelineno-46-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
4085
|
+
</span><span id="__span-46-2"><a id="__codelineno-46-2" name="__codelineno-46-2" href="#__codelineno-46-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"support"</span><span class="p">,</span>
|
|
4086
|
+
</span><span id="__span-46-3"><a id="__codelineno-46-3" name="__codelineno-46-3" href="#__codelineno-46-3"></a><span class="w"> </span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:support</span><span class="p">,</span>
|
|
4087
|
+
</span><span id="__span-46-4"><a id="__codelineno-46-4" name="__codelineno-46-4" href="#__codelineno-46-4"></a><span class="w"> </span><span class="ss">skills</span><span class="p">:</span><span class="w"> </span><span class="o">[</span><span class="ss">:clarifier</span><span class="p">,</span><span class="w"> </span><span class="ss">:safety</span><span class="p">,</span><span class="w"> </span><span class="ss">:json_responder</span><span class="o">]</span>
|
|
4088
|
+
</span><span id="__span-46-5"><a id="__codelineno-46-5" name="__codelineno-46-5" href="#__codelineno-46-5"></a><span class="p">)</span>
|
|
4089
|
+
</span></code></pre></div>
|
|
4090
|
+
<h3 id="3-use-templates-for-reusable-prompts">3. Use Templates for Reusable Prompts<a class="headerlink" href="#3-use-templates-for-reusable-prompts" title="Permanent link">¶</a></h3>
|
|
4091
|
+
<p>Templates keep prompts in version-controlled files and allow parameterization:</p>
|
|
4092
|
+
<div class="language-ruby highlight"><pre><span></span><code><span id="__span-47-1"><a id="__codelineno-47-1" name="__codelineno-47-1" href="#__codelineno-47-1"></a><span class="n">robot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">RobotLab</span><span class="o">.</span><span class="n">build</span><span class="p">(</span>
|
|
4093
|
+
</span><span id="__span-47-2"><a id="__codelineno-47-2" name="__codelineno-47-2" href="#__codelineno-47-2"></a><span class="w"> </span><span class="nb">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"support"</span><span class="p">,</span>
|
|
4094
|
+
</span><span id="__span-47-3"><a id="__codelineno-47-3" name="__codelineno-47-3" href="#__codelineno-47-3"></a><span class="w"> </span><span class="ss">template</span><span class="p">:</span><span class="w"> </span><span class="ss">:support</span><span class="p">,</span>
|
|
4095
|
+
</span><span id="__span-47-4"><a id="__codelineno-47-4" name="__codelineno-47-4" href="#__codelineno-47-4"></a><span class="w"> </span><span class="ss">context</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="ss">company</span><span class="p">:</span><span class="w"> </span><span class="s2">"TechCo"</span><span class="p">,</span><span class="w"> </span><span class="ss">language</span><span class="p">:</span><span class="w"> </span><span class="s2">"English"</span><span class="w"> </span><span class="p">}</span>
|
|
4096
|
+
</span><span id="__span-47-5"><a id="__codelineno-47-5" name="__codelineno-47-5" href="#__codelineno-47-5"></a><span class="p">)</span>
|
|
4097
|
+
</span></code></pre></div>
|
|
4098
|
+
<h3 id="4-handle-tool-errors-gracefully">4. Handle Tool Errors Gracefully<a class="headerlink" href="#4-handle-tool-errors-gracefully" title="Permanent link">¶</a></h3>
|
|
4099
|
+
<p><code>RobotLab::Tool</code> automatically catches exceptions and returns plain-text errors to the LLM. For domain-specific error handling, catch known exceptions in <code>execute</code> and return structured data. See <a href="../using-tools/#error-handling">Using Tools: Error Handling</a> for details.</p>
|
|
4100
|
+
<h2 id="next-steps">Next Steps<a class="headerlink" href="#next-steps" title="Permanent link">¶</a></h2>
|
|
4101
|
+
<ul>
|
|
4102
|
+
<li><a href="../creating-networks/">Creating Networks</a> - Orchestrate multiple robots</li>
|
|
4103
|
+
<li><a href="../../architecture/core-concepts/#message-bus">Message Bus</a> - Bidirectional robot communication</li>
|
|
4104
|
+
<li><a href="../../architecture/core-concepts/#dynamic-spawning">Dynamic Spawning</a> - Robots creating robots at runtime</li>
|
|
4105
|
+
<li><a href="../using-tools/">Using Tools</a> - Advanced tool patterns</li>
|
|
4106
|
+
<li><a href="../memory/">Memory Guide</a> - Share data between runs and robots</li>
|
|
4107
|
+
<li><a href="../../api/core/robot/">API Reference: Robot</a> - Complete API documentation</li>
|
|
4108
|
+
</ul>
|
|
4109
|
+
|
|
4110
|
+
|
|
4111
|
+
|
|
4112
|
+
|
|
4113
|
+
|
|
4114
|
+
|
|
4115
|
+
|
|
4116
|
+
|
|
4117
|
+
|
|
4118
|
+
|
|
4119
|
+
|
|
4120
|
+
|
|
4121
|
+
|
|
4122
|
+
<form class="md-feedback" name="feedback" hidden>
|
|
4123
|
+
<fieldset>
|
|
4124
|
+
<legend class="md-feedback__title">
|
|
4125
|
+
Was this page helpful?
|
|
4126
|
+
</legend>
|
|
4127
|
+
<div class="md-feedback__inner">
|
|
4128
|
+
<div class="md-feedback__list">
|
|
4129
|
+
|
|
4130
|
+
<button class="md-feedback__icon md-icon" type="submit" title="This page was helpful" data-md-value="1">
|
|
4131
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 12a8 8 0 0 0-8-8 8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8m2 0a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10M10 9.5c0 .8-.7 1.5-1.5 1.5S7 10.3 7 9.5 7.7 8 8.5 8s1.5.7 1.5 1.5m7 0c0 .8-.7 1.5-1.5 1.5S14 10.3 14 9.5 14.7 8 15.5 8s1.5.7 1.5 1.5m-5 7.73c-1.75 0-3.29-.73-4.19-1.81L9.23 14c.45.72 1.52 1.23 2.77 1.23s2.32-.51 2.77-1.23l1.42 1.42c-.9 1.08-2.44 1.81-4.19 1.81"/></svg>
|
|
4132
|
+
</button>
|
|
4133
|
+
|
|
4134
|
+
<button class="md-feedback__icon md-icon" type="submit" title="This page could be improved" data-md-value="0">
|
|
4135
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 12a8 8 0 0 0-8-8 8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8m2 0a10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2a10 10 0 0 1 10 10m-6.5-4c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5-1.5-.7-1.5-1.5.7-1.5 1.5-1.5M10 9.5c0 .8-.7 1.5-1.5 1.5S7 10.3 7 9.5 7.7 8 8.5 8s1.5.7 1.5 1.5m2 4.5c1.75 0 3.29.72 4.19 1.81l-1.42 1.42C14.32 16.5 13.25 16 12 16s-2.32.5-2.77 1.23l-1.42-1.42C8.71 14.72 10.25 14 12 14"/></svg>
|
|
4136
|
+
</button>
|
|
4137
|
+
|
|
4138
|
+
</div>
|
|
4139
|
+
<div class="md-feedback__note">
|
|
4140
|
+
|
|
4141
|
+
<div data-md-value="1" hidden>
|
|
4142
|
+
|
|
4143
|
+
|
|
4144
|
+
|
|
4145
|
+
|
|
4146
|
+
|
|
4147
|
+
|
|
4148
|
+
|
|
4149
|
+
|
|
4150
|
+
|
|
4151
|
+
Thanks for your feedback!
|
|
4152
|
+
</div>
|
|
4153
|
+
|
|
4154
|
+
<div data-md-value="0" hidden>
|
|
4155
|
+
|
|
4156
|
+
|
|
4157
|
+
|
|
4158
|
+
|
|
4159
|
+
|
|
4160
|
+
|
|
4161
|
+
|
|
4162
|
+
|
|
4163
|
+
|
|
4164
|
+
Thanks for your feedback! Help us improve by creating an issue.
|
|
4165
|
+
</div>
|
|
4166
|
+
|
|
4167
|
+
</div>
|
|
4168
|
+
</div>
|
|
4169
|
+
</fieldset>
|
|
4170
|
+
</form>
|
|
4171
|
+
|
|
4172
|
+
|
|
4173
|
+
|
|
4174
|
+
</article>
|
|
4175
|
+
</div>
|
|
4176
|
+
|
|
4177
|
+
|
|
4178
|
+
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
|
|
4179
|
+
|
|
4180
|
+
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
|
4181
|
+
</div>
|
|
4182
|
+
|
|
4183
|
+
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
|
|
4184
|
+
|
|
4185
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
|
|
4186
|
+
Back to top
|
|
4187
|
+
</button>
|
|
4188
|
+
|
|
4189
|
+
</main>
|
|
4190
|
+
|
|
4191
|
+
<footer class="md-footer">
|
|
4192
|
+
|
|
4193
|
+
|
|
4194
|
+
|
|
4195
|
+
<nav class="md-footer__inner md-grid" aria-label="Footer" >
|
|
4196
|
+
|
|
4197
|
+
|
|
4198
|
+
<a href="../" class="md-footer__link md-footer__link--prev" aria-label="Previous: Guides">
|
|
4199
|
+
<div class="md-footer__button md-icon">
|
|
4200
|
+
|
|
4201
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
|
4202
|
+
</div>
|
|
4203
|
+
<div class="md-footer__title">
|
|
4204
|
+
<span class="md-footer__direction">
|
|
4205
|
+
Previous
|
|
4206
|
+
</span>
|
|
4207
|
+
<div class="md-ellipsis">
|
|
4208
|
+
Guides
|
|
4209
|
+
</div>
|
|
4210
|
+
</div>
|
|
4211
|
+
</a>
|
|
4212
|
+
|
|
4213
|
+
|
|
4214
|
+
|
|
4215
|
+
<a href="../creating-networks/" class="md-footer__link md-footer__link--next" aria-label="Next: Creating Networks">
|
|
4216
|
+
<div class="md-footer__title">
|
|
4217
|
+
<span class="md-footer__direction">
|
|
4218
|
+
Next
|
|
4219
|
+
</span>
|
|
4220
|
+
<div class="md-ellipsis">
|
|
4221
|
+
Creating Networks
|
|
4222
|
+
</div>
|
|
4223
|
+
</div>
|
|
4224
|
+
<div class="md-footer__button md-icon">
|
|
4225
|
+
|
|
4226
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
|
|
4227
|
+
</div>
|
|
4228
|
+
</a>
|
|
4229
|
+
|
|
4230
|
+
</nav>
|
|
4231
|
+
|
|
4232
|
+
|
|
4233
|
+
<div class="md-footer-meta md-typeset">
|
|
4234
|
+
<div class="md-footer-meta__inner md-grid">
|
|
4235
|
+
<div class="md-copyright">
|
|
4236
|
+
|
|
4237
|
+
<div class="md-copyright__highlight">
|
|
4238
|
+
Copyright © 2025 Dewayne VanHoozer
|
|
4239
|
+
</div>
|
|
4240
|
+
|
|
4241
|
+
|
|
4242
|
+
Made with
|
|
4243
|
+
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
|
4244
|
+
Material for MkDocs
|
|
4245
|
+
</a>
|
|
4246
|
+
|
|
4247
|
+
</div>
|
|
4248
|
+
|
|
4249
|
+
|
|
4250
|
+
<div class="md-social">
|
|
4251
|
+
|
|
4252
|
+
|
|
4253
|
+
|
|
4254
|
+
|
|
4255
|
+
|
|
4256
|
+
<a href="https://github.com/madbomber/robot_lab" target="_blank" rel="noopener" title="RobotLab on GitHub" class="md-social__link">
|
|
4257
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
|
|
4258
|
+
</a>
|
|
4259
|
+
|
|
4260
|
+
|
|
4261
|
+
|
|
4262
|
+
|
|
4263
|
+
|
|
4264
|
+
<a href="https://rubygems.org/gems/robot_lab" target="_blank" rel="noopener" title="RobotLab on RubyGems" class="md-social__link">
|
|
4265
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M116.7 33.8c4.5-6.1 11.7-9.8 19.3-9.8h240c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4zm38.5 39.8c-3.3 2.5-4.2 7-2.1 10.5l57.4 95.7L63.3 192c-4.1.3-7.3 3.8-7.3 8s3.2 7.6 7.3 8l192 16h1.3l192-16c4.1-.3 7.3-3.8 7.3-8s-3.2-7.6-7.3-8l-147.2-12.3 57.4-95.6c2.1-3.5 1.2-8.1-2.1-10.5s-7.9-2-10.7 1l-90 97.6-90.1-97.6c-2.8-3-7.4-3.4-10.7-1"/></svg>
|
|
4266
|
+
</a>
|
|
4267
|
+
|
|
4268
|
+
</div>
|
|
4269
|
+
|
|
4270
|
+
</div>
|
|
4271
|
+
</div>
|
|
4272
|
+
</footer>
|
|
4273
|
+
|
|
4274
|
+
</div>
|
|
4275
|
+
<div class="md-dialog" data-md-component="dialog">
|
|
4276
|
+
<div class="md-dialog__inner md-typeset"></div>
|
|
4277
|
+
</div>
|
|
4278
|
+
|
|
4279
|
+
|
|
4280
|
+
|
|
4281
|
+
|
|
4282
|
+
|
|
4283
|
+
<script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["navigation.instant", "navigation.tracking", "navigation.tabs", "navigation.tabs.sticky", "navigation.path", "navigation.indexes", "navigation.top", "navigation.footer", "toc.follow", "search.suggest", "search.highlight", "search.share", "header.autohide", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.tooltips", "content.action.edit", "content.action.view"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
|
4284
|
+
|
|
4285
|
+
|
|
4286
|
+
<script src="../../assets/javascripts/bundle.79ae519e.min.js"></script>
|
|
4287
|
+
|
|
4288
|
+
|
|
4289
|
+
</body>
|
|
4290
|
+
</html>
|