vilvona 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (812) hide show
  1. package/CHANGELOG.md +12331 -0
  2. package/LICENSE +24 -0
  3. package/README.md +314 -0
  4. package/THIRD_PARTY_NOTICES.md +37 -0
  5. package/docs/.i18n/README.md +81 -0
  6. package/docs/.i18n/ar-navigation.json +18 -0
  7. package/docs/.i18n/de-navigation.json +18 -0
  8. package/docs/.i18n/es-navigation.json +18 -0
  9. package/docs/.i18n/fr-navigation.json +18 -0
  10. package/docs/.i18n/glossary.ar.json +82 -0
  11. package/docs/.i18n/glossary.de.json +82 -0
  12. package/docs/.i18n/glossary.es.json +82 -0
  13. package/docs/.i18n/glossary.fa.json +82 -0
  14. package/docs/.i18n/glossary.fr.json +82 -0
  15. package/docs/.i18n/glossary.id.json +82 -0
  16. package/docs/.i18n/glossary.it.json +82 -0
  17. package/docs/.i18n/glossary.ja-JP.json +102 -0
  18. package/docs/.i18n/glossary.ko.json +82 -0
  19. package/docs/.i18n/glossary.nl.json +82 -0
  20. package/docs/.i18n/glossary.pl.json +82 -0
  21. package/docs/.i18n/glossary.pt-BR.json +82 -0
  22. package/docs/.i18n/glossary.th.json +82 -0
  23. package/docs/.i18n/glossary.tr.json +82 -0
  24. package/docs/.i18n/glossary.uk.json +82 -0
  25. package/docs/.i18n/glossary.vi.json +82 -0
  26. package/docs/.i18n/glossary.zh-CN.json +1182 -0
  27. package/docs/.i18n/glossary.zh-TW.json +162 -0
  28. package/docs/.i18n/id-navigation.json +18 -0
  29. package/docs/.i18n/it-navigation.json +18 -0
  30. package/docs/.i18n/ja-navigation.json +18 -0
  31. package/docs/.i18n/ko-navigation.json +18 -0
  32. package/docs/.i18n/pl-navigation.json +18 -0
  33. package/docs/.i18n/pt-BR-navigation.json +18 -0
  34. package/docs/.i18n/tr-navigation.json +18 -0
  35. package/docs/.i18n/translation-workflow.md +111 -0
  36. package/docs/.i18n/zh-Hans-navigation.json +552 -0
  37. package/docs/AGENTS.md +36 -0
  38. package/docs/agent-runtime-architecture.md +48 -0
  39. package/docs/announcements/bluebubbles-imessage.md +79 -0
  40. package/docs/auth-credential-semantics.md +124 -0
  41. package/docs/automation/auth-monitoring.md +11 -0
  42. package/docs/automation/clawflow.md +12 -0
  43. package/docs/automation/cron-jobs.md +569 -0
  44. package/docs/automation/cron-vs-heartbeat.md +11 -0
  45. package/docs/automation/gmail-pubsub.md +11 -0
  46. package/docs/automation/hooks.md +387 -0
  47. package/docs/automation/index.md +135 -0
  48. package/docs/automation/poll.md +12 -0
  49. package/docs/automation/standing-orders.md +250 -0
  50. package/docs/automation/taskflow.md +155 -0
  51. package/docs/automation/tasks.md +374 -0
  52. package/docs/automation/troubleshooting.md +12 -0
  53. package/docs/automation/webhook.md +12 -0
  54. package/docs/brave-search.md +11 -0
  55. package/docs/channels/access-groups.md +201 -0
  56. package/docs/channels/ambient-room-events.md +214 -0
  57. package/docs/channels/bot-loop-protection.md +131 -0
  58. package/docs/channels/broadcast-groups.md +472 -0
  59. package/docs/channels/channel-routing.md +162 -0
  60. package/docs/channels/clickclack.md +146 -0
  61. package/docs/channels/discord.md +1758 -0
  62. package/docs/channels/feishu.md +654 -0
  63. package/docs/channels/googlechat.md +286 -0
  64. package/docs/channels/group-messages.md +95 -0
  65. package/docs/channels/groups.md +610 -0
  66. package/docs/channels/imessage-from-bluebubbles.md +259 -0
  67. package/docs/channels/imessage.md +864 -0
  68. package/docs/channels/index.md +65 -0
  69. package/docs/channels/irc.md +253 -0
  70. package/docs/channels/line.md +243 -0
  71. package/docs/channels/location.md +71 -0
  72. package/docs/channels/matrix-migration.md +375 -0
  73. package/docs/channels/matrix-presentation.md +77 -0
  74. package/docs/channels/matrix-push-rules.md +150 -0
  75. package/docs/channels/matrix.md +935 -0
  76. package/docs/channels/mattermost.md +542 -0
  77. package/docs/channels/msteams.md +1097 -0
  78. package/docs/channels/nextcloud-talk.md +176 -0
  79. package/docs/channels/nostr.md +253 -0
  80. package/docs/channels/pairing.md +214 -0
  81. package/docs/channels/qqbot.md +317 -0
  82. package/docs/channels/signal.md +417 -0
  83. package/docs/channels/slack.md +1623 -0
  84. package/docs/channels/sms.md +380 -0
  85. package/docs/channels/synology-chat.md +187 -0
  86. package/docs/channels/telegram.md +1121 -0
  87. package/docs/channels/tlon.md +296 -0
  88. package/docs/channels/troubleshooting.md +162 -0
  89. package/docs/channels/twitch.md +431 -0
  90. package/docs/channels/wechat.md +171 -0
  91. package/docs/channels/whatsapp.md +796 -0
  92. package/docs/channels/yuanbao.md +416 -0
  93. package/docs/channels/zalo.md +253 -0
  94. package/docs/channels/zalouser.md +217 -0
  95. package/docs/ci.md +665 -0
  96. package/docs/clawhub/cli.md +82 -0
  97. package/docs/clawhub/publishing.md +96 -0
  98. package/docs/cli/acp.md +370 -0
  99. package/docs/cli/agent.md +109 -0
  100. package/docs/cli/agents.md +253 -0
  101. package/docs/cli/approvals.md +193 -0
  102. package/docs/cli/backup.md +98 -0
  103. package/docs/cli/browser.md +322 -0
  104. package/docs/cli/channels.md +154 -0
  105. package/docs/cli/clawbot.md +25 -0
  106. package/docs/cli/commitments.md +90 -0
  107. package/docs/cli/completion.md +39 -0
  108. package/docs/cli/config.md +504 -0
  109. package/docs/cli/configure.md +77 -0
  110. package/docs/cli/crestodian.md +337 -0
  111. package/docs/cli/cron.md +344 -0
  112. package/docs/cli/daemon.md +67 -0
  113. package/docs/cli/dashboard.md +33 -0
  114. package/docs/cli/devices.md +240 -0
  115. package/docs/cli/directory.md +68 -0
  116. package/docs/cli/dns.md +53 -0
  117. package/docs/cli/docs.md +63 -0
  118. package/docs/cli/doctor.md +254 -0
  119. package/docs/cli/flows.md +52 -0
  120. package/docs/cli/gateway.md +572 -0
  121. package/docs/cli/health.md +43 -0
  122. package/docs/cli/hooks.md +345 -0
  123. package/docs/cli/index.md +406 -0
  124. package/docs/cli/infer.md +364 -0
  125. package/docs/cli/logs.md +68 -0
  126. package/docs/cli/mcp.md +851 -0
  127. package/docs/cli/memory.md +183 -0
  128. package/docs/cli/message.md +317 -0
  129. package/docs/cli/migrate.md +334 -0
  130. package/docs/cli/models.md +239 -0
  131. package/docs/cli/node.md +178 -0
  132. package/docs/cli/nodes.md +76 -0
  133. package/docs/cli/onboard.md +251 -0
  134. package/docs/cli/pairing.md +77 -0
  135. package/docs/cli/path.md +511 -0
  136. package/docs/cli/plugins.md +480 -0
  137. package/docs/cli/policy.md +929 -0
  138. package/docs/cli/proxy.md +89 -0
  139. package/docs/cli/qr.md +56 -0
  140. package/docs/cli/reset.md +39 -0
  141. package/docs/cli/sandbox.md +208 -0
  142. package/docs/cli/secrets.md +202 -0
  143. package/docs/cli/security.md +135 -0
  144. package/docs/cli/sessions.md +178 -0
  145. package/docs/cli/setup.md +60 -0
  146. package/docs/cli/skills.md +156 -0
  147. package/docs/cli/status.md +45 -0
  148. package/docs/cli/system.md +89 -0
  149. package/docs/cli/tasks.md +111 -0
  150. package/docs/cli/transcripts.md +151 -0
  151. package/docs/cli/tui.md +92 -0
  152. package/docs/cli/uninstall.md +45 -0
  153. package/docs/cli/update.md +283 -0
  154. package/docs/cli/voicecall.md +204 -0
  155. package/docs/cli/webhooks.md +117 -0
  156. package/docs/cli/wiki.md +256 -0
  157. package/docs/cli/workboard.md +228 -0
  158. package/docs/concepts/active-memory.md +856 -0
  159. package/docs/concepts/agent-loop.md +185 -0
  160. package/docs/concepts/agent-runtimes.md +276 -0
  161. package/docs/concepts/agent-workspace.md +230 -0
  162. package/docs/concepts/agent.md +142 -0
  163. package/docs/concepts/architecture.md +154 -0
  164. package/docs/concepts/channel-docking.md +145 -0
  165. package/docs/concepts/commitments.md +150 -0
  166. package/docs/concepts/compaction.md +203 -0
  167. package/docs/concepts/context-engine.md +347 -0
  168. package/docs/concepts/context.md +199 -0
  169. package/docs/concepts/delegate-architecture.md +319 -0
  170. package/docs/concepts/dreaming.md +279 -0
  171. package/docs/concepts/experimental-features.md +111 -0
  172. package/docs/concepts/features.md +91 -0
  173. package/docs/concepts/mantis-slack-desktop-runbook.md +231 -0
  174. package/docs/concepts/mantis.md +744 -0
  175. package/docs/concepts/markdown-formatting.md +139 -0
  176. package/docs/concepts/memory-builtin.md +151 -0
  177. package/docs/concepts/memory-honcho.md +144 -0
  178. package/docs/concepts/memory-qmd.md +277 -0
  179. package/docs/concepts/memory-search.md +175 -0
  180. package/docs/concepts/memory.md +299 -0
  181. package/docs/concepts/message-lifecycle-refactor.md +1126 -0
  182. package/docs/concepts/messages.md +216 -0
  183. package/docs/concepts/model-failover.md +405 -0
  184. package/docs/concepts/model-providers.md +719 -0
  185. package/docs/concepts/models.md +371 -0
  186. package/docs/concepts/multi-agent.md +625 -0
  187. package/docs/concepts/oauth.md +218 -0
  188. package/docs/concepts/parallel-specialist-lanes.md +127 -0
  189. package/docs/concepts/personal-agent-benchmark-pack.md +74 -0
  190. package/docs/concepts/presence.md +117 -0
  191. package/docs/concepts/progress-drafts.md +406 -0
  192. package/docs/concepts/qa-e2e-automation.md +979 -0
  193. package/docs/concepts/qa-matrix.md +139 -0
  194. package/docs/concepts/queue-steering.md +90 -0
  195. package/docs/concepts/queue.md +136 -0
  196. package/docs/concepts/retry.md +86 -0
  197. package/docs/concepts/session-pruning.md +104 -0
  198. package/docs/concepts/session-tool.md +201 -0
  199. package/docs/concepts/session.md +164 -0
  200. package/docs/concepts/soul.md +116 -0
  201. package/docs/concepts/streaming.md +258 -0
  202. package/docs/concepts/system-prompt.md +330 -0
  203. package/docs/concepts/timezone.md +47 -0
  204. package/docs/concepts/typebox.md +309 -0
  205. package/docs/concepts/typing-indicators.md +88 -0
  206. package/docs/concepts/usage-tracking.md +72 -0
  207. package/docs/date-time.md +126 -0
  208. package/docs/debug/node-issue.md +90 -0
  209. package/docs/diagnostics/flags.md +182 -0
  210. package/docs/docs.json +1885 -0
  211. package/docs/gateway/authentication.md +286 -0
  212. package/docs/gateway/background-process.md +147 -0
  213. package/docs/gateway/bonjour.md +303 -0
  214. package/docs/gateway/bridge-protocol.md +97 -0
  215. package/docs/gateway/cli-backends.md +463 -0
  216. package/docs/gateway/config-agents.md +1525 -0
  217. package/docs/gateway/config-channels.md +942 -0
  218. package/docs/gateway/config-tools.md +806 -0
  219. package/docs/gateway/configuration-examples.md +706 -0
  220. package/docs/gateway/configuration-reference.md +1449 -0
  221. package/docs/gateway/configuration.md +748 -0
  222. package/docs/gateway/diagnostics.md +213 -0
  223. package/docs/gateway/discovery.md +154 -0
  224. package/docs/gateway/doctor.md +576 -0
  225. package/docs/gateway/external-apps.md +86 -0
  226. package/docs/gateway/gateway-lock.md +37 -0
  227. package/docs/gateway/health.md +73 -0
  228. package/docs/gateway/heartbeat.md +498 -0
  229. package/docs/gateway/index.md +385 -0
  230. package/docs/gateway/local-model-services.md +205 -0
  231. package/docs/gateway/local-models.md +355 -0
  232. package/docs/gateway/logging.md +149 -0
  233. package/docs/gateway/multiple-gateways.md +178 -0
  234. package/docs/gateway/network-model.md +15 -0
  235. package/docs/gateway/openai-http-api.md +379 -0
  236. package/docs/gateway/openresponses-http-api.md +349 -0
  237. package/docs/gateway/openshell.md +316 -0
  238. package/docs/gateway/opentelemetry.md +440 -0
  239. package/docs/gateway/operator-scopes.md +119 -0
  240. package/docs/gateway/pairing.md +207 -0
  241. package/docs/gateway/prometheus.md +249 -0
  242. package/docs/gateway/protocol.md +839 -0
  243. package/docs/gateway/remote-gateway-readme.md +169 -0
  244. package/docs/gateway/remote.md +280 -0
  245. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +148 -0
  246. package/docs/gateway/sandboxing.md +546 -0
  247. package/docs/gateway/secrets-plan-contract.md +159 -0
  248. package/docs/gateway/secrets.md +805 -0
  249. package/docs/gateway/security/audit-checks.md +127 -0
  250. package/docs/gateway/security/exposure-runbook.md +212 -0
  251. package/docs/gateway/security/index.md +1344 -0
  252. package/docs/gateway/security/secure-file-operations.md +76 -0
  253. package/docs/gateway/security/shrinkwrap.md +111 -0
  254. package/docs/gateway/tailscale.md +180 -0
  255. package/docs/gateway/tools-invoke-http-api.md +175 -0
  256. package/docs/gateway/troubleshooting.md +881 -0
  257. package/docs/gateway/trusted-proxy-auth.md +483 -0
  258. package/docs/help/debugging.md +341 -0
  259. package/docs/help/environment.md +240 -0
  260. package/docs/help/faq-first-run.md +872 -0
  261. package/docs/help/faq-models.md +557 -0
  262. package/docs/help/faq.md +2115 -0
  263. package/docs/help/index.md +39 -0
  264. package/docs/help/scripts.md +56 -0
  265. package/docs/help/testing-live.md +592 -0
  266. package/docs/help/testing-updates-plugins.md +299 -0
  267. package/docs/help/testing.md +977 -0
  268. package/docs/help/troubleshooting.md +500 -0
  269. package/docs/index.md +196 -0
  270. package/docs/install/ansible.md +233 -0
  271. package/docs/install/azure.md +315 -0
  272. package/docs/install/bun.md +59 -0
  273. package/docs/install/clawdock.md +112 -0
  274. package/docs/install/development-channels.md +148 -0
  275. package/docs/install/digitalocean.md +174 -0
  276. package/docs/install/docker-vm-runtime.md +154 -0
  277. package/docs/install/docker.md +564 -0
  278. package/docs/install/exe-dev.md +201 -0
  279. package/docs/install/fly.md +524 -0
  280. package/docs/install/gcp.md +418 -0
  281. package/docs/install/hetzner.md +285 -0
  282. package/docs/install/hostinger.md +98 -0
  283. package/docs/install/index.md +236 -0
  284. package/docs/install/installer.md +447 -0
  285. package/docs/install/kubernetes.md +196 -0
  286. package/docs/install/macos-vm.md +281 -0
  287. package/docs/install/migrating-claude.md +165 -0
  288. package/docs/install/migrating-hermes.md +178 -0
  289. package/docs/install/migrating.md +137 -0
  290. package/docs/install/nix.md +112 -0
  291. package/docs/install/node.md +142 -0
  292. package/docs/install/northflank.mdx +44 -0
  293. package/docs/install/oracle.md +218 -0
  294. package/docs/install/podman.md +216 -0
  295. package/docs/install/railway.mdx +92 -0
  296. package/docs/install/raspberry-pi.md +234 -0
  297. package/docs/install/render.mdx +167 -0
  298. package/docs/install/uninstall.md +140 -0
  299. package/docs/install/updating.md +284 -0
  300. package/docs/install/upstash.md +96 -0
  301. package/docs/logging.md +322 -0
  302. package/docs/maturity-scores.yaml +5361 -0
  303. package/docs/nav-tabs-underline.js +104 -0
  304. package/docs/network.md +72 -0
  305. package/docs/nodes/audio.md +216 -0
  306. package/docs/nodes/camera.md +166 -0
  307. package/docs/nodes/images.md +77 -0
  308. package/docs/nodes/index.md +444 -0
  309. package/docs/nodes/location-command.md +102 -0
  310. package/docs/nodes/media-understanding.md +495 -0
  311. package/docs/nodes/talk.md +160 -0
  312. package/docs/nodes/troubleshooting.md +123 -0
  313. package/docs/nodes/voicewake.md +93 -0
  314. package/docs/openclaw-agent-runtime.md +82 -0
  315. package/docs/perplexity.md +11 -0
  316. package/docs/plan/codex-context-engine-harness.md +624 -0
  317. package/docs/plan/ui-channels.md +284 -0
  318. package/docs/platforms/android.md +286 -0
  319. package/docs/platforms/digitalocean.md +12 -0
  320. package/docs/platforms/easyrunner.md +109 -0
  321. package/docs/platforms/index.md +65 -0
  322. package/docs/platforms/ios.md +287 -0
  323. package/docs/platforms/linux.md +141 -0
  324. package/docs/platforms/mac/bundled-gateway.md +79 -0
  325. package/docs/platforms/mac/canvas.md +128 -0
  326. package/docs/platforms/mac/child-process.md +72 -0
  327. package/docs/platforms/mac/dev-setup.md +112 -0
  328. package/docs/platforms/mac/health.md +39 -0
  329. package/docs/platforms/mac/icon.md +36 -0
  330. package/docs/platforms/mac/logging.md +62 -0
  331. package/docs/platforms/mac/menu-bar.md +93 -0
  332. package/docs/platforms/mac/peekaboo.md +96 -0
  333. package/docs/platforms/mac/permissions.md +73 -0
  334. package/docs/platforms/mac/remote.md +123 -0
  335. package/docs/platforms/mac/signing.md +52 -0
  336. package/docs/platforms/mac/skills.md +45 -0
  337. package/docs/platforms/mac/voice-overlay.md +66 -0
  338. package/docs/platforms/mac/voicewake.md +79 -0
  339. package/docs/platforms/mac/webchat.md +54 -0
  340. package/docs/platforms/mac/xpc.md +66 -0
  341. package/docs/platforms/macos.md +228 -0
  342. package/docs/platforms/oracle.md +12 -0
  343. package/docs/platforms/raspberry-pi.md +13 -0
  344. package/docs/platforms/windows.md +304 -0
  345. package/docs/plugins/adding-capabilities.md +146 -0
  346. package/docs/plugins/admin-http-rpc.md +216 -0
  347. package/docs/plugins/agent-tools.md +13 -0
  348. package/docs/plugins/architecture-internals.md +1203 -0
  349. package/docs/plugins/architecture.md +483 -0
  350. package/docs/plugins/building-extensions.md +13 -0
  351. package/docs/plugins/building-plugins.md +343 -0
  352. package/docs/plugins/bundles.md +310 -0
  353. package/docs/plugins/cli-backend-plugins.md +328 -0
  354. package/docs/plugins/codex-computer-use.md +297 -0
  355. package/docs/plugins/codex-harness-reference.md +480 -0
  356. package/docs/plugins/codex-harness-runtime.md +268 -0
  357. package/docs/plugins/codex-harness.md +800 -0
  358. package/docs/plugins/codex-native-plugins.md +280 -0
  359. package/docs/plugins/community.md +77 -0
  360. package/docs/plugins/compatibility.md +198 -0
  361. package/docs/plugins/copilot.md +355 -0
  362. package/docs/plugins/dependency-resolution.md +176 -0
  363. package/docs/plugins/google-meet.md +1737 -0
  364. package/docs/plugins/hooks.md +525 -0
  365. package/docs/plugins/install-overrides.md +80 -0
  366. package/docs/plugins/llama-cpp.md +58 -0
  367. package/docs/plugins/manage-plugins.md +214 -0
  368. package/docs/plugins/manifest.md +1468 -0
  369. package/docs/plugins/memory-lancedb.md +385 -0
  370. package/docs/plugins/memory-wiki.md +529 -0
  371. package/docs/plugins/message-presentation.md +487 -0
  372. package/docs/plugins/oc-path.md +166 -0
  373. package/docs/plugins/plugin-inventory.md +318 -0
  374. package/docs/plugins/plugin-permission-requests.md +193 -0
  375. package/docs/plugins/reference/acpx.md +23 -0
  376. package/docs/plugins/reference/admin-http-rpc.md +23 -0
  377. package/docs/plugins/reference/alibaba.md +23 -0
  378. package/docs/plugins/reference/amazon-bedrock-mantle.md +23 -0
  379. package/docs/plugins/reference/amazon-bedrock.md +23 -0
  380. package/docs/plugins/reference/anthropic-vertex.md +29 -0
  381. package/docs/plugins/reference/anthropic.md +23 -0
  382. package/docs/plugins/reference/arcee.md +23 -0
  383. package/docs/plugins/reference/azure-speech.md +23 -0
  384. package/docs/plugins/reference/bonjour.md +19 -0
  385. package/docs/plugins/reference/brave.md +23 -0
  386. package/docs/plugins/reference/browser.md +23 -0
  387. package/docs/plugins/reference/byteplus.md +19 -0
  388. package/docs/plugins/reference/canvas.md +19 -0
  389. package/docs/plugins/reference/cerebras.md +23 -0
  390. package/docs/plugins/reference/chutes.md +23 -0
  391. package/docs/plugins/reference/clickclack.md +23 -0
  392. package/docs/plugins/reference/cloudflare-ai-gateway.md +23 -0
  393. package/docs/plugins/reference/codex-supervisor.md +27 -0
  394. package/docs/plugins/reference/codex.md +23 -0
  395. package/docs/plugins/reference/comfy.md +23 -0
  396. package/docs/plugins/reference/copilot-proxy.md +19 -0
  397. package/docs/plugins/reference/copilot.md +23 -0
  398. package/docs/plugins/reference/deepgram.md +23 -0
  399. package/docs/plugins/reference/deepinfra.md +23 -0
  400. package/docs/plugins/reference/deepseek.md +23 -0
  401. package/docs/plugins/reference/diagnostics-otel.md +19 -0
  402. package/docs/plugins/reference/diagnostics-prometheus.md +19 -0
  403. package/docs/plugins/reference/diffs-language-pack.md +31 -0
  404. package/docs/plugins/reference/diffs.md +19 -0
  405. package/docs/plugins/reference/discord.md +23 -0
  406. package/docs/plugins/reference/document-extract.md +23 -0
  407. package/docs/plugins/reference/duckduckgo.md +23 -0
  408. package/docs/plugins/reference/elevenlabs.md +23 -0
  409. package/docs/plugins/reference/exa.md +23 -0
  410. package/docs/plugins/reference/fal.md +23 -0
  411. package/docs/plugins/reference/feishu.md +23 -0
  412. package/docs/plugins/reference/file-transfer.md +19 -0
  413. package/docs/plugins/reference/firecrawl.md +23 -0
  414. package/docs/plugins/reference/fireworks.md +23 -0
  415. package/docs/plugins/reference/github-copilot.md +23 -0
  416. package/docs/plugins/reference/gmi.md +23 -0
  417. package/docs/plugins/reference/google-meet.md +23 -0
  418. package/docs/plugins/reference/google.md +23 -0
  419. package/docs/plugins/reference/googlechat.md +23 -0
  420. package/docs/plugins/reference/gradium.md +23 -0
  421. package/docs/plugins/reference/groq.md +23 -0
  422. package/docs/plugins/reference/huggingface.md +23 -0
  423. package/docs/plugins/reference/imessage.md +23 -0
  424. package/docs/plugins/reference/inworld.md +23 -0
  425. package/docs/plugins/reference/irc.md +23 -0
  426. package/docs/plugins/reference/kilocode.md +23 -0
  427. package/docs/plugins/reference/kimi.md +23 -0
  428. package/docs/plugins/reference/line.md +23 -0
  429. package/docs/plugins/reference/litellm.md +23 -0
  430. package/docs/plugins/reference/llama-cpp.md +23 -0
  431. package/docs/plugins/reference/llm-task.md +19 -0
  432. package/docs/plugins/reference/lmstudio.md +23 -0
  433. package/docs/plugins/reference/lobster.md +19 -0
  434. package/docs/plugins/reference/matrix.md +23 -0
  435. package/docs/plugins/reference/mattermost.md +23 -0
  436. package/docs/plugins/reference/memory-core.md +19 -0
  437. package/docs/plugins/reference/memory-lancedb.md +23 -0
  438. package/docs/plugins/reference/memory-wiki.md +23 -0
  439. package/docs/plugins/reference/microsoft-foundry.md +113 -0
  440. package/docs/plugins/reference/microsoft.md +19 -0
  441. package/docs/plugins/reference/migrate-claude.md +19 -0
  442. package/docs/plugins/reference/migrate-hermes.md +19 -0
  443. package/docs/plugins/reference/minimax.md +23 -0
  444. package/docs/plugins/reference/mistral.md +23 -0
  445. package/docs/plugins/reference/moonshot.md +23 -0
  446. package/docs/plugins/reference/msteams.md +23 -0
  447. package/docs/plugins/reference/nextcloud-talk.md +23 -0
  448. package/docs/plugins/reference/nostr.md +23 -0
  449. package/docs/plugins/reference/novita.md +23 -0
  450. package/docs/plugins/reference/nvidia.md +23 -0
  451. package/docs/plugins/reference/oc-path.md +23 -0
  452. package/docs/plugins/reference/ollama.md +24 -0
  453. package/docs/plugins/reference/open-prose.md +19 -0
  454. package/docs/plugins/reference/openai.md +23 -0
  455. package/docs/plugins/reference/opencode-go.md +23 -0
  456. package/docs/plugins/reference/opencode.md +23 -0
  457. package/docs/plugins/reference/openrouter.md +23 -0
  458. package/docs/plugins/reference/openshell.md +19 -0
  459. package/docs/plugins/reference/perplexity.md +23 -0
  460. package/docs/plugins/reference/pixverse.md +23 -0
  461. package/docs/plugins/reference/policy.md +79 -0
  462. package/docs/plugins/reference/qa-channel.md +23 -0
  463. package/docs/plugins/reference/qa-lab.md +19 -0
  464. package/docs/plugins/reference/qa-matrix.md +19 -0
  465. package/docs/plugins/reference/qianfan.md +23 -0
  466. package/docs/plugins/reference/qqbot.md +23 -0
  467. package/docs/plugins/reference/qwen.md +24 -0
  468. package/docs/plugins/reference/runway.md +23 -0
  469. package/docs/plugins/reference/searxng.md +19 -0
  470. package/docs/plugins/reference/senseaudio.md +23 -0
  471. package/docs/plugins/reference/sglang.md +23 -0
  472. package/docs/plugins/reference/signal.md +23 -0
  473. package/docs/plugins/reference/slack.md +23 -0
  474. package/docs/plugins/reference/sms.md +23 -0
  475. package/docs/plugins/reference/stepfun.md +23 -0
  476. package/docs/plugins/reference/synology-chat.md +23 -0
  477. package/docs/plugins/reference/synthetic.md +23 -0
  478. package/docs/plugins/reference/tavily.md +23 -0
  479. package/docs/plugins/reference/telegram.md +23 -0
  480. package/docs/plugins/reference/tencent.md +23 -0
  481. package/docs/plugins/reference/tlon.md +23 -0
  482. package/docs/plugins/reference/together.md +23 -0
  483. package/docs/plugins/reference/tokenjuice.md +23 -0
  484. package/docs/plugins/reference/tts-local-cli.md +19 -0
  485. package/docs/plugins/reference/twitch.md +23 -0
  486. package/docs/plugins/reference/venice.md +23 -0
  487. package/docs/plugins/reference/vercel-ai-gateway.md +23 -0
  488. package/docs/plugins/reference/vllm.md +23 -0
  489. package/docs/plugins/reference/voice-call.md +23 -0
  490. package/docs/plugins/reference/volcengine.md +23 -0
  491. package/docs/plugins/reference/voyage.md +19 -0
  492. package/docs/plugins/reference/vydra.md +23 -0
  493. package/docs/plugins/reference/web-readability.md +19 -0
  494. package/docs/plugins/reference/webhooks.md +23 -0
  495. package/docs/plugins/reference/whatsapp.md +23 -0
  496. package/docs/plugins/reference/workboard.md +23 -0
  497. package/docs/plugins/reference/xai.md +23 -0
  498. package/docs/plugins/reference/xiaomi.md +23 -0
  499. package/docs/plugins/reference/zai.md +23 -0
  500. package/docs/plugins/reference/zalo.md +23 -0
  501. package/docs/plugins/reference/zalouser.md +24 -0
  502. package/docs/plugins/reference.md +19 -0
  503. package/docs/plugins/sdk-agent-harness.md +339 -0
  504. package/docs/plugins/sdk-channel-inbound.md +70 -0
  505. package/docs/plugins/sdk-channel-ingress.md +137 -0
  506. package/docs/plugins/sdk-channel-message.md +18 -0
  507. package/docs/plugins/sdk-channel-outbound.md +113 -0
  508. package/docs/plugins/sdk-channel-plugins.md +770 -0
  509. package/docs/plugins/sdk-channel-turn.md +9 -0
  510. package/docs/plugins/sdk-entrypoints.md +344 -0
  511. package/docs/plugins/sdk-migration.md +1011 -0
  512. package/docs/plugins/sdk-overview.md +525 -0
  513. package/docs/plugins/sdk-provider-plugins.md +1019 -0
  514. package/docs/plugins/sdk-runtime.md +683 -0
  515. package/docs/plugins/sdk-setup.md +550 -0
  516. package/docs/plugins/sdk-subpaths.md +401 -0
  517. package/docs/plugins/sdk-testing.md +403 -0
  518. package/docs/plugins/tool-plugins.md +411 -0
  519. package/docs/plugins/voice-call.md +942 -0
  520. package/docs/plugins/webhooks.md +192 -0
  521. package/docs/plugins/workboard.md +402 -0
  522. package/docs/plugins/zalouser.md +86 -0
  523. package/docs/prose.md +191 -0
  524. package/docs/providers/alibaba.md +158 -0
  525. package/docs/providers/anthropic.md +386 -0
  526. package/docs/providers/arcee.md +144 -0
  527. package/docs/providers/azure-speech.md +119 -0
  528. package/docs/providers/bedrock-mantle.md +224 -0
  529. package/docs/providers/bedrock.md +433 -0
  530. package/docs/providers/cerebras.md +130 -0
  531. package/docs/providers/chutes.md +153 -0
  532. package/docs/providers/claude-max-api-proxy.md +191 -0
  533. package/docs/providers/cloudflare-ai-gateway.md +119 -0
  534. package/docs/providers/comfy.md +362 -0
  535. package/docs/providers/deepgram.md +184 -0
  536. package/docs/providers/deepinfra.md +92 -0
  537. package/docs/providers/deepseek.md +146 -0
  538. package/docs/providers/ds4.md +309 -0
  539. package/docs/providers/elevenlabs.md +130 -0
  540. package/docs/providers/fal.md +240 -0
  541. package/docs/providers/fireworks.md +144 -0
  542. package/docs/providers/github-copilot.md +257 -0
  543. package/docs/providers/gmi.md +92 -0
  544. package/docs/providers/google.md +472 -0
  545. package/docs/providers/gradium.md +123 -0
  546. package/docs/providers/groq.md +171 -0
  547. package/docs/providers/huggingface.md +235 -0
  548. package/docs/providers/index.md +105 -0
  549. package/docs/providers/inferrs.md +272 -0
  550. package/docs/providers/inworld.md +120 -0
  551. package/docs/providers/kilocode.md +135 -0
  552. package/docs/providers/litellm.md +234 -0
  553. package/docs/providers/lmstudio.md +224 -0
  554. package/docs/providers/minimax.md +518 -0
  555. package/docs/providers/mistral.md +235 -0
  556. package/docs/providers/models.md +64 -0
  557. package/docs/providers/moonshot.md +413 -0
  558. package/docs/providers/novita.md +92 -0
  559. package/docs/providers/nvidia.md +208 -0
  560. package/docs/providers/ollama-cloud.md +115 -0
  561. package/docs/providers/ollama.md +1225 -0
  562. package/docs/providers/openai.md +1091 -0
  563. package/docs/providers/opencode-go.md +123 -0
  564. package/docs/providers/opencode.md +149 -0
  565. package/docs/providers/openrouter.md +390 -0
  566. package/docs/providers/perplexity-provider.md +123 -0
  567. package/docs/providers/pixverse.md +165 -0
  568. package/docs/providers/qianfan.md +132 -0
  569. package/docs/providers/qwen-oauth.md +115 -0
  570. package/docs/providers/qwen.md +364 -0
  571. package/docs/providers/runway.md +103 -0
  572. package/docs/providers/senseaudio.md +68 -0
  573. package/docs/providers/sglang.md +161 -0
  574. package/docs/providers/stepfun.md +229 -0
  575. package/docs/providers/synthetic.md +154 -0
  576. package/docs/providers/tencent.md +130 -0
  577. package/docs/providers/together.md +140 -0
  578. package/docs/providers/venice.md +312 -0
  579. package/docs/providers/vercel-ai-gateway.md +128 -0
  580. package/docs/providers/vllm.md +407 -0
  581. package/docs/providers/volcengine.md +199 -0
  582. package/docs/providers/vydra.md +180 -0
  583. package/docs/providers/xai.md +571 -0
  584. package/docs/providers/xiaomi.md +286 -0
  585. package/docs/providers/zai.md +224 -0
  586. package/docs/refactor/access.md +9 -0
  587. package/docs/refactor/acp.md +298 -0
  588. package/docs/refactor/canvas.md +131 -0
  589. package/docs/refactor/database-first.md +2263 -0
  590. package/docs/refactor/ingress-core.md +341 -0
  591. package/docs/reference/AGENTS.default.md +131 -0
  592. package/docs/reference/RELEASING.md +844 -0
  593. package/docs/reference/api-usage-costs.md +208 -0
  594. package/docs/reference/application-modernization-plan.md +208 -0
  595. package/docs/reference/code-mode.md +1058 -0
  596. package/docs/reference/credits.md +33 -0
  597. package/docs/reference/device-models.md +50 -0
  598. package/docs/reference/full-release-validation.md +206 -0
  599. package/docs/reference/memory-config.md +630 -0
  600. package/docs/reference/prompt-caching.md +358 -0
  601. package/docs/reference/release-performance-sweep.md +347 -0
  602. package/docs/reference/rich-output-protocol.md +93 -0
  603. package/docs/reference/rpc.md +43 -0
  604. package/docs/reference/secret-placeholder-conventions.md +33 -0
  605. package/docs/reference/secretref-credential-surface.md +163 -0
  606. package/docs/reference/secretref-user-supplied-credentials-matrix.json +691 -0
  607. package/docs/reference/session-management-compaction.md +474 -0
  608. package/docs/reference/templates/AGENTS.dev.md +90 -0
  609. package/docs/reference/templates/AGENTS.md +227 -0
  610. package/docs/reference/templates/BOOT.md +16 -0
  611. package/docs/reference/templates/BOOTSTRAP.md +66 -0
  612. package/docs/reference/templates/HEARTBEAT.md +24 -0
  613. package/docs/reference/templates/IDENTITY.dev.md +52 -0
  614. package/docs/reference/templates/IDENTITY.md +34 -0
  615. package/docs/reference/templates/SOUL.dev.md +82 -0
  616. package/docs/reference/templates/SOUL.md +49 -0
  617. package/docs/reference/templates/TOOLS.dev.md +29 -0
  618. package/docs/reference/templates/TOOLS.md +51 -0
  619. package/docs/reference/templates/USER.dev.md +23 -0
  620. package/docs/reference/templates/USER.md +28 -0
  621. package/docs/reference/test.md +248 -0
  622. package/docs/reference/token-use.md +246 -0
  623. package/docs/reference/transcript-hygiene.md +226 -0
  624. package/docs/reference/wizard.md +252 -0
  625. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +101 -0
  626. package/docs/security/THREAT-MODEL-ATLAS.md +611 -0
  627. package/docs/security/formal-verification.md +170 -0
  628. package/docs/security/incident-response.md +59 -0
  629. package/docs/security/network-proxy.md +268 -0
  630. package/docs/snippets/plugin-publish/minimal-openclaw.plugin.json +12 -0
  631. package/docs/snippets/plugin-publish/minimal-package.json +16 -0
  632. package/docs/specs/claw-supervisor.md +247 -0
  633. package/docs/start/bootstrapping.md +49 -0
  634. package/docs/start/docs-directory.md +69 -0
  635. package/docs/start/getting-started.md +152 -0
  636. package/docs/start/hubs.md +201 -0
  637. package/docs/start/lore.md +223 -0
  638. package/docs/start/onboarding-overview.md +72 -0
  639. package/docs/start/onboarding.md +98 -0
  640. package/docs/start/openclaw.md +246 -0
  641. package/docs/start/quickstart.md +25 -0
  642. package/docs/start/setup.md +178 -0
  643. package/docs/start/showcase.md +371 -0
  644. package/docs/start/wizard-cli-automation.md +232 -0
  645. package/docs/start/wizard-cli-reference.md +331 -0
  646. package/docs/start/wizard.md +142 -0
  647. package/docs/style.css +137 -0
  648. package/docs/tools/acp-agents-setup.md +356 -0
  649. package/docs/tools/acp-agents.md +865 -0
  650. package/docs/tools/agent-send.md +130 -0
  651. package/docs/tools/apply-patch.md +64 -0
  652. package/docs/tools/brave-search.md +139 -0
  653. package/docs/tools/browser-control.md +405 -0
  654. package/docs/tools/browser-linux-troubleshooting.md +173 -0
  655. package/docs/tools/browser-login.md +77 -0
  656. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +219 -0
  657. package/docs/tools/browser.md +866 -0
  658. package/docs/tools/btw.md +159 -0
  659. package/docs/tools/capability-cookbook.md +12 -0
  660. package/docs/tools/clawhub.md +5 -0
  661. package/docs/tools/code-execution.md +173 -0
  662. package/docs/tools/creating-skills.md +271 -0
  663. package/docs/tools/diffs.md +527 -0
  664. package/docs/tools/duckduckgo-search.md +109 -0
  665. package/docs/tools/elevated.md +128 -0
  666. package/docs/tools/exa-search.md +152 -0
  667. package/docs/tools/exec-approvals-advanced.md +457 -0
  668. package/docs/tools/exec-approvals.md +520 -0
  669. package/docs/tools/exec.md +294 -0
  670. package/docs/tools/firecrawl.md +155 -0
  671. package/docs/tools/gemini-search.md +114 -0
  672. package/docs/tools/goal.md +217 -0
  673. package/docs/tools/grok-search.md +129 -0
  674. package/docs/tools/image-generation.md +538 -0
  675. package/docs/tools/index.md +176 -0
  676. package/docs/tools/kimi-search.md +105 -0
  677. package/docs/tools/llm-task.md +137 -0
  678. package/docs/tools/lobster.md +365 -0
  679. package/docs/tools/loop-detection.md +154 -0
  680. package/docs/tools/media-overview.md +161 -0
  681. package/docs/tools/minimax-search.md +102 -0
  682. package/docs/tools/multi-agent-sandbox-tools.md +409 -0
  683. package/docs/tools/music-generation.md +372 -0
  684. package/docs/tools/ollama-search.md +153 -0
  685. package/docs/tools/parallel-search.md +154 -0
  686. package/docs/tools/pdf.md +213 -0
  687. package/docs/tools/permission-modes.md +111 -0
  688. package/docs/tools/perplexity-search.md +220 -0
  689. package/docs/tools/plugin.md +378 -0
  690. package/docs/tools/reactions.md +100 -0
  691. package/docs/tools/searxng-search.md +141 -0
  692. package/docs/tools/skill-workshop.md +283 -0
  693. package/docs/tools/skills-config.md +457 -0
  694. package/docs/tools/skills.md +591 -0
  695. package/docs/tools/slash-commands.md +518 -0
  696. package/docs/tools/steer.md +77 -0
  697. package/docs/tools/subagents.md +652 -0
  698. package/docs/tools/tavily.md +162 -0
  699. package/docs/tools/thinking.md +142 -0
  700. package/docs/tools/tokenjuice.md +84 -0
  701. package/docs/tools/tool-search.md +269 -0
  702. package/docs/tools/trajectory.md +229 -0
  703. package/docs/tools/tts.md +1013 -0
  704. package/docs/tools/video-generation.md +555 -0
  705. package/docs/tools/web-fetch.md +210 -0
  706. package/docs/tools/web.md +476 -0
  707. package/docs/tts.md +11 -0
  708. package/docs/vps.md +139 -0
  709. package/docs/web/control-ui.md +530 -0
  710. package/docs/web/dashboard.md +107 -0
  711. package/docs/web/index.md +133 -0
  712. package/docs/web/tui.md +258 -0
  713. package/docs/web/webchat.md +102 -0
  714. package/npm-shrinkwrap.json +3485 -0
  715. package/openclaw.mjs +661 -0
  716. package/package.json +1971 -0
  717. package/patches/.gitkeep +0 -0
  718. package/patches/@agentclientprotocol__claude-agent-acp@0.39.0.patch +40 -0
  719. package/pnpm-workspace.yaml +124 -0
  720. package/scripts/crabbox-wrapper.mjs +2470 -0
  721. package/scripts/lib/official-external-channel-catalog.json +570 -0
  722. package/scripts/lib/official-external-plugin-catalog.json +284 -0
  723. package/scripts/lib/official-external-provider-catalog.json +158 -0
  724. package/scripts/lib/package-dist-imports.mjs +174 -0
  725. package/scripts/npm-runner.mjs +95 -0
  726. package/scripts/postinstall-bundled-plugins.mjs +978 -0
  727. package/scripts/preinstall-package-manager-warning.mjs +74 -0
  728. package/scripts/prepare-git-hooks.mjs +73 -0
  729. package/scripts/windows-cmd-helpers.mjs +29 -0
  730. package/skills/1password/SKILL.md +70 -0
  731. package/skills/1password/references/cli-examples.md +29 -0
  732. package/skills/1password/references/get-started.md +17 -0
  733. package/skills/apple-notes/SKILL.md +77 -0
  734. package/skills/apple-reminders/SKILL.md +118 -0
  735. package/skills/bear-notes/SKILL.md +107 -0
  736. package/skills/blogwatcher/SKILL.md +69 -0
  737. package/skills/blucli/SKILL.md +47 -0
  738. package/skills/camsnap/SKILL.md +45 -0
  739. package/skills/canvas/SKILL.md +78 -0
  740. package/skills/clawhub/SKILL.md +77 -0
  741. package/skills/coding-agent/SKILL.md +143 -0
  742. package/skills/diagram-maker/SKILL.md +53 -0
  743. package/skills/diagram-maker/references/excalidraw-patterns.md +85 -0
  744. package/skills/diagram-maker/references/svg-template.md +112 -0
  745. package/skills/discord/SKILL.md +136 -0
  746. package/skills/eightctl/SKILL.md +50 -0
  747. package/skills/gemini/SKILL.md +47 -0
  748. package/skills/gh-issues/SKILL.md +213 -0
  749. package/skills/gifgrep/SKILL.md +85 -0
  750. package/skills/github/SKILL.md +84 -0
  751. package/skills/gog/SKILL.md +116 -0
  752. package/skills/goplaces/SKILL.md +52 -0
  753. package/skills/healthcheck/SKILL.md +105 -0
  754. package/skills/himalaya/SKILL.md +80 -0
  755. package/skills/himalaya/references/configuration.md +184 -0
  756. package/skills/himalaya/references/message-composition.md +199 -0
  757. package/skills/imsg/SKILL.md +122 -0
  758. package/skills/mcporter/SKILL.md +61 -0
  759. package/skills/meme-maker/SKILL.md +42 -0
  760. package/skills/meme-maker/references/templates.json +358 -0
  761. package/skills/meme-maker/scripts/meme.mjs +398 -0
  762. package/skills/model-usage/SKILL.md +71 -0
  763. package/skills/model-usage/references/codexbar-cli.md +33 -0
  764. package/skills/model-usage/scripts/model_usage.py +319 -0
  765. package/skills/model-usage/scripts/test_model_usage.py +40 -0
  766. package/skills/nano-pdf/SKILL.md +38 -0
  767. package/skills/node-connect/SKILL.md +143 -0
  768. package/skills/node-inspect-debugger/SKILL.md +85 -0
  769. package/skills/notion/SKILL.md +150 -0
  770. package/skills/obsidian/SKILL.md +119 -0
  771. package/skills/openai-whisper/SKILL.md +38 -0
  772. package/skills/openai-whisper-api/SKILL.md +71 -0
  773. package/skills/openai-whisper-api/scripts/transcribe.sh +154 -0
  774. package/skills/openhue/SKILL.md +112 -0
  775. package/skills/oracle/SKILL.md +126 -0
  776. package/skills/ordercli/SKILL.md +78 -0
  777. package/skills/peekaboo/SKILL.md +198 -0
  778. package/skills/pyproject.toml +10 -0
  779. package/skills/python-debugpy/SKILL.md +73 -0
  780. package/skills/sag/SKILL.md +87 -0
  781. package/skills/session-logs/SKILL.md +151 -0
  782. package/skills/sherpa-onnx-tts/SKILL.md +109 -0
  783. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  784. package/skills/skill-creator/SKILL.md +78 -0
  785. package/skills/skill-creator/license.txt +202 -0
  786. package/skills/skill-creator/scripts/init_skill.py +378 -0
  787. package/skills/skill-creator/scripts/package_skill.py +144 -0
  788. package/skills/skill-creator/scripts/quick_validate.py +169 -0
  789. package/skills/skill-creator/scripts/test_package_skill.py +199 -0
  790. package/skills/skill-creator/scripts/test_quick_validate.py +116 -0
  791. package/skills/slack/SKILL.md +78 -0
  792. package/skills/songsee/SKILL.md +49 -0
  793. package/skills/sonoscli/SKILL.md +65 -0
  794. package/skills/spike/SKILL.md +51 -0
  795. package/skills/spotify-player/SKILL.md +64 -0
  796. package/skills/summarize/SKILL.md +87 -0
  797. package/skills/taskflow/SKILL.md +149 -0
  798. package/skills/taskflow/examples/inbox-triage.lobster +33 -0
  799. package/skills/taskflow/examples/pr-intake.lobster +32 -0
  800. package/skills/taskflow-inbox-triage/SKILL.md +119 -0
  801. package/skills/things-mac/SKILL.md +86 -0
  802. package/skills/tmux/SKILL.md +91 -0
  803. package/skills/tmux/scripts/find-sessions.sh +112 -0
  804. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  805. package/skills/trello/SKILL.md +108 -0
  806. package/skills/video-frames/SKILL.md +46 -0
  807. package/skills/video-frames/scripts/frame.sh +81 -0
  808. package/skills/voice-call/SKILL.md +45 -0
  809. package/skills/wacli/SKILL.md +72 -0
  810. package/skills/weather/SKILL.md +87 -0
  811. package/skills/xurl/SKILL.md +120 -0
  812. package/src/agents/templates/HEARTBEAT.md +5 -0
