@quantumclaw/quantumclaw 2026.3.22

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 (821) hide show
  1. package/CHANGELOG.md +4601 -0
  2. package/LICENSE +21 -0
  3. package/README.md +559 -0
  4. package/assets/avatar-placeholder.svg +19 -0
  5. package/assets/chrome-extension/icons/icon128.png +0 -0
  6. package/assets/chrome-extension/icons/icon16.png +0 -0
  7. package/assets/chrome-extension/icons/icon32.png +0 -0
  8. package/assets/chrome-extension/icons/icon48.png +0 -0
  9. package/assets/dmg-background-small.png +0 -0
  10. package/assets/dmg-background.png +0 -0
  11. package/docs/.i18n/README.md +31 -0
  12. package/docs/.i18n/glossary.ja-JP.json +14 -0
  13. package/docs/.i18n/glossary.zh-CN.json +302 -0
  14. package/docs/.i18n/ja-JP.tm.jsonl +0 -0
  15. package/docs/assets/install-script.svg +1 -0
  16. package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
  17. package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
  18. package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
  19. package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
  20. package/docs/assets/macos-onboarding/05-permissions.png +0 -0
  21. package/docs/assets/pixel-lobster.svg +60 -0
  22. package/docs/assets/quantumclaw-logo-text-dark.png +0 -0
  23. package/docs/assets/quantumclaw-logo-text-dark.svg +418 -0
  24. package/docs/assets/quantumclaw-logo-text.png +0 -0
  25. package/docs/assets/quantumclaw-logo-text.svg +418 -0
  26. package/docs/assets/showcase/agents-ui.jpg +0 -0
  27. package/docs/assets/showcase/bambu-cli.png +0 -0
  28. package/docs/assets/showcase/codexmonitor.png +0 -0
  29. package/docs/assets/showcase/gohome-grafana.png +0 -0
  30. package/docs/assets/showcase/ios-testflight.jpg +0 -0
  31. package/docs/assets/showcase/oura-health.png +0 -0
  32. package/docs/assets/showcase/padel-cli.svg +11 -0
  33. package/docs/assets/showcase/padel-screenshot.jpg +0 -0
  34. package/docs/assets/showcase/papla-tts.jpg +0 -0
  35. package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
  36. package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
  37. package/docs/assets/showcase/roborock-status.svg +13 -0
  38. package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
  39. package/docs/assets/showcase/snag.png +0 -0
  40. package/docs/assets/showcase/tesco-shop.jpg +0 -0
  41. package/docs/assets/showcase/wienerlinien.png +0 -0
  42. package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
  43. package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
  44. package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
  45. package/docs/assets/sponsors/blacksmith.svg +14 -0
  46. package/docs/assets/sponsors/convex.svg +16 -0
  47. package/docs/assets/sponsors/openai.svg +3 -0
  48. package/docs/assets/sponsors/vercel.svg +5 -0
  49. package/docs/auth-credential-semantics.md +53 -0
  50. package/docs/automation/auth-monitoring.md +44 -0
  51. package/docs/automation/cron-jobs.md +727 -0
  52. package/docs/automation/cron-vs-heartbeat.md +286 -0
  53. package/docs/automation/gmail-pubsub.md +256 -0
  54. package/docs/automation/hooks.md +1056 -0
  55. package/docs/automation/poll.md +86 -0
  56. package/docs/automation/standing-orders.md +251 -0
  57. package/docs/automation/troubleshooting.md +122 -0
  58. package/docs/automation/webhook.md +217 -0
  59. package/docs/brave-search.md +93 -0
  60. package/docs/channels/bluebubbles.md +347 -0
  61. package/docs/channels/broadcast-groups.md +442 -0
  62. package/docs/channels/channel-routing.md +139 -0
  63. package/docs/channels/discord.md +1229 -0
  64. package/docs/channels/feishu.md +747 -0
  65. package/docs/channels/googlechat.md +261 -0
  66. package/docs/channels/group-messages.md +84 -0
  67. package/docs/channels/groups.md +379 -0
  68. package/docs/channels/imessage.md +367 -0
  69. package/docs/channels/index.md +47 -0
  70. package/docs/channels/irc.md +242 -0
  71. package/docs/channels/line.md +194 -0
  72. package/docs/channels/location.md +56 -0
  73. package/docs/channels/matrix.md +677 -0
  74. package/docs/channels/mattermost.md +427 -0
  75. package/docs/channels/msteams.md +780 -0
  76. package/docs/channels/nextcloud-talk.md +138 -0
  77. package/docs/channels/nostr.md +249 -0
  78. package/docs/channels/pairing.md +114 -0
  79. package/docs/channels/signal.md +329 -0
  80. package/docs/channels/slack.md +603 -0
  81. package/docs/channels/synology-chat.md +134 -0
  82. package/docs/channels/telegram.md +987 -0
  83. package/docs/channels/tlon.md +276 -0
  84. package/docs/channels/troubleshooting.md +118 -0
  85. package/docs/channels/twitch.md +379 -0
  86. package/docs/channels/whatsapp.md +460 -0
  87. package/docs/channels/zalo.md +243 -0
  88. package/docs/channels/zalouser.md +181 -0
  89. package/docs/ci.md +55 -0
  90. package/docs/cli/acp.md +288 -0
  91. package/docs/cli/agent.md +29 -0
  92. package/docs/cli/agents.md +123 -0
  93. package/docs/cli/approvals.md +50 -0
  94. package/docs/cli/backup.md +76 -0
  95. package/docs/cli/browser.md +106 -0
  96. package/docs/cli/channels.md +102 -0
  97. package/docs/cli/clawbot.md +21 -0
  98. package/docs/cli/completion.md +35 -0
  99. package/docs/cli/config.md +295 -0
  100. package/docs/cli/configure.md +36 -0
  101. package/docs/cli/cron.md +77 -0
  102. package/docs/cli/daemon.md +53 -0
  103. package/docs/cli/dashboard.md +22 -0
  104. package/docs/cli/devices.md +139 -0
  105. package/docs/cli/directory.md +63 -0
  106. package/docs/cli/dns.md +23 -0
  107. package/docs/cli/docs.md +15 -0
  108. package/docs/cli/doctor.md +48 -0
  109. package/docs/cli/gateway.md +235 -0
  110. package/docs/cli/health.md +21 -0
  111. package/docs/cli/hooks.md +329 -0
  112. package/docs/cli/index.md +1150 -0
  113. package/docs/cli/logs.md +28 -0
  114. package/docs/cli/memory.md +66 -0
  115. package/docs/cli/message.md +278 -0
  116. package/docs/cli/models.md +81 -0
  117. package/docs/cli/node.md +127 -0
  118. package/docs/cli/nodes.md +75 -0
  119. package/docs/cli/onboard.md +157 -0
  120. package/docs/cli/pairing.md +32 -0
  121. package/docs/cli/plugins.md +210 -0
  122. package/docs/cli/qr.md +46 -0
  123. package/docs/cli/reset.md +20 -0
  124. package/docs/cli/sandbox.md +197 -0
  125. package/docs/cli/secrets.md +188 -0
  126. package/docs/cli/security.md +79 -0
  127. package/docs/cli/sessions.md +110 -0
  128. package/docs/cli/setup.md +29 -0
  129. package/docs/cli/skills.md +36 -0
  130. package/docs/cli/status.md +30 -0
  131. package/docs/cli/system.md +60 -0
  132. package/docs/cli/tui.md +30 -0
  133. package/docs/cli/uninstall.md +20 -0
  134. package/docs/cli/update.md +103 -0
  135. package/docs/cli/voicecall.md +34 -0
  136. package/docs/cli/webhooks.md +25 -0
  137. package/docs/concepts/agent-loop.md +148 -0
  138. package/docs/concepts/agent-workspace.md +236 -0
  139. package/docs/concepts/agent.md +122 -0
  140. package/docs/concepts/architecture.md +137 -0
  141. package/docs/concepts/compaction.md +123 -0
  142. package/docs/concepts/context-engine.md +268 -0
  143. package/docs/concepts/context.md +172 -0
  144. package/docs/concepts/delegate-architecture.md +296 -0
  145. package/docs/concepts/features.md +73 -0
  146. package/docs/concepts/markdown-formatting.md +130 -0
  147. package/docs/concepts/memory.md +108 -0
  148. package/docs/concepts/messages.md +154 -0
  149. package/docs/concepts/model-failover.md +152 -0
  150. package/docs/concepts/model-providers.md +607 -0
  151. package/docs/concepts/models.md +225 -0
  152. package/docs/concepts/multi-agent.md +552 -0
  153. package/docs/concepts/oauth.md +158 -0
  154. package/docs/concepts/presence.md +102 -0
  155. package/docs/concepts/queue.md +89 -0
  156. package/docs/concepts/retry.md +69 -0
  157. package/docs/concepts/session-pruning.md +121 -0
  158. package/docs/concepts/session-tool.md +242 -0
  159. package/docs/concepts/session.md +310 -0
  160. package/docs/concepts/streaming.md +155 -0
  161. package/docs/concepts/system-prompt.md +132 -0
  162. package/docs/concepts/timezone.md +91 -0
  163. package/docs/concepts/typebox.md +291 -0
  164. package/docs/concepts/typing-indicators.md +68 -0
  165. package/docs/concepts/usage-tracking.md +35 -0
  166. package/docs/date-time.md +128 -0
  167. package/docs/debug/node-issue.md +85 -0
  168. package/docs/diagnostics/flags.md +91 -0
  169. package/docs/docs.json +2078 -0
  170. package/docs/gateway/authentication.md +179 -0
  171. package/docs/gateway/background-process.md +97 -0
  172. package/docs/gateway/bonjour.md +177 -0
  173. package/docs/gateway/bridge-protocol.md +91 -0
  174. package/docs/gateway/cli-backends.md +225 -0
  175. package/docs/gateway/configuration-examples.md +651 -0
  176. package/docs/gateway/configuration-reference.md +3123 -0
  177. package/docs/gateway/configuration.md +633 -0
  178. package/docs/gateway/discovery.md +123 -0
  179. package/docs/gateway/doctor.md +362 -0
  180. package/docs/gateway/gateway-lock.md +34 -0
  181. package/docs/gateway/health.md +44 -0
  182. package/docs/gateway/heartbeat.md +393 -0
  183. package/docs/gateway/index.md +261 -0
  184. package/docs/gateway/local-models.md +152 -0
  185. package/docs/gateway/logging.md +113 -0
  186. package/docs/gateway/multiple-gateways.md +112 -0
  187. package/docs/gateway/network-model.md +22 -0
  188. package/docs/gateway/openai-http-api.md +132 -0
  189. package/docs/gateway/openresponses-http-api.md +295 -0
  190. package/docs/gateway/openshell.md +307 -0
  191. package/docs/gateway/pairing.md +99 -0
  192. package/docs/gateway/protocol.md +267 -0
  193. package/docs/gateway/remote-gateway-readme.md +158 -0
  194. package/docs/gateway/remote.md +153 -0
  195. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +134 -0
  196. package/docs/gateway/sandboxing.md +469 -0
  197. package/docs/gateway/secrets-plan-contract.md +116 -0
  198. package/docs/gateway/secrets.md +503 -0
  199. package/docs/gateway/security/index.md +1220 -0
  200. package/docs/gateway/tailscale.md +132 -0
  201. package/docs/gateway/tools-invoke-http-api.md +118 -0
  202. package/docs/gateway/troubleshooting.md +378 -0
  203. package/docs/gateway/trusted-proxy-auth.md +330 -0
  204. package/docs/help/debugging.md +168 -0
  205. package/docs/help/environment.md +163 -0
  206. package/docs/help/faq.md +2997 -0
  207. package/docs/help/index.md +28 -0
  208. package/docs/help/scripts.md +28 -0
  209. package/docs/help/testing.md +526 -0
  210. package/docs/help/troubleshooting.md +297 -0
  211. package/docs/images/configure-model-picker-unsearchable.png +0 -0
  212. package/docs/images/feishu-step2-create-app.png +0 -0
  213. package/docs/images/feishu-step3-credentials.png +0 -0
  214. package/docs/images/feishu-step4-permissions.png +0 -0
  215. package/docs/images/feishu-step5-bot-capability.png +0 -0
  216. package/docs/images/feishu-step6-event-subscription.png +0 -0
  217. package/docs/images/feishu-verification-token.png +0 -0
  218. package/docs/images/groups-flow.svg +52 -0
  219. package/docs/images/mobile-ui-screenshot.png +0 -0
  220. package/docs/index.md +196 -0
  221. package/docs/install/ansible.md +230 -0
  222. package/docs/install/azure.md +311 -0
  223. package/docs/install/bun.md +55 -0
  224. package/docs/install/development-channels.md +120 -0
  225. package/docs/install/digitalocean.md +129 -0
  226. package/docs/install/docker-vm-runtime.md +142 -0
  227. package/docs/install/docker.md +375 -0
  228. package/docs/install/exe-dev.md +126 -0
  229. package/docs/install/fly.md +501 -0
  230. package/docs/install/gcp.md +402 -0
  231. package/docs/install/hetzner.md +251 -0
  232. package/docs/install/index.md +183 -0
  233. package/docs/install/installer.md +415 -0
  234. package/docs/install/kubernetes.md +191 -0
  235. package/docs/install/macos-vm.md +281 -0
  236. package/docs/install/migrating-matrix.md +346 -0
  237. package/docs/install/migrating.md +110 -0
  238. package/docs/install/nix.md +89 -0
  239. package/docs/install/node.md +138 -0
  240. package/docs/install/northflank.mdx +54 -0
  241. package/docs/install/oracle.md +156 -0
  242. package/docs/install/podman.md +133 -0
  243. package/docs/install/railway.mdx +100 -0
  244. package/docs/install/raspberry-pi.md +159 -0
  245. package/docs/install/render.mdx +169 -0
  246. package/docs/install/uninstall.md +128 -0
  247. package/docs/install/updating.md +128 -0
  248. package/docs/ja-JP/index.md +186 -0
  249. package/docs/ja-JP/start/getting-started.md +125 -0
  250. package/docs/ja-JP/start/wizard.md +77 -0
  251. package/docs/logging.md +352 -0
  252. package/docs/nav-tabs-underline.js +100 -0
  253. package/docs/network.md +54 -0
  254. package/docs/nodes/audio.md +187 -0
  255. package/docs/nodes/camera.md +162 -0
  256. package/docs/nodes/images.md +72 -0
  257. package/docs/nodes/index.md +393 -0
  258. package/docs/nodes/location-command.md +98 -0
  259. package/docs/nodes/media-understanding.md +394 -0
  260. package/docs/nodes/talk.md +92 -0
  261. package/docs/nodes/troubleshooting.md +114 -0
  262. package/docs/nodes/voicewake.md +66 -0
  263. package/docs/perplexity.md +174 -0
  264. package/docs/pi-dev.md +80 -0
  265. package/docs/pi.md +567 -0
  266. package/docs/platforms/android.md +168 -0
  267. package/docs/platforms/digitalocean.md +266 -0
  268. package/docs/platforms/index.md +54 -0
  269. package/docs/platforms/ios.md +220 -0
  270. package/docs/platforms/linux.md +94 -0
  271. package/docs/platforms/mac/bundled-gateway.md +73 -0
  272. package/docs/platforms/mac/canvas.md +125 -0
  273. package/docs/platforms/mac/child-process.md +69 -0
  274. package/docs/platforms/mac/dev-setup.md +104 -0
  275. package/docs/platforms/mac/health.md +34 -0
  276. package/docs/platforms/mac/icon.md +31 -0
  277. package/docs/platforms/mac/logging.md +57 -0
  278. package/docs/platforms/mac/menu-bar.md +81 -0
  279. package/docs/platforms/mac/peekaboo.md +65 -0
  280. package/docs/platforms/mac/permissions.md +50 -0
  281. package/docs/platforms/mac/remote.md +84 -0
  282. package/docs/platforms/mac/signing.md +47 -0
  283. package/docs/platforms/mac/skills.md +33 -0
  284. package/docs/platforms/mac/voice-overlay.md +60 -0
  285. package/docs/platforms/mac/voicewake.md +67 -0
  286. package/docs/platforms/mac/webchat.md +43 -0
  287. package/docs/platforms/mac/xpc.md +61 -0
  288. package/docs/platforms/macos.md +226 -0
  289. package/docs/platforms/oracle.md +303 -0
  290. package/docs/platforms/raspberry-pi.md +412 -0
  291. package/docs/platforms/windows.md +241 -0
  292. package/docs/plugins/agent-tools.md +10 -0
  293. package/docs/plugins/architecture.md +1366 -0
  294. package/docs/plugins/building-extensions.md +10 -0
  295. package/docs/plugins/building-plugins.md +239 -0
  296. package/docs/plugins/bundles.md +181 -0
  297. package/docs/plugins/community.md +145 -0
  298. package/docs/plugins/manifest.md +241 -0
  299. package/docs/plugins/sdk-channel-plugins.md +370 -0
  300. package/docs/plugins/sdk-entrypoints.md +161 -0
  301. package/docs/plugins/sdk-migration.md +172 -0
  302. package/docs/plugins/sdk-overview.md +196 -0
  303. package/docs/plugins/sdk-provider-plugins.md +370 -0
  304. package/docs/plugins/sdk-runtime.md +345 -0
  305. package/docs/plugins/sdk-setup.md +331 -0
  306. package/docs/plugins/sdk-testing.md +263 -0
  307. package/docs/plugins/voice-call.md +380 -0
  308. package/docs/plugins/zalouser.md +77 -0
  309. package/docs/prose.md +134 -0
  310. package/docs/providers/anthropic.md +259 -0
  311. package/docs/providers/bedrock.md +176 -0
  312. package/docs/providers/claude-max-api-proxy.md +154 -0
  313. package/docs/providers/cloudflare-ai-gateway.md +71 -0
  314. package/docs/providers/deepgram.md +93 -0
  315. package/docs/providers/github-copilot.md +72 -0
  316. package/docs/providers/glm.md +43 -0
  317. package/docs/providers/google.md +78 -0
  318. package/docs/providers/groq.md +96 -0
  319. package/docs/providers/huggingface.md +209 -0
  320. package/docs/providers/index.md +69 -0
  321. package/docs/providers/kilocode.md +74 -0
  322. package/docs/providers/litellm.md +154 -0
  323. package/docs/providers/minimax.md +224 -0
  324. package/docs/providers/mistral.md +54 -0
  325. package/docs/providers/models.md +45 -0
  326. package/docs/providers/modelstudio.md +66 -0
  327. package/docs/providers/moonshot.md +175 -0
  328. package/docs/providers/nvidia.md +55 -0
  329. package/docs/providers/ollama.md +352 -0
  330. package/docs/providers/openai.md +303 -0
  331. package/docs/providers/opencode-go.md +45 -0
  332. package/docs/providers/opencode.md +64 -0
  333. package/docs/providers/openrouter.md +37 -0
  334. package/docs/providers/perplexity-provider.md +62 -0
  335. package/docs/providers/qianfan.md +38 -0
  336. package/docs/providers/qwen.md +53 -0
  337. package/docs/providers/sglang.md +104 -0
  338. package/docs/providers/synthetic.md +99 -0
  339. package/docs/providers/together.md +66 -0
  340. package/docs/providers/venice.md +282 -0
  341. package/docs/providers/vercel-ai-gateway.md +60 -0
  342. package/docs/providers/vllm.md +92 -0
  343. package/docs/providers/volcengine.md +74 -0
  344. package/docs/providers/xai.md +60 -0
  345. package/docs/providers/xiaomi.md +86 -0
  346. package/docs/providers/zai.md +46 -0
  347. package/docs/reference/AGENTS.default.md +126 -0
  348. package/docs/reference/RELEASING.md +42 -0
  349. package/docs/reference/api-usage-costs.md +144 -0
  350. package/docs/reference/credits.md +30 -0
  351. package/docs/reference/device-models.md +47 -0
  352. package/docs/reference/memory-config.md +711 -0
  353. package/docs/reference/prompt-caching.md +185 -0
  354. package/docs/reference/rpc.md +43 -0
  355. package/docs/reference/secretref-credential-surface.md +140 -0
  356. package/docs/reference/secretref-user-supplied-credentials-matrix.json +563 -0
  357. package/docs/reference/session-management-compaction.md +324 -0
  358. package/docs/reference/templates/AGENTS.dev.md +83 -0
  359. package/docs/reference/templates/AGENTS.md +219 -0
  360. package/docs/reference/templates/BOOT.md +11 -0
  361. package/docs/reference/templates/BOOTSTRAP.md +62 -0
  362. package/docs/reference/templates/HEARTBEAT.md +14 -0
  363. package/docs/reference/templates/IDENTITY.dev.md +47 -0
  364. package/docs/reference/templates/IDENTITY.md +29 -0
  365. package/docs/reference/templates/SOUL.dev.md +76 -0
  366. package/docs/reference/templates/SOUL.md +43 -0
  367. package/docs/reference/templates/TOOLS.dev.md +24 -0
  368. package/docs/reference/templates/TOOLS.md +47 -0
  369. package/docs/reference/templates/USER.dev.md +18 -0
  370. package/docs/reference/templates/USER.md +23 -0
  371. package/docs/reference/test.md +90 -0
  372. package/docs/reference/token-use.md +175 -0
  373. package/docs/reference/transcript-hygiene.md +151 -0
  374. package/docs/reference/wizard.md +235 -0
  375. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +98 -0
  376. package/docs/security/THREAT-MODEL-ATLAS.md +611 -0
  377. package/docs/security/formal-verification.md +167 -0
  378. package/docs/start/bootstrapping.md +41 -0
  379. package/docs/start/docs-directory.md +66 -0
  380. package/docs/start/getting-started.md +116 -0
  381. package/docs/start/hubs.md +198 -0
  382. package/docs/start/lore.md +219 -0
  383. package/docs/start/onboarding-overview.md +67 -0
  384. package/docs/start/onboarding.md +91 -0
  385. package/docs/start/openclaw.md +221 -0
  386. package/docs/start/quickstart.md +22 -0
  387. package/docs/start/setup.md +164 -0
  388. package/docs/start/showcase.md +418 -0
  389. package/docs/start/wizard-cli-automation.md +215 -0
  390. package/docs/start/wizard-cli-reference.md +299 -0
  391. package/docs/start/wizard.md +125 -0
  392. package/docs/style.css +37 -0
  393. package/docs/tools/acp-agents.md +623 -0
  394. package/docs/tools/agent-send.md +100 -0
  395. package/docs/tools/apply-patch.md +51 -0
  396. package/docs/tools/brave-search.md +93 -0
  397. package/docs/tools/browser-linux-troubleshooting.md +138 -0
  398. package/docs/tools/browser-login.md +73 -0
  399. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +211 -0
  400. package/docs/tools/browser.md +731 -0
  401. package/docs/tools/btw.md +142 -0
  402. package/docs/tools/capability-cookbook.md +119 -0
  403. package/docs/tools/clawhub.md +298 -0
  404. package/docs/tools/creating-skills.md +117 -0
  405. package/docs/tools/diffs.md +386 -0
  406. package/docs/tools/elevated.md +114 -0
  407. package/docs/tools/exec-approvals.md +430 -0
  408. package/docs/tools/exec.md +207 -0
  409. package/docs/tools/firecrawl.md +140 -0
  410. package/docs/tools/index.md +137 -0
  411. package/docs/tools/llm-task.md +119 -0
  412. package/docs/tools/lobster.md +340 -0
  413. package/docs/tools/loop-detection.md +100 -0
  414. package/docs/tools/multi-agent-sandbox-tools.md +364 -0
  415. package/docs/tools/pdf.md +156 -0
  416. package/docs/tools/perplexity-search.md +174 -0
  417. package/docs/tools/plugin.md +255 -0
  418. package/docs/tools/reactions.md +64 -0
  419. package/docs/tools/skills-config.md +86 -0
  420. package/docs/tools/skills.md +309 -0
  421. package/docs/tools/slash-commands.md +294 -0
  422. package/docs/tools/subagents.md +295 -0
  423. package/docs/tools/tavily.md +125 -0
  424. package/docs/tools/thinking.md +96 -0
  425. package/docs/tools/tts.md +406 -0
  426. package/docs/tools/web.md +516 -0
  427. package/docs/tts.md +406 -0
  428. package/docs/vps.md +112 -0
  429. package/docs/web/control-ui.md +275 -0
  430. package/docs/web/dashboard.md +54 -0
  431. package/docs/web/index.md +120 -0
  432. package/docs/web/tui.md +170 -0
  433. package/docs/web/webchat.md +61 -0
  434. package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
  435. package/docs/whatsapp-openclaw.jpg +0 -0
  436. package/docs/zh-CN/AGENTS.md +61 -0
  437. package/docs/zh-CN/automation/auth-monitoring.md +47 -0
  438. package/docs/zh-CN/automation/cron-jobs.md +435 -0
  439. package/docs/zh-CN/automation/cron-vs-heartbeat.md +286 -0
  440. package/docs/zh-CN/automation/gmail-pubsub.md +249 -0
  441. package/docs/zh-CN/automation/hooks.md +1051 -0
  442. package/docs/zh-CN/automation/poll.md +76 -0
  443. package/docs/zh-CN/automation/troubleshooting.md +8 -0
  444. package/docs/zh-CN/automation/webhook.md +163 -0
  445. package/docs/zh-CN/brave-search.md +60 -0
  446. package/docs/zh-CN/channels/bluebubbles.md +354 -0
  447. package/docs/zh-CN/channels/broadcast-groups.md +449 -0
  448. package/docs/zh-CN/channels/channel-routing.md +117 -0
  449. package/docs/zh-CN/channels/discord.md +468 -0
  450. package/docs/zh-CN/channels/feishu.md +728 -0
  451. package/docs/zh-CN/channels/googlechat.md +257 -0
  452. package/docs/zh-CN/channels/grammy.md +38 -0
  453. package/docs/zh-CN/channels/group-messages.md +91 -0
  454. package/docs/zh-CN/channels/groups.md +379 -0
  455. package/docs/zh-CN/channels/imessage.md +302 -0
  456. package/docs/zh-CN/channels/index.md +53 -0
  457. package/docs/zh-CN/channels/line.md +180 -0
  458. package/docs/zh-CN/channels/location.md +63 -0
  459. package/docs/zh-CN/channels/matrix.md +221 -0
  460. package/docs/zh-CN/channels/mattermost.md +144 -0
  461. package/docs/zh-CN/channels/msteams.md +775 -0
  462. package/docs/zh-CN/channels/nextcloud-talk.md +142 -0
  463. package/docs/zh-CN/channels/nostr.md +249 -0
  464. package/docs/zh-CN/channels/pairing.md +89 -0
  465. package/docs/zh-CN/channels/signal.md +209 -0
  466. package/docs/zh-CN/channels/slack.md +531 -0
  467. package/docs/zh-CN/channels/synology-chat.md +138 -0
  468. package/docs/zh-CN/channels/telegram.md +751 -0
  469. package/docs/zh-CN/channels/tlon.md +136 -0
  470. package/docs/zh-CN/channels/troubleshooting.md +36 -0
  471. package/docs/zh-CN/channels/twitch.md +385 -0
  472. package/docs/zh-CN/channels/whatsapp.md +411 -0
  473. package/docs/zh-CN/channels/zalo.md +196 -0
  474. package/docs/zh-CN/channels/zalouser.md +147 -0
  475. package/docs/zh-CN/cli/acp.md +173 -0
  476. package/docs/zh-CN/cli/agent.md +30 -0
  477. package/docs/zh-CN/cli/agents.md +82 -0
  478. package/docs/zh-CN/cli/approvals.md +57 -0
  479. package/docs/zh-CN/cli/browser.md +114 -0
  480. package/docs/zh-CN/cli/channels.md +86 -0
  481. package/docs/zh-CN/cli/config.md +57 -0
  482. package/docs/zh-CN/cli/configure.md +38 -0
  483. package/docs/zh-CN/cli/cron.md +43 -0
  484. package/docs/zh-CN/cli/dashboard.md +23 -0
  485. package/docs/zh-CN/cli/devices.md +74 -0
  486. package/docs/zh-CN/cli/directory.md +70 -0
  487. package/docs/zh-CN/cli/dns.md +30 -0
  488. package/docs/zh-CN/cli/docs.md +22 -0
  489. package/docs/zh-CN/cli/doctor.md +48 -0
  490. package/docs/zh-CN/cli/gateway.md +206 -0
  491. package/docs/zh-CN/cli/health.md +28 -0
  492. package/docs/zh-CN/cli/hooks.md +298 -0
  493. package/docs/zh-CN/cli/index.md +1143 -0
  494. package/docs/zh-CN/cli/logs.md +31 -0
  495. package/docs/zh-CN/cli/memory.md +52 -0
  496. package/docs/zh-CN/cli/message.md +246 -0
  497. package/docs/zh-CN/cli/models.md +85 -0
  498. package/docs/zh-CN/cli/node.md +115 -0
  499. package/docs/zh-CN/cli/nodes.md +80 -0
  500. package/docs/zh-CN/cli/onboard.md +164 -0
  501. package/docs/zh-CN/cli/pairing.md +28 -0
  502. package/docs/zh-CN/cli/plugins.md +66 -0
  503. package/docs/zh-CN/cli/reset.md +24 -0
  504. package/docs/zh-CN/cli/sandbox.md +158 -0
  505. package/docs/zh-CN/cli/security.md +33 -0
  506. package/docs/zh-CN/cli/sessions.md +23 -0
  507. package/docs/zh-CN/cli/setup.md +36 -0
  508. package/docs/zh-CN/cli/skills.md +33 -0
  509. package/docs/zh-CN/cli/status.md +33 -0
  510. package/docs/zh-CN/cli/system.md +63 -0
  511. package/docs/zh-CN/cli/tui.md +30 -0
  512. package/docs/zh-CN/cli/uninstall.md +24 -0
  513. package/docs/zh-CN/cli/update.md +101 -0
  514. package/docs/zh-CN/cli/voicecall.md +41 -0
  515. package/docs/zh-CN/cli/webhooks.md +32 -0
  516. package/docs/zh-CN/concepts/agent-loop.md +146 -0
  517. package/docs/zh-CN/concepts/agent-workspace.md +219 -0
  518. package/docs/zh-CN/concepts/agent.md +115 -0
  519. package/docs/zh-CN/concepts/architecture.md +123 -0
  520. package/docs/zh-CN/concepts/compaction.md +67 -0
  521. package/docs/zh-CN/concepts/context.md +168 -0
  522. package/docs/zh-CN/concepts/features.md +59 -0
  523. package/docs/zh-CN/concepts/markdown-formatting.md +117 -0
  524. package/docs/zh-CN/concepts/memory.md +412 -0
  525. package/docs/zh-CN/concepts/messages.md +141 -0
  526. package/docs/zh-CN/concepts/model-failover.md +145 -0
  527. package/docs/zh-CN/concepts/model-providers.md +606 -0
  528. package/docs/zh-CN/concepts/models.md +225 -0
  529. package/docs/zh-CN/concepts/multi-agent.md +372 -0
  530. package/docs/zh-CN/concepts/oauth.md +164 -0
  531. package/docs/zh-CN/concepts/presence.md +99 -0
  532. package/docs/zh-CN/concepts/queue.md +94 -0
  533. package/docs/zh-CN/concepts/retry.md +76 -0
  534. package/docs/zh-CN/concepts/session-pruning.md +129 -0
  535. package/docs/zh-CN/concepts/session-tool.md +200 -0
  536. package/docs/zh-CN/concepts/session.md +166 -0
  537. package/docs/zh-CN/concepts/streaming.md +133 -0
  538. package/docs/zh-CN/concepts/system-prompt.md +101 -0
  539. package/docs/zh-CN/concepts/timezone.md +96 -0
  540. package/docs/zh-CN/concepts/typebox.md +284 -0
  541. package/docs/zh-CN/concepts/typing-indicators.md +74 -0
  542. package/docs/zh-CN/concepts/usage-tracking.md +42 -0
  543. package/docs/zh-CN/date-time.md +129 -0
  544. package/docs/zh-CN/debug/node-issue.md +90 -0
  545. package/docs/zh-CN/diagnostics/flags.md +98 -0
  546. package/docs/zh-CN/gateway/authentication.md +184 -0
  547. package/docs/zh-CN/gateway/background-process.md +100 -0
  548. package/docs/zh-CN/gateway/bonjour.md +174 -0
  549. package/docs/zh-CN/gateway/bridge-protocol.md +86 -0
  550. package/docs/zh-CN/gateway/cli-backends.md +213 -0
  551. package/docs/zh-CN/gateway/configuration-examples.md +587 -0
  552. package/docs/zh-CN/gateway/configuration-reference.md +3103 -0
  553. package/docs/zh-CN/gateway/configuration.md +640 -0
  554. package/docs/zh-CN/gateway/discovery.md +123 -0
  555. package/docs/zh-CN/gateway/doctor.md +238 -0
  556. package/docs/zh-CN/gateway/gateway-lock.md +41 -0
  557. package/docs/zh-CN/gateway/health.md +42 -0
  558. package/docs/zh-CN/gateway/heartbeat.md +274 -0
  559. package/docs/zh-CN/gateway/index.md +335 -0
  560. package/docs/zh-CN/gateway/local-models.md +159 -0
  561. package/docs/zh-CN/gateway/logging.md +114 -0
  562. package/docs/zh-CN/gateway/multiple-gateways.md +119 -0
  563. package/docs/zh-CN/gateway/network-model.md +23 -0
  564. package/docs/zh-CN/gateway/openai-http-api.md +125 -0
  565. package/docs/zh-CN/gateway/openresponses-http-api.md +317 -0
  566. package/docs/zh-CN/gateway/pairing.md +99 -0
  567. package/docs/zh-CN/gateway/protocol.md +220 -0
  568. package/docs/zh-CN/gateway/remote-gateway-readme.md +164 -0
  569. package/docs/zh-CN/gateway/remote.md +133 -0
  570. package/docs/zh-CN/gateway/sandbox-vs-tool-policy-vs-elevated.md +135 -0
  571. package/docs/zh-CN/gateway/sandboxing.md +188 -0
  572. package/docs/zh-CN/gateway/security/index.md +777 -0
  573. package/docs/zh-CN/gateway/tailscale.md +124 -0
  574. package/docs/zh-CN/gateway/tools-invoke-http-api.md +92 -0
  575. package/docs/zh-CN/gateway/troubleshooting.md +771 -0
  576. package/docs/zh-CN/help/debugging.md +160 -0
  577. package/docs/zh-CN/help/environment.md +88 -0
  578. package/docs/zh-CN/help/faq.md +2640 -0
  579. package/docs/zh-CN/help/index.md +28 -0
  580. package/docs/zh-CN/help/scripts.md +35 -0
  581. package/docs/zh-CN/help/testing.md +375 -0
  582. package/docs/zh-CN/help/troubleshooting.md +104 -0
  583. package/docs/zh-CN/index.md +186 -0
  584. package/docs/zh-CN/install/ansible.md +215 -0
  585. package/docs/zh-CN/install/bun.md +65 -0
  586. package/docs/zh-CN/install/development-channels.md +81 -0
  587. package/docs/zh-CN/install/docker.md +532 -0
  588. package/docs/zh-CN/install/exe-dev.md +133 -0
  589. package/docs/zh-CN/install/fly.md +490 -0
  590. package/docs/zh-CN/install/gcp.md +510 -0
  591. package/docs/zh-CN/install/hetzner.md +337 -0
  592. package/docs/zh-CN/install/index.md +235 -0
  593. package/docs/zh-CN/install/installer.md +422 -0
  594. package/docs/zh-CN/install/macos-vm.md +288 -0
  595. package/docs/zh-CN/install/migrating.md +199 -0
  596. package/docs/zh-CN/install/nix.md +99 -0
  597. package/docs/zh-CN/install/node.md +8 -0
  598. package/docs/zh-CN/install/northflank.mdx +60 -0
  599. package/docs/zh-CN/install/railway.mdx +106 -0
  600. package/docs/zh-CN/install/render.mdx +169 -0
  601. package/docs/zh-CN/install/uninstall.md +135 -0
  602. package/docs/zh-CN/install/updating.md +233 -0
  603. package/docs/zh-CN/logging.md +329 -0
  604. package/docs/zh-CN/network.md +59 -0
  605. package/docs/zh-CN/nodes/audio.md +120 -0
  606. package/docs/zh-CN/nodes/camera.md +162 -0
  607. package/docs/zh-CN/nodes/images.md +79 -0
  608. package/docs/zh-CN/nodes/index.md +348 -0
  609. package/docs/zh-CN/nodes/location-command.md +120 -0
  610. package/docs/zh-CN/nodes/media-understanding.md +380 -0
  611. package/docs/zh-CN/nodes/talk.md +97 -0
  612. package/docs/zh-CN/nodes/troubleshooting.md +8 -0
  613. package/docs/zh-CN/nodes/voicewake.md +72 -0
  614. package/docs/zh-CN/perplexity.md +102 -0
  615. package/docs/zh-CN/pi-dev.md +77 -0
  616. package/docs/zh-CN/pi.md +619 -0
  617. package/docs/zh-CN/platforms/android.md +155 -0
  618. package/docs/zh-CN/platforms/digitalocean.md +273 -0
  619. package/docs/zh-CN/platforms/index.md +60 -0
  620. package/docs/zh-CN/platforms/ios.md +114 -0
  621. package/docs/zh-CN/platforms/linux.md +100 -0
  622. package/docs/zh-CN/platforms/mac/bundled-gateway.md +75 -0
  623. package/docs/zh-CN/platforms/mac/canvas.md +128 -0
  624. package/docs/zh-CN/platforms/mac/child-process.md +73 -0
  625. package/docs/zh-CN/platforms/mac/dev-setup.md +109 -0
  626. package/docs/zh-CN/platforms/mac/health.md +41 -0
  627. package/docs/zh-CN/platforms/mac/icon.md +38 -0
  628. package/docs/zh-CN/platforms/mac/logging.md +64 -0
  629. package/docs/zh-CN/platforms/mac/menu-bar.md +88 -0
  630. package/docs/zh-CN/platforms/mac/peekaboo.md +62 -0
  631. package/docs/zh-CN/platforms/mac/permissions.md +46 -0
  632. package/docs/zh-CN/platforms/mac/remote.md +90 -0
  633. package/docs/zh-CN/platforms/mac/signing.md +54 -0
  634. package/docs/zh-CN/platforms/mac/skills.md +40 -0
  635. package/docs/zh-CN/platforms/mac/voice-overlay.md +67 -0
  636. package/docs/zh-CN/platforms/mac/voicewake.md +74 -0
  637. package/docs/zh-CN/platforms/mac/webchat.md +43 -0
  638. package/docs/zh-CN/platforms/mac/xpc.md +68 -0
  639. package/docs/zh-CN/platforms/macos.md +193 -0
  640. package/docs/zh-CN/platforms/oracle.md +310 -0
  641. package/docs/zh-CN/platforms/raspberry-pi.md +416 -0
  642. package/docs/zh-CN/platforms/windows.md +247 -0
  643. package/docs/zh-CN/plugins/agent-tools.md +99 -0
  644. package/docs/zh-CN/plugins/manifest.md +68 -0
  645. package/docs/zh-CN/plugins/voice-call.md +250 -0
  646. package/docs/zh-CN/plugins/zalouser.md +88 -0
  647. package/docs/zh-CN/prose.md +141 -0
  648. package/docs/zh-CN/providers/anthropic.md +265 -0
  649. package/docs/zh-CN/providers/bedrock.md +170 -0
  650. package/docs/zh-CN/providers/claude-max-api-proxy.md +155 -0
  651. package/docs/zh-CN/providers/cloudflare-ai-gateway.md +78 -0
  652. package/docs/zh-CN/providers/deepgram.md +97 -0
  653. package/docs/zh-CN/providers/github-copilot.md +67 -0
  654. package/docs/zh-CN/providers/glm.md +50 -0
  655. package/docs/zh-CN/providers/huggingface.md +216 -0
  656. package/docs/zh-CN/providers/index.md +69 -0
  657. package/docs/zh-CN/providers/kilocode.md +80 -0
  658. package/docs/zh-CN/providers/litellm.md +160 -0
  659. package/docs/zh-CN/providers/minimax.md +222 -0
  660. package/docs/zh-CN/providers/mistral.md +61 -0
  661. package/docs/zh-CN/providers/models.md +51 -0
  662. package/docs/zh-CN/providers/moonshot.md +182 -0
  663. package/docs/zh-CN/providers/nvidia.md +62 -0
  664. package/docs/zh-CN/providers/ollama.md +359 -0
  665. package/docs/zh-CN/providers/openai.md +308 -0
  666. package/docs/zh-CN/providers/opencode-go.md +52 -0
  667. package/docs/zh-CN/providers/opencode.md +71 -0
  668. package/docs/zh-CN/providers/openrouter.md +44 -0
  669. package/docs/zh-CN/providers/qianfan.md +45 -0
  670. package/docs/zh-CN/providers/qwen.md +55 -0
  671. package/docs/zh-CN/providers/sglang.md +111 -0
  672. package/docs/zh-CN/providers/synthetic.md +106 -0
  673. package/docs/zh-CN/providers/together.md +72 -0
  674. package/docs/zh-CN/providers/venice.md +289 -0
  675. package/docs/zh-CN/providers/vercel-ai-gateway.md +66 -0
  676. package/docs/zh-CN/providers/xiaomi.md +93 -0
  677. package/docs/zh-CN/providers/zai.md +53 -0
  678. package/docs/zh-CN/reference/AGENTS.default.md +131 -0
  679. package/docs/zh-CN/reference/RELEASING.md +48 -0
  680. package/docs/zh-CN/reference/api-usage-costs.md +141 -0
  681. package/docs/zh-CN/reference/credits.md +34 -0
  682. package/docs/zh-CN/reference/device-models.md +54 -0
  683. package/docs/zh-CN/reference/rpc.md +48 -0
  684. package/docs/zh-CN/reference/session-management-compaction.md +287 -0
  685. package/docs/zh-CN/reference/templates/AGENTS.dev.md +89 -0
  686. package/docs/zh-CN/reference/templates/AGENTS.md +225 -0
  687. package/docs/zh-CN/reference/templates/BOOT.md +17 -0
  688. package/docs/zh-CN/reference/templates/BOOTSTRAP.md +68 -0
  689. package/docs/zh-CN/reference/templates/HEARTBEAT.md +18 -0
  690. package/docs/zh-CN/reference/templates/IDENTITY.dev.md +54 -0
  691. package/docs/zh-CN/reference/templates/IDENTITY.md +36 -0
  692. package/docs/zh-CN/reference/templates/SOUL.dev.md +83 -0
  693. package/docs/zh-CN/reference/templates/SOUL.md +49 -0
  694. package/docs/zh-CN/reference/templates/TOOLS.dev.md +31 -0
  695. package/docs/zh-CN/reference/templates/TOOLS.md +53 -0
  696. package/docs/zh-CN/reference/templates/USER.dev.md +25 -0
  697. package/docs/zh-CN/reference/templates/USER.md +30 -0
  698. package/docs/zh-CN/reference/test.md +57 -0
  699. package/docs/zh-CN/reference/token-use.md +119 -0
  700. package/docs/zh-CN/reference/transcript-hygiene.md +109 -0
  701. package/docs/zh-CN/reference/wizard.md +242 -0
  702. package/docs/zh-CN/security/formal-verification.md +171 -0
  703. package/docs/zh-CN/start/bootstrapping.md +9 -0
  704. package/docs/zh-CN/start/docs-directory.md +70 -0
  705. package/docs/zh-CN/start/getting-started.md +143 -0
  706. package/docs/zh-CN/start/hubs.md +194 -0
  707. package/docs/zh-CN/start/lore.md +226 -0
  708. package/docs/zh-CN/start/onboarding-overview.md +58 -0
  709. package/docs/zh-CN/start/onboarding.md +105 -0
  710. package/docs/zh-CN/start/openclaw.md +248 -0
  711. package/docs/zh-CN/start/quickstart.md +88 -0
  712. package/docs/zh-CN/start/setup.md +153 -0
  713. package/docs/zh-CN/start/showcase.md +423 -0
  714. package/docs/zh-CN/start/wizard-cli-automation.md +222 -0
  715. package/docs/zh-CN/start/wizard-cli-reference.md +306 -0
  716. package/docs/zh-CN/start/wizard.md +132 -0
  717. package/docs/zh-CN/tools/agent-send.md +59 -0
  718. package/docs/zh-CN/tools/apply-patch.md +57 -0
  719. package/docs/zh-CN/tools/browser-linux-troubleshooting.md +144 -0
  720. package/docs/zh-CN/tools/browser-login.md +75 -0
  721. package/docs/zh-CN/tools/browser.md +553 -0
  722. package/docs/zh-CN/tools/chrome-extension.md +183 -0
  723. package/docs/zh-CN/tools/clawhub.md +209 -0
  724. package/docs/zh-CN/tools/creating-skills.md +61 -0
  725. package/docs/zh-CN/tools/elevated.md +64 -0
  726. package/docs/zh-CN/tools/exec-approvals.md +234 -0
  727. package/docs/zh-CN/tools/exec.md +169 -0
  728. package/docs/zh-CN/tools/firecrawl.md +68 -0
  729. package/docs/zh-CN/tools/index.md +515 -0
  730. package/docs/zh-CN/tools/llm-task.md +117 -0
  731. package/docs/zh-CN/tools/lobster.md +349 -0
  732. package/docs/zh-CN/tools/multi-agent-sandbox-tools.md +401 -0
  733. package/docs/zh-CN/tools/plugin.md +1612 -0
  734. package/docs/zh-CN/tools/reactions.md +29 -0
  735. package/docs/zh-CN/tools/skills-config.md +78 -0
  736. package/docs/zh-CN/tools/skills.md +279 -0
  737. package/docs/zh-CN/tools/slash-commands.md +205 -0
  738. package/docs/zh-CN/tools/subagents.md +167 -0
  739. package/docs/zh-CN/tools/thinking.md +80 -0
  740. package/docs/zh-CN/tools/web.md +289 -0
  741. package/docs/zh-CN/tts.md +375 -0
  742. package/docs/zh-CN/vps.md +47 -0
  743. package/docs/zh-CN/web/control-ui.md +191 -0
  744. package/docs/zh-CN/web/dashboard.md +53 -0
  745. package/docs/zh-CN/web/index.md +118 -0
  746. package/docs/zh-CN/web/tui.md +166 -0
  747. package/docs/zh-CN/web/webchat.md +56 -0
  748. package/package.json +841 -0
  749. package/quantumclaw.mjs +135 -0
  750. package/skills/1password/SKILL.md +70 -0
  751. package/skills/1password/references/cli-examples.md +29 -0
  752. package/skills/1password/references/get-started.md +17 -0
  753. package/skills/apple-notes/SKILL.md +77 -0
  754. package/skills/apple-reminders/SKILL.md +118 -0
  755. package/skills/bear-notes/SKILL.md +107 -0
  756. package/skills/blogwatcher/SKILL.md +69 -0
  757. package/skills/blucli/SKILL.md +47 -0
  758. package/skills/bluebubbles/SKILL.md +131 -0
  759. package/skills/camsnap/SKILL.md +45 -0
  760. package/skills/canvas/SKILL.md +198 -0
  761. package/skills/clawhub/SKILL.md +77 -0
  762. package/skills/coding-agent/SKILL.md +295 -0
  763. package/skills/discord/SKILL.md +197 -0
  764. package/skills/eightctl/SKILL.md +50 -0
  765. package/skills/gemini/SKILL.md +43 -0
  766. package/skills/gh-issues/SKILL.md +865 -0
  767. package/skills/gifgrep/SKILL.md +79 -0
  768. package/skills/github/SKILL.md +163 -0
  769. package/skills/gog/SKILL.md +116 -0
  770. package/skills/goplaces/SKILL.md +52 -0
  771. package/skills/healthcheck/SKILL.md +245 -0
  772. package/skills/himalaya/SKILL.md +257 -0
  773. package/skills/himalaya/references/configuration.md +184 -0
  774. package/skills/himalaya/references/message-composition.md +199 -0
  775. package/skills/imsg/SKILL.md +122 -0
  776. package/skills/mcporter/SKILL.md +61 -0
  777. package/skills/model-usage/SKILL.md +69 -0
  778. package/skills/model-usage/references/codexbar-cli.md +33 -0
  779. package/skills/model-usage/scripts/model_usage.py +320 -0
  780. package/skills/model-usage/scripts/test_model_usage.py +40 -0
  781. package/skills/nano-pdf/SKILL.md +38 -0
  782. package/skills/node-connect/SKILL.md +142 -0
  783. package/skills/notion/SKILL.md +174 -0
  784. package/skills/obsidian/SKILL.md +81 -0
  785. package/skills/openai-image-gen/SKILL.md +92 -0
  786. package/skills/openai-image-gen/scripts/gen.py +328 -0
  787. package/skills/openai-image-gen/scripts/test_gen.py +140 -0
  788. package/skills/openai-whisper/SKILL.md +38 -0
  789. package/skills/openai-whisper-api/SKILL.md +52 -0
  790. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  791. package/skills/openhue/SKILL.md +112 -0
  792. package/skills/oracle/SKILL.md +125 -0
  793. package/skills/ordercli/SKILL.md +78 -0
  794. package/skills/peekaboo/SKILL.md +190 -0
  795. package/skills/sag/SKILL.md +87 -0
  796. package/skills/session-logs/SKILL.md +115 -0
  797. package/skills/sherpa-onnx-tts/SKILL.md +103 -0
  798. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  799. package/skills/skill-creator/SKILL.md +372 -0
  800. package/skills/skill-creator/license.txt +202 -0
  801. package/skills/skill-creator/scripts/init_skill.py +378 -0
  802. package/skills/skill-creator/scripts/package_skill.py +139 -0
  803. package/skills/skill-creator/scripts/quick_validate.py +159 -0
  804. package/skills/skill-creator/scripts/test_package_skill.py +160 -0
  805. package/skills/skill-creator/scripts/test_quick_validate.py +72 -0
  806. package/skills/slack/SKILL.md +144 -0
  807. package/skills/songsee/SKILL.md +49 -0
  808. package/skills/sonoscli/SKILL.md +65 -0
  809. package/skills/spotify-player/SKILL.md +64 -0
  810. package/skills/summarize/SKILL.md +87 -0
  811. package/skills/things-mac/SKILL.md +86 -0
  812. package/skills/tmux/SKILL.md +153 -0
  813. package/skills/tmux/scripts/find-sessions.sh +112 -0
  814. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  815. package/skills/trello/SKILL.md +95 -0
  816. package/skills/video-frames/SKILL.md +46 -0
  817. package/skills/video-frames/scripts/frame.sh +81 -0
  818. package/skills/voice-call/SKILL.md +45 -0
  819. package/skills/wacli/SKILL.md +72 -0
  820. package/skills/weather/SKILL.md +112 -0
  821. package/skills/xurl/SKILL.md +461 -0