@@ -0,0 +1,1058 @@
1
+ ---
2
+ summary: "OpenClaw code mode: an opt-in exec/wait tool surface backed by QuickJS-WASI and a hidden run-scoped tool catalog"
3
+ title: "Code mode"
4
+ sidebarTitle: "Code mode"
5
+ read_when:
6
+ - You want to enable OpenClaw code mode for an agent run
7
+ - You need to explain why code mode is different from Codex Code mode
8
+ - You are reviewing the exec/wait contract, QuickJS-WASI sandbox, TypeScript transform, or hidden tool-catalog bridge
9
+ - You are adding or reviewing an internal code-mode namespace registry integration
10
+ ---
11
+
12
+ Code mode is an experimental OpenClaw agent-runtime feature. It is off by
13
+ default. When you enable it, OpenClaw changes what the model sees for one run:
14
+ instead of exposing every enabled tool schema directly, the model sees only
15
+ `exec` and `wait`.
16
+
17
+ This page documents OpenClaw code mode. It is not Codex Code mode. The two
18
+ features share a name, but they are implemented by different runtimes and expose
19
+ different `exec` contracts:
20
+
21
+ - Codex Code Mode is enabled for Codex app-server threads unless restricted
22
+ tool policy disables native code mode. It runs in the Codex coding harness,
23
+ where the model writes shell commands through an `exec.command` contract.
24
+ - OpenClaw code mode is disabled unless `tools.codeMode.enabled: true` is
25
+ configured. It runs in the OpenClaw generic agent runtime, where the model
26
+ writes JavaScript or TypeScript programs through an `exec.code` contract.
27
+
28
+ Codex Code Mode and Codex-native dynamic tool search are stable Codex harness
29
+ surfaces. OpenClaw code mode is an OpenClaw-owned experimental tool-surface
30
+ adapter for generic OpenClaw runs. It uses `quickjs-wasi`, a hidden OpenClaw
31
+ tool catalog, and the normal OpenClaw tool executor.
32
+
33
+ ## What is this?
34
+
35
+ OpenClaw code mode lets the model write a small JavaScript or TypeScript program
36
+ instead of choosing directly from a long list of tools.
37
+
38
+ When code mode is active:
39
+
40
+ - The model-visible tool list is exactly `exec` and `wait`.
41
+ - `exec` evaluates model-generated JavaScript or TypeScript in a constrained
42
+ QuickJS-WASI worker.
43
+ - Normal OpenClaw tools are hidden from the model prompt and exposed inside the
44
+ guest program through `ALL_TOOLS` and `tools`.
45
+ - Guest code can search the hidden catalog, describe a tool, and call a tool
46
+ through the same OpenClaw execution path used by normal agent turns.
47
+ - MCP tools are grouped under the `MCP` namespace. In code mode, this namespace
48
+ is the only supported way to call MCP tools.
49
+ - `wait` resumes a suspended code-mode run when nested tool calls are still
50
+ pending.
51
+
52
+ The important distinction: code mode changes the model-facing orchestration
53
+ surface. It does not replace OpenClaw tools, plugin tools, MCP tools, auth,
54
+ approval policy, channel behavior, or model selection.
55
+
56
+ ## Why is this good?
57
+
58
+ Code mode makes large tool catalogs easier for models to use.
59
+
60
+ - Smaller prompt surface: providers receive two control tools instead of dozens
61
+ or hundreds of full tool schemas.
62
+ - Better orchestration: the model can use loops, joins, small transforms,
63
+ conditional logic, and parallel nested tool calls inside one code cell.
64
+ - Provider neutral: it works for OpenClaw, plugin, MCP, and client tools without
65
+ depending on provider-native code execution.
66
+ - Existing policy stays in force: nested tool calls still go through OpenClaw
67
+ policy, approvals, hooks, session context, and audit paths.
68
+ - Clear failure mode: when code mode is explicitly enabled and the runtime is
69
+ unavailable, OpenClaw fails closed instead of falling back to broad direct tool
70
+ exposure.
71
+
72
+ Code mode is especially useful for agents with a large enabled tool catalog or
73
+ for workflows where the model repeatedly needs to search, combine, and call
74
+ tools before producing an answer.
75
+
76
+ ## How to enable it
77
+
78
+ Add `tools.codeMode.enabled: true` to the agent or runtime config:
79
+
80
+ ```json5
81
+ {
82
+ tools: {
83
+ codeMode: {
84
+ enabled: true,
85
+ },
86
+ },
87
+ }
88
+ ```
89
+
90
+ The shorthand is also accepted:
91
+
92
+ ```json5
93
+ {
94
+ tools: {
95
+ codeMode: true,
96
+ },
97
+ }
98
+ ```
99
+
100
+ Code mode remains off when `tools.codeMode` is omitted, `false`, or an object
101
+ without `enabled: true`.
102
+
103
+ When you use sandboxed agents with configured MCP servers, also make sure the
104
+ sandbox tool policy allows the bundled MCP plugin, for example with
105
+ `tools.sandbox.tools.alsoAllow: ["bundle-mcp"]`. See
106
+ [Configuration - tools and custom providers](/gateway/config-tools#mcp-and-plugin-tools-inside-sandbox-tool-policy).
107
+
108
+ Use explicit limits when you want tighter bounds:
109
+
110
+ ```json5
111
+ {
112
+ tools: {
113
+ codeMode: {
114
+ enabled: true,
115
+ timeoutMs: 10000,
116
+ memoryLimitBytes: 67108864,
117
+ maxOutputBytes: 65536,
118
+ maxSnapshotBytes: 10485760,
119
+ maxPendingToolCalls: 16,
120
+ snapshotTtlSeconds: 900,
121
+ searchDefaultLimit: 8,
122
+ maxSearchLimit: 50,
123
+ },
124
+ },
125
+ }
126
+ ```
127
+
128
+ To confirm the model payload shape while debugging, run the Gateway with
129
+ targeted logging:
130
+
131
+ ```bash
132
+ OPENCLAW_DEBUG_CODE_MODE=1 \
133
+ OPENCLAW_DEBUG_MODEL_TRANSPORT=1 \
134
+ OPENCLAW_DEBUG_MODEL_PAYLOAD=tools \
135
+ openclaw gateway
136
+ ```
137
+
138
+ With code mode active, the logged model-facing tool names should be `exec` and
139
+ `wait`. If you need the redacted provider payload, add
140
+ `OPENCLAW_DEBUG_MODEL_PAYLOAD=full-redacted` for a short debugging session.
141
+
142
+ ## Technical tour
143
+
144
+ The rest of this page describes the runtime contract and implementation details.
145
+ It is intended for maintainers, plugin authors debugging tool exposure, and
146
+ operators validating high-risk deployments.
147
+
148
+ ## Runtime status
149
+
150
+ - Runtime: [`quickjs-wasi`](https://github.com/vercel-labs/quickjs-wasi).
151
+ - Default state: disabled.
152
+ - Stability: experimental OpenClaw surface; Codex Code mode is a separate stable
153
+ Codex harness surface.
154
+ - Target surface: generic OpenClaw agent runs.
155
+ - Security posture: model code is hostile.
156
+ - User-facing promise: enabling code mode never silently falls back to broad
157
+ direct tool exposure.
158
+
159
+ ## Scope
160
+
161
+ Code mode owns the model-facing orchestration shape for a prepared run. It does
162
+ not own model selection, channel behavior, auth, tool policy, or tool
163
+ implementations.
164
+
165
+ In scope:
166
+
167
+ - model-visible `exec` and `wait` tool definitions
168
+ - hidden tool catalog construction
169
+ - JavaScript and TypeScript guest execution
170
+ - QuickJS-WASI worker runtime
171
+ - host callbacks for catalog search, schema describe, and tool call
172
+ - resumable state for suspended guest programs
173
+ - output, timeout, memory, pending-call, and snapshot limits
174
+ - telemetry and trajectory projection for nested tool calls
175
+
176
+ Out of scope:
177
+
178
+ - provider-native remote code execution
179
+ - shell execution semantics
180
+ - changing existing tool authorization
181
+ - persistent user-authored scripts
182
+ - package manager, file, network, or module access in guest code
183
+ - direct reuse of Codex Code mode internals
184
+
185
+ Provider-owned tools such as remote Python sandboxes remain separate tools. See
186
+ [Code execution](/tools/code-execution).
187
+
188
+ ## Terms
189
+
190
+ **Code mode** is the OpenClaw runtime mode that hides normal model tools and
191
+ exposes only `exec` and `wait`.
192
+
193
+ **Guest runtime** is the QuickJS-WASI JavaScript VM that evaluates model code.
194
+
195
+ **Host bridge** is the narrow JSON-compatible callback surface from guest code
196
+ back into OpenClaw.
197
+
198
+ **Catalog** is the run-scoped list of effective tools after normal tool policy,
199
+ plugin, MCP, and client-tool resolution.
200
+
201
+ **Nested tool call** is a tool call made from guest code through the host bridge.
202
+
203
+ **Snapshot** is serialized QuickJS-WASI VM state saved so `wait` can continue a
204
+ suspended code-mode run.
205
+
206
+ ## Configuration
207
+
208
+ `tools.codeMode.enabled` is the activation gate. Setting other code-mode fields
209
+ does not enable the feature.
210
+
211
+ Supported fields:
212
+
213
+ - `enabled`: boolean. Default `false`. Enables code mode only when `true`.
214
+ - `runtime`: `"quickjs-wasi"`. Only supported runtime.
215
+ - `mode`: `"only"`. Exposes `exec` and `wait`, hides normal model tools.
216
+ - `languages`: array of `"javascript"` and `"typescript"`. Default includes
217
+ both.
218
+ - `timeoutMs`: wall-clock cap for one `exec` or `wait`. Default `10000`.
219
+ Runtime clamp: `100` to `60000`.
220
+ - `memoryLimitBytes`: QuickJS heap cap. Default `67108864`. Runtime clamp:
221
+ `1048576` to `1073741824`.
222
+ - `maxOutputBytes`: cap for returned text, JSON, and logs. Default `65536`.
223
+ Runtime clamp: `1024` to `10485760`.
224
+ - `maxSnapshotBytes`: cap for serialized VM snapshots. Default `10485760`.
225
+ Runtime clamp: `1024` to `268435456`.
226
+ - `maxPendingToolCalls`: cap for concurrent nested tool calls. Default `16`.
227
+ Runtime clamp: `1` to `128`.
228
+ - `snapshotTtlSeconds`: how long a suspended VM can be resumed. Default `900`.
229
+ Runtime clamp: `1` to `86400`.
230
+ - `searchDefaultLimit`: default hidden-catalog search result count. Default `8`.
231
+ Runtime clamps this to `maxSearchLimit`.
232
+ - `maxSearchLimit`: maximum hidden-catalog search result count. Default `50`.
233
+ Runtime clamp: `1` to `50`.
234
+
235
+ If code mode is enabled but QuickJS-WASI cannot load, OpenClaw fails closed for
236
+ that run. It does not silently expose normal tools as a fallback.
237
+
238
+ ## Activation
239
+
240
+ Code mode is evaluated after the effective tool policy is known and before the
241
+ final model request is assembled.
242
+
243
+ Activation order:
244
+
245
+ 1. Resolve the agent, model, provider, sandbox, channel, sender, and run policy.
246
+ 2. Build the effective OpenClaw tool list.
247
+ 3. Add eligible plugin, MCP, and client tools.
248
+ 4. Apply allow and deny policy.
249
+ 5. If `tools.codeMode.enabled` is false, continue with normal tool exposure.
250
+ 6. If enabled and tools are active for the run, register the effective tools in
251
+ the code-mode catalog.
252
+ 7. Remove all normal tools from the model-visible tool list.
253
+ 8. Add code-mode `exec` and `wait`.
254
+
255
+ Runs that intentionally have no tools, such as raw model calls, `disableTools`,
256
+ or an empty allowlist, do not activate the code-mode surface even if the config
257
+ contains `tools.codeMode.enabled: true`.
258
+
259
+ The code-mode catalog is run-scoped. It must not leak tools from another agent,
260
+ session, sender, or run.
261
+
262
+ ## Model-visible tools
263
+
264
+ When code mode is active, the model sees exactly these top-level tools:
265
+
266
+ - `exec`
267
+ - `wait`
268
+
269
+ All other enabled tools are hidden from the model-facing tool list and registered
270
+ in the code-mode catalog.
271
+
272
+ The model should use `exec` for tool orchestration, data joining, loops,
273
+ parallel nested calls, and structured transformations. The model should use
274
+ `wait` only when `exec` returns a resumable `waiting` result.
275
+
276
+ ## `exec`
277
+
278
+ `exec` starts a code-mode cell and returns one result. The input code is model
279
+ generated and must be treated as hostile.
280
+
281
+ Input:
282
+
283
+ ```typescript
284
+ type CodeModeExecInput = {
285
+ code?: string;
286
+ command?: string;
287
+ language?: "javascript" | "typescript";
288
+ };
289
+ ```
290
+
291
+ Input rules:
292
+
293
+ - One of `code` or `command` must be non-empty.
294
+ - `code` is the documented model-facing field.
295
+ - `command` is accepted as an exec-compatible alias for hook policies and
296
+ trusted rewrites; when both are present, the values must match.
297
+ - Outer code-mode `exec` hook events include `toolKind: "code_mode_exec"` and
298
+ include `toolInputKind: "javascript" | "typescript"` when the input language
299
+ is known, so policies can distinguish code-mode cells from shell-style `exec`
300
+ calls that share the same tool name.
301
+ - `language` defaults to `"javascript"`.
302
+ - If `language` is `"typescript"`, OpenClaw transpiles before evaluation.
303
+ - `exec` rejects `import`, `require`, dynamic import, and module-loader patterns
304
+ in v1.
305
+ - `exec` does not expose the normal shell `exec` implementation recursively.
306
+
307
+ Result:
308
+
309
+ ```typescript
310
+ type CodeModeResult = CodeModeCompletedResult | CodeModeWaitingResult | CodeModeFailedResult;
311
+
312
+ type CodeModeCompletedResult = {
313
+ status: "completed";
314
+ value: unknown;
315
+ output?: CodeModeOutput[];
316
+ telemetry: CodeModeTelemetry;
317
+ };
318
+
319
+ type CodeModeWaitingResult = {
320
+ status: "waiting";
321
+ runId: string;
322
+ reason: "pending_tools" | "yield";
323
+ pendingToolCalls?: CodeModePendingToolCall[];
324
+ output?: CodeModeOutput[];
325
+ telemetry: CodeModeTelemetry;
326
+ };
327
+
328
+ type CodeModeFailedResult = {
329
+ status: "failed";
330
+ error: string;
331
+ code?: CodeModeErrorCode;
332
+ output?: CodeModeOutput[];
333
+ telemetry: CodeModeTelemetry;
334
+ };
335
+ ```
336
+
337
+ `exec` returns `waiting` when the QuickJS VM suspends with resumable state that
338
+ still needs a model-visible continuation. The result includes a `runId` for
339
+ `wait`. Namespace bridge calls, including MCP namespace calls, are auto-drained
340
+ inside the same `exec`/`wait` call while they are ready, so a compact code block
341
+ can inspect `$api()` and call an MCP tool without forcing one model tool call per
342
+ namespace await.
343
+
344
+ `exec` returns `completed` only when the guest VM has no pending work and the
345
+ final value is JSON-compatible after OpenClaw's output adapter runs.
346
+
347
+ ## `wait`
348
+
349
+ `wait` continues a suspended code-mode VM.
350
+
351
+ Input:
352
+
353
+ ```typescript
354
+ type CodeModeWaitInput = {
355
+ runId: string;
356
+ };
357
+ ```
358
+
359
+ The output is the same `CodeModeResult` union returned by `exec`.
360
+
361
+ `wait` exists because nested OpenClaw tools can be slow, interactive, approval
362
+ gated, or stream partial updates. The model should not need to keep one long
363
+ `exec` call open while the host waits for external work.
364
+
365
+ QuickJS-WASI snapshot and restore is the v1 resume mechanism:
366
+
367
+ 1. `exec` evaluates code until completion, failure, or suspension.
368
+ 2. On suspension, OpenClaw snapshots the QuickJS VM and records pending host
369
+ work.
370
+ 3. When pending work settles, `wait` restores the VM snapshot.
371
+ 4. OpenClaw re-registers host callbacks by stable names.
372
+ 5. OpenClaw delivers nested tool results into the restored VM.
373
+ 6. OpenClaw drains QuickJS pending jobs.
374
+ 7. `wait` returns `completed`, `failed`, or another `waiting` result.
375
+
376
+ Snapshots are runtime state, not user artifacts. They are size-limited, expired,
377
+ and scoped to the run and session that created them.
378
+
379
+ `wait` fails when:
380
+
381
+ - `runId` is unknown.
382
+ - the snapshot expired.
383
+ - the parent run or session was aborted.
384
+ - the caller is not in the same run/session scope.
385
+ - QuickJS-WASI restore fails.
386
+ - restoring would exceed configured limits.
387
+
388
+ ## Guest runtime API
389
+
390
+ The guest runtime exposes a small global API:
391
+
392
+ ```typescript
393
+ declare const ALL_TOOLS: ToolCatalogEntry[];
394
+ declare const tools: ToolCatalog;
395
+ declare const MCP: Record<string, unknown>;
396
+ declare const namespaces: Record<string, unknown>;
397
+
398
+ declare function text(value: unknown): void;
399
+ declare function json(value: unknown): void;
400
+ declare function yield_control(reason?: string): Promise<void>;
401
+ ```
402
+
403
+ `ALL_TOOLS` is compact metadata for the run-scoped catalog. It does not contain
404
+ full schemas by default.
405
+
406
+ ```typescript
407
+ type ToolCatalogEntry = {
408
+ id: string;
409
+ name: string;
410
+ label?: string;
411
+ description: string;
412
+ source: "openclaw" | "plugin" | "mcp" | "client";
413
+ sourceName?: string;
414
+ };
415
+ ```
416
+
417
+ Full schema is loaded only on demand:
418
+
419
+ ```typescript
420
+ type ToolCatalogEntryWithSchema = ToolCatalogEntry & {
421
+ parameters: unknown;
422
+ };
423
+ ```
424
+
425
+ Catalog helpers:
426
+
427
+ ```typescript
428
+ type ToolCatalog = {
429
+ search(query: string, options?: { limit?: number }): Promise<ToolCatalogEntry[]>;
430
+ describe(id: string): Promise<ToolCatalogEntryWithSchema>;
431
+ call(id: string, input?: unknown): Promise<unknown>;
432
+ [safeToolName: string]: unknown;
433
+ };
434
+ ```
435
+
436
+ Convenience tool functions are installed only for unambiguous safe names:
437
+
438
+ ```typescript
439
+ const files = await tools.search("read local file");
440
+ const fileRead = await tools.describe(files[0].id);
441
+ const content = await tools.call(fileRead.id, { path: "README.md" });
442
+
443
+ // If the hidden catalog has an unambiguous `web_search` entry:
444
+ const hits = await tools.web_search({ query: "OpenClaw code mode" });
445
+ ```
446
+
447
+ MCP catalog entries are not callable through `tools.call(...)` or convenience
448
+ functions in code mode. They are exposed only through the generated `MCP`
449
+ namespace. TypeScript-style declaration files are available through the
450
+ read-only `API` virtual file surface, so agents can inspect MCP signatures
451
+ without adding MCP schemas to the prompt:
452
+
453
+ ```typescript
454
+ const files = await API.list("mcp");
455
+ const githubApi = await API.read("mcp/github.d.ts");
456
+
457
+ const issue = await MCP.github.createIssue({
458
+ owner: "openclaw",
459
+ repo: "openclaw",
460
+ title: "Investigate gateway logs",
461
+ });
462
+
463
+ const snapshot = await MCP.chromeDevtools.takeSnapshot({ output: "markdown" });
464
+ const resource = await MCP.docs.resources.read({ uri: "memo://one" });
465
+ const prompt = await MCP.docs.prompts.get({
466
+ name: "brief",
467
+ arguments: { topic: "release" },
468
+ });
469
+ ```
470
+
471
+ `API.read("mcp/<server>.d.ts")` returns compact declarations inferred from MCP
472
+ tool metadata:
473
+
474
+ ```typescript
475
+ type McpToolResult = {
476
+ content?: unknown[];
477
+ structuredContent?: unknown;
478
+ isError?: boolean;
479
+ [key: string]: unknown;
480
+ };
481
+
482
+ declare namespace MCP.github {
483
+ /** Return this TypeScript-style API header. */
484
+ function $api(toolName?: string, options?: { schema?: boolean }): Promise<McpApiHeader>;
485
+
486
+ /**
487
+ * Create a GitHub issue.
488
+ * @param owner Repository owner
489
+ * @param repo Repository name
490
+ * @param title Issue title
491
+ */
492
+ function createIssue(input: {
493
+ owner: string;
494
+ repo: string;
495
+ title: string;
496
+ body?: string;
497
+ }): Promise<McpToolResult>;
498
+ }
499
+ ```
500
+
501
+ The declaration files are virtual, not files written under the workspace or
502
+ state directory. For each code-mode `exec` call, OpenClaw builds the run-scoped
503
+ tool catalog, keeps the visible MCP entries, renders `mcp/index.d.ts` plus one
504
+ `mcp/<server>.d.ts` declaration per visible server, and injects that small
505
+ read-only table into the QuickJS worker. Guest code sees only the `API` object:
506
+ `API.list(prefix?)` returns file metadata and `API.read(path)` returns the
507
+ selected declaration content. Unknown paths and `.` / `..` segments are rejected.
508
+
509
+ This keeps large MCP schemas out of the model prompt. The agent learns that the
510
+ virtual API exists from the `exec` tool description, reads only the needed
511
+ declaration file, and then calls `MCP.<server>.<tool>()` with one object argument.
512
+ `MCP.<server>.$api()` remains available as an inline fallback when the agent
513
+ needs a single-tool schema response inside the program.
514
+
515
+ The guest runtime must not expose host objects directly. Inputs and outputs cross
516
+ the bridge as JSON-compatible values with explicit size caps.
517
+
518
+ ## Internal namespaces
519
+
520
+ Internal namespaces give code mode a concise domain API without adding more
521
+ model-visible tools. A loader-owned integration can register a namespace such
522
+ as `Issues`, `Fictions`, or `Calendar`; guest code then calls that namespace
523
+ inside the QuickJS program while OpenClaw still shows only `exec` and `wait` to
524
+ the model.
525
+
526
+ Namespaces are internal for now. There is no public plugin SDK namespace API:
527
+ external plugin namespaces need a loader-owned contract so plugin identity,
528
+ installed manifests, auth state, and cached catalog descriptors cannot drift
529
+ from the plugin tools that back the namespace. Core code mode owns only the
530
+ sandbox, serialization, catalog gating, and bridge dispatch.
531
+
532
+ Guest code can then use either the direct global or the `namespaces` map:
533
+
534
+ ```javascript
535
+ const open = await Issues.list({ state: "open" });
536
+ const alsoOpen = await namespaces.Issues.list({ state: "open" });
537
+ return { count: open.length, alsoCount: alsoOpen.length };
538
+ ```
539
+
540
+ ### Registry lifecycle
541
+
542
+ The namespace registry is process-local and keyed by namespace id. A typical
543
+ run follows this path:
544
+
545
+ 1. A trusted loader calls `registerCodeModeNamespaceForPlugin(pluginId, registration)`.
546
+ 2. Code mode creates the hidden `ToolSearchRuntime` for the run and reads its
547
+ run-scoped catalog.
548
+ 3. `createCodeModeNamespaceRuntime(ctx, catalog)` keeps only registrations
549
+ whose `requiredToolNames` are all visible and owned by the same `pluginId`.
550
+ 4. Each visible namespace calls `createScope(ctx)` for the current run. The
551
+ scope receives run context such as `agentId`, `sessionKey`, `sessionId`,
552
+ `runId`, config, and abort state.
553
+ 5. Scope data is serialized into a plain descriptor and injected into QuickJS as
554
+ direct globals and `namespaces.<globalName>`.
555
+ 6. Guest calls suspend through the worker bridge, resolve the namespace path on
556
+ the host, map the call to a declared plugin-owned catalog tool, and execute
557
+ that tool through `ToolSearchRuntime.call`.
558
+ 7. OpenClaw auto-drains ready namespace bridge calls inside the active
559
+ `exec`/`wait` tool call. If namespace work is still pending at the timeout or
560
+ the guest yields explicitly, `wait` resumes the same namespace runtime later.
561
+ 8. Plugin rollback or uninstall calls `clearCodeModeNamespacesForPlugin(pluginId)`
562
+ so stale globals do not survive a failed plugin load.
563
+
564
+ The important invariant: namespace calls are catalog tool calls. They use the
565
+ same policy hooks, approvals, abort handling, telemetry, transcript projection,
566
+ and suspend/resume behavior as `tools.call(...)`.
567
+
568
+ ### Registration shape
569
+
570
+ Register namespaces from the integration that owns the backing tools. Keep the
571
+ scope small and only expose domain verbs that map to declared catalog tools.
572
+
573
+ ```typescript
574
+ import {
575
+ createCodeModeNamespaceTool,
576
+ registerCodeModeNamespaceForPlugin,
577
+ } from "../agents/code-mode-namespaces.js";
578
+
579
+ const pluginId = "github";
580
+
581
+ registerCodeModeNamespaceForPlugin(pluginId, {
582
+ id: "github-issues",
583
+ globalName: "Issues",
584
+ description: "GitHub issue helpers for the current repository.",
585
+ requiredToolNames: ["github_list_issues", "github_update_issue"],
586
+ prompt: "Use Issues.list(params) and Issues.update(number, patch).",
587
+ createScope: (ctx) => ({
588
+ repository: ctx.config,
589
+ list: createCodeModeNamespaceTool("github_list_issues", ([params]) => params ?? {}),
590
+ update: createCodeModeNamespaceTool("github_update_issue", ([number, patch]) => ({
591
+ number,
592
+ patch,
593
+ })),
594
+ }),
595
+ });
596
+ ```
597
+
598
+ `createCodeModeNamespaceTool(toolName, inputMapper)` marks a scope member as a
599
+ callable namespace function. The optional `inputMapper` receives the guest
600
+ arguments and returns the input object for the backing catalog tool. Without an
601
+ input mapper, the first guest argument is used, or `{}` when omitted.
602
+
603
+ Raw host functions are rejected before guest code runs:
604
+
605
+ ```typescript
606
+ createScope: () => ({
607
+ // Wrong: this bypasses the catalog tool lifecycle and will be rejected.
608
+ list: async () => githubClient.listIssues(),
609
+ });
610
+ ```
611
+
612
+ ### Ownership and visibility
613
+
614
+ Namespace ownership is bound to the registration caller's `pluginId`.
615
+ `requiredToolNames` is both a visibility gate and an ownership check:
616
+
617
+ - every required tool must exist in the run catalog
618
+ - every required tool must have `sourceName === pluginId`
619
+ - the namespace is hidden when any required tool is absent or owned by another
620
+ plugin
621
+ - each callable path may target only a tool named in `requiredToolNames`
622
+
623
+ This prevents another plugin from exposing a namespace by registering a
624
+ same-named tool. It also keeps namespaces aligned with ordinary agent policy:
625
+ if the run cannot see the backing tools, it cannot see the namespace.
626
+
627
+ For example, a GitHub namespace should live behind a GitHub-owned extension that
628
+ owns GitHub auth, REST or GraphQL clients, rate limits, write approvals, and
629
+ tests. Core code mode should not embed GitHub-specific APIs, token handling, or
630
+ provider policy.
631
+
632
+ ### Scope serialization rules
633
+
634
+ `createScope(ctx)` may return a plain object containing JSON-compatible values,
635
+ arrays, nested objects, and `createCodeModeNamespaceTool(...)` call markers.
636
+ Host objects never enter QuickJS directly.
637
+
638
+ The serializer rejects:
639
+
640
+ - raw functions
641
+ - circular object graphs
642
+ - unsafe path segments: `__proto__`, `constructor`, `prototype`, empty keys, or
643
+ keys containing the internal path separator
644
+ - `globalName` values that are not JavaScript identifiers
645
+ - `globalName` collisions with built-in code-mode globals such as `tools`,
646
+ `namespaces`, `text`, `json`, `yield_control`, or `__openclaw*`
647
+
648
+ Values that cannot be JSON-serialized are converted to JSON-safe fallback
649
+ values before crossing the bridge. Binary data, handles, sockets, clients, and
650
+ class instances should stay behind ordinary catalog tools.
651
+
652
+ ### Prompts
653
+
654
+ The namespace `description` and optional `prompt` are appended to the model
655
+ visible `exec` schema only when the namespace is visible for that run. Use them
656
+ to teach the smallest useful surface:
657
+
658
+ ```typescript
659
+ {
660
+ description: "Fiction production service helpers.",
661
+ prompt:
662
+ "Use Fictions.riskAudit(), Fictions.promoteIfReady(id, status), and Fictions.unpaidOver(amount).",
663
+ }
664
+ ```
665
+
666
+ Keep prompts about the namespace contract, not auth setup, implementation
667
+ history, or unrelated plugin behavior.
668
+
669
+ ### Cleanup
670
+
671
+ Namespaces are process-local registrations. Remove them when the owning plugin
672
+ is disabled, uninstalled, or rolled back:
673
+
674
+ ```typescript
675
+ clearCodeModeNamespacesForPlugin(pluginId);
676
+ ```
677
+
678
+ Use `unregisterCodeModeNamespace(namespaceId)` only when removing one known
679
+ namespace. Tests can call `clearCodeModeNamespacesForTest()` to avoid leaking
680
+ registrations across cases.
681
+
682
+ ### Test checklist
683
+
684
+ Namespace changes should cover the security boundary and the guest behavior:
685
+
686
+ - namespace prompt text appears only when backing tools are visible
687
+ - same-named tools from another `sourceName` do not expose the namespace
688
+ - raw scope functions are rejected
689
+ - forged namespace ids and forged paths are rejected
690
+ - callable paths cannot target undeclared tools
691
+ - nested objects and shared references serialize correctly
692
+ - namespace calls execute through catalog tools and return JSON-safe details
693
+ - failures can be caught by guest code
694
+ - suspended namespace calls resume through `wait`
695
+ - plugin rollback clears the owning namespace registrations
696
+
697
+ Namespaces complement the generic `tools.search` / `tools.call` catalog. Use the
698
+ catalog for arbitrary enabled OpenClaw, plugin, and client tools; use `MCP` for
699
+ MCP tools; use other namespaces for plugin-owned, documented domain APIs where
700
+ concise code is more reliable than repeated schema lookups.
701
+
702
+ ## Output API
703
+
704
+ `text(value)` appends human-readable output to the `output` array.
705
+
706
+ `json(value)` appends a structured output item after JSON-compatible
707
+ serialization.
708
+
709
+ The guest code's final returned value becomes `value` in a `completed` result.
710
+
711
+ Output item:
712
+
713
+ ```typescript
714
+ type CodeModeOutput = { type: "text"; text: string } | { type: "json"; value: unknown };
715
+ ```
716
+
717
+ Output rules:
718
+
719
+ - output order matches guest calls
720
+ - output is capped by `maxOutputBytes`
721
+ - non-serializable values are converted to plain strings or errors
722
+ - binary values are not supported in v1
723
+ - images and files travel through ordinary OpenClaw tools, not through the
724
+ code-mode bridge
725
+
726
+ ## Tool catalog
727
+
728
+ The hidden catalog includes tools after effective policy filtering:
729
+
730
+ 1. OpenClaw core tools.
731
+ 2. Bundled plugin tools.
732
+ 3. External plugin tools.
733
+ 4. MCP tools.
734
+ 5. Client-provided tools for the current run.
735
+
736
+ Catalog ids are stable within one run and deterministic across equivalent tool
737
+ sets when possible.
738
+
739
+ Recommended id shape:
740
+
741
+ ```text
742
+ <source>:<owner>:<tool-name>
743
+ ```
744
+
745
+ Examples:
746
+
747
+ ```text
748
+ openclaw:core:message
749
+ plugin:browser:browser_request
750
+ mcp:github:create_issue
751
+ client:app:select_file
752
+ ```
753
+
754
+ The catalog omits code-mode control tools:
755
+
756
+ - `exec`
757
+ - `wait`
758
+ - `tool_search_code`
759
+ - `tool_search`
760
+ - `tool_describe`
761
+ - `tool_call`
762
+
763
+ This prevents recursion and keeps the model-facing contract narrow.
764
+
765
+ MCP entries stay in the run-scoped catalog so policy, approvals, hooks,
766
+ telemetry, transcript projection, and exact tool ids remain shared with normal
767
+ tool execution. The guest-facing `ALL_TOOLS`, `tools.search(...)`,
768
+ `tools.describe(...)`, and `tools.call(...)` views omit MCP entries. The
769
+ generated `MCP.<server>.<tool>({ ...input })` namespace resolves back to the
770
+ exact catalog id and then dispatches through the same executor path.
771
+
772
+ ## Tool Search interaction
773
+
774
+ Code mode supersedes the OpenClaw Tool Search model surface for runs where it is
775
+ active.
776
+
777
+ When `tools.codeMode.enabled` is true and code mode activates:
778
+
779
+ - OpenClaw does not expose `tool_search_code`, `tool_search`, `tool_describe`,
780
+ or `tool_call` as model-visible tools.
781
+ - The same cataloging idea moves inside the guest runtime.
782
+ - The guest runtime receives compact `ALL_TOOLS` metadata and search, describe,
783
+ and call helpers for non-MCP tools.
784
+ - MCP calls use the generated `MCP` namespace and its `$api()` headers instead
785
+ of `tools.call(...)`.
786
+ - Nested calls dispatch through the same OpenClaw executor path that Tool Search
787
+ uses.
788
+
789
+ The existing [Tool Search](/tools/tool-search) page describes the OpenClaw compact
790
+ catalog bridge. Code mode is the generic OpenClaw alternative for runs that can
791
+ use `exec` and `wait`.
792
+
793
+ ## Tool names and collisions
794
+
795
+ The model-visible `exec` tool is the code-mode tool. If the normal OpenClaw
796
+ shell `exec` tool is enabled, it is hidden from the model and cataloged like any
797
+ other tool.
798
+
799
+ Inside the guest runtime:
800
+
801
+ - `tools.call("openclaw:core:exec", input)` can call the shell exec tool if
802
+ policy allows it.
803
+ - `tools.exec(...)` is installed only if the shell exec catalog entry has an
804
+ unambiguous safe name.
805
+ - the code-mode `exec` tool is never recursively available through `tools`.
806
+
807
+ If two tools normalize to the same safe convenience name, OpenClaw omits the
808
+ convenience function and requires `tools.call(id, input)`.
809
+
810
+ ## Nested tool execution
811
+
812
+ Every nested tool call crosses the host bridge and re-enters OpenClaw.
813
+
814
+ Nested execution preserves:
815
+
816
+ - active agent id
817
+ - session id and session key
818
+ - sender and channel context
819
+ - sandbox policy
820
+ - approval policy
821
+ - plugin `before_tool_call` hooks
822
+ - abort signal
823
+ - streaming updates where available
824
+ - trajectory and audit events
825
+
826
+ Nested calls project into the transcript as real tool calls so support bundles
827
+ can show what happened. The projection identifies the parent code-mode tool call
828
+ and the nested tool id.
829
+
830
+ Parallel nested calls are allowed up to `maxPendingToolCalls`.
831
+
832
+ ## Runtime state
833
+
834
+ Each code-mode run has a state machine:
835
+
836
+ - `running`: VM is executing or nested calls are in flight.
837
+ - `waiting`: VM snapshot exists and can be resumed with `wait`.
838
+ - `completed`: final value returned; snapshot deleted.
839
+ - `failed`: error returned; snapshot deleted.
840
+ - `expired`: snapshot or pending state exceeded retention; cannot resume.
841
+ - `aborted`: parent run/session cancelled; snapshot deleted.
842
+
843
+ State is scoped by agent run, session, and tool call id. A `wait` call from a
844
+ different run or session fails.
845
+
846
+ Snapshot storage is bounded:
847
+
848
+ - maximum snapshot bytes per run
849
+ - maximum live snapshots per process
850
+ - snapshot TTL
851
+ - cleanup on run end
852
+ - cleanup on Gateway shutdown where persistence is not supported
853
+
854
+ ## QuickJS-WASI runtime
855
+
856
+ OpenClaw loads `quickjs-wasi` as a direct dependency in the owning package. The
857
+ runtime does not rely on a transitive copy installed for proxy, PAC, or other
858
+ unrelated dependencies.
859
+
860
+ Runtime responsibilities:
861
+
862
+ - compile or load the QuickJS-WASI WebAssembly module
863
+ - create one isolated VM per code-mode run or resume
864
+ - register host callbacks by stable names
865
+ - set memory and interrupt limits
866
+ - evaluate JavaScript
867
+ - drain pending jobs
868
+ - snapshot suspended VM state
869
+ - restore snapshots for `wait`
870
+ - dispose VM handles and snapshots after terminal states
871
+
872
+ The runtime executes outside OpenClaw's main event loop in a worker. A guest
873
+ infinite loop must not block the Gateway process indefinitely.
874
+
875
+ ## TypeScript
876
+
877
+ TypeScript support is a source transform only:
878
+
879
+ - accepted input: one TypeScript code string
880
+ - output: JavaScript string evaluated by QuickJS-WASI
881
+ - no typechecking
882
+ - no module resolution
883
+ - no `import` or `require` in v1
884
+ - diagnostics are returned as `failed` results
885
+
886
+ The TypeScript compiler is loaded lazily only for TypeScript cells. Plain
887
+ JavaScript cells and disabled code mode do not load the compiler.
888
+
889
+ The transform should preserve useful line numbers where feasible.
890
+
891
+ ## Security boundary
892
+
893
+ Model code is hostile. The runtime uses defense in depth:
894
+
895
+ - run QuickJS-WASI outside the main event loop
896
+ - load `quickjs-wasi` as a direct dependency, not through Codex or a transitive
897
+ package
898
+ - no filesystem, network, subprocess, module import, environment variables, or
899
+ host global objects in the guest
900
+ - use QuickJS memory and interrupt limits
901
+ - enforce parent-process wall-clock timeout
902
+ - enforce output, snapshot, log, and pending-call caps
903
+ - serialize host bridge values through a narrow JSON adapter
904
+ - convert host errors into plain guest errors, never host realm objects
905
+ - drop snapshots on timeout, abort, session end, or expiry
906
+ - reject recursive access to `exec`, `wait`, and Tool Search control tools
907
+ - prevent convenience-name collisions from shadowing catalog helpers
908
+
909
+ The sandbox is one security layer. Operators can still need OS-level hardening
910
+ for high-risk deployments.
911
+
912
+ ## Error codes
913
+
914
+ ```typescript
915
+ type CodeModeErrorCode =
916
+ | "runtime_unavailable"
917
+ | "invalid_config"
918
+ | "invalid_input"
919
+ | "unsupported_language"
920
+ | "typescript_transform_failed"
921
+ | "module_access_denied"
922
+ | "timeout"
923
+ | "memory_limit_exceeded"
924
+ | "output_limit_exceeded"
925
+ | "snapshot_limit_exceeded"
926
+ | "snapshot_expired"
927
+ | "snapshot_restore_failed"
928
+ | "too_many_pending_tool_calls"
929
+ | "nested_tool_failed"
930
+ | "aborted"
931
+ | "internal_error";
932
+ ```
933
+
934
+ Errors returned to the guest are plain data. Host `Error` instances, stack
935
+ objects, prototypes, and host functions do not cross into QuickJS.
936
+
937
+ ## Telemetry
938
+
939
+ Code mode reports:
940
+
941
+ - visible tool names sent to the model
942
+ - hidden catalog size and source breakdown
943
+ - `exec` and `wait` counts
944
+ - nested search, describe, and call counts
945
+ - nested tool ids called
946
+ - timeout, memory, snapshot, and output cap failures
947
+ - snapshot lifecycle events
948
+
949
+ Telemetry must not include secrets, raw environment values, or unredacted tool
950
+ inputs beyond existing OpenClaw trajectory policy.
951
+
952
+ ## Debugging
953
+
954
+ Use targeted model transport logging when code mode behaves differently from a
955
+ normal tool run:
956
+
957
+ ```bash
958
+ OPENCLAW_DEBUG_CODE_MODE=1 \
959
+ OPENCLAW_DEBUG_MODEL_TRANSPORT=1 \
960
+ OPENCLAW_DEBUG_MODEL_PAYLOAD=tools \
961
+ OPENCLAW_DEBUG_SSE=events \
962
+ openclaw gateway
963
+ ```
964
+
965
+ For payload-shape debugging, use `OPENCLAW_DEBUG_MODEL_PAYLOAD=full-redacted`.
966
+ This logs a capped, redacted JSON snapshot of the model request; it should only
967
+ be used while debugging because prompts and message text can still appear.
968
+
969
+ For stream debugging, use `OPENCLAW_DEBUG_SSE=peek` to log the first five
970
+ redacted SSE events. Code mode also fails closed if the final provider payload
971
+ does not contain exactly `exec` and `wait` after the code-mode surface has
972
+ activated.
973
+
974
+ ## Implementation layout
975
+
976
+ Implementation units:
977
+
978
+ - config contract: `tools.codeMode`
979
+ - catalog builder: effective tools to compact entries and id map
980
+ - model-surface adapter: replace visible tools with `exec` and `wait`
981
+ - QuickJS-WASI runtime adapter: load, eval, snapshot, restore, dispose
982
+ - worker supervisor: timeout, abort, crash isolation
983
+ - bridge adapter: JSON-safe host callbacks and result delivery
984
+ - TypeScript transform adapter
985
+ - snapshot store: TTL, size caps, run/session scoping
986
+ - trajectory projection for nested tool calls
987
+ - telemetry counters and diagnostics
988
+
989
+ The implementation reuses catalog and executor concepts from Tool Search, but
990
+ does not use the `node:vm` child as the sandbox.
991
+
992
+ ## Validation checklist
993
+
994
+ Code mode coverage should prove:
995
+
996
+ - disabled config leaves existing tool exposure unchanged
997
+ - object config without `enabled: true` leaves code mode disabled
998
+ - enabled config exposes only `exec` and `wait` to the model when tools are
999
+ active for the run
1000
+ - raw no-tool runs, `disableTools`, and empty allowlists do not trigger code-mode
1001
+ payload enforcement
1002
+ - all effective non-MCP tools appear in `ALL_TOOLS`
1003
+ - denied tools do not appear in `ALL_TOOLS`
1004
+ - `tools.search`, `tools.describe`, and `tools.call` work for OpenClaw tools
1005
+ - `API.list("mcp")` and `API.read("mcp/<server>.d.ts")` expose TypeScript-style
1006
+ MCP declarations without a bridge/tool call
1007
+ - MCP namespace `$api()` remains available as an inline fallback for schemas
1008
+ - MCP namespace calls work for visible MCP tools with one object input, while
1009
+ direct MCP catalog entries are absent from `tools.*`
1010
+ - Tool Search control tools are hidden from both the model surface and the hidden
1011
+ catalog
1012
+ - nested calls preserve approval and hook behavior
1013
+ - shell `exec` is hidden from the model but callable by catalog id when allowed
1014
+ - recursive code-mode `exec` and `wait` are not callable from guest code
1015
+ - TypeScript input is transformed and evaluated without loading TypeScript on
1016
+ disabled or JavaScript-only paths
1017
+ - `import`, `require`, filesystem, network, and environment access fail
1018
+ - infinite loops time out and cannot block the Gateway
1019
+ - memory cap failures terminate the guest VM
1020
+ - output and snapshot caps are enforced for completed and suspended calls
1021
+ - `wait` resumes a suspended snapshot and returns the final value
1022
+ - expired, aborted, wrong-session, and unknown `runId` values fail
1023
+ - transcript replay and persistence preserve code-mode control calls
1024
+ - transcript and telemetry show nested tool calls clearly
1025
+
1026
+ ## E2E test plan
1027
+
1028
+ Run these as integration or end-to-end tests when changing the runtime:
1029
+
1030
+ 1. Start a Gateway with `tools.codeMode.enabled: false`.
1031
+ 2. Send an agent turn with a small direct tool set.
1032
+ 3. Assert the model-visible tools are unchanged.
1033
+ 4. Restart with `tools.codeMode.enabled: true`.
1034
+ 5. Send an agent turn with OpenClaw, plugin, MCP, and client test tools.
1035
+ 6. Assert the model-visible tool list is exactly `exec`, `wait`.
1036
+ 7. In `exec`, read `ALL_TOOLS` and assert the effective test tools are present.
1037
+ 8. In `exec`, call OpenClaw/plugin/client tools through `tools.search`,
1038
+ `tools.describe`, and `tools.call`.
1039
+ 9. In `exec`, call `API.list("mcp")` and `API.read("mcp/<server>.d.ts")` and
1040
+ assert the declaration files describe visible MCP tools.
1041
+ 10. In `exec`, call MCP tools through `MCP.<server>.<tool>({ ...input })` and
1042
+ assert direct MCP catalog entries are absent from `ALL_TOOLS` and `tools.*`.
1043
+ 11. Assert denied tools are absent and cannot be called by guessed id.
1044
+ 12. Start a nested tool call that resolves after `exec` returns `waiting`.
1045
+ 13. Call `wait` and assert the restored VM receives the tool result.
1046
+ 14. Assert the final answer contains output produced after restore.
1047
+ 15. Assert timeout, abort, and snapshot expiry clean up runtime state.
1048
+ 16. Export trajectory and assert nested calls are visible under the parent
1049
+ code-mode call.
1050
+
1051
+ Docs-only changes to this page should still run `pnpm check:docs`.
1052
+
1053
+ ## Related
1054
+
1055
+ - [Tool Search](/tools/tool-search)
1056
+ - [Agent runtimes](/concepts/agent-runtimes)
1057
+ - [Exec tool](/tools/exec)
1058
+ - [Code execution](/tools/code-execution)