@@ -0,0 +1,3103 @@
1
+ ---
2
+ description: Complete field-by-field reference for ~/.quantumclaw/quantumclaw.json
3
+ read_when:
4
+ - 你需要精确到字段级别的配置语义或默认值
5
+ - 你正在验证渠道、模型、Gateway 网关或工具配置块
6
+ summary: 每个 QuantumClaw 配置键、默认值和渠道设置的完整参考
7
+ title: 配置参考
8
+ x-i18n:
9
+ generated_at: "2026-03-16T06:27:43Z"
10
+ model: gpt-5.4
11
+ provider: openai
12
+ source_hash: c2926153fa94bbb3141ac7cd9ebfa381394c9c9ad7a1cf1d21fb91c879905d51
13
+ source_path: gateway/configuration-reference.md
14
+ workflow: 15
15
+ ---
16
+
17
+ # 配置参考
18
+
19
+ `~/.quantumclaw/quantumclaw.json` 中所有可用字段。若需面向任务的概览,请参见 [Configuration](/gateway/configuration)。
20
+
21
+ 配置格式为 **JSON5**(允许注释和尾随逗号)。所有字段都是可选的——省略时,QuantumClaw 会使用安全默认值。
22
+
23
+ ---
24
+
25
+ ## 渠道
26
+
27
+ 只要某个渠道的配置节存在,它就会自动启动(除非设置了 `enabled: false`)。
28
+
29
+ ### 私信和群组访问
30
+
31
+ 所有渠道都支持私信策略和群组策略:
32
+
33
+ | DM policy | Behavior |
34
+ | ----------------- | --------------------------------------------------- |
35
+ | `pairing`(默认) | 未知发送者会收到一次性配对码;所有者必须批准 |
36
+ | `allowlist` | 仅 `allowFrom` 中的发送者(或已配对的允许列表存储) |
37
+ | `open` | 允许所有入站私信(要求 `allowFrom: ["*"]`) |
38
+ | `disabled` | 忽略所有入站私信 |
39
+
40
+ | Group policy | Behavior |
41
+ | ------------------- | -------------------------------------- |
42
+ | `allowlist`(默认) | 仅允许匹配已配置 allowlist 的群组 |
43
+ | `open` | 绕过群组 allowlist(仍会应用提及门控) |
44
+ | `disabled` | 阻止所有群组/房间消息 |
45
+
46
+ <Note>
47
+ `channels.defaults.groupPolicy` 会在某个提供商的 `groupPolicy` 未设置时作为默认值。
48
+ 配对码会在 1 小时后过期。待处理的私信配对请求每个渠道最多 **3 个**。
49
+ 如果某个提供商配置块完全缺失(`channels.<provider>` 不存在),运行时群组策略会回退到 `allowlist`(默认拒绝),并在启动时发出警告。
50
+ </Note>
51
+
52
+ ### 渠道模型覆盖
53
+
54
+ 使用 `channels.modelByChannel` 可将特定渠道 ID 固定到某个模型。值接受 `provider/model` 或已配置的模型别名。当会话尚未存在模型覆盖时(例如通过 `/model` 设置),才会应用渠道映射。
55
+
56
+ ```json5
57
+ {
58
+ channels: {
59
+ modelByChannel: {
60
+ discord: {
61
+ "123456789012345678": "anthropic/claude-opus-4-6",
62
+ },
63
+ slack: {
64
+ C1234567890: "openai/gpt-4.1",
65
+ },
66
+ telegram: {
67
+ "-1001234567890": "openai/gpt-4.1-mini",
68
+ "-1001234567890:topic:99": "anthropic/claude-sonnet-4-6",
69
+ },
70
+ },
71
+ },
72
+ }
73
+ ```
74
+
75
+ ### 渠道默认值和心跳
76
+
77
+ 使用 `channels.defaults` 为多个提供商共享群组策略和心跳行为:
78
+
79
+ ```json5
80
+ {
81
+ channels: {
82
+ defaults: {
83
+ groupPolicy: "allowlist", // open | allowlist | disabled
84
+ heartbeat: {
85
+ showOk: false,
86
+ showAlerts: true,
87
+ useIndicator: true,
88
+ },
89
+ },
90
+ },
91
+ }
92
+ ```
93
+
94
+ - `channels.defaults.groupPolicy`:当提供商级 `groupPolicy` 未设置时使用的回退群组策略。
95
+ - `channels.defaults.heartbeat.showOk`:在心跳输出中包含健康的渠道状态。
96
+ - `channels.defaults.heartbeat.showAlerts`:在心跳输出中包含降级/错误状态。
97
+ - `channels.defaults.heartbeat.useIndicator`:以紧凑的指示器样式渲染心跳输出。
98
+
99
+ ### WhatsApp
100
+
101
+ WhatsApp 通过 Gateway 网关的 Web 渠道(Baileys Web)运行。当存在已关联的会话时,它会自动启动。
102
+
103
+ ```json5
104
+ {
105
+ channels: {
106
+ whatsapp: {
107
+ dmPolicy: "pairing", // pairing | allowlist | open | disabled
108
+ allowFrom: ["+15555550123", "+447700900123"],
109
+ textChunkLimit: 4000,
110
+ chunkMode: "length", // length | newline
111
+ mediaMaxMb: 50,
112
+ sendReadReceipts: true, // 蓝色双勾(自聊模式下为 false)
113
+ groups: {
114
+ "*": { requireMention: true },
115
+ },
116
+ groupPolicy: "allowlist",
117
+ groupAllowFrom: ["+15551234567"],
118
+ },
119
+ },
120
+ web: {
121
+ enabled: true,
122
+ heartbeatSeconds: 60,
123
+ reconnect: {
124
+ initialMs: 2000,
125
+ maxMs: 120000,
126
+ factor: 1.4,
127
+ jitter: 0.2,
128
+ maxAttempts: 0,
129
+ },
130
+ },
131
+ }
132
+ ```
133
+
134
+ <Accordion title="多账户 WhatsApp">
135
+
136
+ ```json5
137
+ {
138
+ channels: {
139
+ whatsapp: {
140
+ accounts: {
141
+ default: {},
142
+ personal: {},
143
+ biz: {
144
+ // authDir: "~/.quantumclaw/credentials/whatsapp/biz",
145
+ },
146
+ },
147
+ },
148
+ },
149
+ }
150
+ ```
151
+
152
+ - 出站命令默认使用账户 `default`(若存在);否则使用第一个已配置的账户 ID(排序后)。
153
+ - 可选的 `channels.whatsapp.defaultAccount` 会在其与某个已配置账户 ID 匹配时,覆盖该回退默认账户选择。
154
+ - 旧版单账户 Baileys 认证目录会由 `quantumclaw doctor` 迁移到 `whatsapp/default`。
155
+ - 按账户覆盖:`channels.whatsapp.accounts.<id>.sendReadReceipts`、`channels.whatsapp.accounts.<id>.dmPolicy`、`channels.whatsapp.accounts.<id>.allowFrom`。
156
+
157
+ </Accordion>
158
+
159
+ ### Telegram
160
+
161
+ ```json5
162
+ {
163
+ channels: {
164
+ telegram: {
165
+ enabled: true,
166
+ botToken: "your-bot-token",
167
+ dmPolicy: "pairing",
168
+ allowFrom: ["tg:123456789"],
169
+ groups: {
170
+ "*": { requireMention: true },
171
+ "-1001234567890": {
172
+ allowFrom: ["@admin"],
173
+ systemPrompt: "Keep answers brief.",
174
+ topics: {
175
+ "99": {
176
+ requireMention: false,
177
+ skills: ["search"],
178
+ systemPrompt: "Stay on topic.",
179
+ },
180
+ },
181
+ },
182
+ },
183
+ customCommands: [
184
+ { command: "backup", description: "Git backup" },
185
+ { command: "generate", description: "Create an image" },
186
+ ],
187
+ historyLimit: 50,
188
+ replyToMode: "first", // off | first | all
189
+ linkPreview: true,
190
+ streaming: "partial", // off | partial | block | progress(默认:off)
191
+ actions: { reactions: true, sendMessage: true },
192
+ reactionNotifications: "own", // off | own | all
193
+ mediaMaxMb: 100,
194
+ retry: {
195
+ attempts: 3,
196
+ minDelayMs: 400,
197
+ maxDelayMs: 30000,
198
+ jitter: 0.1,
199
+ },
200
+ network: {
201
+ autoSelectFamily: true,
202
+ dnsResultOrder: "ipv4first",
203
+ },
204
+ proxy: "socks5://localhost:9050",
205
+ webhookUrl: "https://example.com/telegram-webhook",
206
+ webhookSecret: "secret",
207
+ webhookPath: "/telegram-webhook",
208
+ },
209
+ },
210
+ }
211
+ ```
212
+
213
+ - 机器人令牌:`channels.telegram.botToken` 或 `channels.telegram.tokenFile`(仅常规文件;拒绝符号链接),默认账户还可回退到 `TELEGRAM_BOT_TOKEN`。
214
+ - 可选的 `channels.telegram.defaultAccount` 会在其与某个已配置账户 ID 匹配时覆盖默认账户选择。
215
+ - 在多账户设置(2 个及以上账户 ID)中,请设置显式默认值(`channels.telegram.defaultAccount` 或 `channels.telegram.accounts.default`),以避免回退路由;如果缺失或无效,`quantumclaw doctor` 会发出警告。
216
+ - `configWrites: false` 会阻止 Telegram 发起的配置写入(超级群组 ID 迁移、`/config set|unset`)。
217
+ - 顶层 `bindings[]` 中 `type: "acp"` 的条目会为论坛话题配置持久化 ACP 绑定(在 `match.peer.id` 中使用规范形式 `chatId:topic:topicId`)。字段语义与 [ACP Agents](/tools/acp-agents#channel-specific-settings) 共享。
218
+ - Telegram 流式预览使用 `sendMessage` + `editMessageText`(适用于私聊和群聊)。
219
+ - 重试策略:参见 [Retry policy](/concepts/retry)。
220
+
221
+ ### Discord
222
+
223
+ ```json5
224
+ {
225
+ channels: {
226
+ discord: {
227
+ enabled: true,
228
+ token: "your-bot-token",
229
+ mediaMaxMb: 8,
230
+ allowBots: false,
231
+ actions: {
232
+ reactions: true,
233
+ stickers: true,
234
+ polls: true,
235
+ permissions: true,
236
+ messages: true,
237
+ threads: true,
238
+ pins: true,
239
+ search: true,
240
+ memberInfo: true,
241
+ roleInfo: true,
242
+ roles: false,
243
+ channelInfo: true,
244
+ voiceStatus: true,
245
+ events: true,
246
+ moderation: false,
247
+ },
248
+ replyToMode: "off", // off | first | all
249
+ dmPolicy: "pairing",
250
+ allowFrom: ["1234567890", "123456789012345678"],
251
+ dm: { enabled: true, groupEnabled: false, groupChannels: ["quantumclaw-dm"] },
252
+ guilds: {
253
+ "123456789012345678": {
254
+ slug: "friends-of-quantumclaw",
255
+ requireMention: false,
256
+ ignoreOtherMentions: true,
257
+ reactionNotifications: "own",
258
+ users: ["987654321098765432"],
259
+ channels: {
260
+ general: { allow: true },
261
+ help: {
262
+ allow: true,
263
+ requireMention: true,
264
+ users: ["987654321098765432"],
265
+ skills: ["docs"],
266
+ systemPrompt: "Short answers only.",
267
+ },
268
+ },
269
+ },
270
+ },
271
+ historyLimit: 20,
272
+ textChunkLimit: 2000,
273
+ chunkMode: "length", // length | newline
274
+ streaming: "off", // off | partial | block | progress(在 Discord 上 progress 映射为 partial)
275
+ maxLinesPerMessage: 17,
276
+ ui: {
277
+ components: {
278
+ accentColor: "#5865F2",
279
+ },
280
+ },
281
+ threadBindings: {
282
+ enabled: true,
283
+ idleHours: 24,
284
+ maxAgeHours: 0,
285
+ spawnSubagentSessions: false, // 为 `sessions_spawn({ thread: true })` 选择性启用
286
+ },
287
+ voice: {
288
+ enabled: true,
289
+ autoJoin: [
290
+ {
291
+ guildId: "123456789012345678",
292
+ channelId: "234567890123456789",
293
+ },
294
+ ],
295
+ daveEncryption: true,
296
+ decryptionFailureTolerance: 24,
297
+ tts: {
298
+ provider: "openai",
299
+ openai: { voice: "alloy" },
300
+ },
301
+ },
302
+ retry: {
303
+ attempts: 3,
304
+ minDelayMs: 500,
305
+ maxDelayMs: 30000,
306
+ jitter: 0.1,
307
+ },
308
+ },
309
+ },
310
+ }
311
+ ```
312
+
313
+ - 令牌:`channels.discord.token`,默认账户还可回退到 `DISCORD_BOT_TOKEN`。
314
+ - 显式提供 Discord `token` 的直接出站调用会使用该令牌;账户重试/策略设置仍来自当前活动运行时快照中的所选账户。
315
+ - 可选的 `channels.discord.defaultAccount` 会在其与某个已配置账户 ID 匹配时覆盖默认账户选择。
316
+ - 对投递目标请使用 `user:<id>`(私信)或 `channel:<id>`(服务器频道);裸数字 ID 会被拒绝。
317
+ - 服务器 slug 为小写且空格替换为 `-`;频道键使用 slug 化名称(不含 `#`)。优先使用 guild ID。
318
+ - 默认会忽略机器人自己发出的消息。`allowBots: true` 可启用;使用 `allowBots: "mentions"` 可仅接受提及该机器人的机器人消息(仍会过滤自己的消息)。
319
+ - `channels.discord.guilds.<id>.ignoreOtherMentions`(及频道级覆盖)会丢弃那些提及了其他用户或角色但未提及机器人的消息(不含 @everyone/@here)。
320
+ - `maxLinesPerMessage`(默认 17)会在消息过高时拆分,即便未超过 2000 个字符。
321
+ - `channels.discord.threadBindings` 控制 Discord 线程绑定路由:
322
+ - `enabled`:线程绑定会话功能的 Discord 覆盖(`/focus`、`/unfocus`、`/agents`、`/session idle`、`/session max-age` 以及绑定后的投递/路由)
323
+ - `idleHours`:不活动自动取消聚焦的 Discord 覆盖值(小时,`0` 表示禁用)
324
+ - `maxAgeHours`:硬性最大年龄的 Discord 覆盖值(小时,`0` 表示禁用)
325
+ - `spawnSubagentSessions`:为 `sessions_spawn({ thread: true })` 自动创建/绑定线程的选择性开关
326
+ - 顶层 `bindings[]` 中 `type: "acp"` 的条目会为频道和线程配置持久化 ACP 绑定(在 `match.peer.id` 中使用频道/线程 ID)。字段语义与 [ACP Agents](/tools/acp-agents#channel-specific-settings) 共享。
327
+ - `channels.discord.ui.components.accentColor` 设置 Discord components v2 容器的强调色。
328
+ - `channels.discord.voice` 启用 Discord 语音频道对话,以及可选的自动加入 + TTS 覆盖。
329
+ - `channels.discord.voice.daveEncryption` 和 `channels.discord.voice.decryptionFailureTolerance` 会透传给 `@discordjs/voice` 的 DAVE 选项(默认分别为 `true` 和 `24`)。
330
+ - 在重复解密失败后,QuantumClaw 还会尝试通过离开/重新加入语音会话来恢复语音接收。
331
+ - `channels.discord.streaming` 是规范的流式模式键。旧版 `streamMode` 和布尔型 `streaming` 值会自动迁移。
332
+ - `channels.discord.autoPresence` 将运行时可用性映射为机器人状态(健康 => online,降级 => idle,耗尽 => dnd),并允许可选的状态文本覆盖。
333
+ - `channels.discord.dangerouslyAllowNameMatching` 会重新启用可变名称/tag 匹配(紧急兼容模式)。
334
+
335
+ **反应通知模式:**`off`(无)、`own`(机器人的消息,默认)、`all`(所有消息)、`allowlist`(`guilds.<id>.users` 中所有消息)。
336
+
337
+ ### Google Chat
338
+
339
+ ```json5
340
+ {
341
+ channels: {
342
+ googlechat: {
343
+ enabled: true,
344
+ serviceAccountFile: "/path/to/service-account.json",
345
+ audienceType: "app-url", // app-url | project-number
346
+ audience: "https://gateway.example.com/googlechat",
347
+ webhookPath: "/googlechat",
348
+ botUser: "users/1234567890",
349
+ dm: {
350
+ enabled: true,
351
+ policy: "pairing",
352
+ allowFrom: ["users/1234567890"],
353
+ },
354
+ groupPolicy: "allowlist",
355
+ groups: {
356
+ "spaces/AAAA": { allow: true, requireMention: true },
357
+ },
358
+ actions: { reactions: true },
359
+ typingIndicator: "message",
360
+ mediaMaxMb: 20,
361
+ },
362
+ },
363
+ }
364
+ ```
365
+
366
+ - 服务账户 JSON:支持内联(`serviceAccount`)或基于文件(`serviceAccountFile`)。
367
+ - 也支持服务账户 SecretRef(`serviceAccountRef`)。
368
+ - 环境变量回退:`GOOGLE_CHAT_SERVICE_ACCOUNT` 或 `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`。
369
+ - 对投递目标使用 `spaces/<spaceId>` 或 `users/<userId>`。
370
+ - `channels.googlechat.dangerouslyAllowNameMatching` 会重新启用可变电子邮件主体匹配(紧急兼容模式)。
371
+
372
+ ### Slack
373
+
374
+ ```json5
375
+ {
376
+ channels: {
377
+ slack: {
378
+ enabled: true,
379
+ botToken: "xoxb-...",
380
+ appToken: "xapp-...",
381
+ dmPolicy: "pairing",
382
+ allowFrom: ["U123", "U456", "*"],
383
+ dm: { enabled: true, groupEnabled: false, groupChannels: ["G123"] },
384
+ channels: {
385
+ C123: { allow: true, requireMention: true, allowBots: false },
386
+ "#general": {
387
+ allow: true,
388
+ requireMention: true,
389
+ allowBots: false,
390
+ users: ["U123"],
391
+ skills: ["docs"],
392
+ systemPrompt: "Short answers only.",
393
+ },
394
+ },
395
+ historyLimit: 50,
396
+ allowBots: false,
397
+ reactionNotifications: "own",
398
+ reactionAllowlist: ["U123"],
399
+ replyToMode: "off", // off | first | all
400
+ thread: {
401
+ historyScope: "thread", // thread | channel
402
+ inheritParent: false,
403
+ },
404
+ actions: {
405
+ reactions: true,
406
+ messages: true,
407
+ pins: true,
408
+ memberInfo: true,
409
+ emojiList: true,
410
+ },
411
+ slashCommand: {
412
+ enabled: true,
413
+ name: "quantumclaw",
414
+ sessionPrefix: "slack:slash",
415
+ ephemeral: true,
416
+ },
417
+ typingReaction: "hourglass_flowing_sand",
418
+ textChunkLimit: 4000,
419
+ chunkMode: "length",
420
+ streaming: "partial", // off | partial | block | progress(预览模式)
421
+ nativeStreaming: true, // 当 streaming=partial 时使用 Slack 原生流式 API
422
+ mediaMaxMb: 20,
423
+ },
424
+ },
425
+ }
426
+ ```
427
+
428
+ - **Socket mode** 需要同时提供 `botToken` 和 `appToken`(默认账户环境变量回退为 `SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN`)。
429
+ - **HTTP mode** 需要 `botToken`,外加 `signingSecret`(根级或按账户)。
430
+ - `configWrites: false` 会阻止 Slack 发起的配置写入。
431
+ - 可选的 `channels.slack.defaultAccount` 会在其与某个已配置账户 ID 匹配时覆盖默认账户选择。
432
+ - `channels.slack.streaming` 是规范的流式模式键。旧版 `streamMode` 和布尔型 `streaming` 值会自动迁移。
433
+ - 对投递目标使用 `user:<id>`(私信)或 `channel:<id>`(频道)。
434
+
435
+ **反应通知模式:**`off`、`own`(默认)、`all`、`allowlist`(来自 `reactionAllowlist`)。
436
+
437
+ **线程会话隔离:**`thread.historyScope` 可设为按线程(默认)或在频道内共享。`thread.inheritParent` 会将父频道记录复制到新线程。
438
+
439
+ - `typingReaction` 会在回复运行期间,为入站 Slack 消息添加一个临时反应,并在完成后移除。请使用 Slack emoji 短代码,例如 `"hourglass_flowing_sand"`。
440
+
441
+ | Action group | Default | Notes |
442
+ | ------------ | ------- | ------------------- |
443
+ | reactions | 已启用 | 添加反应 + 列出反应 |
444
+ | messages | 已启用 | 读取/发送/编辑/删除 |
445
+ | pins | 已启用 | 置顶/取消置顶/列出 |
446
+ | memberInfo | 已启用 | 成员信息 |
447
+ | emojiList | 已启用 | 自定义 emoji 列表 |
448
+
449
+ ### Mattermost
450
+
451
+ Mattermost 以插件形式提供:`quantumclaw plugins install @quantumclaw/mattermost`。
452
+
453
+ ```json5
454
+ {
455
+ channels: {
456
+ mattermost: {
457
+ enabled: true,
458
+ botToken: "mm-token",
459
+ baseUrl: "https://chat.example.com",
460
+ dmPolicy: "pairing",
461
+ chatmode: "oncall", // oncall | onmessage | onchar
462
+ oncharPrefixes: [">", "!"],
463
+ commands: {
464
+ native: true, // 选择性启用
465
+ nativeSkills: true,
466
+ callbackPath: "/api/channels/mattermost/command",
467
+ // 为反向代理/公共部署提供可选的显式 URL
468
+ callbackUrl: "https://gateway.example.com/api/channels/mattermost/command",
469
+ },
470
+ textChunkLimit: 4000,
471
+ chunkMode: "length",
472
+ },
473
+ },
474
+ }
475
+ ```
476
+
477
+ 聊天模式:`oncall`(在 @ 提及时回复,默认)、`onmessage`(每条消息都回复)、`onchar`(以触发前缀开头的消息)。
478
+
479
+ 启用 Mattermost 原生命令时:
480
+
481
+ - `commands.callbackPath` 必须是路径(例如 `/api/channels/mattermost/command`),不能是完整 URL。
482
+ - `commands.callbackUrl` 必须解析到 QuantumClaw Gateway 网关端点,并且 Mattermost 服务器可以访问它。
483
+ - 对于私有/tailnet/内网回调主机,Mattermost 可能要求
484
+ `ServiceSettings.AllowedUntrustedInternalConnections` 包含该回调主机/域名。
485
+ 请使用主机/域名值,而不是完整 URL。
486
+ - `channels.mattermost.configWrites`:允许或拒绝 Mattermost 发起的配置写入。
487
+ - `channels.mattermost.requireMention`:在频道中回复前要求 `@mention`。
488
+ - 可选的 `channels.mattermost.defaultAccount` 会在其与某个已配置账户 ID 匹配时覆盖默认账户选择。
489
+
490
+ ### Signal
491
+
492
+ ```json5
493
+ {
494
+ channels: {
495
+ signal: {
496
+ enabled: true,
497
+ account: "+15555550123", // 可选账户绑定
498
+ dmPolicy: "pairing",
499
+ allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"],
500
+ configWrites: true,
501
+ reactionNotifications: "own", // off | own | all | allowlist
502
+ reactionAllowlist: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"],
503
+ historyLimit: 50,
504
+ },
505
+ },
506
+ }
507
+ ```
508
+
509
+ **反应通知模式:**`off`、`own`(默认)、`all`、`allowlist`(来自 `reactionAllowlist`)。
510
+
511
+ - `channels.signal.account`:将渠道启动固定到特定 Signal 账户身份。
512
+ - `channels.signal.configWrites`:允许或拒绝 Signal 发起的配置写入。
513
+ - 可选的 `channels.signal.defaultAccount` 会在其与某个已配置账户 ID 匹配时覆盖默认账户选择。
514
+
515
+ ### BlueBubbles
516
+
517
+ BlueBubbles 是推荐的 iMessage 路径(由插件支持,配置在 `channels.bluebubbles` 下)。
518
+
519
+ ```json5
520
+ {
521
+ channels: {
522
+ bluebubbles: {
523
+ enabled: true,
524
+ dmPolicy: "pairing",
525
+ // serverUrl、password、webhookPath、群组控制和高级操作:
526
+ // 见 /channels/bluebubbles
527
+ },
528
+ },
529
+ }
530
+ ```
531
+
532
+ - 此处涵盖的核心键路径:`channels.bluebubbles`、`channels.bluebubbles.dmPolicy`。
533
+ - 可选的 `channels.bluebubbles.defaultAccount` 会在其与某个已配置账户 ID 匹配时覆盖默认账户选择。
534
+ - 完整的 BlueBubbles 渠道配置文档见 [BlueBubbles](/channels/bluebubbles)。
535
+
536
+ ### iMessage
537
+
538
+ QuantumClaw 会启动 `imsg rpc`(通过 stdio 的 JSON-RPC)。不需要守护进程或端口。
539
+
540
+ ```json5
541
+ {
542
+ channels: {
543
+ imessage: {
544
+ enabled: true,
545
+ cliPath: "imsg",
546
+ dbPath: "~/Library/Messages/chat.db",
547
+ remoteHost: "user@gateway-host",
548
+ dmPolicy: "pairing",
549
+ allowFrom: ["+15555550123", "user@example.com", "chat_id:123"],
550
+ historyLimit: 50,
551
+ includeAttachments: false,
552
+ attachmentRoots: ["/Users/*/Library/Messages/Attachments"],
553
+ remoteAttachmentRoots: ["/Users/*/Library/Messages/Attachments"],
554
+ mediaMaxMb: 16,
555
+ service: "auto",
556
+ region: "US",
557
+ },
558
+ },
559
+ }
560
+ ```
561
+
562
+ - 可选的 `channels.imessage.defaultAccount` 会在其与某个已配置账户 ID 匹配时覆盖默认账户选择。
563
+
564
+ - 需要对 Messages DB 具有 Full Disk Access。
565
+ - 优先使用 `chat_id:<id>` 目标。使用 `imsg chats --limit 20` 列出聊天。
566
+ - `cliPath` 可以指向 SSH 包装器;设置 `remoteHost`(`host` 或 `user@host`)以通过 SCP 获取附件。
567
+ - `attachmentRoots` 和 `remoteAttachmentRoots` 会限制入站附件路径(默认:`/Users/*/Library/Messages/Attachments`)。
568
+ - SCP 使用严格主机密钥检查,因此请确保中继主机密钥已存在于 `~/.ssh/known_hosts`。
569
+ - `channels.imessage.configWrites`:允许或拒绝 iMessage 发起的配置写入。
570
+
571
+ <Accordion title="iMessage SSH 包装器示例">
572
+
573
+ ```bash
574
+ #!/usr/bin/env bash
575
+ exec ssh -T gateway-host imsg "$@"
576
+ ```
577
+
578
+ </Accordion>
579
+
580
+ ### Microsoft Teams
581
+
582
+ Microsoft Teams 由扩展支持,并配置在 `channels.msteams` 下。
583
+
584
+ ```json5
585
+ {
586
+ channels: {
587
+ msteams: {
588
+ enabled: true,
589
+ configWrites: true,
590
+ // appId、appPassword、tenantId、webhook、团队/频道策略:
591
+ // 见 /channels/msteams
592
+ },
593
+ },
594
+ }
595
+ ```
596
+
597
+ - 此处涵盖的核心键路径:`channels.msteams`、`channels.msteams.configWrites`。
598
+ - 完整的 Teams 配置(凭证、webhook、私信/群组策略、按团队/按频道覆盖)见 [Microsoft Teams](/channels/msteams)。
599
+
600
+ ### IRC
601
+
602
+ IRC 由扩展支持,并配置在 `channels.irc` 下。
603
+
604
+ ```json5
605
+ {
606
+ channels: {
607
+ irc: {
608
+ enabled: true,
609
+ dmPolicy: "pairing",
610
+ configWrites: true,
611
+ nickserv: {
612
+ enabled: true,
613
+ service: "NickServ",
614
+ password: "${IRC_NICKSERV_PASSWORD}",
615
+ register: false,
616
+ registerEmail: "bot@example.com",
617
+ },
618
+ },
619
+ },
620
+ }
621
+ ```
622
+
623
+ - 此处涵盖的核心键路径:`channels.irc`、`channels.irc.dmPolicy`、`channels.irc.configWrites`、`channels.irc.nickserv.*`。
624
+ - 可选的 `channels.irc.defaultAccount` 会在其与某个已配置账户 ID 匹配时覆盖默认账户选择。
625
+ - 完整的 IRC 渠道配置(主机/端口/TLS/频道/allowlist/提及门控)见 [IRC](/channels/irc)。
626
+
627
+ ### 多账户(所有渠道)
628
+
629
+ 按渠道运行多个账户(每个账户有自己的 `accountId`):
630
+
631
+ ```json5
632
+ {
633
+ channels: {
634
+ telegram: {
635
+ accounts: {
636
+ default: {
637
+ name: "Primary bot",
638
+ botToken: "123456:ABC...",
639
+ },
640
+ alerts: {
641
+ name: "Alerts bot",
642
+ botToken: "987654:XYZ...",
643
+ },
644
+ },
645
+ },
646
+ },
647
+ }
648
+ ```
649
+
650
+ - 省略 `accountId` 时使用 `default`(CLI + 路由)。
651
+ - 环境变量令牌仅适用于 **default** 账户。
652
+ - 基础渠道设置适用于所有账户,除非按账户覆盖。
653
+ - 使用 `bindings[].match.accountId` 将每个账户路由到不同智能体。
654
+ - 如果你通过 `quantumclaw channels add`(或渠道新手引导)添加了一个非默认账户,而当前仍是单账户顶层渠道配置,QuantumClaw 会先将带账户作用域的顶层单账户值移动到 `channels.<channel>.accounts.default`,以便原始账户继续工作。
655
+ - 现有仅渠道绑定(无 `accountId`)仍会匹配默认账户;账户作用域绑定仍是可选的。
656
+ - 当存在命名账户但缺少 `default` 时,`quantumclaw doctor --fix` 也会通过将带账户作用域的顶层单账户值移动到 `accounts.default` 来修复混合形状。
657
+
658
+ ### 其他扩展渠道
659
+
660
+ 许多扩展渠道都配置为 `channels.<id>`,并在其专属渠道页面中记录(例如 Feishu、Matrix、LINE、Nostr、Zalo、Nextcloud Talk、Synology Chat 和 Twitch)。
661
+ 查看完整渠道索引:[Channels](/channels)。
662
+
663
+ ### 群聊提及门控
664
+
665
+ 群消息默认**要求提及**(元数据提及或安全正则模式)。适用于 WhatsApp、Telegram、Discord、Google Chat 和 iMessage 群聊。
666
+
667
+ **提及类型:**
668
+
669
+ - **元数据提及**:平台原生 @ 提及。在 WhatsApp 自聊模式中会被忽略。
670
+ - **文本模式**:位于 `agents.list[].groupChat.mentionPatterns` 中的安全正则模式。无效模式和不安全的嵌套重复会被忽略。
671
+ - 只有在可以检测提及的情况下(原生提及或至少一个模式),才会强制执行提及门控。
672
+
673
+ ```json5
674
+ {
675
+ messages: {
676
+ groupChat: { historyLimit: 50 },
677
+ },
678
+ agents: {
679
+ list: [{ id: "main", groupChat: { mentionPatterns: ["@quantumclaw", "quantumclaw"] } }],
680
+ },
681
+ }
682
+ ```
683
+
684
+ `messages.groupChat.historyLimit` 设置全局默认值。渠道可通过 `channels.<channel>.historyLimit`(或按账户)覆盖。设为 `0` 可禁用。
685
+
686
+ #### 私信历史限制
687
+
688
+ ```json5
689
+ {
690
+ channels: {
691
+ telegram: {
692
+ dmHistoryLimit: 30,
693
+ dms: {
694
+ "123456789": { historyLimit: 50 },
695
+ },
696
+ },
697
+ },
698
+ }
699
+ ```
700
+
701
+ 解析顺序:按私信覆盖 → 提供商默认值 → 无限制(全部保留)。
702
+
703
+ 支持:`telegram`、`whatsapp`、`discord`、`slack`、`signal`、`imessage`、`msteams`。
704
+
705
+ #### 自聊模式
706
+
707
+ 将你自己的号码包含在 `allowFrom` 中可启用自聊模式(忽略原生 @ 提及,仅响应文本模式):
708
+
709
+ ```json5
710
+ {
711
+ channels: {
712
+ whatsapp: {
713
+ allowFrom: ["+15555550123"],
714
+ groups: { "*": { requireMention: true } },
715
+ },
716
+ },
717
+ agents: {
718
+ list: [
719
+ {
720
+ id: "main",
721
+ groupChat: { mentionPatterns: ["reisponde", "@quantumclaw"] },
722
+ },
723
+ ],
724
+ },
725
+ }
726
+ ```
727
+
728
+ ### 命令(聊天命令处理)
729
+
730
+ ```json5
731
+ {
732
+ commands: {
733
+ native: "auto", // 在支持时注册原生命令
734
+ text: true, // 解析聊天消息中的 /commands
735
+ bash: false, // 允许 !(别名:/bash)
736
+ bashForegroundMs: 2000,
737
+ config: false, // 允许 /config
738
+ debug: false, // 允许 /debug
739
+ restart: false, // 允许 /restart + gateway restart 工具
740
+ allowFrom: {
741
+ "*": ["user1"],
742
+ discord: ["user:123"],
743
+ },
744
+ useAccessGroups: true,
745
+ },
746
+ }
747
+ ```
748
+
749
+ <Accordion title="命令详情">
750
+
751
+ - 文本命令必须是以 `/` 开头的**独立**消息。
752
+ - `native: "auto"` 会为 Discord/Telegram 打开原生命令,而让 Slack 保持关闭。
753
+ - 可按渠道覆盖:`channels.discord.commands.native`(布尔值或 `"auto"`)。`false` 会清除先前已注册的命令。
754
+ - `channels.telegram.customCommands` 可添加额外的 Telegram 机器人菜单项。
755
+ - `bash: true` 会为主机 shell 启用 `! <cmd>`。要求 `tools.elevated.enabled` 已启用,且发送者在 `tools.elevated.allowFrom.<channel>` 中。
756
+ - `config: true` 启用 `/config`(读取/写入 `quantumclaw.json`)。对于 gateway `chat.send` 客户端,持久化的 `/config set|unset` 写入还要求 `operator.admin`;只读的 `/config show` 对普通写作用域 operator 客户端仍然可用。
757
+ - `channels.<provider>.configWrites` 按渠道控制配置变更(默认:true)。
758
+ - 对多账户渠道,`channels.<provider>.accounts.<id>.configWrites` 也会控制针对该账户的写入(例如 `/allowlist --config --account <id>` 或 `/config set channels.<provider>.accounts.<id>...`)。
759
+ - `allowFrom` 是按提供商配置的。设置后,它将成为**唯一**的授权来源(渠道 allowlist/配对和 `useAccessGroups` 都会被忽略)。
760
+ - 当 `allowFrom` 未设置时,`useAccessGroups: false` 允许命令绕过访问组策略。
761
+
762
+ </Accordion>
763
+
764
+ ---
765
+
766
+ ## 智能体默认值
767
+
768
+ ### `agents.defaults.workspace`
769
+
770
+ 默认值:`~/.quantumclaw/workspace`。
771
+
772
+ ```json5
773
+ {
774
+ agents: { defaults: { workspace: "~/.quantumclaw/workspace" } },
775
+ }
776
+ ```
777
+
778
+ ### `agents.defaults.repoRoot`
779
+
780
+ 可选的仓库根目录,会显示在系统提示的 Runtime 行中。如果未设置,QuantumClaw 会从工作区向上遍历自动检测。
781
+
782
+ ```json5
783
+ {
784
+ agents: { defaults: { repoRoot: "~/Projects/quantumclaw" } },
785
+ }
786
+ ```
787
+
788
+ ### `agents.defaults.skipBootstrap`
789
+
790
+ 禁用自动创建工作区引导文件(`AGENTS.md`、`SOUL.md`、`TOOLS.md`、`IDENTITY.md`、`USER.md`、`HEARTBEAT.md`、`BOOTSTRAP.md`)。
791
+
792
+ ```json5
793
+ {
794
+ agents: { defaults: { skipBootstrap: true } },
795
+ }
796
+ ```
797
+
798
+ ### `agents.defaults.bootstrapMaxChars`
799
+
800
+ 单个工作区引导文件在截断前的最大字符数。默认:`20000`。
801
+
802
+ ```json5
803
+ {
804
+ agents: { defaults: { bootstrapMaxChars: 20000 } },
805
+ }
806
+ ```
807
+
808
+ ### `agents.defaults.bootstrapTotalMaxChars`
809
+
810
+ 所有工作区引导文件注入时的最大总字符数。默认:`150000`。
811
+
812
+ ```json5
813
+ {
814
+ agents: { defaults: { bootstrapTotalMaxChars: 150000 } },
815
+ }
816
+ ```
817
+
818
+ ### `agents.defaults.bootstrapPromptTruncationWarning`
819
+
820
+ 控制引导上下文被截断时,对智能体可见的警告文本。
821
+ 默认:`"once"`。
822
+
823
+ - `"off"`:绝不向系统提示注入警告文本。
824
+ - `"once"`:对每个唯一的截断签名仅注入一次警告(推荐)。
825
+ - `"always"`:只要存在截断,就在每次运行时注入警告。
826
+
827
+ ```json5
828
+ {
829
+ agents: { defaults: { bootstrapPromptTruncationWarning: "once" } }, // off | once | always
830
+ }
831
+ ```
832
+
833
+ ### `agents.defaults.imageMaxDimensionPx`
834
+
835
+ 在调用提供商之前,记录/工具图像块中最长边的最大像素尺寸。
836
+ 默认:`1200`。
837
+
838
+ 较低的值通常会降低视觉 token 用量以及截图密集型运行的请求负载大小。
839
+ 较高的值可保留更多视觉细节。
840
+
841
+ ```json5
842
+ {
843
+ agents: { defaults: { imageMaxDimensionPx: 1200 } },
844
+ }
845
+ ```
846
+
847
+ ### `agents.defaults.userTimezone`
848
+
849
+ 系统提示上下文使用的时区(不是消息时间戳)。回退到主机时区。
850
+
851
+ ```json5
852
+ {
853
+ agents: { defaults: { userTimezone: "America/Chicago" } },
854
+ }
855
+ ```
856
+
857
+ ### `agents.defaults.timeFormat`
858
+
859
+ 系统提示中的时间格式。默认:`auto`(操作系统偏好)。
860
+
861
+ ```json5
862
+ {
863
+ agents: { defaults: { timeFormat: "auto" } }, // auto | 12 | 24
864
+ }
865
+ ```
866
+
867
+ ### `agents.defaults.model`
868
+
869
+ ```json5
870
+ {
871
+ agents: {
872
+ defaults: {
873
+ models: {
874
+ "anthropic/claude-opus-4-6": { alias: "opus" },
875
+ "minimax/MiniMax-M2.5": { alias: "minimax" },
876
+ },
877
+ model: {
878
+ primary: "anthropic/claude-opus-4-6",
879
+ fallbacks: ["minimax/MiniMax-M2.5"],
880
+ },
881
+ imageModel: {
882
+ primary: "openrouter/qwen/qwen-2.5-vl-72b-instruct:free",
883
+ fallbacks: ["openrouter/google/gemini-2.0-flash-vision:free"],
884
+ },
885
+ pdfModel: {
886
+ primary: "anthropic/claude-opus-4-6",
887
+ fallbacks: ["openai/gpt-5-mini"],
888
+ },
889
+ pdfMaxBytesMb: 10,
890
+ pdfMaxPages: 20,
891
+ thinkingDefault: "low",
892
+ verboseDefault: "off",
893
+ elevatedDefault: "on",
894
+ timeoutSeconds: 600,
895
+ mediaMaxMb: 5,
896
+ contextTokens: 200000,
897
+ maxConcurrent: 3,
898
+ },
899
+ },
900
+ }
901
+ ```
902
+
903
+ - `model`:接受字符串(`"provider/model"`)或对象(`{ primary, fallbacks }`)。
904
+ - 字符串形式只设置主模型。
905
+ - 对象形式设置主模型以及按顺序排列的故障切换模型。
906
+ - `imageModel`:接受字符串(`"provider/model"`)或对象(`{ primary, fallbacks }`)。
907
+ - 由 `image` 工具路径作为其视觉模型配置使用。
908
+ - 当所选/默认模型无法接受图像输入时,也用作回退路由。
909
+ - `pdfModel`:接受字符串(`"provider/model"`)或对象(`{ primary, fallbacks }`)。
910
+ - 由 `pdf` 工具用于模型路由。
911
+ - 如果省略,PDF 工具会回退到 `imageModel`,再回退到提供商的尽力默认值。
912
+ - `pdfMaxBytesMb`:`pdf` 工具在调用时未传入 `maxBytesMb` 时使用的默认 PDF 大小限制。
913
+ - `pdfMaxPages`:`pdf` 工具在提取回退模式下考虑的默认最大页数。
914
+ - `model.primary`:格式为 `provider/model`(例如 `anthropic/claude-opus-4-6`)。如果省略 provider,QuantumClaw 会假定为 `anthropic`(已弃用)。
915
+ - `models`:为 `/model` 配置的模型目录和 allowlist。每项可包含 `alias`(快捷方式)和 `params`(提供商特定参数,例如 `temperature`、`maxTokens`、`cacheRetention`、`context1m`)。
916
+ - `params` 合并优先级(配置):`agents.defaults.models["provider/model"].params` 为基础,然后由 `agents.list[].params`(匹配的智能体 ID)按键覆盖。
917
+ - 会修改这些字段的配置写入器(例如 `/models set`、`/models set-image` 以及故障切换增删命令)会保存为规范的对象形式,并尽可能保留现有故障切换列表。
918
+ - `maxConcurrent`:会话之间并行的智能体运行最大数(每个会话本身仍是串行)。默认:1。
919
+
920
+ **内置别名简写**(仅当模型位于 `agents.defaults.models` 中时适用):
921
+
922
+ | Alias | Model |
923
+ | ------------------- | -------------------------------------- |
924
+ | `opus` | `anthropic/claude-opus-4-6` |
925
+ | `sonnet` | `anthropic/claude-sonnet-4-6` |
926
+ | `gpt` | `openai/gpt-5.4` |
927
+ | `gpt-mini` | `openai/gpt-5-mini` |
928
+ | `gemini` | `google/gemini-3.1-pro-preview` |
929
+ | `gemini-flash` | `google/gemini-3-flash-preview` |
930
+ | `gemini-flash-lite` | `google/gemini-3.1-flash-lite-preview` |
931
+
932
+ 你配置的别名始终优先于默认值。
933
+
934
+ Z.AI 的 GLM-4.x 模型会自动启用 thinking 模式,除非你设置 `--thinking off`,或自行定义 `agents.defaults.models["zai/<model>"].params.thinking`。
935
+ Z.AI 模型默认启用 `tool_stream` 以支持工具调用流式传输。将 `agents.defaults.models["zai/<model>"].params.tool_stream` 设为 `false` 可禁用。
936
+ Anthropic Claude 4.6 模型在未显式设置 thinking 级别时,默认使用 `adaptive` thinking。
937
+
938
+ ### `agents.defaults.cliBackends`
939
+
940
+ 文本专用回退运行(无工具调用)的可选 CLI 后端。当 API 提供商失败时,可作为备份。
941
+
942
+ ```json5
943
+ {
944
+ agents: {
945
+ defaults: {
946
+ cliBackends: {
947
+ "claude-cli": {
948
+ command: "/opt/homebrew/bin/claude",
949
+ },
950
+ "my-cli": {
951
+ command: "my-cli",
952
+ args: ["--json"],
953
+ output: "json",
954
+ modelArg: "--model",
955
+ sessionArg: "--session",
956
+ sessionMode: "existing",
957
+ systemPromptArg: "--system",
958
+ systemPromptWhen: "first",
959
+ imageArg: "--image",
960
+ imageMode: "repeat",
961
+ },
962
+ },
963
+ },
964
+ },
965
+ }
966
+ ```
967
+
968
+ - CLI 后端以文本为主;工具始终禁用。
969
+ - 设置了 `sessionArg` 时支持会话。
970
+ - 当 `imageArg` 接受文件路径时,支持图像透传。
971
+
972
+ ### `agents.defaults.heartbeat`
973
+
974
+ 周期性心跳运行。
975
+
976
+ ```json5
977
+ {
978
+ agents: {
979
+ defaults: {
980
+ heartbeat: {
981
+ every: "30m", // 0m 表示禁用
982
+ model: "openai/gpt-5.2-mini",
983
+ includeReasoning: false,
984
+ lightContext: false, // 默认:false;true 仅保留工作区引导文件中的 HEARTBEAT.md
985
+ isolatedSession: false, // 默认:false;true 表示每次心跳都在全新会话中运行(无对话历史)
986
+ session: "main",
987
+ to: "+15555550123",
988
+ directPolicy: "allow", // allow(默认)| block
989
+ target: "none", // 默认:none | 可选:last | whatsapp | telegram | discord | ...
990
+ prompt: "Read HEARTBEAT.md if it exists...",
991
+ ackMaxChars: 300,
992
+ suppressToolErrorWarnings: false,
993
+ },
994
+ },
995
+ },
996
+ }
997
+ ```
998
+
999
+ - `every`:时长字符串(ms/s/m/h)。默认:`30m`。
1000
+ - `suppressToolErrorWarnings`:为 true 时,在心跳运行期间抑制工具错误警告负载。
1001
+ - `directPolicy`:直接/私信投递策略。`allow`(默认)允许直接目标投递。`block` 会抑制直接目标投递,并发出 `reason=dm-blocked`。
1002
+ - `lightContext`:为 true 时,心跳运行使用轻量引导上下文,并且只保留工作区引导文件中的 `HEARTBEAT.md`。
1003
+ - `isolatedSession`:为 true 时,每次心跳都会在无先前对话历史的全新会话中运行。与 cron `sessionTarget: "isolated"` 使用相同的隔离模式。可将每次心跳的 token 成本从约 100K 降到约 2-5K。
1004
+ - 按智能体设置:使用 `agents.list[].heartbeat`。当任一智能体定义了 `heartbeat` 时,**只有这些智能体**会运行心跳。
1005
+ - 心跳会执行完整的智能体轮次——间隔越短,消耗的 token 越多。
1006
+
1007
+ ### `agents.defaults.compaction`
1008
+
1009
+ ```json5
1010
+ {
1011
+ agents: {
1012
+ defaults: {
1013
+ compaction: {
1014
+ mode: "safeguard", // default | safeguard
1015
+ timeoutSeconds: 900,
1016
+ reserveTokensFloor: 24000,
1017
+ identifierPolicy: "strict", // strict | off | custom
1018
+ identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // 当 identifierPolicy=custom 时使用
1019
+ postCompactionSections: ["Session Startup", "Red Lines"], // [] 表示禁用重新注入
1020
+ model: "openrouter/anthropic/claude-sonnet-4-5", // 可选,仅用于压缩的模型覆盖
1021
+ memoryFlush: {
1022
+ enabled: true,
1023
+ softThresholdTokens: 6000,
1024
+ systemPrompt: "Session nearing compaction. Store durable memories now.",
1025
+ prompt: "Write any lasting notes to memory/YYYY-MM-DD.md; reply with NO_REPLY if nothing to store.",
1026
+ },
1027
+ },
1028
+ },
1029
+ },
1030
+ }
1031
+ ```
1032
+
1033
+ - `mode`:`default` 或 `safeguard`(用于长历史的分块摘要)。见 [Compaction](/concepts/compaction)。
1034
+ - `timeoutSeconds`:QuantumClaw 中止前,单次压缩操作允许的最大秒数。默认:`900`。
1035
+ - `identifierPolicy`:`strict`(默认)、`off` 或 `custom`。`strict` 会在压缩摘要时预置内置的不透明标识符保留指导。
1036
+ - `identifierInstructions`:当 `identifierPolicy=custom` 时使用的可选自定义标识符保留文本。
1037
+ - `postCompactionSections`:压缩后重新注入的可选 AGENTS.md H2/H3 节名称。默认是 `["Session Startup", "Red Lines"]`;设为 `[]` 可禁用重新注入。当未设置或显式设置为该默认组合时,旧版 `Every Session`/`Safety` 标题也会作为兼容回退被接受。
1038
+ - `model`:仅用于压缩摘要的可选 `provider/model-id` 覆盖。当主会话应保留一个模型,但压缩摘要应在另一个模型上运行时使用;未设置时,压缩会使用会话的主模型。
1039
+ - `memoryFlush`:自动压缩前的静默智能体轮次,用于存储持久记忆。工作区为只读时会跳过。
1040
+
1041
+ ### `agents.defaults.contextPruning`
1042
+
1043
+ 在发送到 LLM 之前,从内存上下文中裁剪**旧的工具结果**。**不会**修改磁盘上的会话历史。
1044
+
1045
+ ```json5
1046
+ {
1047
+ agents: {
1048
+ defaults: {
1049
+ contextPruning: {
1050
+ mode: "cache-ttl", // off | cache-ttl
1051
+ ttl: "1h", // 时长(ms/s/m/h),默认单位:分钟
1052
+ keepLastAssistants: 3,
1053
+ softTrimRatio: 0.3,
1054
+ hardClearRatio: 0.5,
1055
+ minPrunableToolChars: 50000,
1056
+ softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 },
1057
+ hardClear: { enabled: true, placeholder: "[Old tool result content cleared]" },
1058
+ tools: { deny: ["browser", "canvas"] },
1059
+ },
1060
+ },
1061
+ },
1062
+ }
1063
+ ```
1064
+
1065
+ <Accordion title="cache-ttl 模式行为">
1066
+
1067
+ - `mode: "cache-ttl"` 启用裁剪过程。
1068
+ - `ttl` 控制在上次缓存触碰后,多久才能再次运行裁剪。
1069
+ - 裁剪会先对过大的工具结果进行软裁剪,如仍有需要,再对更旧的工具结果执行硬清除。
1070
+
1071
+ **软裁剪**保留开头和结尾,并在中间插入 `...`。
1072
+
1073
+ **硬清除**用占位符替换整个工具结果。
1074
+
1075
+ 说明:
1076
+
1077
+ - 图像块永远不会被裁剪/清除。
1078
+ - 比例是基于字符的(近似),不是精确 token 数。
1079
+ - 如果 assistant 消息少于 `keepLastAssistants`,则跳过裁剪。
1080
+
1081
+ </Accordion>
1082
+
1083
+ 行为细节见 [Session Pruning](/concepts/session-pruning)。
1084
+
1085
+ ### 分块流式传输
1086
+
1087
+ ```json5
1088
+ {
1089
+ agents: {
1090
+ defaults: {
1091
+ blockStreamingDefault: "off", // on | off
1092
+ blockStreamingBreak: "text_end", // text_end | message_end
1093
+ blockStreamingChunk: { minChars: 800, maxChars: 1200 },
1094
+ blockStreamingCoalesce: { idleMs: 1000 },
1095
+ humanDelay: { mode: "natural" }, // off | natural | custom(使用 minMs/maxMs)
1096
+ },
1097
+ },
1098
+ }
1099
+ ```
1100
+
1101
+ - 非 Telegram 渠道需要显式设置 `*.blockStreaming: true` 才会启用分块回复。
1102
+ - 渠道覆盖:`channels.<channel>.blockStreamingCoalesce`(以及按账户变体)。Signal/Slack/Discord/Google Chat 默认 `minChars: 1500`。
1103
+ - `humanDelay`:分块回复之间的随机暂停。`natural` = 800–2500 ms。按智能体覆盖:`agents.list[].humanDelay`。
1104
+
1105
+ 行为和分块细节见 [Streaming](/concepts/streaming)。
1106
+
1107
+ ### 输入指示器
1108
+
1109
+ ```json5
1110
+ {
1111
+ agents: {
1112
+ defaults: {
1113
+ typingMode: "instant", // never | instant | thinking | message
1114
+ typingIntervalSeconds: 6,
1115
+ },
1116
+ },
1117
+ }
1118
+ ```
1119
+
1120
+ - 默认值:私聊/被提及时为 `instant`,未提及的群聊中为 `message`。
1121
+ - 按会话覆盖:`session.typingMode`、`session.typingIntervalSeconds`。
1122
+
1123
+ 见 [Typing Indicators](/concepts/typing-indicators)。
1124
+
1125
+ ### `agents.defaults.sandbox`
1126
+
1127
+ 嵌入式智能体的可选沙箱隔离。完整指南见 [沙箱隔离](/gateway/sandboxing)。
1128
+
1129
+ ```json5
1130
+ {
1131
+ agents: {
1132
+ defaults: {
1133
+ sandbox: {
1134
+ mode: "non-main", // off | non-main | all
1135
+ backend: "docker", // docker | ssh | openshell
1136
+ scope: "agent", // session | agent | shared
1137
+ workspaceAccess: "none", // none | ro | rw
1138
+ workspaceRoot: "~/.quantumclaw/sandboxes",
1139
+ docker: {
1140
+ image: "quantumclaw-sandbox:bookworm-slim",
1141
+ containerPrefix: "quantumclaw-sbx-",
1142
+ workdir: "/workspace",
1143
+ readOnlyRoot: true,
1144
+ tmpfs: ["/tmp", "/var/tmp", "/run"],
1145
+ network: "none",
1146
+ user: "1000:1000",
1147
+ capDrop: ["ALL"],
1148
+ env: { LANG: "C.UTF-8" },
1149
+ setupCommand: "apt-get update && apt-get install -y git curl jq",
1150
+ pidsLimit: 256,
1151
+ memory: "1g",
1152
+ memorySwap: "2g",
1153
+ cpus: 1,
1154
+ ulimits: {
1155
+ nofile: { soft: 1024, hard: 2048 },
1156
+ nproc: 256,
1157
+ },
1158
+ seccompProfile: "/path/to/seccomp.json",
1159
+ apparmorProfile: "quantumclaw-sandbox",
1160
+ dns: ["1.1.1.1", "8.8.8.8"],
1161
+ extraHosts: ["internal.service:10.0.0.5"],
1162
+ binds: ["/home/user/source:/source:rw"],
1163
+ },
1164
+ ssh: {
1165
+ target: "user@gateway-host:22",
1166
+ command: "ssh",
1167
+ workspaceRoot: "/tmp/quantumclaw-sandboxes",
1168
+ strictHostKeyChecking: true,
1169
+ updateHostKeys: true,
1170
+ identityFile: "~/.ssh/id_ed25519",
1171
+ certificateFile: "~/.ssh/id_ed25519-cert.pub",
1172
+ knownHostsFile: "~/.ssh/known_hosts",
1173
+ // 也支持 SecretRef / 内联内容:
1174
+ // identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" },
1175
+ // certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" },
1176
+ // knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" },
1177
+ },
1178
+ browser: {
1179
+ enabled: false,
1180
+ image: "quantumclaw-sandbox-browser:bookworm-slim",
1181
+ network: "quantumclaw-sandbox-browser",
1182
+ cdpPort: 9222,
1183
+ cdpSourceRange: "172.21.0.1/32",
1184
+ vncPort: 5900,
1185
+ noVncPort: 6080,
1186
+ headless: false,
1187
+ enableNoVnc: true,
1188
+ allowHostControl: false,
1189
+ autoStart: true,
1190
+ autoStartTimeoutMs: 12000,
1191
+ },
1192
+ prune: {
1193
+ idleHours: 24,
1194
+ maxAgeDays: 7,
1195
+ },
1196
+ },
1197
+ },
1198
+ },
1199
+ tools: {
1200
+ sandbox: {
1201
+ tools: {
1202
+ allow: [
1203
+ "exec",
1204
+ "process",
1205
+ "read",
1206
+ "write",
1207
+ "edit",
1208
+ "apply_patch",
1209
+ "sessions_list",
1210
+ "sessions_history",
1211
+ "sessions_send",
1212
+ "sessions_spawn",
1213
+ "session_status",
1214
+ ],
1215
+ deny: ["browser", "canvas", "nodes", "cron", "discord", "gateway"],
1216
+ },
1217
+ },
1218
+ },
1219
+ }
1220
+ ```
1221
+
1222
+ <Accordion title="沙箱详情">
1223
+
1224
+ **后端:**
1225
+
1226
+ - `docker`:本地 Docker 运行时(默认)
1227
+ - `ssh`:通用的 SSH 远程运行时
1228
+ - `openshell`:OpenShell 运行时
1229
+
1230
+ 选择 `backend: "openshell"` 时,运行时特定设置会移动到
1231
+ `plugins.entries.openshell.config`。
1232
+
1233
+ **SSH 后端配置:**
1234
+
1235
+ - `target`:`user@host[:port]` 形式的 SSH 目标
1236
+ - `command`:SSH 客户端命令(默认:`ssh`)
1237
+ - `workspaceRoot`:按作用域工作区使用的远程绝对根目录
1238
+ - `identityFile` / `certificateFile` / `knownHostsFile`:传递给 OpenSSH 的现有本地文件
1239
+ - `identityData` / `certificateData` / `knownHostsData`:内联内容或 SecretRef,QuantumClaw 会在运行时将其物化为临时文件
1240
+ - `strictHostKeyChecking` / `updateHostKeys`:OpenSSH 主机密钥策略开关
1241
+
1242
+ **SSH 认证优先级:**
1243
+
1244
+ - `identityData` 优先于 `identityFile`
1245
+ - `certificateData` 优先于 `certificateFile`
1246
+ - `knownHostsData` 优先于 `knownHostsFile`
1247
+ - 由 SecretRef 支持的 `*Data` 值会在沙箱会话启动前,从活动 secrets 运行时快照中解析
1248
+
1249
+ **SSH 后端行为:**
1250
+
1251
+ - 在创建或重建后,对远程工作区进行一次种子初始化
1252
+ - 之后保持远程 SSH 工作区为规范副本
1253
+ - 通过 SSH 路由 `exec`、文件工具和媒体路径
1254
+ - 不会自动将远程更改同步回主机
1255
+ - 不支持沙箱浏览器容器
1256
+
1257
+ **工作区访问:**
1258
+
1259
+ - `none`:位于 `~/.quantumclaw/sandboxes` 下的按作用域划分的沙箱工作区
1260
+ - `ro`:沙箱工作区位于 `/workspace`,智能体工作区以只读方式挂载到 `/agent`
1261
+ - `rw`:智能体工作区以读写方式挂载到 `/workspace`
1262
+
1263
+ **作用域:**
1264
+
1265
+ - `session`:每个会话一个容器 + 工作区
1266
+ - `agent`:每个智能体一个容器 + 工作区(默认)
1267
+ - `shared`:共享容器和工作区(无跨会话隔离)
1268
+
1269
+ **OpenShell 插件配置:**
1270
+
1271
+ ```json5
1272
+ {
1273
+ plugins: {
1274
+ entries: {
1275
+ openshell: {
1276
+ enabled: true,
1277
+ config: {
1278
+ mode: "mirror", // mirror | remote
1279
+ from: "quantumclaw",
1280
+ remoteWorkspaceDir: "/sandbox",
1281
+ remoteAgentWorkspaceDir: "/agent",
1282
+ gateway: "lab", // 可选
1283
+ gatewayEndpoint: "https://lab.example", // 可选
1284
+ policy: "strict", // 可选的 OpenShell policy id
1285
+ providers: ["openai"], // 可选
1286
+ autoProviders: true,
1287
+ timeoutSeconds: 120,
1288
+ },
1289
+ },
1290
+ },
1291
+ },
1292
+ }
1293
+ ```
1294
+
1295
+ **OpenShell 模式:**
1296
+
1297
+ - `mirror`:执行前从本地为远程植入种子,执行后同步回本地;本地工作区保持为规范副本
1298
+ - `remote`:在创建沙箱时只为远程植入一次种子,之后保持远程工作区为规范副本
1299
+
1300
+ 在 `remote` 模式下,在 QuantumClaw 外部对主机本地所做的编辑,不会在种子步骤后自动同步进沙箱。
1301
+ 传输层是通过 SSH 进入 OpenShell 沙箱,但插件拥有沙箱生命周期以及可选的镜像同步。
1302
+
1303
+ **`setupCommand`** 会在容器创建后运行一次(通过 `sh -lc`)。需要网络出口、可写根文件系统以及 root 用户。
1304
+
1305
+ **容器默认使用 `network: "none"`** ——如果智能体需要出站访问,请设为 `"bridge"`(或自定义 bridge 网络)。
1306
+ 默认会阻止 `"host"`。除非你显式设置
1307
+ `sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true`(紧急模式),否则默认也会阻止 `"container:<id>"`。
1308
+
1309
+ **入站附件** 会暂存到活动工作区中的 `media/inbound/*`。
1310
+
1311
+ **`docker.binds`** 会挂载额外的主机目录;全局和按智能体的 binds 会合并。
1312
+
1313
+ **沙箱浏览器**(`sandbox.browser.enabled`):容器中的 Chromium + CDP。noVNC URL 会注入系统提示中。不要求在 `quantumclaw.json` 中启用 `browser.enabled`。
1314
+ noVNC 观察者访问默认使用 VNC 身份验证,QuantumClaw 会发出一个短期有效的 token URL(而不是在共享 URL 中暴露密码)。
1315
+
1316
+ - `allowHostControl: false`(默认)会阻止沙箱会话指向主机浏览器。
1317
+ - `network` 默认为 `quantumclaw-sandbox-browser`(专用 bridge 网络)。仅当你明确需要全局 bridge 连接时,才设为 `bridge`。
1318
+ - `cdpSourceRange` 可选地将容器边缘的 CDP 入站限制为某个 CIDR 范围(例如 `172.21.0.1/32`)。
1319
+ - `sandbox.browser.binds` 仅将额外主机目录挂载到沙箱浏览器容器中。设置后(包括 `[]`),它会替换浏览器容器的 `docker.binds`。
1320
+ - 启动默认值定义于 `scripts/sandbox-browser-entrypoint.sh` 中,并针对容器主机进行了调优:
1321
+ - `--remote-debugging-address=127.0.0.1`
1322
+ - `--remote-debugging-port=<derived from QUANTUMCLAW_BROWSER_CDP_PORT>`
1323
+ - `--user-data-dir=${HOME}/.chrome`
1324
+ - `--no-first-run`
1325
+ - `--no-default-browser-check`
1326
+ - `--disable-3d-apis`
1327
+ - `--disable-gpu`
1328
+ - `--disable-software-rasterizer`
1329
+ - `--disable-dev-shm-usage`
1330
+ - `--disable-background-networking`
1331
+ - `--disable-features=TranslateUI`
1332
+ - `--disable-breakpad`
1333
+ - `--disable-crash-reporter`
1334
+ - `--renderer-process-limit=2`
1335
+ - `--no-zygote`
1336
+ - `--metrics-recording-only`
1337
+ - `--disable-extensions`(默认启用)
1338
+ - `--disable-3d-apis`、`--disable-software-rasterizer` 和 `--disable-gpu`
1339
+ 默认启用,如果 WebGL/3D 使用场景需要,可通过
1340
+ `QUANTUMCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0` 禁用这些标志。
1341
+ - `QUANTUMCLAW_BROWSER_DISABLE_EXTENSIONS=0` 会重新启用扩展,如果你的工作流
1342
+ 依赖它们。
1343
+ - `--renderer-process-limit=2` 可通过
1344
+ `QUANTUMCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>` 更改;设为 `0` 将使用 Chromium 的
1345
+ 默认进程上限。
1346
+ - 若启用了 `noSandbox`,还会额外加上 `--no-sandbox` 和 `--disable-setuid-sandbox`。
1347
+ - 默认值是容器镜像的基线;若要更改容器默认值,请使用自定义浏览器镜像及自定义
1348
+ entrypoint。
1349
+
1350
+ </Accordion>
1351
+
1352
+ 浏览器沙箱隔离和 `sandbox.docker.binds` 当前仅支持 Docker。
1353
+
1354
+ 构建镜像:
1355
+
1356
+ ```bash
1357
+ scripts/sandbox-setup.sh # 主沙箱镜像
1358
+ scripts/sandbox-browser-setup.sh # 可选的浏览器镜像
1359
+ ```
1360
+
1361
+ ### `agents.list`(按智能体覆盖)
1362
+
1363
+ ```json5
1364
+ {
1365
+ agents: {
1366
+ list: [
1367
+ {
1368
+ id: "main",
1369
+ default: true,
1370
+ name: "Main Agent",
1371
+ workspace: "~/.quantumclaw/workspace",
1372
+ agentDir: "~/.quantumclaw/agents/main/agent",
1373
+ model: "anthropic/claude-opus-4-6", // 或 { primary, fallbacks }
1374
+ params: { cacheRetention: "none" }, // 按键覆盖匹配的 defaults.models params
1375
+ identity: {
1376
+ name: "Samantha",
1377
+ theme: "helpful sloth",
1378
+ emoji: "🦥",
1379
+ avatar: "avatars/samantha.png",
1380
+ },
1381
+ groupChat: { mentionPatterns: ["@quantumclaw"] },
1382
+ sandbox: { mode: "off" },
1383
+ runtime: {
1384
+ type: "acp",
1385
+ acp: {
1386
+ agent: "codex",
1387
+ backend: "acpx",
1388
+ mode: "persistent",
1389
+ cwd: "/workspace/quantumclaw",
1390
+ },
1391
+ },
1392
+ subagents: { allowAgents: ["*"] },
1393
+ tools: {
1394
+ profile: "coding",
1395
+ allow: ["browser"],
1396
+ deny: ["canvas"],
1397
+ elevated: { enabled: true },
1398
+ },
1399
+ },
1400
+ ],
1401
+ },
1402
+ }
1403
+ ```
1404
+
1405
+ - `id`:稳定的智能体 ID(必填)。
1406
+ - `default`:若设置了多个,则第一个生效(会记录警告)。若一个都未设,则列表第一项为默认。
1407
+ - `model`:字符串形式只覆盖 `primary`;对象形式 `{ primary, fallbacks }` 同时覆盖两者(`[]` 会禁用全局故障切换)。仅覆盖 `primary` 的 Cron 作业仍会继承默认故障切换,除非你设置 `fallbacks: []`。
1408
+ - `params`:按智能体的流参数,会合并到 `agents.defaults.models` 中所选模型条目之上。用于为智能体添加特定覆盖,例如 `cacheRetention`、`temperature` 或 `maxTokens`,而无需复制整个模型目录。
1409
+ - `runtime`:可选的按智能体运行时描述符。当智能体应默认使用 ACP harness 会话时,可使用 `type: "acp"`,并在 `runtime.acp` 中设置默认值(`agent`、`backend`、`mode`、`cwd`)。
1410
+ - `identity.avatar`:工作区相对路径、`http(s)` URL 或 `data:` URI。
1411
+ - `identity` 会派生默认值:从 `emoji` 派生 `ackReaction`,从 `name`/`emoji` 派生 `mentionPatterns`。
1412
+ - `subagents.allowAgents`:`sessions_spawn` 的智能体 ID allowlist(`["*"]` = 任意;默认:仅同一智能体)。
1413
+ - 沙箱继承保护:若请求方会话处于沙箱中,`sessions_spawn` 会拒绝那些将以非沙箱方式运行的目标。
1414
+
1415
+ ---
1416
+
1417
+ ## 多智能体路由
1418
+
1419
+ 在一个 Gateway 网关中运行多个隔离的智能体。见 [Multi-Agent](/concepts/multi-agent)。
1420
+
1421
+ ```json5
1422
+ {
1423
+ agents: {
1424
+ list: [
1425
+ { id: "home", default: true, workspace: "~/.quantumclaw/workspace-home" },
1426
+ { id: "work", workspace: "~/.quantumclaw/workspace-work" },
1427
+ ],
1428
+ },
1429
+ bindings: [
1430
+ { agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
1431
+ { agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },
1432
+ ],
1433
+ }
1434
+ ```
1435
+
1436
+ ### 绑定匹配字段
1437
+
1438
+ - `type`(可选):普通路由使用 `route`(缺失时默认为 route),持久化 ACP 对话绑定使用 `acp`。
1439
+ - `match.channel`(必填)
1440
+ - `match.accountId`(可选;`*` = 任意账户;省略 = 默认账户)
1441
+ - `match.peer`(可选;`{ kind: direct|group|channel, id }`)
1442
+ - `match.guildId` / `match.teamId`(可选;渠道特定)
1443
+ - `acp`(可选;仅用于 `type: "acp"`):`{ mode, label, cwd, backend }`
1444
+
1445
+ **确定性匹配顺序:**
1446
+
1447
+ 1. `match.peer`
1448
+ 2. `match.guildId`
1449
+ 3. `match.teamId`
1450
+ 4. `match.accountId`(精确匹配,无 peer/guild/team)
1451
+ 5. `match.accountId: "*"`(全渠道)
1452
+ 6. 默认智能体
1453
+
1454
+ 在每一层内,第一个匹配的 `bindings` 条目胜出。
1455
+
1456
+ 对于 `type: "acp"` 条目,QuantumClaw 会按精确对话身份(`match.channel` + account + `match.peer.id`)解析,不使用上述 route 绑定层级顺序。
1457
+
1458
+ ### 按智能体的访问配置
1459
+
1460
+ <Accordion title="完全访问(无沙箱)">
1461
+
1462
+ ```json5
1463
+ {
1464
+ agents: {
1465
+ list: [
1466
+ {
1467
+ id: "personal",
1468
+ workspace: "~/.quantumclaw/workspace-personal",
1469
+ sandbox: { mode: "off" },
1470
+ },
1471
+ ],
1472
+ },
1473
+ }
1474
+ ```
1475
+
1476
+ </Accordion>
1477
+
1478
+ <Accordion title="只读工具 + 工作区">
1479
+
1480
+ ```json5
1481
+ {
1482
+ agents: {
1483
+ list: [
1484
+ {
1485
+ id: "family",
1486
+ workspace: "~/.quantumclaw/workspace-family",
1487
+ sandbox: { mode: "all", scope: "agent", workspaceAccess: "ro" },
1488
+ tools: {
1489
+ allow: [
1490
+ "read",
1491
+ "sessions_list",
1492
+ "sessions_history",
1493
+ "sessions_send",
1494
+ "sessions_spawn",
1495
+ "session_status",
1496
+ ],
1497
+ deny: ["write", "edit", "apply_patch", "exec", "process", "browser"],
1498
+ },
1499
+ },
1500
+ ],
1501
+ },
1502
+ }
1503
+ ```
1504
+
1505
+ </Accordion>
1506
+
1507
+ <Accordion title="无文件系统访问(仅消息)">
1508
+
1509
+ ```json5
1510
+ {
1511
+ agents: {
1512
+ list: [
1513
+ {
1514
+ id: "public",
1515
+ workspace: "~/.quantumclaw/workspace-public",
1516
+ sandbox: { mode: "all", scope: "agent", workspaceAccess: "none" },
1517
+ tools: {
1518
+ allow: [
1519
+ "sessions_list",
1520
+ "sessions_history",
1521
+ "sessions_send",
1522
+ "sessions_spawn",
1523
+ "session_status",
1524
+ "whatsapp",
1525
+ "telegram",
1526
+ "slack",
1527
+ "discord",
1528
+ "gateway",
1529
+ ],
1530
+ deny: [
1531
+ "read",
1532
+ "write",
1533
+ "edit",
1534
+ "apply_patch",
1535
+ "exec",
1536
+ "process",
1537
+ "browser",
1538
+ "canvas",
1539
+ "nodes",
1540
+ "cron",
1541
+ "gateway",
1542
+ "image",
1543
+ ],
1544
+ },
1545
+ },
1546
+ ],
1547
+ },
1548
+ }
1549
+ ```
1550
+
1551
+ </Accordion>
1552
+
1553
+ 优先级细节见 [Multi-Agent Sandbox & Tools](/tools/multi-agent-sandbox-tools)。
1554
+
1555
+ ---
1556
+
1557
+ ## 会话
1558
+
1559
+ ```json5
1560
+ {
1561
+ session: {
1562
+ scope: "per-sender",
1563
+ dmScope: "main", // main | per-peer | per-channel-peer | per-account-channel-peer
1564
+ identityLinks: {
1565
+ alice: ["telegram:123456789", "discord:987654321012345678"],
1566
+ },
1567
+ reset: {
1568
+ mode: "daily", // daily | idle
1569
+ atHour: 4,
1570
+ idleMinutes: 60,
1571
+ },
1572
+ resetByType: {
1573
+ thread: { mode: "daily", atHour: 4 },
1574
+ direct: { mode: "idle", idleMinutes: 240 },
1575
+ group: { mode: "idle", idleMinutes: 120 },
1576
+ },
1577
+ resetTriggers: ["/new", "/reset"],
1578
+ store: "~/.quantumclaw/agents/{agentId}/sessions/sessions.json",
1579
+ parentForkMaxTokens: 100000, // 超过此 token 数则跳过父线程 fork(0 表示禁用)
1580
+ maintenance: {
1581
+ mode: "warn", // warn | enforce
1582
+ pruneAfter: "30d",
1583
+ maxEntries: 500,
1584
+ rotateBytes: "10mb",
1585
+ resetArchiveRetention: "30d", // 时长或 false
1586
+ maxDiskBytes: "500mb", // 可选硬预算
1587
+ highWaterBytes: "400mb", // 可选清理目标
1588
+ },
1589
+ threadBindings: {
1590
+ enabled: true,
1591
+ idleHours: 24, // 默认不活动自动取消聚焦时长(小时,`0` 表示禁用)
1592
+ maxAgeHours: 0, // 默认硬性最大年龄(小时,`0` 表示禁用)
1593
+ },
1594
+ mainKey: "main", // 旧字段(运行时始终使用 "main")
1595
+ agentToAgent: { maxPingPongTurns: 5 },
1596
+ sendPolicy: {
1597
+ rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }],
1598
+ default: "allow",
1599
+ },
1600
+ },
1601
+ }
1602
+ ```
1603
+
1604
+ <Accordion title="会话字段详情">
1605
+
1606
+ - **`dmScope`**:私信如何分组。
1607
+ - `main`:所有私信共享主会话。
1608
+ - `per-peer`:按发送者 ID 跨渠道隔离。
1609
+ - `per-channel-peer`:按渠道 + 发送者隔离(推荐用于多用户收件箱)。
1610
+ - `per-account-channel-peer`:按账户 + 渠道 + 发送者隔离(推荐用于多账户)。
1611
+ - **`identityLinks`**:将规范 ID 映射到带提供商前缀的 peer,用于跨渠道共享会话。
1612
+ - **`reset`**:主重置策略。`daily` 会在本地时间 `atHour` 重置;`idle` 会在 `idleMinutes` 后重置。如果两者都配置,谁先到期谁生效。
1613
+ - **`resetByType`**:按类型覆盖(`direct`、`group`、`thread`)。旧版 `dm` 仍接受为 `direct` 的别名。
1614
+ - **`parentForkMaxTokens`**:创建分叉线程会话时,父会话允许的最大 `totalTokens`(默认 `100000`)。
1615
+ - 如果父会话 `totalTokens` 高于该值,QuantumClaw 会启动一个新的线程会话,而不是继承父会话的记录历史。
1616
+ - 设为 `0` 可禁用此保护,并始终允许父会话分叉。
1617
+ - **`mainKey`**:旧字段。运行时现在始终为主直聊桶使用 `"main"`。
1618
+ - **`sendPolicy`**:可按 `channel`、`chatType`(`direct|group|channel`,旧版 `dm` 仍为别名)、`keyPrefix` 或 `rawKeyPrefix` 匹配。第一个 deny 生效。
1619
+ - **`maintenance`**:会话存储清理 + 保留控制。
1620
+ - `mode`:`warn` 仅发出警告;`enforce` 应用清理。
1621
+ - `pruneAfter`:过期条目的年龄阈值(默认 `30d`)。
1622
+ - `maxEntries`:`sessions.json` 中的最大条目数(默认 `500`)。
1623
+ - `rotateBytes`:当 `sessions.json` 超过此大小时轮转(默认 `10mb`)。
1624
+ - `resetArchiveRetention`:`*.reset.<timestamp>` 会话记录归档的保留期限。默认跟随 `pruneAfter`;设为 `false` 可禁用。
1625
+ - `maxDiskBytes`:可选的会话目录磁盘预算。在 `warn` 模式下会记录警告;在 `enforce` 模式下会优先删除最旧的工件/会话。
1626
+ - `highWaterBytes`:预算清理后的可选目标值。默认是 `maxDiskBytes` 的 `80%`。
1627
+ - **`threadBindings`**:线程绑定会话功能的全局默认值。
1628
+ - `enabled`:主默认开关(提供商可覆盖;Discord 使用 `channels.discord.threadBindings.enabled`)
1629
+ - `idleHours`:默认不活动自动取消聚焦时长(小时,`0` 表示禁用;提供商可覆盖)
1630
+ - `maxAgeHours`:默认硬性最大年龄(小时,`0` 表示禁用;提供商可覆盖)
1631
+
1632
+ </Accordion>
1633
+
1634
+ ---
1635
+
1636
+ ## 消息
1637
+
1638
+ ```json5
1639
+ {
1640
+ messages: {
1641
+ responsePrefix: "🦞", // 或 "auto"
1642
+ ackReaction: "👀",
1643
+ ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all
1644
+ removeAckAfterReply: false,
1645
+ queue: {
1646
+ mode: "collect", // steer | followup | collect | steer-backlog | steer+backlog | queue | interrupt
1647
+ debounceMs: 1000,
1648
+ cap: 20,
1649
+ drop: "summarize", // old | new | summarize
1650
+ byChannel: {
1651
+ whatsapp: "collect",
1652
+ telegram: "collect",
1653
+ },
1654
+ },
1655
+ inbound: {
1656
+ debounceMs: 2000, // 0 表示禁用
1657
+ byChannel: {
1658
+ whatsapp: 5000,
1659
+ slack: 1500,
1660
+ },
1661
+ },
1662
+ },
1663
+ }
1664
+ ```
1665
+
1666
+ ### 回复前缀
1667
+
1668
+ 按渠道/按账户覆盖:`channels.<channel>.responsePrefix`、`channels.<channel>.accounts.<id>.responsePrefix`。
1669
+
1670
+ 解析顺序(最具体者优先):账户 → 渠道 → 全局。`""` 会禁用并停止级联。`"auto"` 会派生为 `[{identity.name}]`。
1671
+
1672
+ **模板变量:**
1673
+
1674
+ | Variable | Description | Example |
1675
+ | ----------------- | ------------------ | --------------------------- |
1676
+ | `{model}` | 短模型名 | `claude-opus-4-6` |
1677
+ | `{modelFull}` | 完整模型标识符 | `anthropic/claude-opus-4-6` |
1678
+ | `{provider}` | 提供商名称 | `anthropic` |
1679
+ | `{thinkingLevel}` | 当前 thinking 级别 | `high`、`low`、`off` |
1680
+ | `{identity.name}` | 智能体身份名称 | (与 `"auto"` 相同) |
1681
+
1682
+ 变量不区分大小写。`{think}` 是 `{thinkingLevel}` 的别名。
1683
+
1684
+ ### 确认反应
1685
+
1686
+ - 默认取活动智能体的 `identity.emoji`,否则为 `"👀"`。设为 `""` 可禁用。
1687
+ - 按渠道覆盖:`channels.<channel>.ackReaction`、`channels.<channel>.accounts.<id>.ackReaction`。
1688
+ - 解析顺序:账户 → 渠道 → `messages.ackReaction` → identity 回退。
1689
+ - 作用域:`group-mentions`(默认)、`group-all`、`direct`、`all`。
1690
+ - `removeAckAfterReply`:回复后移除确认反应(仅 Slack/Discord/Telegram/Google Chat)。
1691
+
1692
+ ### 入站防抖
1693
+
1694
+ 将同一发送者快速连续发送的纯文本消息合并为一次智能体轮次。媒体/附件会立即冲刷。控制命令会绕过防抖。
1695
+
1696
+ ### TTS(文本转语音)
1697
+
1698
+ ```json5
1699
+ {
1700
+ messages: {
1701
+ tts: {
1702
+ auto: "always", // off | always | inbound | tagged
1703
+ mode: "final", // final | all
1704
+ provider: "elevenlabs",
1705
+ summaryModel: "openai/gpt-4.1-mini",
1706
+ modelOverrides: { enabled: true },
1707
+ maxTextLength: 4000,
1708
+ timeoutMs: 30000,
1709
+ prefsPath: "~/.quantumclaw/settings/tts.json",
1710
+ elevenlabs: {
1711
+ apiKey: "elevenlabs_api_key",
1712
+ baseUrl: "https://api.elevenlabs.io",
1713
+ voiceId: "voice_id",
1714
+ modelId: "eleven_multilingual_v2",
1715
+ seed: 42,
1716
+ applyTextNormalization: "auto",
1717
+ languageCode: "en",
1718
+ voiceSettings: {
1719
+ stability: 0.5,
1720
+ similarityBoost: 0.75,
1721
+ style: 0.0,
1722
+ useSpeakerBoost: true,
1723
+ speed: 1.0,
1724
+ },
1725
+ },
1726
+ openai: {
1727
+ apiKey: "openai_api_key",
1728
+ baseUrl: "https://api.openai.com/v1",
1729
+ model: "gpt-4o-mini-tts",
1730
+ voice: "alloy",
1731
+ },
1732
+ },
1733
+ },
1734
+ }
1735
+ ```
1736
+
1737
+ - `auto` 控制自动 TTS。`/tts off|always|inbound|tagged` 可按会话覆盖。
1738
+ - `summaryModel` 会覆盖 `agents.defaults.model.primary` 用于自动摘要。
1739
+ - `modelOverrides` 默认启用;`modelOverrides.allowProvider` 默认是 `false`(需显式选择启用)。
1740
+ - API 密钥回退到 `ELEVENLABS_API_KEY`/`XI_API_KEY` 和 `OPENAI_API_KEY`。
1741
+ - `openai.baseUrl` 会覆盖 OpenAI TTS 端点。解析顺序是配置、然后 `OPENAI_TTS_BASE_URL`、再然后 `https://api.openai.com/v1`。
1742
+ - 当 `openai.baseUrl` 指向非 OpenAI 端点时,QuantumClaw 会将其视为兼容 OpenAI 的 TTS 服务器,并放宽模型/语音校验。
1743
+
1744
+ ---
1745
+
1746
+ ## Talk
1747
+
1748
+ Talk 模式的默认值(macOS/iOS/Android)。
1749
+
1750
+ ```json5
1751
+ {
1752
+ talk: {
1753
+ voiceId: "elevenlabs_voice_id",
1754
+ voiceAliases: {
1755
+ Clawd: "EXAVITQu4vr4xnSDxMaL",
1756
+ Roger: "CwhRBWXzGAHq8TQ4Fs17",
1757
+ },
1758
+ modelId: "eleven_v3",
1759
+ outputFormat: "mp3_44100_128",
1760
+ apiKey: "elevenlabs_api_key",
1761
+ silenceTimeoutMs: 1500,
1762
+ interruptOnSpeech: true,
1763
+ },
1764
+ }
1765
+ ```
1766
+
1767
+ - 语音 ID 会回退到 `ELEVENLABS_VOICE_ID` 或 `SAG_VOICE_ID`。
1768
+ - `apiKey` 和 `providers.*.apiKey` 接受明文字符串或 SecretRef 对象。
1769
+ - 仅在未配置 Talk API key 时,才会回退到 `ELEVENLABS_API_KEY`。
1770
+ - `voiceAliases` 让 Talk 指令可以使用友好的名称。
1771
+ - `silenceTimeoutMs` 控制 Talk 模式在用户停止说话后等待多久才发送转录。未设置时使用平台默认暂停窗口(`macOS 和 Android 上为 700 ms,iOS 上为 900 ms`)。
1772
+
1773
+ ---
1774
+
1775
+ ## 工具
1776
+
1777
+ ### 工具配置文件
1778
+
1779
+ `tools.profile` 会在 `tools.allow`/`tools.deny` 之前设置基础 allowlist:
1780
+
1781
+ 本地新手引导会在未设置时,把新的本地配置默认设为 `tools.profile: "coding"`(现有显式配置文件会保留)。
1782
+
1783
+ | Profile | Includes |
1784
+ | ----------- | ----------------------------------------------------------------------------------------- |
1785
+ | `minimal` | 仅 `session_status` |
1786
+ | `coding` | `group:fs`、`group:runtime`、`group:sessions`、`group:memory`、`image` |
1787
+ | `messaging` | `group:messaging`、`sessions_list`、`sessions_history`、`sessions_send`、`session_status` |
1788
+ | `full` | 不限制(等同于未设置) |
1789
+
1790
+ ### 工具组
1791
+
1792
+ | Group | Tools |
1793
+ | ------------------ | ---------------------------------------------------------------------------------------- |
1794
+ | `group:runtime` | `exec`、`process`(`bash` 可作为 `exec` 的别名) |
1795
+ | `group:fs` | `read`、`write`、`edit`、`apply_patch` |
1796
+ | `group:sessions` | `sessions_list`、`sessions_history`、`sessions_send`、`sessions_spawn`、`session_status` |
1797
+ | `group:memory` | `memory_search`、`memory_get` |
1798
+ | `group:web` | `web_search`、`web_fetch` |
1799
+ | `group:ui` | `browser`、`canvas` |
1800
+ | `group:automation` | `cron`、`gateway` |
1801
+ | `group:messaging` | `message` |
1802
+ | `group:nodes` | `nodes` |
1803
+ | `group:quantumclaw` | 所有内置工具(不含提供商插件) |
1804
+
1805
+ ### `tools.allow` / `tools.deny`
1806
+
1807
+ 全局工具 allow/deny 策略(deny 优先)。不区分大小写,支持 `*` 通配符。即使 Docker 沙箱关闭,也会应用。
1808
+
1809
+ ```json5
1810
+ {
1811
+ tools: { deny: ["browser", "canvas"] },
1812
+ }
1813
+ ```
1814
+
1815
+ ### `tools.byProvider`
1816
+
1817
+ 进一步限制特定提供商或模型的工具。顺序:基础配置文件 → 提供商配置文件 → allow/deny。
1818
+
1819
+ ```json5
1820
+ {
1821
+ tools: {
1822
+ profile: "coding",
1823
+ byProvider: {
1824
+ "google-antigravity": { profile: "minimal" },
1825
+ "openai/gpt-5.2": { allow: ["group:fs", "sessions_list"] },
1826
+ },
1827
+ },
1828
+ }
1829
+ ```
1830
+
1831
+ ### `tools.elevated`
1832
+
1833
+ 控制提升权限(主机)`exec` 访问:
1834
+
1835
+ ```json5
1836
+ {
1837
+ tools: {
1838
+ elevated: {
1839
+ enabled: true,
1840
+ allowFrom: {
1841
+ whatsapp: ["+15555550123"],
1842
+ discord: ["1234567890123", "987654321098765432"],
1843
+ },
1844
+ },
1845
+ },
1846
+ }
1847
+ ```
1848
+
1849
+ - 按智能体覆盖(`agents.list[].tools.elevated`)只能进一步收紧限制。
1850
+ - `/elevated on|off|ask|full` 会按会话保存状态;内联指令仅作用于单条消息。
1851
+ - 提升权限的 `exec` 会在主机上运行,并绕过沙箱隔离。
1852
+
1853
+ ### `tools.exec`
1854
+
1855
+ ```json5
1856
+ {
1857
+ tools: {
1858
+ exec: {
1859
+ backgroundMs: 10000,
1860
+ timeoutSec: 1800,
1861
+ cleanupMs: 1800000,
1862
+ notifyOnExit: true,
1863
+ notifyOnExitEmptySuccess: false,
1864
+ applyPatch: {
1865
+ enabled: false,
1866
+ allowModels: ["gpt-5.2"],
1867
+ },
1868
+ },
1869
+ },
1870
+ }
1871
+ ```
1872
+
1873
+ ### `tools.loopDetection`
1874
+
1875
+ 工具循环安全检查**默认禁用**。设置 `enabled: true` 可启用检测。
1876
+ 可在全局 `tools.loopDetection` 中定义设置,并在 `agents.list[].tools.loopDetection` 中按智能体覆盖。
1877
+
1878
+ ```json5
1879
+ {
1880
+ tools: {
1881
+ loopDetection: {
1882
+ enabled: true,
1883
+ historySize: 30,
1884
+ warningThreshold: 10,
1885
+ criticalThreshold: 20,
1886
+ globalCircuitBreakerThreshold: 30,
1887
+ detectors: {
1888
+ genericRepeat: true,
1889
+ knownPollNoProgress: true,
1890
+ pingPong: true,
1891
+ },
1892
+ },
1893
+ },
1894
+ }
1895
+ ```
1896
+
1897
+ - `historySize`:为循环分析保留的最大工具调用历史。
1898
+ - `warningThreshold`:用于发出警告的重复无进展模式阈值。
1899
+ - `criticalThreshold`:用于阻止严重循环的更高重复阈值。
1900
+ - `globalCircuitBreakerThreshold`:对任何无进展运行的硬性停止阈值。
1901
+ - `detectors.genericRepeat`:对重复的相同工具/相同参数调用发出警告。
1902
+ - `detectors.knownPollNoProgress`:对已知轮询工具(`process.poll`、`command_status` 等)的无进展情况发出警告/阻止。
1903
+ - `detectors.pingPong`:对交替出现的无进展成对模式发出警告/阻止。
1904
+ - 如果 `warningThreshold >= criticalThreshold` 或 `criticalThreshold >= globalCircuitBreakerThreshold`,校验会失败。
1905
+
1906
+ ### `tools.web`
1907
+
1908
+ ```json5
1909
+ {
1910
+ tools: {
1911
+ web: {
1912
+ search: {
1913
+ enabled: true,
1914
+ apiKey: "brave_api_key", // 或 BRAVE_API_KEY 环境变量
1915
+ maxResults: 5,
1916
+ timeoutSeconds: 30,
1917
+ cacheTtlMinutes: 15,
1918
+ },
1919
+ fetch: {
1920
+ enabled: true,
1921
+ maxChars: 50000,
1922
+ maxCharsCap: 50000,
1923
+ timeoutSeconds: 30,
1924
+ cacheTtlMinutes: 15,
1925
+ userAgent: "custom-ua",
1926
+ },
1927
+ },
1928
+ },
1929
+ }
1930
+ ```
1931
+
1932
+ ### `tools.media`
1933
+
1934
+ 配置入站媒体理解(图像/音频/视频):
1935
+
1936
+ ```json5
1937
+ {
1938
+ tools: {
1939
+ media: {
1940
+ concurrency: 2,
1941
+ audio: {
1942
+ enabled: true,
1943
+ maxBytes: 20971520,
1944
+ scope: {
1945
+ default: "deny",
1946
+ rules: [{ action: "allow", match: { chatType: "direct" } }],
1947
+ },
1948
+ models: [
1949
+ { provider: "openai", model: "gpt-4o-mini-transcribe" },
1950
+ { type: "cli", command: "whisper", args: ["--model", "base", "{{MediaPath}}"] },
1951
+ ],
1952
+ },
1953
+ video: {
1954
+ enabled: true,
1955
+ maxBytes: 52428800,
1956
+ models: [{ provider: "google", model: "gemini-3-flash-preview" }],
1957
+ },
1958
+ },
1959
+ },
1960
+ }
1961
+ ```
1962
+
1963
+ <Accordion title="媒体模型条目字段">
1964
+
1965
+ **提供商条目**(`type: "provider"` 或省略):
1966
+
1967
+ - `provider`:API 提供商 ID(`openai`、`anthropic`、`google`/`gemini`、`groq` 等)
1968
+ - `model`:模型 ID 覆盖
1969
+ - `profile` / `preferredProfile`:`auth-profiles.json` 配置文件选择
1970
+
1971
+ **CLI 条目**(`type: "cli"`):
1972
+
1973
+ - `command`:要运行的可执行文件
1974
+ - `args`:模板化参数(支持 `{{MediaPath}}`、`{{Prompt}}`、`{{MaxChars}}` 等)
1975
+
1976
+ **通用字段:**
1977
+
1978
+ - `capabilities`:可选列表(`image`、`audio`、`video`)。默认值:`openai`/`anthropic`/`minimax` → 图像,`google` → 图像+音频+视频,`groq` → 音频。
1979
+ - `prompt`、`maxChars`、`maxBytes`、`timeoutSeconds`、`language`:按条目覆盖。
1980
+ - 失败时会回退到下一个条目。
1981
+
1982
+ 提供商认证遵循标准顺序:`auth-profiles.json` → 环境变量 → `models.providers.*.apiKey`。
1983
+
1984
+ </Accordion>
1985
+
1986
+ ### `tools.agentToAgent`
1987
+
1988
+ ```json5
1989
+ {
1990
+ tools: {
1991
+ agentToAgent: {
1992
+ enabled: false,
1993
+ allow: ["home", "work"],
1994
+ },
1995
+ },
1996
+ }
1997
+ ```
1998
+
1999
+ ### `tools.sessions`
2000
+
2001
+ 控制会话工具(`sessions_list`、`sessions_history`、`sessions_send`)可以定位哪些会话。
2002
+
2003
+ 默认值:`tree`(当前会话 + 由其派生的会话,例如子智能体)。
2004
+
2005
+ ```json5
2006
+ {
2007
+ tools: {
2008
+ sessions: {
2009
+ // "self" | "tree" | "agent" | "all"
2010
+ visibility: "tree",
2011
+ },
2012
+ },
2013
+ }
2014
+ ```
2015
+
2016
+ 说明:
2017
+
2018
+ - `self`:仅当前会话键。
2019
+ - `tree`:当前会话 + 由当前会话派生的会话(子智能体)。
2020
+ - `agent`:属于当前智能体 ID 的任意会话(如果你在相同智能体 ID 下运行按发送者划分的会话,可能包含其他用户)。
2021
+ - `all`:任意会话。跨智能体定位仍需要 `tools.agentToAgent`。
2022
+ - 沙箱钳制:当当前会话处于沙箱中且 `agents.defaults.sandbox.sessionToolsVisibility="spawned"` 时,即使 `tools.sessions.visibility="all"`,可见性也会被强制为 `tree`。
2023
+
2024
+ ### `tools.sessions_spawn`
2025
+
2026
+ 控制 `sessions_spawn` 的内联附件支持。
2027
+
2028
+ ```json5
2029
+ {
2030
+ tools: {
2031
+ sessions_spawn: {
2032
+ attachments: {
2033
+ enabled: false, // 选择性启用:设为 true 以允许内联文件附件
2034
+ maxTotalBytes: 5242880, // 所有文件合计 5 MB
2035
+ maxFiles: 50,
2036
+ maxFileBytes: 1048576, // 每个文件 1 MB
2037
+ retainOnSessionKeep: false, // 当 cleanup="keep" 时保留附件
2038
+ },
2039
+ },
2040
+ },
2041
+ }
2042
+ ```
2043
+
2044
+ 说明:
2045
+
2046
+ - 仅 `runtime: "subagent"` 支持附件。ACP 运行时会拒绝它们。
2047
+ - 文件会被物化到子工作区中的 `.quantumclaw/attachments/<uuid>/`,并附带一个 `.manifest.json`。
2048
+ - 附件内容会自动从会话记录持久化中脱敏。
2049
+ - Base64 输入会通过严格的字母表/填充检查和解码前大小保护进行校验。
2050
+ - 文件权限为目录 `0700`、文件 `0600`。
2051
+ - 清理遵循 `cleanup` 策略:`delete` 总会删除附件;`keep` 仅在 `retainOnSessionKeep: true` 时保留。
2052
+
2053
+ ### `tools.subagents`
2054
+
2055
+ ```json5
2056
+ {
2057
+ agents: {
2058
+ defaults: {
2059
+ subagents: {
2060
+ model: "minimax/MiniMax-M2.5",
2061
+ maxConcurrent: 1,
2062
+ runTimeoutSeconds: 900,
2063
+ archiveAfterMinutes: 60,
2064
+ },
2065
+ },
2066
+ },
2067
+ }
2068
+ ```
2069
+
2070
+ - `model`:派生子智能体的默认模型。如果省略,子智能体会继承调用方的模型。
2071
+ - `runTimeoutSeconds`:当工具调用省略 `runTimeoutSeconds` 时,`sessions_spawn` 使用的默认超时(秒)。`0` 表示无超时。
2072
+ - 每个子智能体的工具策略:`tools.subagents.tools.allow` / `tools.subagents.tools.deny`。
2073
+
2074
+ ---
2075
+
2076
+ ## 自定义提供商和 base URL
2077
+
2078
+ QuantumClaw 使用 pi-coding-agent 模型目录。可通过配置中的 `models.providers` 或 `~/.quantumclaw/agents/<agentId>/agent/models.json` 添加自定义提供商。
2079
+
2080
+ ```json5
2081
+ {
2082
+ models: {
2083
+ mode: "merge", // merge(默认)| replace
2084
+ providers: {
2085
+ "custom-proxy": {
2086
+ baseUrl: "http://localhost:4000/v1",
2087
+ apiKey: "LITELLM_KEY",
2088
+ api: "openai-completions", // openai-completions | openai-responses | anthropic-messages | google-generative-ai
2089
+ models: [
2090
+ {
2091
+ id: "llama-3.1-8b",
2092
+ name: "Llama 3.1 8B",
2093
+ reasoning: false,
2094
+ input: ["text"],
2095
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
2096
+ contextWindow: 128000,
2097
+ maxTokens: 32000,
2098
+ },
2099
+ ],
2100
+ },
2101
+ },
2102
+ },
2103
+ }
2104
+ ```
2105
+
2106
+ - 对自定义认证需求可使用 `authHeader: true` + `headers`。
2107
+ - 使用 `QUANTUMCLAW_AGENT_DIR`(或 `PI_CODING_AGENT_DIR`)覆盖智能体配置根目录。
2108
+ - 对匹配的 provider ID,合并优先级如下:
2109
+ - 非空的智能体 `models.json` `baseUrl` 优先。
2110
+ - 非空的智能体 `apiKey` 仅在该提供商未由当前配置/auth-profile 上下文中的 SecretRef 管理时优先。
2111
+ - 由 SecretRef 管理的提供商 `apiKey` 会从源标记(环境变量引用为 `ENV_VAR_NAME`,file/exec 引用为 `secretref-managed`)刷新,而不是持久化已解析的密钥。
2112
+ - 由 SecretRef 管理的提供商 header 值会从源标记刷新(环境变量引用为 `secretref-env:ENV_VAR_NAME`,file/exec 引用为 `secretref-managed`)。
2113
+ - 为空或缺失的智能体 `apiKey`/`baseUrl` 会回退到配置中的 `models.providers`。
2114
+ - 匹配模型的 `contextWindow`/`maxTokens` 会在显式配置值与隐式目录值之间取较大者。
2115
+ - 当你希望配置完全重写 `models.json` 时,请使用 `models.mode: "replace"`。
2116
+ - 标记持久化以源为准:写入的标记来自活动源配置快照(解析前),而不是解析后的运行时密钥值。
2117
+
2118
+ ### 提供商字段详情
2119
+
2120
+ - `models.mode`:提供商目录行为(`merge` 或 `replace`)。
2121
+ - `models.providers`:以提供商 ID 为键的自定义提供商映射。
2122
+ - `models.providers.*.api`:请求适配器(`openai-completions`、`openai-responses`、`anthropic-messages`、`google-generative-ai` 等)。
2123
+ - `models.providers.*.apiKey`:提供商凭证(优先使用 SecretRef/环境变量替换)。
2124
+ - `models.providers.*.auth`:认证策略(`api-key`、`token`、`oauth`、`aws-sdk`)。
2125
+ - `models.providers.*.injectNumCtxForOpenAICompat`:对 Ollama + `openai-completions`,将 `options.num_ctx` 注入请求(默认:`true`)。
2126
+ - `models.providers.*.authHeader`:在需要时强制通过 `Authorization` 头传输凭证。
2127
+ - `models.providers.*.baseUrl`:上游 API base URL。
2128
+ - `models.providers.*.headers`:用于代理/租户路由的额外静态 header。
2129
+ - `models.providers.*.models`:显式的提供商模型目录条目。
2130
+ - `models.providers.*.models.*.compat.supportsDeveloperRole`:可选的兼容性提示。对 `api: "openai-completions"` 且非空、非原生 `baseUrl`(主机不是 `api.openai.com`)的情况,QuantumClaw 会在运行时将其强制设为 `false`。空或省略的 `baseUrl` 会保留默认 OpenAI 行为。
2131
+ - `models.bedrockDiscovery`:Bedrock 自动发现设置根。
2132
+ - `models.bedrockDiscovery.enabled`:开启/关闭发现轮询。
2133
+ - `models.bedrockDiscovery.region`:发现使用的 AWS 区域。
2134
+ - `models.bedrockDiscovery.providerFilter`:用于定向发现的可选 provider-id 过滤器。
2135
+ - `models.bedrockDiscovery.refreshInterval`:发现刷新的轮询间隔。
2136
+ - `models.bedrockDiscovery.defaultContextWindow`:发现模型的回退上下文窗口。
2137
+ - `models.bedrockDiscovery.defaultMaxTokens`:发现模型的回退最大输出 token 数。
2138
+
2139
+ ### 提供商示例
2140
+
2141
+ <Accordion title="Cerebras(GLM 4.6 / 4.7)">
2142
+
2143
+ ```json5
2144
+ {
2145
+ env: { CEREBRAS_API_KEY: "sk-..." },
2146
+ agents: {
2147
+ defaults: {
2148
+ model: {
2149
+ primary: "cerebras/zai-glm-4.7",
2150
+ fallbacks: ["cerebras/zai-glm-4.6"],
2151
+ },
2152
+ models: {
2153
+ "cerebras/zai-glm-4.7": { alias: "GLM 4.7 (Cerebras)" },
2154
+ "cerebras/zai-glm-4.6": { alias: "GLM 4.6 (Cerebras)" },
2155
+ },
2156
+ },
2157
+ },
2158
+ models: {
2159
+ mode: "merge",
2160
+ providers: {
2161
+ cerebras: {
2162
+ baseUrl: "https://api.cerebras.ai/v1",
2163
+ apiKey: "${CEREBRAS_API_KEY}",
2164
+ api: "openai-completions",
2165
+ models: [
2166
+ { id: "zai-glm-4.7", name: "GLM 4.7 (Cerebras)" },
2167
+ { id: "zai-glm-4.6", name: "GLM 4.6 (Cerebras)" },
2168
+ ],
2169
+ },
2170
+ },
2171
+ },
2172
+ }
2173
+ ```
2174
+
2175
+ 对 Cerebras 使用 `cerebras/zai-glm-4.7`;对 Z.AI 直连使用 `zai/glm-4.7`。
2176
+
2177
+ </Accordion>
2178
+
2179
+ <Accordion title="OpenCode">
2180
+
2181
+ ```json5
2182
+ {
2183
+ agents: {
2184
+ defaults: {
2185
+ model: { primary: "opencode/claude-opus-4-6" },
2186
+ models: { "opencode/claude-opus-4-6": { alias: "Opus" } },
2187
+ },
2188
+ },
2189
+ }
2190
+ ```
2191
+
2192
+ 设置 `OPENCODE_API_KEY`(或 `OPENCODE_ZEN_API_KEY`)。Zen 目录使用 `opencode/...` 引用,Go 目录使用 `opencode-go/...` 引用。快捷方式:`quantumclaw onboard --auth-choice opencode-zen` 或 `quantumclaw onboard --auth-choice opencode-go`。
2193
+
2194
+ </Accordion>
2195
+
2196
+ <Accordion title="Z.AI(GLM-4.7)">
2197
+
2198
+ ```json5
2199
+ {
2200
+ agents: {
2201
+ defaults: {
2202
+ model: { primary: "zai/glm-4.7" },
2203
+ models: { "zai/glm-4.7": {} },
2204
+ },
2205
+ },
2206
+ }
2207
+ ```
2208
+
2209
+ 设置 `ZAI_API_KEY`。`z.ai/*` 和 `z-ai/*` 都是可接受的别名。快捷方式:`quantumclaw onboard --auth-choice zai-api-key`。
2210
+
2211
+ - 通用端点:`https://api.z.ai/api/paas/v4`
2212
+ - 编码端点(默认):`https://api.z.ai/api/coding/paas/v4`
2213
+ - 对于通用端点,请定义一个带有 base URL 覆盖的自定义提供商。
2214
+
2215
+ </Accordion>
2216
+
2217
+ <Accordion title="Moonshot AI(Kimi)">
2218
+
2219
+ ```json5
2220
+ {
2221
+ env: { MOONSHOT_API_KEY: "sk-..." },
2222
+ agents: {
2223
+ defaults: {
2224
+ model: { primary: "moonshot/kimi-k2.5" },
2225
+ models: { "moonshot/kimi-k2.5": { alias: "Kimi K2.5" } },
2226
+ },
2227
+ },
2228
+ models: {
2229
+ mode: "merge",
2230
+ providers: {
2231
+ moonshot: {
2232
+ baseUrl: "https://api.moonshot.ai/v1",
2233
+ apiKey: "${MOONSHOT_API_KEY}",
2234
+ api: "openai-completions",
2235
+ models: [
2236
+ {
2237
+ id: "kimi-k2.5",
2238
+ name: "Kimi K2.5",
2239
+ reasoning: false,
2240
+ input: ["text"],
2241
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
2242
+ contextWindow: 256000,
2243
+ maxTokens: 8192,
2244
+ },
2245
+ ],
2246
+ },
2247
+ },
2248
+ },
2249
+ }
2250
+ ```
2251
+
2252
+ 中国端点可使用:`baseUrl: "https://api.moonshot.cn/v1"` 或 `quantumclaw onboard --auth-choice moonshot-api-key-cn`。
2253
+
2254
+ </Accordion>
2255
+
2256
+ <Accordion title="Kimi Coding">
2257
+
2258
+ ```json5
2259
+ {
2260
+ env: { KIMI_API_KEY: "sk-..." },
2261
+ agents: {
2262
+ defaults: {
2263
+ model: { primary: "kimi-coding/k2p5" },
2264
+ models: { "kimi-coding/k2p5": { alias: "Kimi K2.5" } },
2265
+ },
2266
+ },
2267
+ }
2268
+ ```
2269
+
2270
+ 兼容 Anthropic 的内置提供商。快捷方式:`quantumclaw onboard --auth-choice kimi-code-api-key`。
2271
+
2272
+ </Accordion>
2273
+
2274
+ <Accordion title="Synthetic(兼容 Anthropic)">
2275
+
2276
+ ```json5
2277
+ {
2278
+ env: { SYNTHETIC_API_KEY: "sk-..." },
2279
+ agents: {
2280
+ defaults: {
2281
+ model: { primary: "synthetic/hf:MiniMaxAI/MiniMax-M2.5" },
2282
+ models: { "synthetic/hf:MiniMaxAI/MiniMax-M2.5": { alias: "MiniMax M2.5" } },
2283
+ },
2284
+ },
2285
+ models: {
2286
+ mode: "merge",
2287
+ providers: {
2288
+ synthetic: {
2289
+ baseUrl: "https://api.synthetic.new/anthropic",
2290
+ apiKey: "${SYNTHETIC_API_KEY}",
2291
+ api: "anthropic-messages",
2292
+ models: [
2293
+ {
2294
+ id: "hf:MiniMaxAI/MiniMax-M2.5",
2295
+ name: "MiniMax M2.5",
2296
+ reasoning: true,
2297
+ input: ["text"],
2298
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
2299
+ contextWindow: 192000,
2300
+ maxTokens: 65536,
2301
+ },
2302
+ ],
2303
+ },
2304
+ },
2305
+ },
2306
+ }
2307
+ ```
2308
+
2309
+ Base URL 不应包含 `/v1`(Anthropic 客户端会追加它)。快捷方式:`quantumclaw onboard --auth-choice synthetic-api-key`。
2310
+
2311
+ </Accordion>
2312
+
2313
+ <Accordion title="MiniMax M2.5(直连)">
2314
+
2315
+ ```json5
2316
+ {
2317
+ agents: {
2318
+ defaults: {
2319
+ model: { primary: "minimax/MiniMax-M2.5" },
2320
+ models: {
2321
+ "minimax/MiniMax-M2.5": { alias: "Minimax" },
2322
+ },
2323
+ },
2324
+ },
2325
+ models: {
2326
+ mode: "merge",
2327
+ providers: {
2328
+ minimax: {
2329
+ baseUrl: "https://api.minimax.io/anthropic",
2330
+ apiKey: "${MINIMAX_API_KEY}",
2331
+ api: "anthropic-messages",
2332
+ models: [
2333
+ {
2334
+ id: "MiniMax-M2.5",
2335
+ name: "MiniMax M2.5",
2336
+ reasoning: true,
2337
+ input: ["text"],
2338
+ cost: { input: 15, output: 60, cacheRead: 2, cacheWrite: 10 },
2339
+ contextWindow: 200000,
2340
+ maxTokens: 8192,
2341
+ },
2342
+ ],
2343
+ },
2344
+ },
2345
+ },
2346
+ }
2347
+ ```
2348
+
2349
+ 设置 `MINIMAX_API_KEY`。快捷方式:`quantumclaw onboard --auth-choice minimax-api`。
2350
+
2351
+ </Accordion>
2352
+
2353
+ <Accordion title="本地模型(LM Studio)">
2354
+
2355
+ 参见 [Local Models](/gateway/local-models)。简而言之:在强劲硬件上通过 LM Studio Responses API 运行 MiniMax M2.5;并保留托管模型合并,以便故障切换。
2356
+
2357
+ </Accordion>
2358
+
2359
+ ---
2360
+
2361
+ ## Skills
2362
+
2363
+ ```json5
2364
+ {
2365
+ skills: {
2366
+ allowBundled: ["gemini", "peekaboo"],
2367
+ load: {
2368
+ extraDirs: ["~/Projects/agent-scripts/skills"],
2369
+ },
2370
+ install: {
2371
+ preferBrew: true,
2372
+ nodeManager: "npm", // npm | pnpm | yarn
2373
+ },
2374
+ entries: {
2375
+ "nano-banana-pro": {
2376
+ apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // 或明文字符串
2377
+ env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" },
2378
+ },
2379
+ peekaboo: { enabled: true },
2380
+ sag: { enabled: false },
2381
+ },
2382
+ },
2383
+ }
2384
+ ```
2385
+
2386
+ - `allowBundled`:仅针对捆绑 Skills 的可选 allowlist(托管/工作区 Skills 不受影响)。
2387
+ - `entries.<skillKey>.enabled: false`:即使某个技能已捆绑/已安装,也会禁用它。
2388
+ - `entries.<skillKey>.apiKey`:针对声明主环境变量的技能提供的便捷字段(明文字符串或 SecretRef 对象)。
2389
+
2390
+ ---
2391
+
2392
+ ## 插件
2393
+
2394
+ ```json5
2395
+ {
2396
+ plugins: {
2397
+ enabled: true,
2398
+ allow: ["voice-call"],
2399
+ deny: [],
2400
+ load: {
2401
+ paths: ["~/Projects/oss/voice-call-extension"],
2402
+ },
2403
+ entries: {
2404
+ "voice-call": {
2405
+ enabled: true,
2406
+ hooks: {
2407
+ allowPromptInjection: false,
2408
+ },
2409
+ config: { provider: "twilio" },
2410
+ },
2411
+ },
2412
+ },
2413
+ }
2414
+ ```
2415
+
2416
+ - 从 `~/.quantumclaw/extensions`、`<workspace>/.quantumclaw/extensions` 以及 `plugins.load.paths` 加载。
2417
+ - 设备发现同时接受原生 QuantumClaw 插件、兼容的 Codex bundle 和 Claude bundle,包括无 manifest 的 Claude 默认布局 bundle。
2418
+ - **配置更改需要重启 Gateway 网关。**
2419
+ - `allow`:可选 allowlist(仅加载列出的插件)。`deny` 优先。
2420
+ - `plugins.entries.<id>.apiKey`:插件级 API key 便捷字段(插件支持时)。
2421
+ - `plugins.entries.<id>.env`:插件作用域环境变量映射。
2422
+ - `plugins.entries.<id>.hooks.allowPromptInjection`:为 `false` 时,核心会阻止 `before_prompt_build`,并忽略旧版 `before_agent_start` 中会修改 prompt 的字段,同时保留旧版 `modelOverride` 和 `providerOverride`。适用于原生插件 hook 以及受支持 bundle 提供的 hook 目录。
2423
+ - `plugins.entries.<id>.config`:插件定义的配置对象(如有可用原生 QuantumClaw 插件 schema,则会校验)。
2424
+ - 已启用的 Claude bundle 插件也可以从 `settings.json` 提供嵌入式 Pi 默认值;QuantumClaw 会将其作为净化后的智能体设置应用,而不是作为原始 QuantumClaw 配置补丁。
2425
+ - `plugins.slots.memory`:选择活动记忆插件 ID,或设为 `"none"` 以禁用记忆插件。
2426
+ - `plugins.slots.contextEngine`:选择活动上下文引擎插件 ID;默认是 `"legacy"`,除非你安装并选择了其他引擎。
2427
+ - `plugins.installs`:由 CLI 管理的安装元数据,供 `quantumclaw plugins update` 使用。
2428
+ - 包括 `source`、`spec`、`sourcePath`、`installPath`、`version`、`resolvedName`、`resolvedVersion`、`resolvedSpec`、`integrity`、`shasum`、`resolvedAt`、`installedAt`。
2429
+ - 请将 `plugins.installs.*` 视为托管状态;优先使用 CLI 命令,而不是手动编辑。
2430
+
2431
+ 见 [Plugins](/tools/plugin)。
2432
+
2433
+ ---
2434
+
2435
+ ## 浏览器
2436
+
2437
+ ```json5
2438
+ {
2439
+ browser: {
2440
+ enabled: true,
2441
+ evaluateEnabled: true,
2442
+ defaultProfile: "user",
2443
+ ssrfPolicy: {
2444
+ dangerouslyAllowPrivateNetwork: true, // 默认可信网络模式
2445
+ // allowPrivateNetwork: true, // 旧别名
2446
+ // hostnameAllowlist: ["*.example.com", "example.com"],
2447
+ // allowedHostnames: ["localhost"],
2448
+ },
2449
+ profiles: {
2450
+ quantumclaw: { cdpPort: 18800, color: "#FF4500" },
2451
+ work: { cdpPort: 18801, color: "#0066CC" },
2452
+ remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" },
2453
+ },
2454
+ color: "#FF4500",
2455
+ // headless: false,
2456
+ // noSandbox: false,
2457
+ // extraArgs: [],
2458
+ // relayBindHost: "0.0.0.0", // 仅在扩展 relay 需要跨命名空间可达时(例如 WSL2)
2459
+ // executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
2460
+ // attachOnly: false,
2461
+ },
2462
+ }
2463
+ ```
2464
+
2465
+ - `evaluateEnabled: false` 会禁用 `act:evaluate` 和 `wait --fn`。
2466
+ - `ssrfPolicy.dangerouslyAllowPrivateNetwork` 在未设置时默认为 `true`(可信网络模型)。
2467
+ - 若要启用严格的仅公共网络浏览导航,请设置 `ssrfPolicy.dangerouslyAllowPrivateNetwork: false`。
2468
+ - 在严格模式下,远程 CDP 配置文件端点(`profiles.*.cdpUrl`)在可达性/发现检查期间也受相同的私有网络阻止规则限制。
2469
+ - `ssrfPolicy.allowPrivateNetwork` 仍支持作为旧别名。
2470
+ - 在严格模式下,可使用 `ssrfPolicy.hostnameAllowlist` 和 `ssrfPolicy.allowedHostnames` 显式放行例外。
2471
+ - 远程配置文件为仅附加模式(禁止启动/停止/重置)。
2472
+ - 自动检测顺序:默认浏览器如果是基于 Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary。
2473
+ - 控制服务:仅 loopback(端口由 `gateway.port` 派生,默认 `18791`)。
2474
+ - `extraArgs` 会向本地 Chromium 启动追加额外标志(例如
2475
+ `--disable-gpu`、窗口大小设置或调试标志)。
2476
+ - `relayBindHost` 更改 Chrome 扩展 relay 的监听地址。若只需 loopback 访问请保持未设置;仅当 relay 必须跨命名空间边界可达(例如 WSL2)且主机网络已受信任时,才显式设置为非 loopback 地址,例如 `0.0.0.0`。
2477
+
2478
+ ---
2479
+
2480
+ ## UI
2481
+
2482
+ ```json5
2483
+ {
2484
+ ui: {
2485
+ seamColor: "#FF4500",
2486
+ assistant: {
2487
+ name: "QuantumClaw",
2488
+ avatar: "CB", // emoji、短文本、图片 URL 或 data URI
2489
+ },
2490
+ },
2491
+ }
2492
+ ```
2493
+
2494
+ - `seamColor`:原生应用 UI 外观的强调色(Talk 模式气泡着色等)。
2495
+ - `assistant`:Control UI 身份覆盖。回退到活动智能体身份。
2496
+
2497
+ ---
2498
+
2499
+ ## Gateway 网关
2500
+
2501
+ ```json5
2502
+ {
2503
+ gateway: {
2504
+ mode: "local", // local | remote
2505
+ port: 18789,
2506
+ bind: "loopback",
2507
+ auth: {
2508
+ mode: "token", // none | token | password | trusted-proxy
2509
+ token: "your-token",
2510
+ // password: "your-password", // 或 QUANTUMCLAW_GATEWAY_PASSWORD
2511
+ // trustedProxy: { userHeader: "x-forwarded-user" }, // 用于 mode=trusted-proxy;见 /gateway/trusted-proxy-auth
2512
+ allowTailscale: true,
2513
+ rateLimit: {
2514
+ maxAttempts: 10,
2515
+ windowMs: 60000,
2516
+ lockoutMs: 300000,
2517
+ exemptLoopback: true,
2518
+ },
2519
+ },
2520
+ tailscale: {
2521
+ mode: "off", // off | serve | funnel
2522
+ resetOnExit: false,
2523
+ },
2524
+ controlUi: {
2525
+ enabled: true,
2526
+ basePath: "/quantumclaw",
2527
+ // root: "dist/control-ui",
2528
+ // allowedOrigins: ["https://control.example.com"], // 非 loopback Control UI 必需
2529
+ // dangerouslyAllowHostHeaderOriginFallback: false, // 危险的 Host-header origin 回退模式
2530
+ // allowInsecureAuth: false,
2531
+ // dangerouslyDisableDeviceAuth: false,
2532
+ },
2533
+ remote: {
2534
+ url: "ws://gateway.tailnet:18789",
2535
+ transport: "ssh", // ssh | direct
2536
+ token: "your-token",
2537
+ // password: "your-password",
2538
+ },
2539
+ trustedProxies: ["10.0.0.1"],
2540
+ // 可选。默认 false。
2541
+ allowRealIpFallback: false,
2542
+ tools: {
2543
+ // 额外的 /tools/invoke HTTP deny
2544
+ deny: ["browser"],
2545
+ // 从默认 HTTP deny 列表中移除工具
2546
+ allow: ["gateway"],
2547
+ },
2548
+ push: {
2549
+ apns: {
2550
+ relay: {
2551
+ baseUrl: "https://relay.example.com",
2552
+ timeoutMs: 10000,
2553
+ },
2554
+ },
2555
+ },
2556
+ },
2557
+ }
2558
+ ```
2559
+
2560
+ <Accordion title="Gateway 网关字段详情">
2561
+
2562
+ - `mode`:`local`(运行网关)或 `remote`(连接远程网关)。除非为 `local`,否则 Gateway 网关拒绝启动。
2563
+ - `port`:用于 WS + HTTP 的单一复用端口。优先级:`--port` > `QUANTUMCLAW_GATEWAY_PORT` > `gateway.port` > `18789`。
2564
+ - `bind`:`auto`、`loopback`(默认)、`lan`(`0.0.0.0`)、`tailnet`(仅 Tailscale IP)或 `custom`。
2565
+ - **旧版 bind 别名**:请在 `gateway.bind` 中使用 bind 模式值(`auto`、`loopback`、`lan`、`tailnet`、`custom`),不要使用主机别名(`0.0.0.0`、`127.0.0.1`、`localhost`、`::`、`::1`)。
2566
+ - **Docker 说明**:默认的 `loopback` bind 在容器内监听 `127.0.0.1`。在 Docker bridge 网络(`-p 18789:18789`)下,流量从 `eth0` 进入,因此网关不可达。请使用 `--network host`,或设置 `bind: "lan"`(或 `bind: "custom"` 并配合 `customBindHost: "0.0.0.0"`)以监听所有接口。
2567
+ - **认证**:默认要求认证。非 loopback bind 需要共享 token/password。新手引导默认会生成一个 token。
2568
+ - 如果同时配置了 `gateway.auth.token` 和 `gateway.auth.password`(包括 SecretRef),请显式设置 `gateway.auth.mode` 为 `token` 或 `password`。如果两者都已配置但 mode 未设置,启动和服务安装/修复流程都会失败。
2569
+ - `gateway.auth.mode: "none"`:显式无认证模式。仅用于受信任的本地 local loopback 设置;新手引导提示中故意不提供此选项。
2570
+ - `gateway.auth.mode: "trusted-proxy"`:将认证委托给具备身份感知能力的反向代理,并信任来自 `gateway.trustedProxies` 的身份头(见 [Trusted Proxy Auth](/gateway/trusted-proxy-auth))。
2571
+ - `gateway.auth.allowTailscale`:为 `true` 时,Tailscale Serve 身份头可满足 Control UI/WebSocket 认证(通过 `tailscale whois` 验证);HTTP API 端点仍要求 token/password 认证。这种无 token 流程假定网关主机是受信任的。当 `tailscale.mode = "serve"` 时默认值为 `true`。
2572
+ - `gateway.auth.rateLimit`:可选的认证失败限流器。按客户端 IP 和认证范围生效(共享密钥和设备 token 分别跟踪)。被阻止的尝试返回 `429` + `Retry-After`。
2573
+ - `gateway.auth.rateLimit.exemptLoopback` 默认值为 `true`;当你有意希望 localhost 流量也受限流时(用于测试设置或严格代理部署),请设为 `false`。
2574
+ - 来自浏览器 origin 的 WS 认证尝试始终会在禁用 loopback 豁免的情况下限流(作为对基于浏览器的 localhost 暴力破解的纵深防御)。
2575
+ - `tailscale.mode`:`serve`(仅 tailnet,loopback bind)或 `funnel`(公开,需要认证)。
2576
+ - `controlUi.allowedOrigins`:用于 Gateway 网关 WebSocket 连接的显式浏览器 origin allowlist。当浏览器客户端预期来自非 loopback origin 时必须设置。
2577
+ - `controlUi.dangerouslyAllowHostHeaderOriginFallback`:危险模式,为那些刻意依赖 Host-header origin 策略的部署启用 Host-header origin 回退。
2578
+ - `remote.transport`:`ssh`(默认)或 `direct`(ws/wss)。对于 `direct`,`remote.url` 必须是 `ws://` 或 `wss://`。
2579
+ - `QUANTUMCLAW_ALLOW_INSECURE_PRIVATE_WS=1`:客户端侧的紧急覆盖,允许对受信任的私有网络 IP 使用明文 `ws://`;默认仍只允许 loopback 使用明文。
2580
+ - `gateway.remote.token` / `.password` 是远程客户端凭证字段。它们本身不会配置网关认证。
2581
+ - `gateway.push.apns.relay.baseUrl`:官方/TestFlight iOS 版本在将基于 relay 的注册发布到网关后,供网关使用的外部 APNs relay 基础 HTTPS URL。该 URL 必须与编译进 iOS 构建中的 relay URL 一致。
2582
+ - `gateway.push.apns.relay.timeoutMs`:网关到 relay 的发送超时(毫秒)。默认值为 `10000`。
2583
+ - 基于 relay 的注册会被委派给一个特定网关身份。配对的 iOS 应用会获取 `gateway.identity.get`,将该身份包含到 relay 注册中,并将带注册作用域的发送授权转发给网关。其他网关不能复用该已存储注册。
2584
+ - `QUANTUMCLAW_APNS_RELAY_BASE_URL` / `QUANTUMCLAW_APNS_RELAY_TIMEOUT_MS`:用于覆盖上述 relay 配置的临时环境变量。
2585
+ - `QUANTUMCLAW_APNS_RELAY_ALLOW_HTTP=true`:仅开发用的逃生口,用于 loopback HTTP relay URL。生产 relay URL 应保持为 HTTPS。
2586
+ - `gateway.channelHealthCheckMinutes`:渠道健康检查监视间隔(分钟)。设为 `0` 可全局禁用健康检查重启。默认:`5`。
2587
+ - `gateway.channelStaleEventThresholdMinutes`:陈旧 socket 阈值(分钟)。请保持其大于或等于 `gateway.channelHealthCheckMinutes`。默认:`30`。
2588
+ - `gateway.channelMaxRestartsPerHour`:滚动一小时内,每个渠道/账户允许的最大健康检查重启次数。默认:`10`。
2589
+ - `channels.<provider>.healthMonitor.enabled`:按渠道选择退出健康检查重启,同时保留全局监视器开启。
2590
+ - `channels.<provider>.accounts.<accountId>.healthMonitor.enabled`:多账户渠道的按账户覆盖。设置后,它优先于渠道级覆盖。
2591
+ - 仅当 `gateway.auth.*` 未设置时,本地 Gateway 网关调用路径才可回退到 `gateway.remote.*`。
2592
+ - 如果 `gateway.auth.token` / `gateway.auth.password` 通过 SecretRef 显式配置但无法解析,解析会以默认拒绝方式失败(不会用 remote 回退掩盖)。
2593
+ - `trustedProxies`:终止 TLS 的反向代理 IP。仅列出你控制的代理。
2594
+ - `allowRealIpFallback`:为 `true` 时,当缺失 `X-Forwarded-For` 时,Gateway 网关接受 `X-Real-IP`。默认为 `false`,以实现默认拒绝行为。
2595
+ - `gateway.tools.deny`:对 HTTP `POST /tools/invoke` 额外阻止的工具名(扩展默认 deny 列表)。
2596
+ - `gateway.tools.allow`:从默认 HTTP deny 列表中移除工具名。
2597
+
2598
+ </Accordion>
2599
+
2600
+ ### 兼容 OpenAI 的端点
2601
+
2602
+ - Chat Completions:默认禁用。通过 `gateway.http.endpoints.chatCompletions.enabled: true` 启用。
2603
+ - Responses API:`gateway.http.endpoints.responses.enabled`。
2604
+ - Responses URL 输入加固:
2605
+ - `gateway.http.endpoints.responses.maxUrlParts`
2606
+ - `gateway.http.endpoints.responses.files.urlAllowlist`
2607
+ - `gateway.http.endpoints.responses.images.urlAllowlist`
2608
+ - 可选的响应加固 header:
2609
+ - `gateway.http.securityHeaders.strictTransportSecurity`(仅对你控制的 HTTPS origin 设置;见 [Trusted Proxy Auth](/gateway/trusted-proxy-auth#tls-termination-and-hsts))
2610
+
2611
+ ### 多实例隔离
2612
+
2613
+ 使用不同端口和状态目录,在一台主机上运行多个网关:
2614
+
2615
+ ```bash
2616
+ QUANTUMCLAW_CONFIG_PATH=~/.quantumclaw/a.json \
2617
+ QUANTUMCLAW_STATE_DIR=~/.quantumclaw-a \
2618
+ quantumclaw gateway --port 19001
2619
+ ```
2620
+
2621
+ 便捷标志:`--dev`(使用 `~/.quantumclaw-dev` + 端口 `19001`)、`--profile <name>`(使用 `~/.quantumclaw-<name>`)。
2622
+
2623
+ 见 [Multiple Gateways](/gateway/multiple-gateways)。
2624
+
2625
+ ---
2626
+
2627
+ ## Hooks
2628
+
2629
+ ```json5
2630
+ {
2631
+ hooks: {
2632
+ enabled: true,
2633
+ token: "shared-secret",
2634
+ path: "/hooks",
2635
+ maxBodyBytes: 262144,
2636
+ defaultSessionKey: "hook:ingress",
2637
+ allowRequestSessionKey: false,
2638
+ allowedSessionKeyPrefixes: ["hook:"],
2639
+ allowedAgentIds: ["hooks", "main"],
2640
+ presets: ["gmail"],
2641
+ transformsDir: "~/.quantumclaw/hooks/transforms",
2642
+ mappings: [
2643
+ {
2644
+ match: { path: "gmail" },
2645
+ action: "agent",
2646
+ agentId: "hooks",
2647
+ wakeMode: "now",
2648
+ name: "Gmail",
2649
+ sessionKey: "hook:gmail:{{messages[0].id}}",
2650
+ messageTemplate: "From: {{messages[0].from}}\nSubject: {{messages[0].subject}}\n{{messages[0].snippet}}",
2651
+ deliver: true,
2652
+ channel: "last",
2653
+ model: "openai/gpt-5.2-mini",
2654
+ },
2655
+ ],
2656
+ },
2657
+ }
2658
+ ```
2659
+
2660
+ 认证:`Authorization: Bearer <token>` 或 `x-quantumclaw-token: <token>`。
2661
+
2662
+ **端点:**
2663
+
2664
+ - `POST /hooks/wake` → `{ text, mode?: "now"|"next-heartbeat" }`
2665
+ - `POST /hooks/agent` → `{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }`
2666
+ - 仅当 `hooks.allowRequestSessionKey=true`(默认:`false`)时,才接受请求负载中的 `sessionKey`。
2667
+ - `POST /hooks/<name>` → 通过 `hooks.mappings` 解析
2668
+
2669
+ <Accordion title="映射详情">
2670
+
2671
+ - `match.path` 匹配 `/hooks` 之后的子路径(例如 `/hooks/gmail` → `gmail`)。
2672
+ - `match.source` 匹配通用路径中的某个负载字段。
2673
+ - 像 `{{messages[0].subject}}` 这样的模板会从负载中读取。
2674
+ - `transform` 可指向返回 hook 操作的 JS/TS 模块。
2675
+ - `transform.module` 必须是相对路径,并且始终位于 `hooks.transformsDir` 内(绝对路径和路径穿越会被拒绝)。
2676
+ - `agentId` 会路由到指定智能体;未知 ID 会回退到默认值。
2677
+ - `allowedAgentIds`:限制显式路由(`*` 或省略 = 允许全部,`[]` = 全部拒绝)。
2678
+ - `defaultSessionKey`:可选的固定会话键,用于未显式提供 `sessionKey` 的 hook 智能体运行。
2679
+ - `allowRequestSessionKey`:允许 `/hooks/agent` 调用方设置 `sessionKey`(默认:`false`)。
2680
+ - `allowedSessionKeyPrefixes`:针对显式 `sessionKey` 值(请求 + 映射)的可选前缀 allowlist,例如 `["hook:"]`。
2681
+ - `deliver: true` 会将最终回复发送到某个渠道;`channel` 默认为 `last`。
2682
+ - `model` 会覆盖此次 hook 运行的 LLM(如果已设置模型目录,则必须是允许的模型)。
2683
+
2684
+ </Accordion>
2685
+
2686
+ ### Gmail 集成
2687
+
2688
+ ```json5
2689
+ {
2690
+ hooks: {
2691
+ gmail: {
2692
+ account: "quantumclaw@gmail.com",
2693
+ topic: "projects/<project-id>/topics/gog-gmail-watch",
2694
+ subscription: "gog-gmail-watch-push",
2695
+ pushToken: "shared-push-token",
2696
+ hookUrl: "http://127.0.0.1:18789/hooks/gmail",
2697
+ includeBody: true,
2698
+ maxBytes: 20000,
2699
+ renewEveryMinutes: 720,
2700
+ serve: { bind: "127.0.0.1", port: 8788, path: "/" },
2701
+ tailscale: { mode: "funnel", path: "/gmail-pubsub" },
2702
+ model: "openrouter/meta-llama/llama-3.3-70b-instruct:free",
2703
+ thinking: "off",
2704
+ },
2705
+ },
2706
+ }
2707
+ ```
2708
+
2709
+ - 配置后,Gateway 网关会在启动时自动启动 `gog gmail watch serve`。设置 `QUANTUMCLAW_SKIP_GMAIL_WATCHER=1` 可禁用。
2710
+ - 不要与 Gateway 网关同时单独运行 `gog gmail watch serve`。
2711
+
2712
+ ---
2713
+
2714
+ ## Canvas host
2715
+
2716
+ ```json5
2717
+ {
2718
+ canvasHost: {
2719
+ root: "~/.quantumclaw/workspace/canvas",
2720
+ liveReload: true,
2721
+ // enabled: false, // 或 QUANTUMCLAW_SKIP_CANVAS_HOST=1
2722
+ },
2723
+ }
2724
+ ```
2725
+
2726
+ - 在 Gateway 网关端口下,通过 HTTP 提供可由智能体编辑的 HTML/CSS/JS 和 A2UI:
2727
+ - `http://<gateway-host>:<gateway.port>/__quantumclaw__/canvas/`
2728
+ - `http://<gateway-host>:<gateway.port>/__quantumclaw__/a2ui/`
2729
+ - 仅限本地:保持 `gateway.bind: "loopback"`(默认)。
2730
+ - 非 loopback bind:canvas 路由需要 Gateway 网关认证(token/password/trusted-proxy),与其他 Gateway 网关 HTTP 界面一致。
2731
+ - Node WebView 通常不会发送认证头;在某个节点完成配对并连接后,Gateway 网关会为 canvas/A2UI 访问通告带节点作用域的 capability URL。
2732
+ - Capability URL 绑定到活动节点 WS 会话,并且很快过期。不使用基于 IP 的回退。
2733
+ - 会向所服务的 HTML 中注入 live-reload 客户端。
2734
+ - 空目录时会自动创建起始 `index.html`。
2735
+ - 也会在 `/__quantumclaw__/a2ui/` 提供 A2UI。
2736
+ - 更改需要重启 Gateway 网关。
2737
+ - 对于大型目录或 `EMFILE` 错误,请禁用 live reload。
2738
+
2739
+ ---
2740
+
2741
+ ## 设备发现
2742
+
2743
+ ### mDNS(Bonjour)
2744
+
2745
+ ```json5
2746
+ {
2747
+ discovery: {
2748
+ mdns: {
2749
+ mode: "minimal", // minimal | full | off
2750
+ },
2751
+ },
2752
+ }
2753
+ ```
2754
+
2755
+ - `minimal`(默认):从 TXT 记录中省略 `cliPath` + `sshPort`。
2756
+ - `full`:包含 `cliPath` + `sshPort`。
2757
+ - 主机名默认为 `quantumclaw`。可使用 `QUANTUMCLAW_MDNS_HOSTNAME` 覆盖。
2758
+
2759
+ ### 广域(DNS-SD)
2760
+
2761
+ ```json5
2762
+ {
2763
+ discovery: {
2764
+ wideArea: { enabled: true },
2765
+ },
2766
+ }
2767
+ ```
2768
+
2769
+ 在 `~/.quantumclaw/dns/` 下写入一个单播 DNS-SD 区域。对于跨网络设备发现,可与 DNS 服务器(推荐 CoreDNS)+ Tailscale split DNS 搭配使用。
2770
+
2771
+ 设置:`quantumclaw dns setup --apply`。
2772
+
2773
+ ---
2774
+
2775
+ ## 环境
2776
+
2777
+ ### `env`(内联环境变量)
2778
+
2779
+ ```json5
2780
+ {
2781
+ env: {
2782
+ OPENROUTER_API_KEY: "sk-or-...",
2783
+ vars: {
2784
+ GROQ_API_KEY: "gsk-...",
2785
+ },
2786
+ shellEnv: {
2787
+ enabled: true,
2788
+ timeoutMs: 15000,
2789
+ },
2790
+ },
2791
+ }
2792
+ ```
2793
+
2794
+ - 仅当进程环境中缺少该键时,才会应用内联环境变量。
2795
+ - `.env` 文件:当前工作目录 `.env` + `~/.quantumclaw/.env`(两者都不会覆盖现有变量)。
2796
+ - `shellEnv`:从你的登录 shell 配置文件导入缺失的预期键名。
2797
+ - 完整优先级见 [Environment](/help/environment)。
2798
+
2799
+ ### 环境变量替换
2800
+
2801
+ 可在任意配置字符串中使用 `${VAR_NAME}` 引用环境变量:
2802
+
2803
+ ```json5
2804
+ {
2805
+ gateway: {
2806
+ auth: { token: "${QUANTUMCLAW_GATEWAY_TOKEN}" },
2807
+ },
2808
+ }
2809
+ ```
2810
+
2811
+ - 仅匹配大写名称:`[A-Z_][A-Z0-9_]*`。
2812
+ - 缺失/为空的变量会在配置加载时抛出错误。
2813
+ - 使用 `$${VAR}` 可转义为字面量 `${VAR}`。
2814
+ - 适用于 `$include`。
2815
+
2816
+ ---
2817
+
2818
+ ## 密钥
2819
+
2820
+ Secret refs 是增量能力:明文值仍然可用。
2821
+
2822
+ ### `SecretRef`
2823
+
2824
+ 使用以下对象形式之一:
2825
+
2826
+ ```json5
2827
+ { source: "env" | "file" | "exec", provider: "default", id: "..." }
2828
+ ```
2829
+
2830
+ 校验:
2831
+
2832
+ - `provider` 模式:`^[a-z][a-z0-9_-]{0,63}$`
2833
+ - `source: "env"` 的 id 模式:`^[A-Z][A-Z0-9_]{0,127}$`
2834
+ - `source: "file"` 的 id:绝对 JSON pointer(例如 `"/providers/openai/apiKey"`)
2835
+ - `source: "exec"` 的 id 模式:`^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$`
2836
+ - `source: "exec"` 的 id 不能包含以斜杠分隔的 `.` 或 `..` 路径段(例如 `a/../b` 会被拒绝)
2837
+
2838
+ ### 支持的凭证表面
2839
+
2840
+ - 规范矩阵:[SecretRef Credential Surface](/reference/secretref-credential-surface)
2841
+ - `secrets apply` 会定位受支持的 `quantumclaw.json` 凭证路径。
2842
+ - `auth-profiles.json` 中的 ref 也包含在运行时解析和审计覆盖范围内。
2843
+
2844
+ ### Secret providers 配置
2845
+
2846
+ ```json5
2847
+ {
2848
+ secrets: {
2849
+ providers: {
2850
+ default: { source: "env" }, // 可选的显式环境变量提供商
2851
+ filemain: {
2852
+ source: "file",
2853
+ path: "~/.quantumclaw/secrets.json",
2854
+ mode: "json",
2855
+ timeoutMs: 5000,
2856
+ },
2857
+ vault: {
2858
+ source: "exec",
2859
+ command: "/usr/local/bin/quantumclaw-vault-resolver",
2860
+ passEnv: ["PATH", "VAULT_ADDR"],
2861
+ },
2862
+ },
2863
+ defaults: {
2864
+ env: "default",
2865
+ file: "filemain",
2866
+ exec: "vault",
2867
+ },
2868
+ },
2869
+ }
2870
+ ```
2871
+
2872
+ 说明:
2873
+
2874
+ - `file` 提供商支持 `mode: "json"` 和 `mode: "singleValue"`(在 singleValue 模式下,`id` 必须是 `"value"`)。
2875
+ - `exec` 提供商要求绝对 `command` 路径,并通过 stdin/stdout 使用协议负载。
2876
+ - 默认会拒绝符号链接命令路径。设置 `allowSymlinkCommand: true` 可允许符号链接路径,同时校验解析后的目标路径。
2877
+ - 如果配置了 `trustedDirs`,则受信任目录检查会应用到解析后的目标路径。
2878
+ - `exec` 子进程环境默认最小化;请通过 `passEnv` 显式传递所需变量。
2879
+ - Secret refs 会在激活时解析为内存快照,之后请求路径只读取该快照。
2880
+ - 激活期间会应用活动表面过滤:已启用表面上的未解析 ref 会导致启动/重载失败,而非活动表面会被跳过并记录诊断信息。
2881
+
2882
+ ---
2883
+
2884
+ ## 认证存储
2885
+
2886
+ ```json5
2887
+ {
2888
+ auth: {
2889
+ profiles: {
2890
+ "anthropic:me@example.com": { provider: "anthropic", mode: "oauth", email: "me@example.com" },
2891
+ "anthropic:work": { provider: "anthropic", mode: "api_key" },
2892
+ },
2893
+ order: {
2894
+ anthropic: ["anthropic:me@example.com", "anthropic:work"],
2895
+ },
2896
+ },
2897
+ }
2898
+ ```
2899
+
2900
+ - 每个智能体的配置文件存储在 `<agentDir>/auth-profiles.json`。
2901
+ - `auth-profiles.json` 支持值级 ref(`api_key` 使用 `keyRef`,`token` 使用 `tokenRef`)。
2902
+ - 静态运行时凭证来自内存中的已解析快照;发现旧版静态 `auth.json` 条目时会进行清理。
2903
+ - 旧版 OAuth 会从 `~/.quantumclaw/credentials/oauth.json` 导入。
2904
+ - 见 [OAuth](/concepts/oauth)。
2905
+ - Secrets 运行时行为以及 `audit/configure/apply` 工具:见 [Secrets Management](/gateway/secrets)。
2906
+
2907
+ ---
2908
+
2909
+ ## 日志
2910
+
2911
+ ```json5
2912
+ {
2913
+ logging: {
2914
+ level: "info",
2915
+ file: "/tmp/quantumclaw/quantumclaw.log",
2916
+ consoleLevel: "info",
2917
+ consoleStyle: "pretty", // pretty | compact | json
2918
+ redactSensitive: "tools", // off | tools
2919
+ redactPatterns: ["\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1"],
2920
+ },
2921
+ }
2922
+ ```
2923
+
2924
+ - 默认日志文件:`/tmp/quantumclaw/quantumclaw-YYYY-MM-DD.log`。
2925
+ - 设置 `logging.file` 以获得稳定路径。
2926
+ - 使用 `--verbose` 时,`consoleLevel` 会提升为 `debug`。
2927
+
2928
+ ---
2929
+
2930
+ ## CLI
2931
+
2932
+ ```json5
2933
+ {
2934
+ cli: {
2935
+ banner: {
2936
+ taglineMode: "off", // random | default | off
2937
+ },
2938
+ },
2939
+ }
2940
+ ```
2941
+
2942
+ - `cli.banner.taglineMode` 控制横幅标语样式:
2943
+ - `"random"`(默认):轮换的有趣/季节性标语。
2944
+ - `"default"`:固定的中性标语(`All your chats, one QuantumClaw.`)。
2945
+ - `"off"`:不显示标语文本(仍显示横幅标题/版本)。
2946
+ - 若要隐藏整个横幅(而不仅是标语),请设置环境变量 `QUANTUMCLAW_HIDE_BANNER=1`。
2947
+
2948
+ ---
2949
+
2950
+ ## 向导
2951
+
2952
+ 由 CLI 向导(`onboard`、`configure`、`doctor`)写入的元数据:
2953
+
2954
+ ```json5
2955
+ {
2956
+ wizard: {
2957
+ lastRunAt: "2026-01-01T00:00:00.000Z",
2958
+ lastRunVersion: "2026.1.4",
2959
+ lastRunCommit: "abc1234",
2960
+ lastRunCommand: "configure",
2961
+ lastRunMode: "local",
2962
+ },
2963
+ }
2964
+ ```
2965
+
2966
+ ---
2967
+
2968
+ ## 身份
2969
+
2970
+ ```json5
2971
+ {
2972
+ agents: {
2973
+ list: [
2974
+ {
2975
+ id: "main",
2976
+ identity: {
2977
+ name: "Samantha",
2978
+ theme: "helpful sloth",
2979
+ emoji: "🦥",
2980
+ avatar: "avatars/samantha.png",
2981
+ },
2982
+ },
2983
+ ],
2984
+ },
2985
+ }
2986
+ ```
2987
+
2988
+ 由 macOS 新手引导助手写入。会派生默认值:
2989
+
2990
+ - 从 `identity.emoji` 派生 `messages.ackReaction`(回退为 👀)
2991
+ - 从 `identity.name`/`identity.emoji` 派生 `mentionPatterns`
2992
+ - `avatar` 接受:工作区相对路径、`http(s)` URL 或 `data:` URI
2993
+
2994
+ ---
2995
+
2996
+ ## Bridge(旧版,已移除)
2997
+
2998
+ 当前版本不再包含 TCP bridge。节点通过 Gateway 网关 WebSocket 连接。`bridge.*` 键已不再属于配置 schema 的一部分(在移除前校验会失败;`quantumclaw doctor --fix` 可清除未知键)。
2999
+
3000
+ <Accordion title="旧版 bridge 配置(历史参考)">
3001
+
3002
+ ```json
3003
+ {
3004
+ "bridge": {
3005
+ "enabled": true,
3006
+ "port": 18790,
3007
+ "bind": "tailnet",
3008
+ "tls": {
3009
+ "enabled": true,
3010
+ "autoGenerate": true
3011
+ }
3012
+ }
3013
+ }
3014
+ ```
3015
+
3016
+ </Accordion>
3017
+
3018
+ ---
3019
+
3020
+ ## Cron
3021
+
3022
+ ```json5
3023
+ {
3024
+ cron: {
3025
+ enabled: true,
3026
+ maxConcurrentRuns: 2,
3027
+ webhook: "https://example.invalid/legacy", // 旧版回退,仅用于已存储的 notify:true 作业
3028
+ webhookToken: "replace-with-dedicated-token", // 可选,用于出站 webhook 认证的 bearer token
3029
+ sessionRetention: "24h", // 时长字符串或 false
3030
+ runLog: {
3031
+ maxBytes: "2mb", // 默认 2_000_000 字节
3032
+ keepLines: 2000, // 默认 2000
3033
+ },
3034
+ },
3035
+ }
3036
+ ```
3037
+
3038
+ - `sessionRetention`:已完成的隔离 Cron 运行会话在从 `sessions.json` 清理前保留多久。也控制已归档、已删除的 Cron 记录清理。默认:`24h`;设为 `false` 可禁用。
3039
+ - `runLog.maxBytes`:每个运行日志文件(`cron/runs/<jobId>.jsonl`)在清理前的最大大小。默认:`2_000_000` 字节。
3040
+ - `runLog.keepLines`:触发运行日志清理时保留的最新行数。默认:`2000`。
3041
+ - `webhookToken`:用于 Cron webhook POST 投递(`delivery.mode = "webhook"`)的 bearer token;若省略则不发送认证头。
3042
+ - `webhook`:已弃用的旧版回退 webhook URL(http/https),仅用于仍然具有 `notify: true` 的已存储作业。
3043
+
3044
+ 见 [Cron Jobs](/automation/cron-jobs)。
3045
+
3046
+ ---
3047
+
3048
+ ## 媒体模型模板变量
3049
+
3050
+ 会在 `tools.media.models[].args` 中展开的模板占位符:
3051
+
3052
+ | Variable | Description |
3053
+ | ------------------ | -------------------------------------------- |
3054
+ | `{{Body}}` | 完整入站消息正文 |
3055
+ | `{{RawBody}}` | 原始正文(无历史/发送者包装) |
3056
+ | `{{BodyStripped}}` | 去除群组提及后的正文 |
3057
+ | `{{From}}` | 发送者标识符 |
3058
+ | `{{To}}` | 目标标识符 |
3059
+ | `{{MessageSid}}` | 渠道消息 ID |
3060
+ | `{{SessionId}}` | 当前会话 UUID |
3061
+ | `{{IsNewSession}}` | 新建会话时为 `"true"` |
3062
+ | `{{MediaUrl}}` | 入站媒体伪 URL |
3063
+ | `{{MediaPath}}` | 本地媒体路径 |
3064
+ | `{{MediaType}}` | 媒体类型(image/audio/document/…) |
3065
+ | `{{Transcript}}` | 音频转录 |
3066
+ | `{{Prompt}}` | 为 CLI 条目解析后的媒体提示 |
3067
+ | `{{MaxChars}}` | 为 CLI 条目解析后的最大输出字符数 |
3068
+ | `{{ChatType}}` | `"direct"` 或 `"group"` |
3069
+ | `{{GroupSubject}}` | 群组主题(尽力而为) |
3070
+ | `{{GroupMembers}}` | 群组成员预览(尽力而为) |
3071
+ | `{{SenderName}}` | 发送者显示名(尽力而为) |
3072
+ | `{{SenderE164}}` | 发送者电话号码(尽力而为) |
3073
+ | `{{Provider}}` | 提供商提示(whatsapp、telegram、discord 等) |
3074
+
3075
+ ---
3076
+
3077
+ ## 配置 includes(`$include`)
3078
+
3079
+ 将配置拆分为多个文件:
3080
+
3081
+ ```json5
3082
+ // ~/.quantumclaw/quantumclaw.json
3083
+ {
3084
+ gateway: { port: 18789 },
3085
+ agents: { $include: "./agents.json5" },
3086
+ broadcast: {
3087
+ $include: ["./clients/mueller.json5", "./clients/schmidt.json5"],
3088
+ },
3089
+ }
3090
+ ```
3091
+
3092
+ **合并行为:**
3093
+
3094
+ - 单个文件:替换包含它的对象。
3095
+ - 文件数组:按顺序深度合并(后者覆盖前者)。
3096
+ - 同级键:在 include 之后再合并(覆盖被包含的值)。
3097
+ - 嵌套 include:最多 10 层。
3098
+ - 路径:相对于包含它的文件解析,但必须保持在顶层配置目录(`quantumclaw.json` 的 `dirname`)内。只有在最终解析结果仍位于该边界内时,才允许使用绝对路径/`../` 形式。
3099
+ - 错误:缺失文件、解析错误和循环 include 都会给出清晰错误信息。
3100
+
3101
+ ---
3102
+
3103
+ _相关内容:[Configuration](/gateway/configuration) · [Configuration Examples](/gateway/configuration-examples) · [Doctor](/gateway/doctor)_