èšå® ð§Â¶
OpenClaw ã¯ã~/.openclaw/openclaw.json ããä»»æã® JSON5 èšå®ãèªã¿èŸŒã¿ãŸãïŒã³ã¡ã³ãããã³æ«å°Ÿã«ã³ããèš±å¯ïŒã
ãã¡ã€ã«ãèŠã€ãããªãå ŽåãOpenClawã¯å®å
šãªããã©ã«ãã䜿çšããŸã(åã蟌ã¿PiãšãŒãžã§ã³ã+éä¿¡è
ããšã®ã»ãã·ã§ã³+ã¯ãŒã¯ã¹ããŒã¹~/.openclaw/workspace)ã éåžžã¯ä»¥äžã®èšå®ã®ã¿ãå¿
èŠã§ã:
- ããããããªã¬ãŒã§ãããŠãŒã¶ãŒãå¶éããïŒ
channels.whatsapp.allowFromãchannels.telegram.allowFromãªã©ïŒ - ã°ã«ãŒãã®èš±å¯ãªã¹ããšã¡ã³ã·ã§ã³åäœãå¶åŸ¡ããïŒ
channels.whatsapp.groupsãchannels.telegram.groupsãchannels.discord.guildsãagents.list[].groupChatïŒ - ã¡ãã»ãŒãžã®ãã¬ãã£ãã¯ã¹ãã«ã¹ã¿ãã€ãºããïŒ
messagesïŒ - ãšãŒãžã§ã³ãã®ã¯ãŒã¯ã¹ããŒã¹ãèšå®ããïŒ
agents.defaults.workspaceãŸãã¯agents.list[].workspaceïŒ - çµã¿èŸŒã¿ãšãŒãžã§ã³ãã®ããã©ã«ãïŒ
agents.defaultsïŒããã³ã»ãã·ã§ã³åäœïŒsessionïŒã調æŽãã - ãšãŒãžã§ã³ãããšã®ã¢ã€ãã³ãã£ãã£ãèšå®ããïŒ
agents.list[].identityïŒ
èšå®ãåããŠã§ããïŒ è©³çŽ°ãªèª¬æä»ãã®å®å šãªäŸã«ã€ããŠã¯ãConfiguration Examples ã¬ã€ããã確èªãã ããã
峿 Œãªèšå®æ€èšŒÂ¶
OpenClawã¯ã¹ããŒããšå®å šã«äžèŽããèšå®ã®ã¿ãåãä»ããŸãã äžæãªããŒãäžæ£ãªåããŸãã¯äžæ£ãªå€ã«ãããã²ãŒããŠã§ã€ã¯å®å šã®ããã«èµ·åãæåŠããŸãã
æ€èšŒã«å€±æããå ŽåïŒ
- Gateway ã¯èµ·åããŸããã
- 蚺æã³ãã³ãã®ã¿ãèš±å¯ãããŸãïŒäŸïŒ
openclaw doctorãopenclaw logsãopenclaw healthãopenclaw statusãopenclaw serviceãopenclaw helpïŒã - æ£ç¢ºãªåé¡ç¹ã確èªããã«ã¯
openclaw doctorãå®è¡ããŠãã ããã - ãã€ã°ã¬ãŒã·ã§ã³ïŒä¿®åŸ©ãé©çšããã«ã¯
openclaw doctor --fixïŒãŸãã¯--yesïŒãå®è¡ããŠãã ããã
Doctor ã¯ã--fix/--yes ã«æç€ºçã«åæããªãéãã倿Žãæžã蟌ã¿ãŸããã
ã¹ããŒã + UI ãã³ã¶
ã²ãŒããŠã§ã€ã¯ãUI ãšãã£ã¿ãŒã® config.schema ãä»ããŠèšå®ã® JSON ã¹ããŒã衚çŸãå
¬éããŸãã
Control UI ã¯ãã®ã¹ããŒããããã©ãŒã ãã¬ã³ããªã³ã°ããRaw JSON ãšãã£ã¿ããšã¹ã±ãŒãããããšããŠäœ¿çšããŸãã
ãã£ã³ãã«ãã©ã°ã€ã³ãæ¡åŒµã¯ãèšå®çšã®ã¹ããŒããš UI ãã³ããç»é²ã§ãããããããŒãã³ãŒãããããã©ãŒã ã«äŸåãããã¢ããªéã§ã¹ããŒãé§åã®èšå®ãç¶æã§ããŸãã
ãã³ãïŒã©ãã«ãã°ã«ãŒãã³ã°ãæ©å¯ãã£ãŒã«ããªã©ïŒã¯ã¹ããŒããšäžç·ã«æäŸãããã¯ã©ã€ã¢ã³ãã¯èšå®ç¥èãããŒãã³ãŒãããã«ãããè¯ããã©ãŒã ãæç»ã§ããŸãã
é©çš + åèµ·åïŒRPCïŒÂ¶
config.applyã䜿çšãããšãå®å šãªèšå®ãæ€èšŒ+æžã蟌ã¿ãã²ãŒããŠã§ã€ãäžåºŠã«åèµ·åã§ããŸãã ããã¯ãåèµ·åã®ã»ã³ããã«ãæžã蟌ã¿ãã²ãŒããŠã§ã€ãæ»ã£ãŠããåŸã®æåŸã®ã¢ã¯ãã£ãã»ãã·ã§ã³ã ping ãããŸãã
èŠå: config.apply 㯠config å
šäœã眮ãæããŸãã 24. ããã€ãã®ããŒã ãã倿Žãããå Žåã¯ãconfig.patch ãŸã㯠openclaw config set ã䜿çšããŠãã ããã ~/.openclaw/openclaw.json ã®ããã¯ã¢ãããä¿æããŸãã
Params:
rawïŒstringïŒâ èšå®å šäœã® JSON5 ãã€ããŒãbaseHashïŒä»»æïŒâconfig.getããååŸããèšå®ããã·ã¥ïŒæ¢åèšå®ãããå Žåã¯å¿ é ïŒsessionKeyïŒä»»æïŒâ ãŠã§ã€ã¯ã¢ãã ping çšã®æåŸã®ã¢ã¯ãã£ãã»ãã·ã§ã³ããŒnoteïŒä»»æïŒâ åèµ·åã»ã³ããã«ã«å«ããã¡ã¢restartDelayMsïŒä»»æïŒâ åèµ·åãŸã§ã®é å»¶ïŒããã©ã«ã 2000ïŒ
äŸïŒgateway call çµç±ïŒïŒ
openclaw gateway call config.get --params '{}' # capture payload.hash
openclaw gateway call config.apply --params '{
"raw": "{\\n agents: { defaults: { workspace: \\"~/.openclaw/workspace\\" } }\\n}\\n",
"baseHash": "<hash-from-config.get>",
"sessionKey": "agent:main:whatsapp:dm:+15555550123",
"restartDelayMs": 1000
}'
éšåæŽæ°ïŒRPCïŒÂ¶
config.patch ã䜿çšãããšã
é¢é£ã®ãªãããŒãã¯ããŒãããã«æ¢åã®èšå®ã«éšåçãªæŽæ°ãããŒãžã§ããŸãã JSON ããŒãžãããã»ãã³ãã£ã¯ã¹ãé©çšããŸã:
- ãªããžã§ã¯ãã¯ååž°çã«ããŒãž
nullã¯ããŒãåé€config.applyãšåæ§ã«ãæ€èšŒã»æžã蟌ã¿ãè¡ããåèµ·åã»ã³ããã«ãä¿åããGateway ã®åèµ·åãã¹ã±ãžã¥ãŒã«ããŸãïŒsessionKeyãæå®ãããå Žåã¯ãŠã§ã€ã¯ã¢ãããè¡ããŸãïŒã
Params:
rawïŒstringïŒâ 倿ŽããããŒã®ã¿ãå«ã JSON5 ãã€ããŒãbaseHashïŒå¿ é ïŒâconfig.getããååŸããèšå®ããã·ã¥sessionKeyïŒä»»æïŒâ ãŠã§ã€ã¯ã¢ãã ping çšã®æåŸã®ã¢ã¯ãã£ãã»ãã·ã§ã³ããŒnoteïŒä»»æïŒâ åèµ·åã»ã³ããã«ã«å«ããã¡ã¢restartDelayMsïŒä»»æïŒâ åèµ·åãŸã§ã®é å»¶ïŒããã©ã«ã 2000ïŒ
gateway/configuration.md
openclaw gateway call config.get --params '{}' # capture payload.hash
openclaw gateway call config.patch --params '{
"raw": "{\\n channels: { telegram: { groups: { \\"*\\": { requireMention: false } } } }\\n}\\n",
"baseHash": "<hash-from-config.get>",
"sessionKey": "agent:main:whatsapp:dm:+15555550123",
"restartDelayMs": 1000
}'
æå°èšå®ïŒæšå¥šã®éå§ç¹ïŒÂ¶
{
agents: { defaults: { workspace: "~/.openclaw/workspace" } },
channels: { whatsapp: { allowFrom: ["+15555550123"] } },
}
次ã®ã³ãã³ãã§ãããã©ã«ãã€ã¡ãŒãžãäžåºŠãã«ãããŸãã
scripts/sandbox-setup.sh
ã»ã«ããã£ããã¢ãŒãïŒã°ã«ãŒãå¶åŸ¡ã«æšå¥šïŒÂ¶
ã°ã«ãŒãå ã§ WhatsApp ã® @ ã¡ã³ã·ã§ã³ã«åå¿ããªãããã«ããç¹å®ã®ããã¹ãããªã¬ãŒã®ã¿ã«åå¿ãããå ŽåïŒ
{
agents: {
defaults: { workspace: "~/.openclaw/workspace" },
list: [
{
id: "main",
groupChat: { mentionPatterns: ["@openclaw", "reisponde"] },
},
],
},
channels: {
whatsapp: {
// Allowlist is DMs only; including your own number enables self-chat mode.
allowFrom: ["+15555550123"],
groups: { "*": { requireMention: true } },
},
},
}
èšå®ã€ã³ã¯ã«ãŒãïŒ$includeïŒÂ¶
$includeãã£ã¬ã¯ãã£ãã䜿çšããŠãèšå®ãè€æ°ã®ãã¡ã€ã«ã«åå²ããŸãã ããã¯ä»¥äžã®å Žåã«äŸ¿å©ã§ã:
- å€§èŠæš¡ãªèšå®ã®æŽçïŒäŸïŒã¯ã©ã€ã¢ã³ãããšã®ãšãŒãžã§ã³ãå®çŸ©ïŒ
- ç°å¢éã§ã®å ±éèšå®ã®å ±æ
- æ©å¯èšå®ã®åé¢
åºæ¬çãªäœ¿ãæ¹Â¶
// ~/.openclaw/openclaw.json
{
gateway: { port: 18789 },
// Include a single file (replaces the key's value)
agents: { $include: "./agents.json5" },
// Include multiple files (deep-merged in order)
broadcast: {
$include: ["./clients/mueller.json5", "./clients/schmidt.json5"],
},
}
// ~/.openclaw/agents.json5
{
defaults: { sandbox: { mode: "all", scope: "session" } },
list: [{ id: "main", workspace: "~/.openclaw/workspace" }],
}
çµ±åã®åäœÂ¶
- åäžãã¡ã€ã«ïŒ
$includeãå«ããªããžã§ã¯ãã眮æ - é åãã¡ã€ã«ïŒé åºã©ããã«ãã£ãŒãããŒãžïŒåŸã®ãã¡ã€ã«ãåã®ãã¡ã€ã«ãäžæžãïŒ
- å åŒããŒããïŒã€ã³ã¯ã«ãŒãåŸã«å åŒããŒãããŒãžïŒã€ã³ã¯ã«ãŒãå€ãäžæžãïŒ
- å åŒã㌠+ é åïŒããªããã£ãïŒé察å¿ïŒã€ã³ã¯ã«ãŒãå 容ã¯ãªããžã§ã¯ãã§ããå¿ èŠããããŸãïŒ
// Sibling keys override included values
{
$include: "./base.json5", // { a: 1, b: 2 }
b: 99, // Result: { a: 1, b: 99 }
}
ãã¹ãããããã®ãå«ã¶
ã€ã³ã¯ã«ãŒãããããã¡ã€ã«èªäœã $include ãã£ã¬ã¯ãã£ããå«ããããšãã§ããŸãïŒæå€§ 10 éå±€ïŒã
// clients/mueller.json5
{
agents: { $include: "./mueller/agents.json5" },
broadcast: { $include: "./mueller/broadcast.json5" },
}
ãã¹è§£æ±ºÂ¶
- çžå¯Ÿãã¹ïŒã€ã³ã¯ã«ãŒãå ãã¡ã€ã«ãåºæºã«è§£æ±º
- 絶察ãã¹ïŒãã®ãŸãŸäœ¿çš
- 芪ãã£ã¬ã¯ããªïŒ
../åç §ã¯æåŸ ã©ããã«åäœ
{ "$include": "./sub/config.json5" } // relative
{ "$include": "/etc/openclaw/base.json5" } // absolute
{ "$include": "../shared/common.json5" } // parent dir
ãšã©ãŒãã³ããªã³ã°Â¶
- ãã¡ã€ã«æªååšïŒè§£æ±ºåŸã®ãã¹ãå«ãæç¢ºãªãšã©ãŒ
- ããŒã¹ãšã©ãŒïŒã©ã®ã€ã³ã¯ã«ãŒããã¡ã€ã«ã§å€±æãããã衚瀺
- 埪ç°ã€ã³ã¯ã«ãŒãïŒæ€åºãããã€ã³ã¯ã«ãŒããã§ãŒã³ãšãšãã«å ±å
äŸïŒãã«ãã¯ã©ã€ã¢ã³ãã®æ³ååãæ§æÂ¶
// ~/.openclaw/openclaw.json
{
gateway: { port: 18789, auth: { token: "secret" } },
// Common agent defaults
agents: {
defaults: {
sandbox: { mode: "all", scope: "session" },
},
// Merge agent lists from all clients
list: { $include: ["./clients/mueller/agents.json5", "./clients/schmidt/agents.json5"] },
},
// Merge broadcast configs
broadcast: {
$include: ["./clients/mueller/broadcast.json5", "./clients/schmidt/broadcast.json5"],
},
channels: { whatsapp: { groupPolicy: "allowlist" } },
}
// ~/.openclaw/clients/mueller/agents.json5
[
{ id: "mueller-transcribe", workspace: "~/clients/mueller/transcribe" },
{ id: "mueller-docs", workspace: "~/clients/mueller/docs" },
]
// ~/.openclaw/clients/mueller/broadcast.json5
{
"120363403215116621@g.us": ["mueller-transcribe", "mueller-docs"],
}
å ±éãªãã·ã§ã³Â¶
Env vars + .env¶
OpenClaw ã¯ã芪ããã»ã¹ïŒã·ã§ã«ãlaunchd/systemdãCI ãªã©ïŒããç°å¢å€æ°ãèªã¿èŸŒã¿ãŸãã
ããã«ã次ãèªã¿èŸŒã¿ãŸãã
- ã«ã¬ã³ãã¯ãŒãã³ã°ãã£ã¬ã¯ããªã«ãã
.envïŒååšããå ŽåïŒ ~/.openclaw/.envïŒå¥å$OPENCLAW_STATE_DIR/.envïŒã«ããã°ããŒãã«ãã©ãŒã«ããã¯.env
ã©ã¡ãã® .env ãã¡ã€ã«ããæ¢åã®ç°å¢å€æ°ãäžæžãããŸããã
ãŸããconfigã«ã€ã³ã©ã€ã³env varsãæå®ããããšãã§ããŸãã ãããã¯ã ããã»ã¹ env ãããŒãæ¬ èœããŠããå Žåã«ã®ã¿é©çšãããŸã (ãªãŒããŒã©ã€ããããŠããªãã«ãŒã«ãšåã)ã
{
env: {
OPENROUTER_API_KEY: "sk-or-...",
vars: {
GROQ_API_KEY: "gsk-...",
},
},
}
åªå é äœãšãœãŒã¹ã®è©³çŽ°ã¯ /environment ãåç §ããŠãã ããã
env.shellEnvïŒä»»æïŒÂ¶
ãªããã€ã³ã®å©äŸ¿æ§: æå¹ã«ãªã£ãŠããŠãæåŸ ãããããŒã®ã©ããèšå®ãããŠããªãå Žå OpenClawã¯ãã°ã€ã³ã·ã§ã«ãå®è¡ããæåŸ ãããŠããªãããŒã®ã¿ãã€ã³ããŒãããŸã(äžæžãã¯ãããŸãã)ã ããã«ãããã·ã§ã«ãããã¡ã€ã«ã广çã«çæãããŸãã
{
env: {
shellEnv: {
enabled: true,
timeoutMs: 15000,
},
},
}
Env var equalent:
OPENCLAW_LOAD_SHELL_ENV=1OPENCLAW_SHELL_ENV_TIMEOUT_MS=15000
èšå®å ã§ã®ç°å¢å€æ°çœ®æÂ¶
${VAR_NAME} æ§æã䜿çšããŠãä»»æã®èšå®æååå€ã§ç°å¢å€æ°ãçŽæ¥åç
§ã§ããŸãã 倿°ã¯ãæ€èšŒåã®èšå®èªã¿èŸŒã¿æã«çœ®ãæããããŸãã
{
models: {
providers: {
"vercel-gateway": {
apiKey: "${VERCEL_GATEWAY_API_KEY}",
},
},
},
gateway: {
auth: {
token: "${OPENCLAW_GATEWAY_TOKEN}",
},
},
}
ã«ãŒã«ïŒ
- 倧æåã®ç°å¢å€æ°åã®ã¿ãäžèŽããŸãïŒ
[A-Z_][A-Z0-9_]* - env varsãèŠã€ãããªãã空ã®å Žåãconfig loadã§ãšã©ãŒãçºçããŸãã
$${VAR}ã§ãšã¹ã±ãŒããããšããªãã©ã«ã®${VAR}ãåºåããŸã$includeãšäœµçšå¯èœïŒã€ã³ã¯ã«ãŒãããããã¡ã€ã«ã§ã眮æãããŸãïŒ
ã€ã³ã©ã€ã³çœ®æïŒ
{
models: {
providers: {
custom: {
baseUrl: "${CUSTOM_API_BASE}/v1", // â "https://api.example.com/v1"
},
},
},
}
èªèšŒã¹ãã¬ãŒãžïŒOAuth + API ããŒïŒÂ¶
OpenClaw ã¯ããšãŒãžã§ã³ãããš ã®èªèšŒãããã¡ã€ã«ïŒOAuth + API ããŒïŒã次ã«ä¿åããŸãã
<agentDir>/auth-profiles.jsonïŒããã©ã«ãïŒ~/.openclaw/agents/<agentId>/agent/auth-profiles.jsonïŒ
é¢é£é ç®ïŒ/concepts/oauth
ã¬ã¬ã·ãŒ OAuth ã®ã€ã³ããŒãïŒ
~/.openclaw/credentials/oauth.jsonïŒãŸãã¯$OPENCLAW_STATE_DIR/credentials/oauth.jsonïŒ
çµã¿èŸŒã¿ Pi ãšãŒãžã§ã³ãã¯ã次ã«ã©ã³ã¿ã€ã ãã£ãã·ã¥ãä¿æããŸãã
<agentDir>/auth.jsonïŒèªå管çãæåç·šéã¯ããªãã§ãã ããïŒ
ã¬ã¬ã·ãŒãšãŒãžã§ã³ããã£ã¬ã¯ããªïŒãã«ããšãŒãžã§ã³ã以åïŒïŒ
~/.openclaw/agent/*ïŒopenclaw doctorã«ãã~/.openclaw/agents/<defaultAgentId>/agent/*ãžç§»è¡ïŒ
ãªãŒããŒã©ã€ã:
- OAuth ãã£ã¬ã¯ããªïŒã¬ã¬ã·ãŒã€ã³ããŒãã®ã¿ïŒïŒ
OPENCLAW_OAUTH_DIR - ãšãŒãžã§ã³ããã£ã¬ã¯ããªïŒããã©ã«ããšãŒãžã§ã³ãã«ãŒãã®äžæžãïŒïŒ
OPENCLAW_AGENT_DIRïŒæšå¥šïŒãPI_CODING_AGENT_DIRïŒã¬ã¬ã·ãŒïŒ
ååäœ¿çšæã«ãOpenClaw 㯠oauth.json ã®ãšã³ããªãŒã auth-profiles.json ã«ã€ã³ããŒãããŸãã
auth¶
èªèšŒãããã¡ã€ã«ã®ãªãã·ã§ã³ã®ã¡ã¿ããŒã¿ã ãã㯠ç§å¯ãä¿åããŸãã ã ãããã¡ã€ã« ID ããããã€ã㌠+ ã¢ãŒã (ããã³ãªãã·ã§ã³ã®ã¡ãŒã«) ã«ãããã³ã°ãããã§ã€ã«ãªãŒããŒã«äœ¿çšããããããã€ã㌠ããŒããŒã·ã§ã³æ³šæãå®çŸ©ããŸãã
{
auth: {
profiles: {
"anthropic:me@example.com": { provider: "anthropic", mode: "oauth", email: "me@example.com" },
"anthropic:work": { provider: "anthropic", mode: "api_key" },
},
order: {
anthropic: ["anthropic:me@example.com", "anthropic:work"],
},
},
}
agents.list[].identity¶
ããã©ã«ããšUXã«äœ¿çšããããšãŒãžã§ã³ãããšã®ãªãã·ã§ã³ã®IDã ããã¯macOSãªã³ããŒãã£ã³ã°ã¢ã·ã¹ã¿ã³ãã«ãã£ãŠæžãããŠããŸãã
èšå®ãããŠããå ŽåãOpenClaw ã¯ïŒæç€ºçã«èšå®ããŠããªãå Žåã®ã¿ïŒæ¬¡ã®ããã©ã«ããå°åºããŸãã
- ã¢ã¯ãã£ããšãŒãžã§ã³ãã®
identity.emojiããmessages.ackReactionïŒãã©ãŒã«ããã¯ã¯ ðïŒ - ãšãŒãžã§ã³ãã®
identity.name/identity.emojiããagents.list[].groupChat.mentionPatternsïŒTelegram/Slack/Discord/Google Chat/iMessage/WhatsApp ã®ã°ã«ãŒãã§ã@Samanthaããæ©èœããŸãïŒ identity.avatarã¯ã¯ãŒã¯ã¹ããŒã¹çžå¯Ÿçãªç»åãã¹ãŸãã¯ãªã¢ãŒã URL/ããŒã¿ URL ãåãä»ããŸãã ããŒã«ã«ãã¡ã€ã«ã¯ãšãŒãžã§ã³ãã¯ãŒã¯ã¹ããŒã¹å ã«ããå¿ èŠããããŸãã
identity.avatar ãåãä»ããå€ïŒ
- ã¯ãŒã¯ã¹ããŒã¹çžå¯Ÿãã¹ïŒãšãŒãžã§ã³ãã¯ãŒã¯ã¹ããŒã¹å ã«éå®ïŒ
http(s)URLdata:URI
{
agents: {
list: [
{
id: "main",
identity: {
name: "Samantha",
theme: "helpful sloth",
emoji: "ðŠ¥",
avatar: "avatars/samantha.png",
},
},
],
},
}
wizard¶
CLI ãŠã£ã¶ãŒãïŒonboardãconfigureãdoctorïŒã«ãã£ãŠæžã蟌ãŸããã¡ã¿ããŒã¿ã§ãã
{
wizard: {
lastRunAt: "2026-01-01T00:00:00.000Z",
lastRunVersion: "2026.1.4",
lastRunCommit: "abc1234",
lastRunCommand: "configure",
lastRunMode: "local",
},
}
logging¶
- ããã©ã«ãã®ãã°ãã¡ã€ã«ïŒ
/tmp/openclaw/openclaw-YYYY-MM-DD.log - å®å®ãããã¹ãå¿
èŠãªå Žåã¯ã
logging.fileã/tmp/openclaw/openclaw.logã«èšå®ããŠãã ããã - ã³ã³ãœãŒã«åºåã¯æ¬¡ã§åå¥ã«èª¿æŽã§ããŸãã
logging.consoleLevelïŒããã©ã«ãïŒinfoã--verboseã®ãšãdebugã«ææ ŒïŒlogging.consoleStyleïŒpretty|compact|jsonïŒ- ããŒã«èŠçŽã¯ãç§å¯ã®æŒæŽ©ãé¿ããããã«ç·šéããããšãã§ããŸã:
logging.redactSensitiveïŒoff|toolsãããã©ã«ãïŒtoolsïŒlogging.redactPatternsïŒæ£èŠè¡šçŸæååã®é åãããã©ã«ããäžæžãïŒ
{
logging: {
level: "info",
file: "/tmp/openclaw/openclaw.log",
consoleLevel: "info",
consoleStyle: "pretty",
redactSensitive: "tools",
redactPatterns: [
// Example: override defaults with your own rules.
"\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1",
"/\\bsk-[A-Za-z0-9_-]{8,}\\b/gi",
],
},
}
channels.whatsapp.dmPolicy¶
WhatsAppãã€ã¬ã¯ããã£ãã (DMs) ã®åŠçæ¹æ³ãå¶åŸ¡ããŸãã
"ãã¢ãªã³ã°"(ããã©ã«ã): æªç¥ã®éä¿¡è ã¯ãã¢ãªã³ã°ã³ãŒããååŸããŸããææè ã¯æ¿èªããå¿ èŠããããŸã"allowlist":channels.whatsapp.allowFromïŒãŸãã¯ãã¢ã§allowstoreïŒ"open": ãã¹ãŠã®ã€ã³ããŠã³ãDMãèš±å¯ãã (channels.whatsapp.allowFromã«"*"ãå«ãã)"disabled": ãã¹ãŠã®ã€ã³ããŠã³ãDMãç¡èŠãã
ãã¢ãªã³ã°ã³ãŒãã¯1æéåŸã«å€±å¹ããŸãããããã¯æ°ãããªã¯ãšã¹ããäœæããããšãã«ã®ã¿ãã¢ãªã³ã°ã³ãŒããéä¿¡ããŸãã ä¿çäžã®DMãã¢ãªã³ã°ãªã¯ãšã¹ãã¯ããã©ã«ãã§3ãã£ã³ãã«ã§äžéãããŸãã
ãã¢ãªã³ã°æ¿èªïŒ
openclaw pairing list whatsapp-
openclaw pairing approve whatsapp <code>
channels.whatsapp.allowFrom¶
WhatsAppã®èªåè¿ä¿¡ãåŒãèµ·ããå¯èœæ§ã®ããE.164é»è©±çªå·ã®èš±å¯ãªã¹ã(DMã®ã¿)ã
空㚠channels.whatsapp.dmPolicy="ãã¢ãªã³ã°"ã®å Žåãæªç¥ã®éä¿¡è
ã¯ãã¢ãªã³ã°ã³ãŒããåãåããŸãã
ã°ã«ãŒãã®å Žåã¯ãchannels.whatsapp.groupPolicy + channels.whatsapp.groupAllowFrom ã䜿çšããŸãã
26. {
channels: {
whatsapp: {
dmPolicy: "pairing", // pairing | allowlist | open | disabled
allowFrom: ["+15555550123", "+447700900123"],
textChunkLimit: 4000, // optional outbound chunk size (chars)
chunkMode: "length", // optional chunking mode (length | newline)
mediaMaxMb: 50, // optional inbound media cap (MB)
},
},
}
channels.whatsapp.sendReceipts¶
åä¿¡ããWhatsAppã¡ãã»ãŒãžãæ¢èªãšããŠããŒã¯ãããŠãããã©ãããå¶åŸ¡ããŸã(éãã£ãã¯)ã ããã©ã«ã: true
ã»ã«ããã£ããã¢ãŒãã¯ãæå¹ã«ãªã£ãŠããŠãéå°éç¥ãã¹ãããããŸãã
ã¢ã«ãŠã³ãæ¯ã®ãªãŒããŒã©ã€ã: channels.whatsapp.accountsã<id>.sendReadeipts
{
channels: {
whatsapp: { sendReadReceipts: false },
},
}
channels.whatsapp.accounts (multi-account)¶
1 ã€ã®ã²ãŒããŠã§ã€ã§è€æ°ã® WhatsApp ã¢ã«ãŠã³ããå®è¡ããŸã:
27. {
channels: {
whatsapp: {
accounts: {
default: {}, // optional; keeps the default id stable
personal: {},
biz: {
// Optional override. Default: ~/.openclaw/credentials/whatsapp/biz
// authDir: "~/.openclaw/credentials/whatsapp/biz",
},
},
},
},
}
gpt-5.2-chat-latest
- ã¢ãŠãããŠã³ãã³ãã³ãã¯ãããã©ã«ãã§
defaultã䜿çšããŸãããã以å€ã®å Žåã¯ãæåã«èšå®ãããã¢ã«ãŠã³ã ID (ãœãŒãæžã¿) ã䜿çšããŸãã - ã¬ã¬ã·ãŒã·ã³ã°ã«ã¢ã«ãŠã³ãã®BaileysèªèšŒãã£ã¬ã¯ããªã¯
openclaw doctorã«ãã£ãŠwhatsapp/defaultã«ç§»è¡ãããŸãã
channels.telegram.accounts / channels.discord.accounts / channels.googlechat.accounts / channels.slack.accounts / channels.mattermost.accounts / channels.signal.accounts / channels.imessage.accounts¶
ãã£ã³ãã«ããšã«è€æ°ã®ã¢ã«ãŠã³ããå®è¡ããŸãïŒåã¢ã«ãŠã³ãã«ã¯ç¬èªã®accountIdãšãªãã·ã§ã³ã®nameããããŸãïŒïŒ
28. {
channels: {
telegram: {
accounts: {
default: {
name: "Primary bot",
botToken: "123456:ABC...",
},
alerts: {
name: "Alerts bot",
botToken: "987654:XYZ...",
},
},
},
},
}
ãã©ã¡ãŒã¿ïŒ
defaultã¯accountIdãçç¥ãããå Žåã«äœ¿çšãããŸã (CLI + routing)ã- Env ããŒã¯ã³ã¯ default ã¢ã«ãŠã³ãã«ã®ã¿é©çšãããŸãã
- ããŒã¹ãã£ãã«èšå® (ã°ã«ãŒãããªã·ãŒãã¡ã³ã·ã§ã³ã²ãŒããªã©) ã¢ã«ãŠã³ãããšã«äžæžããããªãéãããã¹ãŠã®ã¢ã«ãŠã³ãã«é©çšãããŸãã
bindings[].match.accountIdã䜿çšããŠãããããã®ã¢ã«ãŠã³ããç°ãªãagents.defaultsã«ã«ãŒãã£ã³ã°ããŸãã
ã°ã«ãŒããã£ããã¡ã³ã·ã§ã³ã²ãŒã(agents.list[].groupChat + messages.groupChat )¶
ã°ã«ãŒãã¡ãã»ãŒãžã¯ããã©ã«ãã§ã¡ã³ã·ã§ã³ãå¿ èŠãšããŸã (ã¡ã¿ããŒã¿ã¡ã³ã·ã§ã³ãŸãã¯æ£èŠè¡šçŸãã¿ãŒã³ã®ãããã)ã WhatsAppãTelegramãDiscordãGoogleãã£ãããiMessageã°ã«ãŒããã£ããã«é©çšãããŸãã
èªèšŒãããã¡ã€ã«çšã®ä»»æã¡ã¿ããŒã¿ã§ããã·ãŒã¯ã¬ããã¯ä¿åããŸããã
ãããã¡ã€ã« ID ããããã€ã㌠+ ã¢ãŒãïŒããã³ä»»æã®ã¡ãŒã«ïŒã«ãããã³ã°ãããã§ã€ã«ãªãŒããŒæã«äœ¿çšããããããã€ããŒã®ããŒããŒã·ã§ã³é ãå®çŸ©ããŸãã
- ã¡ã¿ããŒã¿ã®èšå: ãã€ãã£ããã©ãããã©ãŒã @-ã¡ã³ã·ã§ã³(äŸ: WhatsAppã¿ããto-ã¡ã³ã·ã§ã³)ã WhatsAppã®ã»ã«ããã£ããã¢ãŒãã§ç¡èŠãããŸã (
channels.whatsapp.allowFromãåç §ããŠãã ãã)ã - ããã¹ããã¿ãŒã³:
agents.list[].groupChat.mentionPatternsã«å®çŸ©ãããŠããæ£èŠè¡šçŸãã¿ãŒã³ã ã»ã«ããã£ããã¢ãŒãã«é¢ä¿ãªãåžžã«ãã§ãã¯ããŸãã - ã¡ã³ã·ã§ã³ã²ãŒãã¯ãã¡ã³ã·ã§ã³æ€åºãå¯èœãªå Žåã«ã®ã¿é©çšãããŸã (ãã€ãã£ãã¡ã³ã·ã§ã³ãŸãã¯å°ãªããšã1ã€ã®
mentionPattern)ã
29. {
messages: {
groupChat: { historyLimit: 50 },
},
agents: {
list: [{ id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"] } }],
},
}
messages.groupChat.historyLimit ã¯ã°ã«ãŒãå±¥æŽã³ã³ããã¹ãã®ã°ããŒãã«ããã©ã«ããèšå®ããŸãã ãã£ã³ãã«ã¯ channel ã§äžæžãã§ããŸãã<channel>.historyLimitïŒãŸã㯠channels.<channel>ãã«ãã¢ã«ãŠã³ãã®.accounts.*.historyLimit)ã 0 ãèšå®ãããšå±¥æŽã®æãè¿ããç¡å¹ã«ãªããŸãã
DMå±¥æŽã®å¶é¶
DM ã®äŒè©±ã¯ããšãŒãžã§ã³ãã管çããã»ãã·ã§ã³ããŒã¹ã®å±¥æŽã䜿çšããŸãã DM ã»ãã·ã§ã³ããšã«ä¿æããããŠãŒã¶ãŒã®ã¿ãŒã³æ°ãå¶éã§ããŸãã
30. {
channels: {
telegram: {
dmHistoryLimit: 30, // limit DM sessions to 30 user turns
dms: {
"123456789": { historyLimit: 50 }, // per-user override (user ID)
},
},
},
}
解決é åº:
- DMããšã®ãªãŒããŒã©ã€ã:
channel.<provider>.dms[userId].historyLimit - ãããã€ãã®ããã©ã«ã:
channel.<provider>.dmHistoryLimit - å¶éãªãïŒãã¹ãŠã®å±¥æŽãä¿æïŒ
ãµããŒããããŠãããããã€ã: telegram ã whatsapp ã discord ã slack ã signal ã imessage ã msteams ã
ãšãŒãžã§ã³ãæ¯ã®ãªãŒããŒã©ã€ãïŒ[]ã§ãèšå®æã«åªå
ãããŸãïŒïŒ
31. {
agents: {
list: [
{ id: "work", groupChat: { mentionPatterns: ["@workbot", "\\+15555550123"] } },
{ id: "personal", groupChat: { mentionPatterns: ["@homebot", "\\+15555550999"] } },
],
},
}
ã¡ã³ã·ã§ã³ã²ãŒãã®ããã©ã«ãã¯ãã£ãã«ããšã«ã©ã€ãé
ä¿¡ãããŸã (channels.whatsapp.groups, channels.telegram.groups, channels.imessage.groups, channels.discord.guilds). *.groups ãèšå®ãããŠããå Žåã¯ãã°ã«ãŒãã®èš±å¯ãªã¹ããšããŠãæ©èœããŸãããã¹ãŠã®ã°ã«ãŒããèš±å¯ãã "*" ãå«ããŸãã
ç¹å®ã®ããã¹ãããªã¬ãŒã« ã®ã¿ ãšå¿çããã«ã¯ïŒãã€ãã£ãã® @-ã¡ã³ã·ã§ã³ãç¡èŠïŒïŒ
32. {
channels: {
whatsapp: {
// Include your own number to enable self-chat mode (ignore native @-mentions).
allowFrom: ["+15555550123"],
groups: { "*": { requireMention: true } },
},
},
agents: {
list: [
{
id: "main",
groupChat: {
// Only these text patterns will trigger responses
mentionPatterns: ["reisponde", "@openclaw"],
},
},
],
},
}
ã°ã«ãŒãããªã·ãŒ (ãã£ãã«ããš)¶
channels.*.groupPolicy ã䜿çšããŠãã°ã«ãŒã/ã«ãŒã ã®ã¡ãã»ãŒãžãå
šãåãå
¥ãããããã©ãããå¶åŸ¡ããŸãã
33. {
channels: {
whatsapp: {
groupPolicy: "allowlist",
groupAllowFrom: ["+15551234567"],
},
telegram: {
groupPolicy: "allowlist",
groupAllowFrom: ["tg:123456789", "@alice"],
},
signal: {
groupPolicy: "allowlist",
groupAllowFrom: ["+15551234567"],
},
imessage: {
groupPolicy: "allowlist",
groupAllowFrom: ["chat_id:123"],
},
msteams: {
groupPolicy: "allowlist",
groupAllowFrom: ["user@org.com"],
},
discord: {
groupPolicy: "allowlist",
guilds: {
GUILD_ID: {
channels: { help: { allow: true } },
},
},
},
slack: {
groupPolicy: "allowlist",
channels: { "#general": { allow: true } },
},
},
}
äžæžãïŒ
"open": groups bypass allowlists; mention-gating still applyes."disabled": ãã¹ãŠã®ã°ã«ãŒã/ã«ãŒã ã¡ãã»ãŒãžããããã¯ããŸãã"allowlist": èš±å¯ãªã¹ãã«äžèŽããã°ã«ãŒã/ã«ãŒã ã®ã¿ãèš±å¯ããŸããchannels.defaults.groupPolicyã¯ãããã€ãã®groupPolicyãèšå®ãããŠããªãå Žåã«ããã©ã«ããèšå®ããŸãã- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams ã¯
groupAllowFromã䜿çšããŸã(fallback: æç€ºçãªallowFrom)ã - Discord/Slack use channel allowlist (
channels.discord.guilds.*.channels,channels.slack.channels). - ã°ã«ãŒã DM (Discord/Slack) ã¯ãŸã
dm.groupEnabled+dm.groupChannelsã§å¶åŸ¡ãããŠããŸãã - ããã©ã«ãã¯
groupPolicy: "allowlist"(channels.defaults.groupPolicyã§äžæžããããªãéã) ã§ããèš±å¯ãªã¹ããèšå®ãããŠããªãå Žåãã°ã«ãŒãã¡ãã»ãŒãžã¯ãããã¯ãããŸãã
ãã«ããšãŒãžã§ã³ãã«ãŒãã£ã³ã° (agents.list + bindings)¶
1 ã€ã® Gateway å
ã§è€æ°ã®å€ç«ãããšãŒãžã§ã³ã (ã¯ãŒã¯ã¹ããŒã¹ãagentDirãã»ãã·ã§ã³) ãå®è¡ããŸãã
åä¿¡ã¡ãã»ãŒãžã¯ãã€ã³ãã£ã³ã°ãä»ããŠãšãŒãžã§ã³ãã«ã«ãŒãã£ã³ã°ãããŸãã
agents.list[]: ãšãŒãžã§ã³ãããšã«äžæžãããŸããid: stable agent id (required).default: ä»»æ; è€æ°ãèšå®ãããŠããå Žåãæåã®åå©ãšèŠåãèšé²ãããŸãã äœãèšå®ãããŠããªãå Žåã¯ããªã¹ãã®æåã®ãšã³ããªã¯ããã©ã«ãã®ãšãŒãžã§ã³ãã§ããname: ãšãŒãžã§ã³ãã®è¡šç€ºåãworkspace: default~/.openclaw/workspace-<agentId>(mainã®å Žåãagents.defaults.workspaceã«æ»ããŸã)ã- ããã©ã«ãããã³ UX ã«äœ¿çšããããä»»æã®ãšãŒãžã§ã³ãããšã®ã¢ã€ãã³ãã£ãã£ã§ãããã㯠macOS ã®ãªã³ããŒãã£ã³ã°ã¢ã·ã¹ã¿ã³ãã«ãã£ãŠæžã蟌ãŸããŸãã
model: ãšãŒãžã§ã³ãæ¯ã®ããã©ã«ãã®ã¢ãã«ã§ã¯ããã®ãšãŒãžã§ã³ãã®agents.defaults.modelãäžæžãããŸãã- string form:
"provider/model", overrides onlyagents.defaults.model.primary - object form:
{ primary, fallbacks }(ãã©ãŒã«ããã¯ãagents.defaults.model.fallbacksããªãŒããŒã©ã€ãããŸã;[]ã¯ãšãŒãžã§ã³ãã®ã°ããŒãã«ãã©ãŒã«ããã¯ãç¡å¹ã«ããŸã)
- string form:
identity.avatarã¯ãã¯ãŒã¯ã¹ããŒã¹çžå¯Ÿã®ç»åãã¹ããŸãã¯ãªã¢ãŒã URLïŒdata URL ãåãä»ããŸããããŒã«ã«ãã¡ã€ã«ã¯ãšãŒãžã§ã³ãã¯ãŒã¯ã¹ããŒã¹å ã«ååšããå¿ èŠããããŸããgroupChat: ãšãŒãžã§ã³ãããšã®ã¡ã³ã·ã§ã³ã²ãŒã(mentionPatterns)ãsandbox: ãšãŒãžã§ã³ãããšã® sandbox èšå® (agents.defaults.sandboxãäžæžãããŸã)ãmode:"off"|"non-main"|"all"workspaceAccess:"none"|"ro"|"rw"scope:"session"|"agent"|"shared"workspaceRoot: ã«ã¹ã¿ã ãµã³ãããã¯ã¹ã¯ãŒã¯ã¹ããŒã¹ã«ãŒãdocker: per-agent docker overrides (e.g.image,network,env,setupCommand, limits;scope: "shared")browser: ãšãŒãžã§ã³ãããšã®ãµã³ãããã¯ã¹åããããã©ãŠã¶ãŒã®ãªãŒããŒã©ã€ã (scope: "shared"ã®å Žåã¯ç¡èŠãããŸã)prune: ãšãŒãžã§ã³ãããšã« sandbox åªå®ãªãŒããŒã©ã€ã (scope: "shared"ã®å Žåã¯ç¡èŠãããŸã)
subagents: ãšãŒãžã§ã³ãæ¯ã®ãµããšãŒãžã§ã³ãã®ããã©ã«ããallowAgents: allowlist of agent ids forsessions_spawnfrom this agent (["*"]= allow any; default: only same agent)
tools: ãšãŒãžã§ã³ãæ¯ã®ããŒã«å¶é (Sandbox ããŒã«ããªã·ãŒã®åã«é©çš)profile: åºæ¬ããŒã«ãããã¡ã€ã« (allow/denyã®åã«é©çš)allow: èš±å¯ãããŠããããŒã«åã®é ådeny: æåŠãããããŒã«åã®é å (deny wins)
agents.defaults: å ±æãšãŒãžã§ã³ãã®ããã©ã«ã (ã¢ãã«ãã¯ãŒã¯ã¹ããŒã¹ããµã³ãããã¯ã¹ãªã©)ãbindings[]:agentIdã«ã€ã³ããŠã³ãã¡ãã»ãŒãžãã«ãŒãã£ã³ã°ããŸããmatch.channel(å¿ é )match.accountId(çç¥å¯èœ;*= ä»»æã®ã¢ã«ãŠã³ã; çç¥ããã = ããã©ã«ãã®ã¢ã«ãŠã³ã)match.peer(optional;{ kind: direct|group|channel, id })match.guildId/match.teamId(ãªãã·ã§ã³; channel-specific)
決å®çãªäžèŽé åº:
match.peermatch.guildIdmatch.teamIdmatch.accountId(æ£ç¢ºã«ã¯ãã¢/ã®ã«ã/ããŒã ãªã)match.accountId: "*"(ãã£ãã«å šäœããã¢/ã®ã«ã/ããŒã ãªã)- ããã©ã«ããšãŒãžã§ã³ã (
agents.list[].default, else first list entry, else"main")
åãããéå±€ã®äžã§ãbindingsã®æåã®ãããã³ã°é
ç®ãåå©ããŸãã
ãšãŒãžã§ã³ãå¥ã¢ã¯ã»ã¹ãããã¡ã€ã«ïŒãã«ããšãŒãžã§ã³ãïŒÂ¶
åãšãŒãžã§ã³ãã¯ãç¬èªã®ãµã³ãããã¯ã¹+ããŒã«ããªã·ãŒãéã¶ããšãã§ããŸãã ããã䜿çšããŠã1 ã€ã®ã²ãŒããŠã§ã€ã«ã¢ã¯ã»ã¹ ã¬ãã«ãããã¯ã¹ããŸãã
- ãã«ã¢ã¯ã»ã¹ (ããŒãœãã«ãšãŒãžã§ã³ã)
- èªã¿åãå°çš ããŒã« + ã¯ãŒã¯ã¹ããŒã¹
- ãã¡ã€ã«ã·ã¹ãã ã«ã¢ã¯ã»ã¹ã§ããŸãã (ã¡ãã»ãŒãž/ã»ãã·ã§ã³ããŒã«ã®ã¿)
ãã«ããšãŒãžã§ã³ãã®ãµã³ãããã¯ã¹ãšããŒã« ãåç §ããŠãã ããããã®ä»ã®äŸãš ã
ãã«ã¢ã¯ã»ã¹(ãµã³ãããã¯ã¹ãªã):
{
agents: {
list: [
{
id: "personal",
workspace: "~/.openclaw/workspace-personal",
sandbox: { mode: "off" },
},
],
},
}
èªã¿åãå°çšããŒã« + èªã¿åãå°çšã¯ãŒã¯ã¹ããŒã¹:
34. {
agents: {
list: [
{
id: "family",
workspace: "~/.openclaw/workspace-family",
sandbox: {
mode: "all",
scope: "agent",
workspaceAccess: "ro",
},
tools: {
allow: [
"read",
"sessions_list",
"sessions_history",
"sessions_send",
"sessions_spawn",
"session_status",
],
deny: ["write", "edit", "apply_patch", "exec", "process", "browser"],
},
},
],
},
}
ãã¡ã€ã«ã·ã¹ãã ãžã®ã¢ã¯ã»ã¹ããããŸãã (ã¡ãã»ãŒãžã³ã°/ã»ãã·ã§ã³ããŒã«ãæå¹åãããŠããŸã):
35. {
agents: {
list: [
{
id: "public",
workspace: "~/.openclaw/workspace-public",
sandbox: {
mode: "all",
scope: "agent",
workspaceAccess: "none",
},
tools: {
allow: [
"sessions_list",
"sessions_history",
"sessions_send",
"sessions_spawn",
"session_status",
"whatsapp",
"telegram",
"slack",
"discord",
"gateway",
],
deny: [
"read",
"write",
"edit",
"apply_patch",
"exec",
"process",
"browser",
"canvas",
"nodes",
"cron",
"gateway",
"image",
],
},
},
],
},
}
äŸ: 2ã€ã® WhatsApp ã¢ã«ãŠã³ã â 2ã€ã®ãšãŒãžã§ã³ã
36. {
agents: {
list: [
{ id: "home", default: true, workspace: "~/.openclaw/workspace-home" },
{ id: "work", workspace: "~/.openclaw/workspace-work" },
],
},
bindings: [
{ agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
{ agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },
],
channels: {
whatsapp: {
accounts: {
personal: {},
biz: {},
},
},
},
}
tools.agentToAgent (ä»»æ)¶
ãšãŒãžã§ã³ããããšãŒãžã§ã³ããžã®ã¡ãã»ãŒãžã³ã°ã¯ãªããã€ã³ã§ã:
{
tools: {
agentToAgent: {
enabled: false,
allow: ["home", "work"],
},
},
}
messages.queue¶
ãšãŒãžã§ã³ãã®å®è¡ããã§ã«ã¢ã¯ãã£ããªãšãã«åä¿¡ã¡ãã»ãŒãžãã©ã®ããã«åäœããããå¶åŸ¡ããŸãã
37. {
messages: {
queue: {
mode: "collect", // steer | followup | collect | steer-backlog (steer+backlog ok) | interrupt (queue=steer legacy)
debounceMs: 1000,
cap: 20,
drop: "summarize", // old | new | summarize
byChannel: {
whatsapp: "collect",
telegram: "collect",
discord: "collect",
imessage: "collect",
webchat: "collect",
},
},
},
}
messages.inbound¶
åãéä¿¡è ããã®è¿ éãªåä¿¡ã¡ãã»ãŒãžããããŠã³ã¹ããããšã§ãè€æ°ã® ã¡ãã»ãŒãžãåäžã®ãšãŒãžã§ã³ãã¿ãŒã³ã«ãªããŸãã 38. ãããŠã³ã¹ã¯ãã£ã³ãã«ïŒäŒè©±ããšã«ã¹ã³ãŒããããè¿ä¿¡ã®ã¹ã¬ããåïŒID ã«ã¯ææ°ã®ã¡ãã»ãŒãžã䜿çšãããŸãã
39. {
messages: {
inbound: {
debounceMs: 2000, // 0 disables
byChannel: {
whatsapp: 5000,
slack: 1500,
discord: 1500,
},
},
},
}
泚èšïŒ
- ããã¹ãã®ã¿ ã®ã¡ãã»ãŒãžããããŠã³ã¹ããŸã; ã¡ãã£ã¢/æ·»ä»ãã¡ã€ã«ã¯ããã«ãã©ãã·ã¥ããŸãã
- å¶åŸ¡ã³ãã³ã (äŸ:
/queue,/new) ã¯åç¬ã®ãŸãŸã«ãªãããã«ãããŠã³ã¹ããã€ãã¹ããŸãã
commands (ãã£ããã³ãã³ãã®åŠç)¶
ã³ãã¯ã¿éã§ãã£ããã³ãã³ããæå¹ã«ããæ¹æ³ãèšå®ããŸãã
40. {
commands: {
native: "auto", // register native commands when supported (auto)
text: true, // parse slash commands in chat messages
bash: false, // allow ! (alias: /bash) (host-only; requires tools.elevated allowlists)
bashForegroundMs: 2000, // bash foreground window (0 backgrounds immediately)
config: false, // allow /config (writes to disk)
debug: false, // allow /debug (runtime-only overrides)
restart: false, // allow /restart + gateway restart tool
useAccessGroups: true, // enforce access-group allowlists/policies for commands
},
}
泚èšïŒ
- ããã¹ãã³ãã³ãã¯ãã¹ã¿ã³ãã¢ãã³ ã¡ãã»ãŒãžãšããŠéä¿¡ããå
é ã®
/(ãã¬ãŒã³ããã¹ããšã€ãªã¢ã¹ãªã) ã䜿çšããå¿ èŠããããŸãã commands.text: falseã¯ãã£ããã¡ãã»ãŒãžã®è§£æãç¡å¹ã«ããŸããcommands.native: "auto"(ããã©ã«ã) ã¯Discord/Telegramã®ãã€ãã£ãã³ãã³ãããªã³ã«ããSlackããªãã«ããŸãããµããŒããããŠããªããã£ã³ãã«ã¯ããã¹ãã®ã¿ã®ãŸãŸã§ããcommands.native: true|falseãèšå®ãããšããã£ã³ãã«ããšã«åŒ·å¶çã«èšå®ããããchannels.discord.commands.nativeãchannels.telegram.commands.nativeãchannels.slack.commands.native(bool ãŸãã¯"auto") ã§ãªãŒããŒã©ã€ããããã§ããŸããfalseã¯èµ·åæã«Discord/Telegramã§ç»é²ãããŠããã³ãã³ããã¯ãªã¢ããŸããSlackã®ã³ãã³ãã¯Slackã¢ããªã§ç®¡çãããŸããchannels.telegram.customCommandsã¯è¿œå ã®Telegramãããã¡ãã¥ãŒãšã³ããªã远å ããŸãã ååã¯æ£èŠåãããŸã; ãã€ãã£ãã³ãã³ããšã®ç«¶åã¯ç¡èŠãããŸããcommands.bash: trueã§! <cmd>ã¯ãã¹ãã·ã§ã«ã³ãã³ããå®è¡ããŸã(/bash <cmd>ããšã€ãªã¢ã¹ãšããŠåäœããŸã)ãtools.elevated.enabledãå¿ èŠã§ãtools.elevated.allowFrom.<channel>é äžã«çœ®ããŸããcommands.bashForegroundMsã¯ãããã¯ã°ã©ãŠã³ãã®åã«ããã·ã¥ãåŸ æ©ããæéãå¶åŸ¡ããŸãã bash ãžã§ããå®è¡ãããŠããéãæ°ãã! <cmd>ãªã¯ãšã¹ãã¯æåŠãããŸã (äžåºŠã« 1 ã€)ãconfig.patchã䜿çšãããšãç¡é¢ä¿ãªããŒãäžæžãããã«ãæ¢åèšå®ãžéšåæŽæ°ãããŒãžã§ããŸãã
JSON ããŒãžãããã®ã»ãã³ãã£ã¯ã¹ãé©çšããŸããchannel.<provider>.configWritesã¯ããã®ãã£ã³ãã«ã«ãã£ãŠéå§ãããèšå®å€æŽãã²ãŒãããŸã (ããã©ã«ã: true)ã ããã¯/config set|unsetã«å ããŠããããã€ãåºæã®èªåç§»è¡ (Telegram ã¹ãŒã㌠ã°ã«ãŒã ID ã®å€æŽãSlack ãã£ã³ãã« ID ã®å€æŽ) ã«é©çšãããŸããcommands.debug: trueã¯/debugãæå¹ã«ããŸã (ã©ã³ã¿ã€ã ã®ã¿ã®äžæžã)ãcommands.restart: trueã¯/restartãšã²ãŒããŠã§ã€ããŒã«ã®åèµ·åã¢ã¯ã·ã§ã³ãæå¹ã«ããŸããcommands.useAccessGroups: falseã䜿çšãããšãã¢ã¯ã»ã¹èš±å¯ã°ã«ãŒã/ããªã·ãŒãåé¿ã§ããŸãã- ã¹ã©ãã·ã¥ã³ãã³ããšãã£ã¬ã¯ãã£ã㯠authorized éä¿¡è
ã«å¯ŸããŠã®ã¿äœ¿çšãããŸãã Authorization ã¯
channel allowlists/pairing plus
commands.useAccessGroupsã«ç±æ¥ããŸãã
web (WhatsApp Web channel runtime)¶
WhatsAppã¯ã²ãŒããŠã§ã€ã®ãŠã§ããã£ã³ãã«(ãã€ãªãŒã¹ãŠã§ã)ãéããŠå®è¡ãããŸãã ãªã³ã¯ãããã»ãã·ã§ã³ãååšãããšèªåçã«éå§ããŸãã
ããã©ã«ãã§ã¯ãªãã«ããã«ã¯ã web.enabled: false ãèšå®ããŸãã
1. {
web: {
enabled: true,
heartbeatSeconds: 60,
reconnect: {
initialMs: 2000,
maxMs: 120000,
factor: 1.4,
jitter: 0.2,
maxAttempts: 0,
},
},
}
channels.telegram (botã®ãã©ã³ã¹ããŒã)¶
OpenClawã¯ãchannels.telegramèšå®ã»ã¯ã·ã§ã³ãååšããå Žåã«ã®ã¿Telegramãèµ·åããŸãã ãããããŒã¯ã³ã¯ channels.telegram.botToken (ãŸã㯠channels.telegram.tokenFile )ãã解決ãããTELEGRAM_BOT_TOKEN ã¯ããã©ã«ãã¢ã«ãŠã³ãã®ãã©ãŒã«ããã¯ãšããŠäœ¿çšãããŸãã
èªåèµ·åãç¡å¹ã«ããã«ã¯ãchannels.telegram.enabled: false ãèšå®ããŠãã ããã
è€æ°ã¢ã«ãŠã³ãã®ãµããŒã㯠channels.telegram.accounts ã®ããšã§è¡ãããŸãïŒäžèšã®ãã«ãã¢ã«ãŠã³ãã»ã¯ã·ã§ã³ãåç
§ïŒã EnvããŒã¯ã³ã¯ããã©ã«ãã®ã¢ã«ãŠã³ãã«ã®ã¿é©çšãããŸãã
channels.telegram.configWrites: false ãèšå®ããŠãTelegramãèµ·åããèšå®ãžã®æžã蟌ã¿ããããã¯ããŸã(ã¹ãŒããŒã°ã«ãŒã ID ã®ç§»è¡ãš /config set|unset ãå«ã¿ãŸã)ã
2. {
channels: {
telegram: {
enabled: true,
botToken: "your-bot-token",
dmPolicy: "pairing", // pairing | allowlist | open | disabled
allowFrom: ["tg:123456789"], // optional; "open" requires ["*"]
groups: {
"*": { requireMention: true },
"-1001234567890": {
allowFrom: ["@admin"],
systemPrompt: "Keep answers brief.",
topics: {
"99": {
requireMention: false,
skills: ["search"],
systemPrompt: "Stay on topic.",
},
},
},
},
customCommands: [
{ command: "backup", description: "Git backup" },
{ command: "generate", description: "Create an image" },
],
historyLimit: 50, // include last N group messages as context (0 disables)
replyToMode: "first", // off | first | all
linkPreview: true, // toggle outbound link previews
streamMode: "partial", // off | partial | block (draft streaming; separate from block streaming)
draftChunk: {
// optional; only for streamMode=block
minChars: 200,
maxChars: 800,
breakPreference: "paragraph", // paragraph | newline | sentence
},
actions: { reactions: true, sendMessage: true }, // tool action gates (false disables)
reactionNotifications: "own", // off | own | all
mediaMaxMb: 5,
retry: {
// outbound retry policy
attempts: 3,
minDelayMs: 400,
maxDelayMs: 30000,
jitter: 0.1,
},
network: {
// transport overrides
autoSelectFamily: false,
},
proxy: "socks5://localhost:9050",
webhookUrl: "https://example.com/telegram-webhook", // requires webhookSecret
webhookSecret: "secret",
webhookPath: "/telegram-webhook",
},
},
}
äžæžãã¹ããªãŒãã³ã°ããŒã:
- Telegram
sendMessageDraft(å®éã®ã¡ãã»ãŒãžã§ã¯ãªãããã«ã®äžæžã) ã䜿çšããŸãã - ãã©ã€ããŒããã£ããã®ããã㯠(DMã§message_thread_id; botã¯ãããã¯ãæå¹ã«ããŠããŸã) ãå¿ èŠã§ãã
/reasoning streamã¯äžæžãã«æšè«ãã¹ããªãŒã ããæçµçãªçããéããŸãã 3. å詊è¡ããªã·ãŒã®ããã©ã«ããšæåã¯ãRetry policy ã«èšèŒãããŠããŸãã
channels.discord (botã®ãã©ã³ã¹ããŒã)¶
ãããããŒã¯ã³ãšãªãã·ã§ã³ã®ã²ãŒããèšå®ããŠDiscordããããèšå®ããŸãã
channels.discord.accounts ã®ãã«ãã¢ã«ãŠã³ããµããŒãã¯æå¹ã§ãïŒäžèšã®ãã«ãã¢ã«ãŠã³ãã»ã¯ã·ã§ã³ãåç
§ïŒã EnvããŒã¯ã³ã¯ããã©ã«ãã®ã¢ã«ãŠã³ãã«ã®ã¿é©çšãããŸãã
4. {
channels: {
discord: {
enabled: true,
token: "your-bot-token",
mediaMaxMb: 8, // clamp inbound media size
allowBots: false, // allow bot-authored messages
actions: {
// tool action gates (false disables)
reactions: true,
stickers: true,
polls: true,
permissions: true,
messages: true,
threads: true,
pins: true,
search: true,
memberInfo: true,
roleInfo: true,
roles: false,
channelInfo: true,
voiceStatus: true,
events: true,
moderation: false,
},
replyToMode: "off", // off | first | all
dm: {
enabled: true, // disable all DMs when false
policy: "pairing", // pairing | allowlist | open | disabled
allowFrom: ["1234567890", "steipete"], // optional DM allowlist ("open" requires ["*"])
groupEnabled: false, // enable group DMs
groupChannels: ["openclaw-dm"], // optional group DM allowlist
},
guilds: {
"123456789012345678": {
// guild id (preferred) or slug
slug: "friends-of-openclaw",
requireMention: false, // per-guild default
reactionNotifications: "own", // off | own | all | allowlist
users: ["987654321098765432"], // optional per-guild user allowlist
channels: {
general: { allow: true },
help: {
allow: true,
requireMention: true,
users: ["987654321098765432"],
skills: ["docs"],
systemPrompt: "Short answers only.",
},
},
},
},
historyLimit: 20, // include last N guild messages as context
textChunkLimit: 2000, // optional outbound text chunk size (chars)
chunkMode: "length", // optional chunking mode (length | newline)
maxLinesPerMessage: 17, // soft max lines per message (Discord UI clipping)
retry: {
// outbound retry policy
attempts: 3,
minDelayMs: 500,
maxDelayMs: 30000,
jitter: 0.1,
},
},
},
}
OpenClawã¯ãchannels.discordèšå®ã»ã¯ã·ã§ã³ãååšããå Žåã«ã®ã¿Discordãéå§ããŸãã ããŒã¯ã³ã¯channels.discord.tokenãã解決ãããDISCORD_BOT_TOKENãããã©ã«ãã®ã¢ã«ãŠã³ãã®ãã©ãŒã«ããã¯ã«ããŸãïŒchannels.discord.enabledãfalseã§ãªãéãïŒã cron/CLI ã³ãã³ãã®é
ä¿¡ã¿ãŒã²ãããæå®ããå Žåã¯ãuser:<id> ãŸã㯠channel:<id> (guild channel) ã䜿çšããŸãã
ã®ã«ãã¹ã©ã°ã¯å°æåã§ã¹ããŒã¹ã¯-ã«çœ®ãæããããŸãããã£ã³ãã«ããŒã¯ã¹ã©ãã°ããããã£ã³ãã«å(å
é ã¯#)ã䜿çšããŸããã ã®ã«ãIDãããŒãšããŠèšå®ããææ§ãã®ååã倿Žããªãããã«ããŸãã
Bot-authored messages ã¯ããã©ã«ãã§ã¯ç¡èŠãããŸãã channels.discord.allowBots ãæå¹ã«ããŸãïŒèªå·±è¿ä¿¡ã«ãŒããé²ããããç¬èªã®ã¡ãã»ãŒãžã¯ãŸã ãã£ã«ã¿ãããŠããŸãïŒã
ãªã¢ã¯ã·ã§ã³éç¥ã¢ãŒã:
off: ãªã¢ã¯ã·ã§ã³ã€ãã³ããªããown: ãããèªèº«ã®ã¡ãã»ãŒãžãžã®ãªã¢ã¯ã·ã§ã³ïŒããã©ã«ãïŒãall: ãã¹ãŠã®ã¡ãã»ãŒãžãžã®ãã¹ãŠã®ãªã¢ã¯ã·ã§ã³ãallowlist:guilds.<id>.usersããã®ãªã¢ã¯ã·ã§ã³ã®ã¿ïŒç©ºãªã¹ãã§ç¡å¹ïŒã ã¢ãŠãããŠã³ãããã¹ãã¯channels.discord.textChunkLimit(ããã©ã«ãã¯2000)ãchannels.discord.chunkMode="newline"ãèšå®ãããšãé·ããåå²ãããåã«ç©ºçœã®è¡ (段èœå¢ç) ã«åå²ãããŸãã Discordã¯ã©ã€ã¢ã³ãã¯éåžžã«èã®é«ãã¡ãã»ãŒãžãã¯ãªããã§ããŸãããã®ãããchannels.discord.maxLinesPerMessage` (ããã©ã«ã17) ã¯2000æå以äžã§ãã£ãŠãé·ãè€æ°è¡ã®è¿ä¿¡ãåå²ããŸãã 5. å詊è¡ããªã·ãŒã®ããã©ã«ããšæåã¯ãRetry policy ã«èšèŒãããŠããŸãã
channels.googlechat (Chat API webhook)¶
Google ãã£ããã¯ã¢ããªã¬ãã«ã®èªèšŒ(ãµãŒãã¹ã¢ã«ãŠã³ã)ã䜿çšããŠHTTPãŠã§ãããã¯äžã§å®è¡ãããŸãã
ãã«ãã¢ã«ãŠã³ãã®ãµããŒã㯠channels.googlechat.accounts ã®äžã§è¡ãããŸã(äžèšã®ãã«ãã¢ã«ãŠã³ãã®ã»ã¯ã·ã§ã³ãåç
§ããŠãã ãã)ã Env var ã¯æ¢å®ã®ã¢ã«ãŠã³ãã«ã®ã¿é©çšãããŸãã
6. {
channels: {
googlechat: {
enabled: true,
serviceAccountFile: "/path/to/service-account.json",
audienceType: "app-url", // app-url | project-number
audience: "https://gateway.example.com/googlechat",
webhookPath: "/googlechat",
botUser: "users/1234567890", // optional; improves mention detection
dm: {
enabled: true,
policy: "pairing", // pairing | allowlist | open | disabled
allowFrom: ["users/1234567890"], // optional; "open" requires ["*"]
},
groupPolicy: "allowlist",
groups: {
"spaces/AAAA": { allow: true, requireMention: true },
},
actions: { reactions: true },
typingIndicator: "message",
mediaMaxMb: 20,
},
},
}
ãã©ã¡ãŒã¿ïŒ
- Service account JSON can be inline (
serviceAccount) or file based (serviceAccountFile). - ããã©ã«ãã¢ã«ãŠã³ãã®Envãã©ãŒã«ããã¯ïŒ
GOOGLE_CHAT_SERVICE_ACCOUNTãŸãã¯GOOGLE_CHAT_SERVCOUNT_FILEã audienceType+audienceã¯ãã£ããã¢ããªã®webhookèªèšŒèšå®ãšäžèŽããå¿ èŠããããŸãã- ããªããªã¿ãŒã²ãããèšå®ããå Žåã¯ã
spaces/<spaceId>ãŸãã¯users/<userId|email>ã䜿çšããŸãã
channels.slack (ãœã±ããã¢ãŒã)¶
Slackã¯ãœã±ããã¢ãŒãã§å®è¡ãããBotããŒã¯ã³ãšappããŒã¯ã³ã®äž¡æ¹ãå¿ èŠã§ã:
7. {
channels: {
slack: {
enabled: true,
botToken: "xoxb-...",
appToken: "xapp-...",
dm: {
enabled: true,
policy: "pairing", // pairing | allowlist | open | disabled
allowFrom: ["U123", "U456", "*"], // optional; "open" requires ["*"]
groupEnabled: false,
groupChannels: ["G123"],
},
channels: {
C123: { allow: true, requireMention: true, allowBots: false },
"#general": {
allow: true,
requireMention: true,
allowBots: false,
users: ["U123"],
skills: ["docs"],
systemPrompt: "Short answers only.",
},
},
historyLimit: 50, // include last N channel/group messages as context (0 disables)
allowBots: false,
reactionNotifications: "own", // off | own | all | allowlist
reactionAllowlist: ["U123"],
replyToMode: "off", // off | first | all
thread: {
historyScope: "thread", // thread | channel
inheritParent: false,
},
actions: {
reactions: true,
messages: true,
pins: true,
memberInfo: true,
emojiList: true,
},
slashCommand: {
enabled: true,
name: "openclaw",
sessionPrefix: "slack:slash",
ephemeral: true,
},
textChunkLimit: 4000,
chunkMode: "length",
mediaMaxMb: 20,
},
},
}
ãã«ãã¢ã«ãŠã³ãã®ãµããŒã㯠channels.slack.accounts ã®äžã§è¡ãããŸãã(äžèšã®ãã«ãã¢ã«ãŠã³ãã®ã»ã¯ã·ã§ã³ãåç
§ããŠãã ãã)ã EnvããŒã¯ã³ã¯ããã©ã«ãã®ã¢ã«ãŠã³ãã«ã®ã¿é©çšãããŸãã
OpenClawã¯ãããã€ããæå¹ã«ãªã£ãŠããŠãäž¡æ¹ã®ããŒã¯ã³ã(èšå®ãŸãã¯SLACK_BOT_TOKEN + SLACK_APP_TOKENãä»ããŠ)èšå®ãããŠãããšãã«Slackãèµ·åããŸãã cron/CLI ã³ãã³ãã®é
ä¿¡ã¿ãŒã²ãããæå®ããå Žåã¯ãuser:<id> ãŸã㯠channel:<id> ã䜿çšããŸãã
channels.slack.configWrites: false ãèšå®ããŠãSlackã§éå§ãããèšå®ãžã®æžã蟌ã¿ããããã¯ããŸã(ãã£ã³ãã« ID ã®ç§»è¡ãš /config set|unset ãå«ã¿ãŸã)ã
Bot-authored messages ã¯ããã©ã«ãã§ã¯ç¡èŠãããŸãã channels.slack.allowBots ãŸã㯠channels.slack.channels.slack.channel<id>.allowBots ã§æå¹åã§ããŸãã
ãªã¢ã¯ã·ã§ã³éç¥ã¢ãŒã:
off: ãªã¢ã¯ã·ã§ã³ã€ãã³ããªããown: ãããèªèº«ã®ã¡ãã»ãŒãžãžã®ãªã¢ã¯ã·ã§ã³ïŒããã©ã«ãïŒãall: ãã¹ãŠã®ã¡ãã»ãŒãžãžã®ãã¹ãŠã®ãªã¢ã¯ã·ã§ã³ãallowlist: reactions fromchannels.slack.reactionAllowliston all messages (empty list disables).
ã¹ã¬ããã»ãã·ã§ã³åé¢:
channels.slack.thread.historyScopeã¯ãã¹ã¬ããããšã®å±¥æŽ(thread, default)ããã£ã³ãã«éã§å ±æããããã©ãããå¶åŸ¡ããŸããchannels.slack.thread.legitParentã¯ãæ°ããã¹ã¬ããã»ãã·ã§ã³ã芪ãã£ã³ãã«ãã©ã³ã¹ã¯ãªãããç¶æ¿ãããã©ãããå¶åŸ¡ããŸã (ããã©ã«ã: false)ã
Slack ã¢ã¯ã·ã§ã³ã°ã«ãŒã (gate slack tools actions):
| ã¢ã¯ã·ã§ã³ã°ã«ãŒã | ããã©ã«ã | Notes |
|---|---|---|
| reactions | enabled | React + ãªã¢ã¯ã·ã§ã³ãªã¹ã |
| messages | enabled | èªã¿åã/éä¿¡/ç·šé/åé€ |
| pins | enabled | ãã³/è§£é€/äžèЧ |
| memberInfo | enabled | ã¡ã³ããŒæ å ± |
| emojiList | enabled | ã«ã¹ã¿ã çµµæåäžèЧ |
channels.mattermost (botããŒã¯ã³)¶
Mattermost ã¯ãã©ã°ã€ã³ãšããŠæäŸãããŠãããã³ã¢ã€ã³ã¹ããŒã«ã«ã¯å梱ãããŠããŸããã
æåã«ã€ã³ã¹ããŒã«ããŸã: openclaw/mattermost (ãŸã㯠git checkoutãã ./extensions/mattermost )ã
Mattermostã«ã¯BotããŒã¯ã³ãšãµãŒããŒã®ããŒã¹ URLãå¿ èŠã§ã:
8. {
channels: {
mattermost: {
enabled: true,
botToken: "mm-token",
baseUrl: "https://chat.example.com",
dmPolicy: "pairing",
chatmode: "oncall", // oncall | onmessage | onchar
oncharPrefixes: [">", "!"],
textChunkLimit: 4000,
chunkMode: "length",
},
},
}
OpenClawã¯ã¢ã«ãŠã³ããèšå®ãããŠæå¹ã«ãªã£ãŠããå ŽåãMattermostãéå§ããŸãã ããŒã¯ã³ + ããŒã¹ URL 㯠channels.mattermost.botToken + channels.mattermost.baseUrl ãŸã㯠MATTERMOST_BOT_TOKEN + MATTERMOST_URL ãã解決ãããŸã (channels.mattermost.enabled ãfalseã§ãªãéã)ã
ãã£ããã¢ãŒã:
oncall(default): @ã¡ã³ã·ã§ã³ããããšãã«ã®ã¿ãã£ãã«ã¡ãã»ãŒãžã«å¿çããŸããonmessage: ãã¹ãŠã®ãã£ã³ãã«ã¡ãã»ãŒãžã«å¿çããŸããonchar: ã¡ãã»ãŒãžãããªã¬ãŒãã¬ãã£ãã¯ã¹ã§å§ãŸããšãã«å¿çããŸã (channels.mattermost.oncharPrefixes, default[">", "!"])ã
ã¢ã¯ã»ã¹å¶åŸ¡:
- ããã©ã«ãã®DM:
channels.matter.dmPolicy="ãã¢ãªã³ã°"(æªç¥ã®éä¿¡è ã¯ãã¢ãªã³ã°ã³ãŒããååŸããŸã)ã - å
Ž DM:
channels.mattermost.dmPolicy="open"ã«å ããŠchannels.mattermost.allowFrom=["*"]ã - Groups:
channels.mattermost.groupPolicy="allowlist"by default (mention-gated). éä¿¡è ãå¶éããã«ã¯ãchannels.mattermost.groupAllowFromã䜿çšããŠãã ããã
è€æ°ã¢ã«ãŠã³ãã®ãµããŒã㯠channels.mattermost.accounts ã®äžã§è¡ãããŸã (äžèšã®ãã«ãã¢ã«ãŠã³ãã®ã»ã¯ã·ã§ã³ãåç
§ããŠãã ãã)ã Env var ã¯æ¢å®ã®ã¢ã«ãŠã³ãã«ã®ã¿é©çšãããŸãã
é
éã¿ãŒã²ãããæå®ãããšãã¯ãchannel:<id> ãŸã㯠user:<id> (ãŸã㯠@username) ã䜿çšããŸãã裞㮠id ã¯ãã£ã³ãã« ID ãšããŠæ±ãããŸãã
channels.signal (signal-cli)¶
ã·ã°ãã«ãªã¢ã¯ã·ã§ã³ã¯ã·ã¹ãã ã€ãã³ããçºçãããããšãã§ããŸã (å ±æãªã¢ã¯ã·ã§ã³ããŒã«):
9. {
channels: {
signal: {
reactionNotifications: "own", // off | own | all | allowlist
reactionAllowlist: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"],
historyLimit: 50, // include last N group messages as context (0 disables)
},
},
}
ãªã¢ã¯ã·ã§ã³éç¥ã¢ãŒã:
off: ãªã¢ã¯ã·ã§ã³ã€ãã³ããªããown: ãããèªèº«ã®ã¡ãã»ãŒãžãžã®ãªã¢ã¯ã·ã§ã³ïŒããã©ã«ãïŒãall: ãã¹ãŠã®ã¡ãã»ãŒãžãžã®ãã¹ãŠã®ãªã¢ã¯ã·ã§ã³ãallowlist: reactions fromchannels.signal.reactionAllowliston all messages (empty list disables).
channels.imessage (imsg CLI)¶
OpenClawã¯imsg rpc (stdioäžã§JSON-RPC) ãçæããŸãã ããŒã¢ã³ãããŒãã¯å¿
èŠãããŸããã
10. {
channels: {
imessage: {
enabled: true,
cliPath: "imsg",
dbPath: "~/Library/Messages/chat.db",
remoteHost: "user@gateway-host", // SCP for remote attachments when using SSH wrapper
dmPolicy: "pairing", // pairing | allowlist | open | disabled
allowFrom: ["+15555550123", "user@example.com", "chat_id:123"],
historyLimit: 50, // include last N group messages as context (0 disables)
includeAttachments: false,
mediaMaxMb: 16,
service: "auto",
region: "US",
},
},
}
è€æ°ã¢ã«ãŠã³ãã®ãµããŒã㯠channels.imessage.accounts ã®äžã§è¡ãããŸã (äžèšã®ãã«ãã¢ã«ãŠã³ãã®ã»ã¯ã·ã§ã³ãåç
§ããŠãã ãã)ã
ç°å¢å€æ°ã§ã®æå®ïŒ
- ã¡ãã»ãŒãžDBãžã®ãã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ãå¿ èŠã§ãã
- æåã®éä¿¡ã¯ã¡ãã»ãŒãžã®èªååæš©éãæ±ããŸãã
chat_id:<id>ã¿ãŒã²ãããèšå®ããŸãã ãã£ããäžèЧã衚瀺ããã«ã¯imsg chats --limit 20ã䜿çšããŸããchannels.imessage.cliPathã¯ã©ãããŒã¹ã¯ãªãããæãããšãã§ããŸã(äŸãã°sshã¯imsg rpcãå®è¡ããå¥ã®Macãæã)ããã¹ã¯ãŒãããã³ãããé¿ããããã«SSHããŒã䜿çšããŸãã- ãªã¢ãŒãã® SSH ã©ãããŒã®å Žåã¯ã
includeAttachmentsãæå¹ã«ãªã£ãŠããå ŽåãSCP çµç±ã§æ·»ä»ãã¡ã€ã«ããã§ããããããã«channels.imessage.remoteHostãèšå®ããŸãã
ããŒã«èŠçŽã¯ãã·ãŒã¯ã¬ããæŒæŽ©ãé²ãããã«ãã¹ã¯ã§ããŸãã
#!/usr/bin/env bash
exec ssh -T gateway-host imsg "$@"
agents.defaults.workspace¶
ãšãŒãžã§ã³ãããã¡ã€ã«æäœã§äœ¿çšãã åäžã®ã°ããŒãã«ã¯ãŒã¯ã¹ããŒã¹ãã£ã¬ã¯ã㪠ãèšå®ããŸãã
ããã©ã«ã: ~/.openclaw/workspace.
{
agents: { defaults: { workspace: "~/.openclaw/workspace" } },
}
agents.defaults.sandboxãæå¹ãªå Žåãéã¡ã€ã³ã®ã»ãã·ã§ã³ã¯agents.defaults.sandbox.workspaceRooté äžã«ããåã¹ã³ãŒãããšã®ã¯ãŒã¯ã¹ããŒã¹ã§ããã®èšå®ãäžæžãã§ããŸãã
agents.defaults.repoRoot¶
ã·ã¹ãã ããã³ããã®ã©ã³ã¿ã€ã ã©ã€ã³ã«è¡šç€ºãããªãã·ã§ã³ã®ãªããžããªã«ãŒãã æªèšå®ã®å ŽåãOpenClaw
ã¯ã¯ãŒã¯ã¹ããŒã¹ (ããã³çŸåšã®
äœæ¥ãã£ã¬ã¯ããª) ãã .git ãã£ã¬ã¯ããªãæ€åºããããšããŸãã 䜿çšããã«ã¯ãã¹ãååšããå¿
èŠããããŸãã
{
agents: { defaults: { repoRoot: "~/Projects/openclaw" } },
}
agents.defaults.skipBootstrap¶
ã¯ãŒã¯ã¹ããŒã¹ã®ããŒãã¹ãã©ãããã¡ã€ã« (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, BOOTSTRAP.md) ã®èªåäœæãç¡å¹ã«ããŸãã
ã¯ãŒã¯ã¹ããŒã¹ã»ãã¡ã€ã«ããªããžããªããçæããããäºåã·ãŒãããããããã€ã¡ã³ãã«äœ¿çšããŸãã
{
agents: { defaults: { skipBootstrap: true } },
}
agents.defaults.bootstrapMaxChars¶
- åãè©°ããè¡ãããåã«ãã·ã¹ãã ããã³ãããžæ³šå
¥ãããåã¯ãŒã¯ã¹ããŒã¹ã®ããŒãã¹ãã©ãããã¡ã€ã«ã®æå€§æåæ°ã ããã©ã«ã:
20000.
ãã¡ã€ã«ããã®å¶éãè¶ ãããšãOpenClawã¯èŠåããã°ã«èšé²ããããŒã«ãŒãšå ±ã«åãæšãŠããã ã®é /å°Ÿãæ³šå ¥ããŸãã
{
agents: { defaults: { bootstrapMaxChars: 20000 } },
}
agents.defaults.userTimezone¶
ã·ã¹ãã ããã³ããã³ã³ããã¹ã ã®ãŠãŒã¶ãŒã®ã¿ã€ã ãŸãŒã³ãèšå®ããŸã ( ã¡ãã»ãŒãžãšã³ãããŒãã®ã¿ã€ã ã¹ã¿ã³ãã§ã¯ãããŸãã)ã æªèšå®ã®å ŽåãOpenClawã¯å®è¡æã«ãã¹ãã¿ã€ã ãŸãŒã³ã䜿çšããŸãã
{
agents: { defaults: { userTimezone: "America/Chicago" } },
}
agents.defaults.timeFormat¶
ã·ã¹ãã ããã³ããã®çŸåšã®æ¥ä»ãšæå»ã®ã»ã¯ã·ã§ã³ã«è¡šç€ºãããæå»ãã©ãŒããããå¶åŸ¡ããŸãã
ããã©ã«ã: auto (OS èšå®)
{
agents: { defaults: { timeFormat: "auto" } }, // auto | 12 | 24
}
ã¡ãã»ãŒãžÂ¶
inbound/outboundãã¬ãã£ãã¯ã¹ãšä»»æã®ackãªã¢ã¯ã·ã§ã³ãã³ã³ãããŒã«ããŸãã ãã¥ãŒãã»ãã·ã§ã³ãã¹ããªãŒãã³ã°ã³ã³ããã¹ãã«ã€ããŠã¯ã Messages ãåç §ããŠãã ããã
{
messages: {
responsePrefix: "ðŠ", // or "auto"
ackReaction: "ð",
ackReactionScope: "group-mentions",
removeAckAfterReply: false,
},
}
responsePrefix ã¯ããã§ã«ååšããªãéãããã£ã³ãã«ã暪æãã ãã¹ãŠã®ã¢ãŠãããŠã³ãè¿ä¿¡ (ããŒã«ãµããªã
ã¹ããªãŒãã³ã°ãæçµè¿ä¿¡ããããã¯) ã«é©çšãããŸãã
äžæžãã¯ããã£ã³ãã«ããšããã³ã¢ã«ãŠã³ãããšã«èšå®ã§ããŸã:
channels.<channel>.responsePrefixchannels.<channel>.accounts.<id>.responsePrefix
解決é ïŒæãå ·äœçãªãã®ãåªå ïŒïŒ
channels.<channel>.accounts.<id>.responsePrefixchannels.<channel>.responsePrefixmessages.responsePrefix
ã»ãã³ãã£ã¯ã¹:
undefinedã¯æ¬¡ã®ã¬ãã«ã«èœã¡ãŸãã""ã¯ãã¬ãã£ãã¯ã¹ãæç€ºçã«ç¡å¹ã«ããã«ã¹ã±ãŒãã忢ããŸãã"auto"ã¯ã«ãŒãã£ã³ã°ããããšãŒãžã§ã³ãã«å¯ŸããŠ[{identity.name}]ãæŽŸçããŸãã
ãªãŒããŒã©ã€ãã¯ãæ¡åŒµæ©èœãå«ããã¹ãŠã®ãã£ã³ãã«ãããã³ãã¹ãŠã®ã¢ãŠãããŠã³ãè¿ä¿¡ã®çš®é¡ã«é©çšãããŸãã
messages.responsePrefix ãèšå®ãããŠããªãå Žåãããã©ã«ãã§ã¯ãã¬ãã£ãã¯ã¹ã¯é©çšãããŸããã 13. WhatsApp ã®èªå·±ãã£ããè¿ä¿¡ã¯äŸå€ã§ããèšå®ãããŠããå Žåã¯æ¢å®ã§ [{identity.name}] ã䜿çšããããã§ãªãå Žå㯠[openclaw] ãšãªããŸããããã«ãããåäžç«¯æ«å
ã®äŒè©±ã®å¯èªæ§ãä¿ãããŸãã
ã«ãŒãã£ã³ã°ããããšãŒãžã§ã³ãã®[{identity.name}]ãå°åºããã«ã¯ã"auto"ã«èšå®ããŸãã
ãã³ãã¬ãŒã倿°Â¶
responsePrefix æååã«ã¯ãåçã«è§£æ±ºãããã³ãã¬ãŒã倿°ãå«ããããšãã§ããŸãã
| 倿° | 説æ | ããŒãžåäœ |
|---|---|---|
{model} |
çãã¢ãã«å | claude-opus-4-6, gpt-4o |
{modelFull} |
ãã«ã¢ãã«èå¥å | anthropic/claude-opus-4-6 |
{provider} |
ãããã€ããŒå | anthropic, openai |
{thinkingLevel} |
çŸåšã®æèã¬ãã« | high, low, off |
{identity.name} |
ãšãŒãžã§ã³ãã®èº«å å | (`"auto"ã¢ãŒããšåã) |
倿°ã¯å€§æåå°æåãåºå¥ããŸãã ({MODEL} = {model})ã {think} 㯠{thinkingLevel} ã®ãšã€ãªã¢ã¹ã§ãã
æªè§£æ±ºã®å€æ°ã¯ãªãã©ã«ããã¹ããšããŠæ®ããŸãã
{
messages: {
responsePrefix: "[{model} | think:{thinkingLevel}]",
},
}
åºåäŸ: [claude-opus-4-6 | think:high] ãããç§ã®è¿äºã§ã...
WhatsAppã€ã³ããŠã³ããã¬ãã£ãã¯ã¹ã¯ã channels.whatsapp.messagePrefix ãä»ããŠèšå®ãããŠããŸã(éæšå¥š:
message.messagePrefix )ã 14. æ¢å®ã¯ 倿ŽãããŸããïŒchannels.whatsapp.allowFrom ã空ã®å Žå㯠"[openclaw]"ããã以å€ã®å Žå㯠""ïŒãã¬ãã£ãã¯ã¹ãªãïŒã§ãã 15. "[openclaw]" ã䜿çšããŠããå Žåãã«ãŒãã£ã³ã°ããããšãŒãžã§ã³ãã« identity.name ãèšå®ãããŠããã°ãOpenClaw ã¯ä»£ããã« [{identity.name}] ã䜿çšããŸãã
ackReactionã¯ããªã¢ã¯ã·ã§ã³ããµããŒããããã£ã³ãã«ïŒSlack/Discord/Telegram/Google ChatïŒã§ãåä¿¡ã¡ãã»ãŒãžã®åé ã瀺ãããã«ãã¹ããšãã©ãŒãã§çµµæåãªã¢ã¯ã·ã§ã³ãéä¿¡ããŸãã ããã©ã«ãã§ã¯ã ã¢ã¯ãã£ããšãŒãžã§ã³ãã®identity.emojiãèšå®ãããŠããŸããèšå®ãããŠããªãå Žåã¯"ð"ã§ãã ç¡å¹ã«ããã«ã¯""ã«èšå®ããŸãã
ackReactionScope ã¯ãªã¢ã¯ã·ã§ã³ãçºçãããšãã«å¶åŸ¡ããŸãã
group-mentions(ããã©ã«ã): ã°ã«ãŒã/ã«ãŒã ã§ã¡ã³ã·ã§ã³ãå¿ èŠãªå Žåã®ã¿ and Botãã¡ã³ã·ã§ã³ãããŠããŸãgroup-all: ãã¹ãŠã®ã°ã«ãŒã/ã«ãŒã ã¡ãã»ãŒãždirect: ãã€ã¬ã¯ãã¡ãã»ãŒãžã®ã¿all: ãã¹ãŠã®ã¡ãã»ãŒãž
removeAckAfterReplyã¯ãè¿ä¿¡ã
ïŒSlack/Discord/Telegram/Google ãã£ããã®ã¿ïŒããåŸããããã®ãªã¢ã¯ã·ã§ã³ãåé€ããŸãã ããã©ã«ã: false
messages.tts¶
çºä¿¡è¿ä¿¡ã®ããã¹ãèªã¿äžããæå¹ã«ããŸãã 17. æå¹ã«ãããšãOpenClaw 㯠ElevenLabs ãŸã㯠OpenAI ã䜿çšããŠé³å£°ãçæããè¿ä¿¡ã«æ·»ä»ããŸãã Telegramã¯Opus é³å£°ããŒãã䜿çšããŸããä»ã®ãã£ã³ãã«ã¯MP3ãªãŒãã£ãªãéä¿¡ããŸãã
18. {
messages: {
tts: {
auto: "always", // off | always | inbound | tagged
mode: "final", // final | all (include tool/block replies)
provider: "elevenlabs",
summaryModel: "openai/gpt-4.1-mini",
modelOverrides: {
enabled: true,
},
maxTextLength: 4000,
timeoutMs: 30000,
prefsPath: "~/.openclaw/settings/tts.json",
elevenlabs: {
apiKey: "elevenlabs_api_key",
baseUrl: "https://api.elevenlabs.io",
voiceId: "voice_id",
modelId: "eleven_multilingual_v2",
seed: 42,
applyTextNormalization: "auto",
languageCode: "en",
voiceSettings: {
stability: 0.5,
similarityBoost: 0.75,
style: 0.0,
useSpeakerBoost: true,
speed: 1.0,
},
},
openai: {
apiKey: "openai_api_key",
model: "gpt-4o-mini-tts",
voice: "alloy",
},
},
},
}
å©äŸ¿æ§ã®ããã®ãªããã€ã³æ©èœã§ããæå¹ã§ããã€æåŸ
ãããããŒããŸã èšå®ãããŠããªãå ŽåãOpenClaw ã¯ãã°ã€ã³ã·ã§ã«ãå®è¡ããæ¬ èœããŠããæåŸ
ããŒã®ã¿ãåã蟌ã¿ãŸãïŒäžæžãã¯ããŸããïŒã
ããã¯å®è³ªçã«ã·ã§ã«ãããã¡ã€ã«ã source ããåäœã§ãã
messages.tts.autoã¯ãautoâTTS(offãalwaysãinboundãtagged)ãå¶åŸ¡ããŸãã/tts off|always|inbound|taggedã¯ã»ãã·ã§ã³ããšã®èªåã¢ãŒããèšå®ããŸã (èšå®ãäžæžãããŸã)ãmessages.tts.enabledã¯ã¬ã¬ã·ãŒã§ããå»åž«ã¯messages.tts.autoã«ç§»è¡ããŸããprefsPathã¯ããŒã«ã«ã®ãªãŒããŒã©ã€ããæ ŒçŽããŸã(provider/limit/summarize)ãmaxTextLengthã¯TTSå ¥åã®ããŒããã£ããã§ããèŠçŽã¯åãŸãããã«çç¥ãããŸããsummaryModelã¯agents.defaults.model.primaryãäžæžãããŸããprovider/modelãŸãã¯agents.defaults.modelsã®ãšã€ãªã¢ã¹ãåãä»ããŸããmodelOverridesã¯ã[[tts:...]]ã¿ã°ã®ãããªã¢ãã«é§åã®ãªãŒããŒã©ã€ããæå¹ã«ããŸã(ããã©ã«ã)ã/tts limitãš/tts summaryã¯ãŠãŒã¶æ¯ã®ãµããªãŒèšå®ãå¶åŸ¡ããŸããapiKeyã®å€ã¯ELEVENLABS_API_KEY/XI_API_KEYãšOPENAI_API_KEYã«æ»ããŸããelevenlabs.baseUrlã¯ElevenLabs APIããŒã¹ã®URLãäžæžãããŸããelevenlabs.voiceSettingsã¯stability/similarityBoost/style(0..1),useSpeakerBoost, ãããŠspeed(0.5..2.0) ããµããŒãããŠããŸãã
talk¶
ããã©ã«ãã¯ããŒã¯ã¢ãŒã(macOS/iOS/Android)ã§ãã é³å£°IDã¯ãªãã«ãããšãELEVENLABS_VOICE_IDããŸãã¯ãSAG_VOICE_IDãã«æ»ããŸãã
apiKey ã¯èšå®ãè§£é€ãããšãã« ELEVENLABS_API_KEY (ãŸãã¯ã²ãŒããŠã§ã€ã®ã·ã§ã«ãããã¡ã€ã«) ã«æ»ããŸãã
voiceAliases ã䜿çšãããšãããŒã¯ãã£ã¬ã¯ãã£ãã¯ãã¬ã³ããªãŒãªååã䜿çšããããšãã§ããŸã(äŸ: "voice":"Clawd")ã
19. {
talk: {
voiceId: "elevenlabs_voice_id",
voiceAliases: {
Clawd: "EXAVITQu4vr4xnSDxMaL",
Roger: "CwhRBWXzGAHq8TQ4Fs17",
},
modelId: "eleven_v3",
outputFormat: "mp3_44100_128",
apiKey: "elevenlabs_api_key",
interruptOnSpeech: true,
},
}
agents.defaults¶
åã蟌ãŸãããšãŒãžã§ã³ãã©ã³ã¿ã€ã ãå¶åŸ¡ããŸã (ã¢ãã«/æè/verbose/timeout)ã
agents.defaults.models ã¯èšå®ãããã¢ãã«ã«ã¿ãã°ãå®çŸ©ããŸã (/model ã®èš±å®¹ãªã¹ããšããŠæ©èœããŸã)ã
agents.defaults.model.primary ã¯ããã©ã«ãã®ã¢ãã«ãèšå®ããŸããagents.defaults.model.fallbacks ã¯ã°ããŒãã«ãã§ã€ã«ãªãŒããŒã§ãã
agents.defaults.imageModel ã¯ãªãã·ã§ã³ã§ãã¡ã€ã³ã¢ãã«ã«ç»åå
¥åããªãå Žåã«ã®ã¿äœ¿çšãããŸãã
å agents.defaults.models ãšã³ããªã«ã¯ä»¥äžã®ãã®ããããŸãã
alias(ãªãã·ã§ã³ã®ã¢ãã«ã·ã§ãŒãã«ãããäŸãã°/opus)ãparams(ãªãã·ã§ã³ã®ãããã€ãåºæã® API ãã©ã¡ãŒã¿ãã¢ãã«èŠæ±ã«æž¡ãããŸã)ã
params ã¯ã¹ããªãŒãã³ã°å®è¡ã«ãé©çšãããŸã(åã蟌ã¿ãšãŒãžã§ã³ã + å§çž®)ã çŸåšãµããŒããããŠããããŒã¯temperatureãmaxTokensã§ãã ãããã¯ã³ãŒã«ã¿ã€ã ãªãã·ã§ã³ãšããŒãžãããŸããåŒã³åºãå
ã®å€ãåå©ããŸãã temperature ã¯é«åºŠãªããã§ããã¢ãã«ã®ããã©ã«ããããã£ãŠããŠã倿Žãå¿
èŠãªãéããèšå®ãè§£é€ããŠãã ããã
æªå®çŸ©ãŸãã¯ç©ºã®ç°å¢å€æ°ã¯ãèšå®èªã¿èŸŒã¿æã«ãšã©ãŒãšãªããŸã
20. {
agents: {
defaults: {
models: {
"anthropic/claude-sonnet-4-5-20250929": {
params: { temperature: 0.6 },
},
"openai/gpt-5.2": {
params: { maxTokens: 8192 },
},
},
},
},
}
Z.AI GLM-4.x ã¢ãã«ã¯èªåçã«æèã¢ãŒããæå¹ã«ããŸãã
--thinking offãŸãã¯agents.defaults.models["zai/<model>"].params.thinkingãèªåã§å®çŸ©ããŸãã
OpenClawã¯ãŸããããã€ãã®çµã¿èŸŒã¿ãšã€ãªã¢ã¹ççž®ãåºè·ããŸãã ããã©ã«ãã¯ãã¢ãã«
ã agents.defaults.modelsã«æ¢ã«ååšããå Žåã«ã®ã¿é©çšãããŸãã
opus->anthropic/claude-opus-4-6sonnet->anthropic/claude-sonnet-4-5gpt->openai/gpt-5.2gpt-mini->openai/gpt-5-minigemini->google/gemini-3-pro-previewgemini-flash->google/gemini-3-flash-preview
èªåã§åããšã€ãªã¢ã¹å(倧æåãšå°æåãåºå¥ããªã)ãèšå®ãããšããã®å€ã¯åå©ããŸã (ããã©ã«ãã§ã¯äžæžããããŸãã)ã
äŸ: Opus 4.6 primary with MiniMax M2.1 fallback (hosted MiniMax):
21. {
agents: {
defaults: {
models: {
"anthropic/claude-opus-4-6": { alias: "opus" },
"minimax/MiniMax-M2.1": { alias: "minimax" },
},
model: {
primary: "anthropic/claude-opus-4-6",
fallbacks: ["minimax/MiniMax-M2.1"],
},
},
},
}
MiniMax auth: MINIMAX_API_KEY (env) ãèšå®ããããmodels.providers.minimax ãèšå®ããŸãã
agents.defaults.cliBackends (CLI ãã©ãŒã«ããã¯)¶
ããã¹ãã®ã¿ã®ãã©ãŒã«ããã¯ã©ã³(ããŒã«ã³ãŒã«ãªã)ã®ããã®ãªãã·ã§ã³ã® CLI ããã¯ãšã³ãã ãããã¯ãAPI ãããã€ãã倱æããå Žåã®
ããã¯ã¢ãããã¹ãšããŠæçšã§ãã
ãã¡ã€ã«ãã¹ãåãå
¥ããimageArg ãèšå®ãããšãã€ã¡ãŒãžãã¹ã¹ã«ãŒããµããŒããããŸãã
å©äŸ¿æ§ã®ããã®ãªããã€ã³æ©èœã§ããæå¹ã§ããã€æåŸ
ãããããŒããŸã èšå®ãããŠããªãå ŽåãOpenClaw ã¯ãã°ã€ã³ã·ã§ã«ãå®è¡ããæ¬ èœããŠããæåŸ
ããŒã®ã¿ãåã蟌ã¿ãŸãïŒäžæžãã¯ããŸããïŒã
ããã¯å®è³ªçã«ã·ã§ã«ãããã¡ã€ã«ã source ããåäœã§ãã
- CLI ããã¯ãšã³ã㯠text-first ã§ããããŒã«ã¯åžžã«ç¡å¹ã§ãã
- ã»ãã·ã§ã³ã¯
sessionArgãèšå®ãããŠããå Žåã«ãµããŒããããŸããã»ãã·ã§ã³IDã¯ããã¯ãšã³ãããšã«æç¶ããŸãã claude-cliã®å Žåãããã©ã«ãã¯é ç·ãããŠããŸãã PATH ãæå°ã® (launchd/systemd) ã®å Žåãã³ãã³ããã¹ãäžæžãããŸãã
2026-02-08T09:22:13Z
22. {
agents: {
defaults: {
cliBackends: {
"claude-cli": {
command: "/opt/homebrew/bin/claude",
},
"my-cli": {
command: "my-cli",
args: ["--json"],
output: "json",
modelArg: "--model",
sessionArg: "--session",
sessionMode: "existing",
systemPromptArg: "--system",
systemPromptWhen: "first",
imageArg: "--image",
imageMode: "repeat",
},
},
},
},
}
23. {
agents: {
defaults: {
models: {
"anthropic/claude-opus-4-6": { alias: "Opus" },
"anthropic/claude-sonnet-4-1": { alias: "Sonnet" },
"openrouter/deepseek/deepseek-r1:free": {},
"zai/glm-4.7": {
alias: "GLM",
params: {
thinking: {
type: "enabled",
clear_thinking: false,
},
},
},
},
model: {
primary: "anthropic/claude-opus-4-6",
fallbacks: [
"openrouter/deepseek/deepseek-r1:free",
"openrouter/meta-llama/llama-3.3-70b-instruct:free",
],
},
imageModel: {
primary: "openrouter/qwen/qwen-2.5-vl-72b-instruct:free",
fallbacks: ["openrouter/google/gemini-2.0-flash-vision:free"],
},
thinkingDefault: "low",
verboseDefault: "off",
elevatedDefault: "on",
timeoutSeconds: 600,
mediaMaxMb: 5,
heartbeat: {
every: "30m",
target: "last",
},
maxConcurrent: 3,
subagents: {
model: "minimax/MiniMax-M2.1",
maxConcurrent: 1,
archiveAfterMinutes: 60,
},
exec: {
backgroundMs: 10000,
timeoutSec: 1800,
cleanupMs: 1800000,
},
contextTokens: 200000,
},
},
}
agents.defaults.contextPruning (tool-result pruning)¶
agents.defaults.contextPruning ã¯ããªã¯ãšã¹ãã LLM ã«éä¿¡ãããçŽåã®ã¡ã¢ãªå
ã³ã³ããã¹ããã å€ãããŒã«ã®çµæ ãåé€ããŸãã
ãã£ã¹ã¯äžã®ã»ãã·ã§ã³å±¥æŽã倿ŽããŸãã** (*.jsonlã¯ãŸã å®äºããŠããŸã)ã
ããã¯ãæéã®çµéãšãšãã«å€§ããªããŒã«åºåãèç©ãããã£ãããšãŒãžã§ã³ãã®ããŒã¯ã³äœ¿çšãæžããããšãç®çãšããŠããŸãã
ãã€ã¬ãã«:
- ãŠãŒã¶ãŒ/ã¢ã·ã¹ã¿ã³ãã¡ãã»ãŒãžãã¿ããããªãã§ãã ããã
- æåŸã®
keepLastAssistantsã¢ã·ã¹ã¿ã³ãã¡ãã»ãŒãžãä¿è·ããŸããåé€åŸã®ããŒã«çµæã¯ãããŸããã - ããŒãã¹ãã©ããã®ãã¬ãã£ãã¯ã¹ãä¿è·ããŸã (æåã®ãŠãŒã¶ãŒã¡ãã»ãŒãžãåé€ãããåã«ã¯äœããããŸãã)ã
- ã¢ãŒã:
adaptive: æšå®ãããã³ã³ããã¹ãæ¯ãsoftTrimRatioãæšªåã£ããšãã«ããœããããªã ãç¹å€§ã®ããŒã«çµæã衚瀺ããŸã(ããã/ããŒã«ãç¶æããŸã)ã- æšå®ã³ã³ããã¹ãæ¯çã
hardClearRatioãè¶ ãããã€åªå®å¯èœãªããŒã«çµæã®éïŒminPrunableToolCharsïŒãååã«ããå Žåãæãå€ã察象ããŒã«çµæãããŒãã¯ãªã¢ããŸãã
- æšå®ã³ã³ããã¹ãæ¯çã
ã¢ã°ã¬ãã·ã: ã«ãããªãã®åã«é©åãªããŒã«çµæãåžžã«hardClear.placeholderã«çœ®ãæããŸã(æ¯çãã§ãã¯ã¯ãããŸãã)ã
ãœãã察ããŒãåªå®ïŒLLMã«éä¿¡ãããã³ã³ããã¹ãå ã®å€æŽïŒïŒ
- ãœããããªã : oversized ããŒã«çµæã®ã¿ã éå§äœçœ®ãšçµäºäœçœ®ãç¶æããäžå€®ã«
...ãæ¿å ¥ããŸãã - 以å:
toolResult("âŠéåžžã«é·ãåºåâŠ") - After:
toolResult("HEADâŠ\n...\nâŠTAIL\n\n[Tool result trimed: âŠ]") - Hard-clear: ããŒã«å šäœã®çµæããã¬ãŒã¹ãã«ãã«çœ®ãæããŸãã
- 以å:
toolResult("âŠéåžžã«é·ãåºåâŠ") - After:
toolResult("format@@0")
ããŒã/çŸåšã®å¶éïŒ
- ç»åãããã¯ãå«ãããŒã«ã®çµæã¯ã¹ããããããŸã (ããªãã³ã°ãåé€ã¯ãããŸãã)
- æšå®ããããã³ã³ããã¹ãæ¯ãã¯ãæ£ç¢ºãªããŒã¯ã³ã§ã¯ãªãæå (è¿äŒŒ) ã«åºã¥ããŠããŸãã
- ã»ãã·ã§ã³ã«
keepLastAssistantsã¢ã·ã¹ã¿ã³ãã¡ãã»ãŒãžãå«ãŸããŠããªãå Žåã¯ãåªå®ã¯ã¹ããããããŸãã ã¢ã°ã¬ãã·ãã¢ãŒãã§ã¯ãhardClear.enabledã¯ç¡èŠãããŸãïŒé©æ ŒãªããŒã«çµæã¯åžžã«hardClear.placeholderã«çœ®ãæããããŸãïŒã
ããã©ã«ã (ã¢ãããã£ã):
{
agents: { defaults: { contextPruning: { mode: "adaptive" } },
}
ç¡å¹ã«ããã«ã¯:
{
agents: { defaults: { contextPruning: { mode: "off" } },
}
ããã©ã«ã(modeãadaptive"ãŸãã¯"ã¢ã°ã¬ãã·ã"ã®å Žå):
keepLastAssistants:3softTrimRatio:0.3(ã¢ãããã£ãã®ã¿)hardClearRatio:0.5(ã¢ãããã£ãã®ã¿)minPrunableToolChars:50000(ã¢ãããã£ãã®ã¿)softTrim:{ maxChars: 4000, headChars: 1500, tailChars: 1500 }(ã¢ãããã£ãã®ã¿)hardClear:{ enabled: true, placeholder: "[Old tool result content cleared]" }
äŸ (æ»æçãæå°å€):
{
agents: { defaults: { contextPruning: { mode: "agrossive" } },
}
äŸ (ã¢ãããã£ããã¥ãŒãã³ã°):
25. {
agents: {
defaults: {
contextPruning: {
mode: "adaptive",
keepLastAssistants: 3,
softTrimRatio: 0.3,
hardClearRatio: 0.5,
minPrunableToolChars: 50000,
softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 },
hardClear: { enabled: true, placeholder: "[Old tool result content cleared]" },
// Optional: restrict pruning to specific tools (deny wins; supports "*" wildcards)
tools: { deny: ["browser", "canvas"] },
},
},
},
}
æåã®è©³çŽ°ã¯ /concepts/session-pruning ãåç §ããŠãã ããã
agents.defaults.compaction (headroom + memory flushãäºçŽ)¶
agents.defaults.compaction.mode ã¯å§çž®èŠçŽæŠç¥ãéžæããŸãã ããã©ã«ã㯠default ã§ããsafeguard ãèšå®ãããšãéåžžã«é·ãæŽå²ã®ããã«ãŸãšããããèŠçŽãæå¹ã«ãªããŸãã /concepts/compaction ãåç
§ããŠãã ããã
agents.defaults.compaction.reserveTokensFloor ã¯ãPi compaction ã®æå°å€ reserveTokens
ã匷å¶ããŸã(ããã©ã«ã: 20000)ã åºãç¡å¹ã«ããã«ã¯ã0 ã«èšå®ããŸãã
agents.defaults.compaction.memoryFlush ã¯ã
èªåå§çž®ããåã«ãµã€ã¬ã³ã ã®agenticticã¿ãŒã³ãå®è¡ããŸããã¢ãã«ã«ãã£ã¹ã¯ã«èä¹
æ§ã®ããã¡ã¢ãªãŒãæ ŒçŽããããã«æç€ºããŸã (äŸ:
memory/YYYY-MM-DD.md )ã ããã¯ãã»ãã·ã§ã³ã»ããŒã¯ã³ãå§çž®é床ãäžåã
æããããããå€ãæšå®ãããšçºçããŸãã
åŸæ¥ã®ããã©ã«ã:
memoryFlush.enabled:truememoryFlush.softThresholdTokens:4000memoryFlush.prompt/memoryFlush.systemPrompt:NO_REPLYã®çµã¿èŸŒã¿ããã©ã«ã- 泚æ: ã»ãã·ã§ã³ ã¯ãŒã¯ã¹ããŒã¹ãèªã¿åãå°çšã®
(
agents.defaults.sandbox.workspaceAccess: "ro"or"none")ã®å Žåãã¡ã¢ãª ãã©ãã·ã¥ã¯ã¹ããããããŸãã
ä»»æã®èšå®æååå€ã§ã${VAR_NAME} æ§æã䜿çšããŠç°å¢å€æ°ãçŽæ¥åç
§ã§ããŸãã
倿°ã¯ãæ€èšŒåã®èšå®èªã¿èŸŒã¿æã«çœ®æãããŸãã
26. {
agents: {
defaults: {
compaction: {
mode: "safeguard",
reserveTokensFloor: 24000,
memoryFlush: {
enabled: true,
softThresholdTokens: 6000,
systemPrompt: "Session nearing compaction. Store durable memories now.",
prompt: "Write any lasting notes to memory/YYYY-MM-DD.md; reply with NO_REPLY if nothing to store.",
},
},
},
},
}
ãããã¯ã¹ããªãŒãã³ã°:
-
agents.defaults.blockStreamingDefault:"on"/"off"ïŒããã©ã«ãã¯ãªãïŒã -
ãã£ã³ãã«ã®ãªãŒããŒã©ã€ã:
*.blockStreaming(ãšã¢ã«ãŠã³ãããšã®ããªã¢ã³ã) ã¯ãã¹ããªãŒãã³ã°ã®ãªã³/ãªãããããã¯ããããšã匷å¶ããŸãã Telegram以å€ã®ãã£ã³ãã«ã§ã¯ããããã¯ã®è¿ä¿¡ãæå¹ã«ããã«ã¯æç€ºçãª*.blockStreaming: trueãå¿ èŠã§ãã -
agents.defaults.blockStreamingBreak:"text_end"ãŸãã¯"message_end"(ããã©ã«ã: text_end)ã -
agents.defaults.blockStreamingChunk: ã¹ããªãŒãã³ã°ããããããã¯ã®ãœãããã£ã³ãã³ã°ã ããã©ã«ã㯠800â1200 æåã§ããæ®µèœåºåãïŒ\n\nïŒãæ¬¡ã«æ¹è¡ãæ¬¡ã«æç« ã奜ã¿ãŸãã 2026-02-08T09:22:13Z
json5
{
agents: { defaults: { blockStreamingChunk: { minChars: 800, maxChars: 1200 } } },
}
-
agents.defaults.blockStreamingCoalesce: éä¿¡åã«ã¹ããªãŒãã³ã°ããããããã¯ãããŒãžããŸãã ããã©ã«ãã¯{ idleMs: 1000 }ã§ãblockStreamingChunkããminCharsãç¶æ¿ããmaxCharsã¯ãã£ã³ãã«ããã¹ãã®äžéã«äžéãèšå®ããŸãã ã·ã°ãã«/Slack/Discord/Googleãã£ããã®ããã©ã«ã ã¯ããªãŒããŒã©ã€ãããªãéããminChars: 1500ã«ãªããŸãã 27. ãã£ã³ãã«ããšã®äžæžãèšå®ïŒchannels.whatsapp.blockStreamingCoalesceãchannels.telegram.blockStreamingCoalesceãchannels.discord.blockStreamingCoalesceãchannels.slack.blockStreamingCoalesceãchannels.mattermost.blockStreamingCoalesceãchannels.signal.blockStreamingCoalesceãchannels.imessage.blockStreamingCoalesceãchannels.msteams.blockStreamingCoalesceãchannels.googlechat.blockStreamingCoalesceïŒããã³ã¢ã«ãŠã³ãããšã®ããªã¢ã³ãïŒã -
agents.defaults.humanDelay: æåã®ãããã¯ã®åŸã«ã©ã³ãã ã«äžæåæ¢ããŸãã ã¢ãŒã:off(ããã©ã«ã)ãnatural(800-2500ms)ãcustom(minMs/maxMsã䜿çš)ã ãšãŒãžã§ã³ãæ¯ã®ãªãŒããŒã©ã€ã:agents.list[].humanDelayã 2026-02-08T09:22:13Z
json5
{
agents: { defaults: { humanDelay: { mode: "natural" } },
}
åäœ + ãã£ã³ãã³ã°ã®è©³çްã«ã€ããŠã¯ã/concepts/streaming ãåç §ããŠãã ããã
å ¥åã€ã³ãžã±ãŒã¿ãŒ:
agents.defaults.typingMode:"never" | "instant" | "thinking" | "message"ã ããã©ã«ãã¯instantã§çŽæ¥ãã£ãã/ã¡ã³ã·ã§ã³ãæªã¡ã³ã·ã§ã³ã®ã°ã«ãŒããã£ããã®messageã§ããsession.typingMode: ã»ãã·ã§ã³ããšã®ãªãŒããŒã©ã€ããagents.defaults.typingIntervalSeconds: ã¿ã€ãã³ã°ä¿¡å·ããªãã¬ãã·ã¥ãããé »åºŠ(ããã©ã«ã: 6s)ãsession.typingIntervalSeconds: ãªãã¬ãã·ã¥ééã®ã»ãã·ã§ã³ããšã®ãªãŒããŒã©ã€ãã æåã®è©³çŽ°ã¯ /concepts/typing-indicators ãåç §ããŠãã ããã
agents.defaults.model.primary 㯠provider/model ãšããŠèšå®ããå¿
èŠããããŸããïŒäŸ: anthropic/claude-opus-4-6ïŒ
ãšã€ãªã¢ã¹ã¯agents.defaults.models.*.aliasïŒäŸïŒOpusïŒããæ¥ãŠããŸãã
ãããã€ããçç¥ããå ŽåãOpenClawã¯çŸåšäžæçãª
éæšå¥šã®ãã©ãŒã«ããã¯ãšããŠanthropicãæ³å®ããŠããŸãã
Z.AI ã¢ãã«ã¯ zai/<model> (äŸ: zai/glm-4.7) ãšããŠå©çšã§ããç°å¢ã§
ZAI_API_KEY (ãŸãã¯ã¬ã¬ã·ãŒã® Z_AI_API_KEY )ãå¿
èŠã§ãã
agents.defaults.heartbeat ã¯å®æçãªããŒãããŒãã®å®è¡ãæ§æããŸãã
every: duration string (ms,s,m,h); ããã©ã«ãã®åäœåã ããã©ã«ã:30mã0mãç¡å¹ã«ããŸããmodel: ããŒãããŒãã©ã³(provider/model)ã®ãªãã·ã§ã³ã®ãªãŒããŒã©ã€ãã¢ãã«ãincludeReasoning:trueã®ãšããããŒãããŒãã¯å©çšå¯èœãªãšãReasoningã¡ãã»ãŒãžãå¥ã ã«éä¿¡ããŸãïŒ/reasoning onãšåã圢ã§ãïŒã ããã©ã«ã:falsesession: ããŒãããŒããã©ã®ã»ãã·ã§ã³ãå®è¡ããããå¶åŸ¡ãããªãã·ã§ã³ã®ã»ãã·ã§ã³ããŒã ããã©ã«ã:mainãto: ãªãã·ã§ã³ã®åä¿¡è ãªãŒããŒã©ã€ãïŒãã£ã³ãã«åºæã®IDãäŸãã°WhatsAppã®E.164ãTelegramã®ãã£ããIDïŒãtarget: ãªãã·ã§ã³ã®ããªããªãã£ã³ãã« (last,whatsapp,telegram,discord,slack,msteams,signal,imessage,none). ããã©ã«ã:lastprompt: ããŒãããŒãããã£ã®ãªãã·ã§ã³ãªãŒããŒã©ã€ã(ããã©ã«ã:ååšããå Žåã¯HEARTBEAT.md ãèªã(ã¯ãŒã¯ã¹ããŒã¹ã³ã³ããã¹ã)ã Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.). ãªãŒããŒã©ã€ãã¯verbatimã«éãããŸãããã¡ã€ã«ãèªã¿ããå Žåã¯ãRead HEARTBEAT.mdè¡ãå«ã¿ãŸããackMaxChars: é éåã«HEARTBEAT_OKã®åŸã«èš±å¯ãããæå€§æåæ°ïŒããã©ã«ãïŒ300ïŒã
ãšãŒãžã§ã³ãããšã®ããŒãããŒã:
- ç¹å®ã®ãšãŒãžã§ã³ãã®ããŒãããŒãèšå®ãæå¹ãŸãã¯äžæžãããã«ã¯ã
agents.list[].heartbeatãèšå®ããŸãã - ãšãŒãžã§ã³ãã®ãšã³ããªã§
heartbeatãå®çŸ©ãããŠããå Žåããããã®ãšãŒãžã§ã³ãã®ã¿ãããŒãããŒããå®è¡ããŸããããã©ã«ãã§ã¯ã ã¯ãšãŒãžã§ã³ãã®å ±æããŒã¹ã©ã€ã³ãšãªããŸãã
ããŒãããŒãã¯ãã«ãšãŒãžã§ã³ãã¿ãŒã³ãå®è¡ããŸãã çãééã§ã¯ãããå€ãã®ããŒã¯ã³ãçãããŸããevery ã®
ã«çæããŠãHEARTBEAT.md ãå°ããããŠãããå®ãmodel ãéžãã§ãã ããã
tools.exec ã¯ããã¯ã°ã©ãŠã³ãå®è¡ã®ããã©ã«ããèšå®ããŸãã
backgroundMs: èªåèæ¯ãŸã§ã®æé (ms, default 10000)timeoutSec: ãã®ã©ã³ã¿ã€ã ã®åŸã«èªåãã«ããã (ç§ãããã©ã«ã1800)cleanupMs: çµäºããã»ãã·ã§ã³ãã¡ã¢ãªã«ä¿åããæé (ms, default 1800000)notifyOnExit: enqueue a system event + request heartbeat backgrounded exec exits (default true)applyPatch.enabled: å®éšçãªapply_patchãæå¹ã«ããŸã (OpenAI/OpenAI Codex ã®ã¿ãããã©ã«ã㯠false)applyPatch.allowModels: optional allowlist of model ids(äŸ:gpt-5.2oropenai/gpt-5.2) Note:applyPatchã¯tools.execã®äžã«ãããŸãã
tools.web ã¯ãŠã§ãæ€çŽ¢+fetch toolsãèšå®ããŸãã
tools.web.search.enabled(ããã©ã«ã: ããŒãååšããå Žå㯠true )tools.web.search.apiKey(openclaw-configure --section webãä»ããŠèšå®ããããBRAVE_API_KEYenvarã䜿çšããããšãæšå¥š)tools.web.search.maxResults(1â10, default 5)tools.web.search.timeoutSecondsïŒããã©ã«ã 30ïŒtools.web.search.cacheTtlMinutesïŒããã©ã«ã 15ïŒtools.web.fetch.enabled(ããã©ã«ã㯠true)tools.web.fetch.maxCharsïŒããã©ã«ã 50000ïŒtools.web.fetch.maxCharsCap(ããã©ã«ã50000; clumps maxChars from config/tool calls)tools.web.fetch.timeoutSecondsïŒããã©ã«ã 30ïŒtools.web.fetch.cacheTtlMinutesïŒããã©ã«ã 15ïŒtools.web.fetch.userAgentïŒä»»æã®äžæžãïŒãtools.web.fetch.readability(ããã©ã«ã㯠true; åºæ¬ç㪠HTML ã¯ãªãŒã³ã¢ããã®äœ¿çšãç¡å¹ã«ãã)tools.web.fetch.firecrawl.enabled(API ããŒãèšå®ãããŠããå Žåã¯ããã©ã«ãã§true)tools.web.fetch.firecrawl.apiKey(ãªãã·ã§ã³; ããã©ã«ãã¯FIRECRAWL_API_KEY)tools.web.fetch.firecrawl.baseUrl(ããã©ã«ã https://api.firecrawl.dev)tools.web.fetch.firecrawl.onlyMainContent(ããã©ã«ã㯠true)tools.web.fetch.firecrawl.maxAgeMsïŒä»»æïŒtools.web.fetch.firecrawl.timeoutSecondsïŒä»»æïŒ
tools.media ã¯ã€ã³ããŠã³ãã¡ãã£ã¢çè§£ãèšå®ããŸãïŒç»å/ãªãŒãã£ãª/ãããªïŒã
tools.media.models: å ±æã¢ãã«ãªã¹ã (capability-tagged; per-cap listsã®åŸã«äœ¿çš)ãtools.media.concurrency: æå€§åæå®è¡æ©èœ (ããã©ã«ã2)ãtools.media.image/tools.media.audio/tools.media.video:enabled: opt-out switch (ã¢ãã«ãèšå®ãããŠããå Žåã¯ããã©ã«ãã§ã¯ true)ãprompt: ãªãã·ã§ã³ã®ããã³ããã®ãªãŒããŒã©ã€ãïŒç»å/ãããªã¯maxCharsãã³ããèªåçã«è¿œå ïŒãmaxChars: æå€§åºåæåæ°ïŒç»å/ãããªã®å Žåã¯ããã©ã«ã500ããªãŒãã£ãªã®å Žåã¯ãªãïŒãmaxBytes: éä¿¡ããã¡ãã£ã¢ã®æå€§ãµã€ãºïŒããã©ã«ãïŒç»å10MBãé³å£°20MBãåç»50MBïŒãtimeoutSeconds: ãªã¯ãšã¹ãã¿ã€ã ã¢ãŠã (ããã©ã«ã: ç»å60ãé³å£°60ãåç»120)ãlanguage: é³å£°ãã³ãã®ãªãã·ã§ã³ãattachments: attachment policy (mode,maxAttachments,prefer).scope: ãªãã·ã§ã³ gating (first match wins) withmatch.channel,match.chatType, ãŸãã¯match.keyPrefix.models: ordered list of model entries; failure or oversize media fall back to the next entry.- ããããã®
models[]ãšã³ããª: - ãããã€ããšã³ããª(
type: "provider"ãŸãã¯çç¥):provider: API ãããã€ã㌠id (openai,anthropic,google/gemini,groq, etc).model: ã¢ãã« id ãªãŒããŒã©ã€ãïŒç»åã«ã¯å¿ é ãããã©ã«ãã¯gpt-4o-mini-transscribe/wisper-large v3-turboããããªã«gemini-3-flash-previewïŒãprofile/preferredProfile: authãããã¡ã€ã«ã®éžæã
- CLI ãšã³ã㪠(
type: "cli"):command: å®è¡ããå®è¡ãã¡ã€ã«ãargs: templated args (support{{MediaPath}},{{Prompt}},{{MaxChars}}ãªã©).
capabilities: ãªãã·ã§ã³ã®ãªã¹ã(image,audio,video)ãå ±æãšã³ããªã«ã²ãŒãããŸãã çç¥æã®ããã©ã«ã:openai/anthropic/minimaxâ ç»åãgoogleâ image+audio+videoãgroqâ audioãpromptãmaxCharsãmaxBytesãtimeoutSecondsãlanguageã¯ãšã³ããªããšã«äžæžãããããšãã§ããŸãã
ã¢ãã«ãèšå®ãããŠããªãå Žå (ãŸã㯠enabled: false )ãçè§£ã¯ã¹ããããããŸããã¢ãã«ã¯å
ã®æ·»ä»ãã¡ã€ã«ãåãåããŸãã
ãããã€ãèªèšŒã¯æšæºã¢ãã«ã®èªèšŒé åºã«åŸããŸã(èªèšŒãããã¡ã€ã«ãOPENAI_API_KEY/GROQ_API_KEY/GEMINI_API_KEYãmodels.providers.*.apiKeyãªã©)ã
e226e24422c05e7e
28. {
tools: {
media: {
audio: {
enabled: true,
maxBytes: 20971520,
scope: {
default: "deny",
rules: [{ action: "allow", match: { chatType: "direct" } }],
},
models: [
{ provider: "openai", model: "gpt-4o-mini-transcribe" },
{ type: "cli", command: "whisper", args: ["--model", "base", "{{MediaPath}}"] },
],
},
video: {
enabled: true,
maxBytes: 52428800,
models: [{ provider: "google", model: "gemini-3-flash-preview" }],
},
},
},
}
agents.defaults.subagents ã¯ãµããšãŒãžã§ã³ãã®ããã©ã«ããèšå®ããŸãã
model: spawn ããããµããšãŒãžã§ã³ãã®ããã©ã«ãã¢ãã« (string or{ primary, fallbacks }). çç¥ãããå ŽåããµããšãŒãžã§ã³ãã¯ãšãŒãžã§ã³ãããšãŸãã¯åŒã³åºãããšã«äžæžããããªãéããåŒã³åºãå ã®ã¢ãã«ãç¶æ¿ããŸããmaxConcurrent: max concurrent sub-agent runs (default 1)archiveAfterMinutes: ãµããšãŒãžã§ã³ãã»ãã·ã§ã³ãNååŸã«èªåã¢ãŒã«ã€ãããŸãïŒããã©ã«ãã§ã¯60åã0ãç¡å¹ã«ããŸãïŒ- ãµããšãŒãžã§ã³ãæ¯ã®ããŒã«ããªã·ãŒ:
tools.subagents.tools.allow/tools.subagents.tools.deny(deny wins)
tools.profile 㯠tools.allow/tools.denyã®åã« base tools allowlist ãèšå®ããŸãã
minimal:session_statusã®ã¿coding:group:fs,group:runtime,group:sessions,group:memory,imagemessaging:group:messaging,sessions_list,sessions_history,sessions_send,session_statusfull: å¶éãªãïŒæªèšå®ãšåçïŒ
ãšãŒãžã§ã³ãæ¯ã®ãªãŒããŒã©ã€ã: agents.list[].tools.profile ã
äŸïŒæ¢å®ã¯ã¡ãã»ãŒãžã³ã°ã®ã¿ãSlack + Discord ããŒã«ãèš±å¯ïŒ:
{
tools: {
profile: "messaging",
allow: ["slack", "discord"],
},
}
äŸïŒã³ãŒãã£ã³ã°ãããã¡ã€ã«ã ããexec/process ããã¹ãŠæåŠïŒ:
{
tools: {
profile: "coding",
deny: ["group:runtime"],
},
}
tools.byProvider ã䜿çšãããšãç¹å®ã®ãããã€ã㌠(ãŸãã¯åäžã® provider/model ) ã«å¯ŸããŠã ãããªãå¶é ããŒã«ã䜿çšã§ããŸãã
ãšãŒãžã§ã³ãæ¯ã®ãªãŒããŒã©ã€ã: agents.list[].tools.byProvider
泚æ: ããŒã¹ãããã¡ã€ã« â ãããã€ããããã¡ã€ã« â ããªã·ãŒã®èš±å¯/æåŠã
ãããã€ãã®ããŒã¯ provider (äŸ: google-antigubity) ãŸã㯠provider/model
(äŸ: openai/gpt-5.2) ã®ãããããåãä»ããŸãã
äŸïŒã°ããŒãã«ã¯ã³ãŒãã£ã³ã°ãããã¡ã€ã«ãç¶æãã€ã€ãGoogle Antigravity ã§ã¯æå°éã®ããŒã«ïŒ:
{
tools: {
profile: "coding",
byProvider: {
"google-antigravity": { profile: "minimal" },
},
},
}
äŸ (provider/model-specific allowlist):
{
tools: {
allow: ["group:fs", "group:runtime", "sessions_list"],
byProvider: {
"openai/gpt-5.2": { allow: ["group:fs", "sessions_list"] },
},
},
}
tools.allow / tools.deny ã¯ã°ããŒãã«ããŒã«ã®allow/denyããªã·ãŒãèšå®ããŸãïŒdeny winsïŒã
ãããã³ã°ã¯å€§æåãšå°æåãåºå¥ããã* ã¯ã€ã«ãã«ãŒãïŒ"*"ã¯ãã¹ãŠã®ããŒã«ãæå³ããŸãïŒããµããŒãããŠããŸãã
ããã¯ãDocker Sandbox ã off ã®å Žåã§ãé©çšãããŸãã
äŸ (ãã©ãŠã¶/ãã£ã³ãã¹ãã©ãã§ãç¡å¹ã«ã§ããŸã):
{
tools: { deny: ["browser", "canvas"] },
}
ããŒã«ã°ã«ãŒã (ç¥) 㯠global ãš per-agent ããŒã«ããªã·ãŒã§åäœããŸãã
group:runtime:exec,bash,processgroup:fs:read,write,edit,apply_patchgroup:sessions:sessions_list,sessions_history,sessions_send,sessions_spawn,session_statusgroup:memory:memory_search,memory_getgroup:web:web_search,web_fetchgroup:ui:browser,canvasgroup:automation:cron,gatewaygroup:messaging:messagegroup:nodes:nodesgroup:openclaw: ãã¹ãŠã®çµã¿èŸŒã¿ OpenClaw ããŒã«ïŒãããã€ããŒãã©ã°ã€ã³ãé€ãïŒ
tools.elevated controls righted (host) exec access:
enabled: ææ Œã¢ãŒããèš±å¯ãã (ããã©ã«ã㯠true)allowFrom: per-channel allowlist (empty = disabled)whatsapp: E.164 numberstelegram: ãã£ãã IDãŸãã¯ãŠãŒã¶ãŒådiscord: ãŠãŒã¶ãŒ IDãŸãã¯ãŠãŒã¶ãŒå (çç¥ããå Žåã¯channels.discord.dm.allowFromã«æ»ããŸã)ã·ã°ãã«: E.164 numbersimessage: handles/chat idwebchat: ã»ãã·ã§ã³IDãŸãã¯ãŠãŒã¶ãŒå
v1
29. {
tools: {
elevated: {
enabled: true,
allowFrom: {
whatsapp: ["+15555550123"],
discord: ["steipete", "1234567890123"],
},
},
},
}
ãšãŒãžã§ã³ãæ¯ã®ãªãŒããŒã©ã€ã(ãããªãå¶é):
30. {
agents: {
list: [
{
id: "family",
tools: {
elevated: { enabled: false },
},
},
],
},
}
èšå®å ã§ã€ã³ã©ã€ã³ç°å¢å€æ°ãæå®ããããšãã§ããŸãããããã¯ãããã»ã¹ç°å¢ã«ããŒãååšããªãå Žåã«ã®ã¿é©çšãããŸãïŒåããäžæžãããŸããïŒã
tools.elevatedã¯ã°ããŒãã«ããŒã¹ã©ã€ã³ã§ããagents.list[].tools.elevatedã¯ãããã«å¶éããããšãã§ããŸã (äž¡æ¹ãšãèš±å¯ããå¿ èŠããããŸã)ã/äžã«ææ Œ|ãªã|ask|fullã¯ã»ãã·ã§ã³ããšã®ç¶æ ãä¿åããŸããã€ã³ã©ã€ã³ãã£ã¬ã¯ãã£ãã¯åäžã®ã¡ãã»ãŒãžã«é©çšãããŸããexecãé«ããªã£ãŠãã¹ãäžã§å®è¡ããããµã³ãããã¯ã¹åããã€ãã¹ãããŸãã- ããŒã«ããªã·ãŒãé©çšãããŸã;
execãæåŠãããå Žåãææ Œã¯äœ¿çšã§ããŸããã
agents.defaults.maxConcurrent ã¯ãã»ãã·ã§ã³éã§äžŠåã«
å®è¡ã§ããåã蟌ã¿ãšãŒãžã§ã³ãã®å®è¡æ°ãèšå®ããŸãã åã»ãã·ã§ã³ã¯ãŸã ã·ãªã¢ã«åãããŠããŸã(äžåºŠã«1ã€ã®ã»ãã·ã§ã³ããŒã«ã€ã1ã€ã®å®è¡
)ã ããã©ã«ã: 1.
agents.defaults.sandbox¶
åã蟌ã¿ãšãŒãžã§ã³ãçšã®ãªãã·ã§ã³ã® Docker ãµã³ãããã¯ã¹ ã§ãã ã¡ã€ã³ä»¥å€ã® ã»ãã·ã§ã³ã察象ãšããŠããªãããããã¹ãã·ã¹ãã ã«ã¢ã¯ã»ã¹ã§ããŸããã
詳现: Sandboxing
ããã©ã«ã (æå¹ãªå Žå):
- scope:
"agent"(1 container + workspace per agent) - Debian bookworm-slim based image
- ãã¡ã€ã«ãååšããªãå ŽåãOpenClaw ã¯å®å
šå¯ãã®ããã©ã«ãïŒçµã¿èŸŒã¿ Pi ãšãŒãžã§ã³ã + éä¿¡è
ããšã®ã»ãã·ã§ã³ + ã¯ãŒã¯ã¹ããŒã¹
~/.openclaw/workspaceïŒã䜿çšããŸããéåžžãèšå®ãå¿ èŠã«ãªãã®ã¯æ¬¡ã®å Žåã§ãã "none":~/.openclaw/sandboxesã®äžã§ã¹ã³ãŒãããšã®ãµã³ãããã¯ã¹ã¯ãŒã¯ã¹ããŒã¹ã䜿çšããŸã"ro": ãµã³ãããã¯ã¹ã®ã¯ãŒã¯ã¹ããŒã¹ã/workspaceã«ä¿ã¡ã/agentã§ãšãŒãžã§ã³ãã¯ãŒã¯ã¹ããŒã¹ãèªã¿åãå°çšã«ããŠã³ãããŸã (write/edit/apply_patch)"rw":/workspaceã§ãšãŒãžã§ã³ãã¯ãŒã¯ã¹ããŒã¹ãèªã¿æžããã- èªåãã«ãŒã³ïŒã¢ã€ãã« > 24 æé ãŸã㯠çµé > 7 æ¥
- tool policy: allow only
exec,process,read,write,edit,apply_patch,sessions_list,sessions_history,sessions_send,sessions_spawn,session_status(deny wins) tools.sandbox.toolsã䜿çšããŠèšå®ããagents.list[].tools.sandbox.toolsã䜿çšããŠãšãŒãžã§ã³ãããšã«äžæžããã- sandbox ããªã·ãŒã§ãµããŒããããŠããããŒã«ã°ã«ãŒãã®ç瞮圢:
group:runtime,group:fs,group:sessions,group:memory(Sandbox vs Tool Policy vs Elevated) ãåç §ããŠãã ããã - ãªãã·ã§ã³ã®ãµã³ãããã¯ã¹åãã©ãŠã¶ (Chromium + CDP, noVNC observer)
- ããã硬åããã:
network,user,pidsLimit,memory,cpus,ulimits,seccompProfile,apparmorProfile
èŠå: scope: "shared"ã¯å
±æã³ã³ãããšå
±æã¯ãŒã¯ã¹ããŒã¹ãæå³ããŸãã
ã»ãã·ã§ã³ééé¢ã¯ãããŸããã ã»ãã·ã§ã³ããšã®åé¢ã«ã¯scope: "session"` ã䜿çšããŸãã
ã¬ã¬ã·ãŒ: perSession ã¯ãŸã ãµããŒããããŠããŸã (true â scope: "session",
false â scope: "shared").
setupCommand ã¯ã³ã³ãããäœæãããåŸã« 1å å®è¡ãããŸã (sh -lcãä»ããŠã³ã³ããã®äžã«å
¥ããŸã)ã
ããã±ãŒãžãã€ã³ã¹ããŒã«ããå Žåã¯ããããã¯ãŒã¯ egressãæžã蟌ã¿å¯èœãªã«ãŒã FS ãããã³ root ãŠãŒã¶ãŒã確èªããŠãã ããã
31. {
agents: {
defaults: {
sandbox: {
mode: "non-main", // off | non-main | all
scope: "agent", // session | agent | shared (agent is default)
workspaceAccess: "none", // none | ro | rw
workspaceRoot: "~/.openclaw/sandboxes",
docker: {
image: "openclaw-sandbox:bookworm-slim",
containerPrefix: "openclaw-sbx-",
workdir: "/workspace",
readOnlyRoot: true,
tmpfs: ["/tmp", "/var/tmp", "/run"],
network: "none",
user: "1000:1000",
capDrop: ["ALL"],
env: { LANG: "C.UTF-8" },
setupCommand: "apt-get update && apt-get install -y git curl jq",
// Per-agent override (multi-agent): agents.list[].sandbox.docker.*
pidsLimit: 256,
memory: "1g",
memorySwap: "2g",
cpus: 1,
ulimits: {
nofile: { soft: 1024, hard: 2048 },
nproc: 256,
},
seccompProfile: "/path/to/seccomp.json",
apparmorProfile: "openclaw-sandbox",
dns: ["1.1.1.1", "8.8.8.8"],
extraHosts: ["internal.service:10.0.0.5"],
binds: ["/var/run/docker.sock:/var/run/docker.sock", "/home/user/source:/source:rw"],
},
browser: {
enabled: false,
image: "openclaw-sandbox-browser:bookworm-slim",
containerPrefix: "openclaw-sbx-browser-",
cdpPort: 9222,
vncPort: 5900,
noVncPort: 6080,
headless: false,
enableNoVnc: true,
allowHostControl: false,
allowedControlUrls: ["http://10.0.0.42:18791"],
allowedControlHosts: ["browser.lab.local", "10.0.0.42"],
allowedControlPorts: [18791],
autoStart: true,
autoStartTimeoutMs: 12000,
},
prune: {
idleHours: 24, // 0 disables idle pruning
maxAgeDays: 7, // 0 disables max-age pruning
},
},
},
},
tools: {
sandbox: {
tools: {
allow: [
"exec",
"process",
"read",
"write",
"edit",
"apply_patch",
"sessions_list",
"sessions_history",
"sessions_send",
"sessions_spawn",
"session_status",
],
deny: ["browser", "canvas", "nodes", "cron", "discord", "gateway"],
},
},
},
}
$include ãã£ã¬ã¯ãã£ãã䜿çšããŠãèšå®ãè€æ°ãã¡ã€ã«ã«åå²ã§ããŸããããã¯æ¬¡ã®çšéã«äŸ¿å©ã§ãã
scripts/sandbox-setup.sh
泚æ: Sandbox ã³ã³ããã¯ããã©ã«ãã§ network: "none" ã«èšå®ããŸãããšãŒãžã§ã³ãã®ã¢ãŠãããŠã³ãã¢ã¯ã»ã¹ãå¿
èŠãªå Žåã¯ãagents.defaults.sandbox.docker.network
ã« `bridge" (ãŸãã¯ã«ã¹ã¿ã ãããã¯ãŒã¯) ãèšå®ããŸãã
泚æ: åä¿¡æ·»ä»ãã¡ã€ã«ã¯ media/inbound/* ã®ã¢ã¯ãã£ããªã¯ãŒã¯ã¹ããŒã¹ã«ã¹ããŒãžãããŸãã workspaceAccess: "rw"ã§ã¯ããã¡ã€ã«ããšãŒãžã§ã³ãã®ã¯ãŒã¯ã¹ããŒã¹ã«æžã蟌ãŸããããšãæå³ããŸãã
泚æ: docker.binds ã¯ã远å ã®ãã¹ããã£ã¬ã¯ããªãããŠã³ãããŸããã°ããŒãã«ãšãšãŒãžã§ã³ãããšã®ãã€ã³ãã£ã³ã°ã¯ããŒãžãããŸãã
ãªãã·ã§ã³ã®ãã©ãŠã¶ãŒç»åã以äžã§äœæããŸãã
scripts/sandbox-browser-setup.sh
agents.defaults.sandbox.browser.enabled=true ã®å Žåããã©ãŠã¶ããŒã«ã¯ãµã³ãããã¯ã¹åããã
Chromium ã€ã³ã¹ã¿ã³ã¹ (CDP) ã䜿çšããŸãã noVNC ãæå¹ã«ãªã£ãŠããå Žå (headless=falseã®å Žåã®ããã©ã«ã)ã
noVNC URL ã¯ãšãŒãžã§ã³ããåç
§ã§ããããã«ã·ã¹ãã ããã³ããã«æ³šå
¥ãããŸãã
ã¡ã€ã³èšå®ã§ browser.enabled ã¯å¿
èŠãããŸãããsandbox control
URL ã¯ã»ãã·ã§ã³ããšã«æ³šå
¥ãããŸãã
agents.defaults.sandbox.browser.allowHostControlïŒæ¢å®å€: falseïŒãæå¹ã«ãããšããµã³ãããã¯ã¹åãããã»ãã·ã§ã³ãããã©ãŠã¶ããŒã«ïŒtarget: "host"ïŒãä»ã㊠ãã¹ã ã®ãã©ãŠã¶å¶åŸ¡ãµãŒããŒãæç€ºçã«å¯Ÿè±¡ã«ã§ããããã«ãªããŸãã 峿 Œãª ãµã³ãããã¯ã¹ã®åé¢ãå¿ èŠãªå Žåã¯ãããããªãã«ããŠãã ããã
ãªã¢ãŒãã³ã³ãããŒã«ã®èš±å¯ãªã¹ã:
allowedControlUrls:target: "custom"ã§èš±å¯ãããŠããæ£ç¢ºãªå¶åŸ¡URLãallowedControlHosts: èš±å¯ããããã¹ãå(ãã¹ãåã®ã¿ãããŒããªã)ãallowedControlPorts: ããŒãèš±å¯ (ããã©ã«ã: http=80, https=443)ã ããã©ã«ã: ãã¹ãŠã®èš±å¯ãªã¹ããæªèšå®ïŒå¶éãªãïŒã§ããallowHostControlã®ããã©ã«ã㯠false ã§ãã
models (ã«ã¹ã¿ã ãããã€ã㌠+ ããŒã¹ URL)¶
OpenClawã¯pi-coding-agentã¢ãã«ã«ã¿ãã°ã䜿çšããŠããŸãã ã«ã¹ã¿ã ãããã€ããŒ
(LiteLLMãããŒã«ã« OpenAI äºæãµãŒããŒãAnthropic ãããã·ãªã©) ã远å ã§ããŸãã
~/.openclaw/agents/<agentId>/agent/models.json ãæžããã models.providers ã®äžã«ãã
OpenClawèšå®å
ã§åãã¹ããŒããå®çŸ©ããããšã«ãã£ãŠã
ãããã€ãããšã®ãããã€ãã®æŠèŠ + äŸ: /concepts/model-providers
Gateway ã¯ãUI ãšãã£ã¿ãŒåãã«èšå®ã® JSON Schema 衚çŸã config.schema çµç±ã§å
¬éããŸãã
Control UI ã¯ãã®ã¹ããŒããããã©ãŒã ãçæãããšã¹ã±ãŒãããããšã㊠Raw JSON ãšãã£ã¿ãŒãæäŸããŸãã
- ããã©ã«ãã®åäœ: ããŒãž (æ¢åã®ãããã€ããä¿æããååãäžæžãããŸã)
models.mode: "replace"ãèšå®ããŠãã¡ã€ã«ã®å 容ãäžæžããã
agents.defaults.model.primary (provider/model) ã§ã¢ãã«ãéžæããŸãã
33. {
agents: {
defaults: {
model: { primary: "custom-proxy/llama-3.1-8b" },
models: {
"custom-proxy/llama-3.1-8b": {},
},
},
},
models: {
mode: "merge",
providers: {
"custom-proxy": {
baseUrl: "http://localhost:4000/v1",
apiKey: "LITELLM_KEY",
api: "openai-completions",
models: [
{
id: "llama-3.1-8b",
name: "Llama 3.1 8B",
reasoning: false,
input: ["text"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 128000,
maxTokens: 32000,
},
],
},
},
},
}
OpenCode Zen (ãã«ãã¢ãã« ãããã·)¶
OpenCode Zenã¯ãã¢ãã«ããšã®ãšã³ããã€ã³ããåãããã«ãã¢ãã«ã²ãŒããŠã§ã€ã§ãã 34. OpenClaw 㯠pi-ai ã®çµã¿èŸŒã¿ opencode ãããã€ããŒã䜿çšããŸããhttps://opencode.ai/auth ãã OPENCODE_API_KEYïŒãŸã㯠OPENCODE_ZEN_API_KEYïŒãèšå®ããŠãã ããã
ãã©ã¡ãŒã¿ïŒ
- model refs ã¯
opencode/<modelId>ã䜿çšããŸã(äŸ:opencode/claude-opus-4-6)ã agents.defaults.modelsã§èš±å¯ãªã¹ããæå¹ã«ããå Žåã¯ã䜿çšäºå®ã®åã¢ãã«ã远å ããŸãã- ã·ã§ãŒãã«ãã:
openclawãªã³ --auth-choice opencode-zenã
35. {
agents: {
defaults: {
model: { primary: "opencode/claude-opus-4-6" },
models: { "opencode/claude-opus-4-6": { alias: "Opus" } },
},
},
}
Z.AI (GLM-4.7) â ãããã€ããšã€ãªã¢ã¹ã®ãµããŒã¶
Z.AI ã¢ãã«ã¯ãçµã¿èŸŒã¿ã® zai ãããã€ããŒçµç±ã§å©çšã§ããŸãã ç°å¢ã§ ZAI_API_KEY
ãèšå®ãããããã€ã/ã¢ãã«ã§ã¢ãã«ãåç
§ããŸãã
ã·ã§ãŒãã«ãã: openclawon --auth-choice zai-api-key
{
agents: {
defaults: {
model: { primary: "zai/glm-4.7" },
models: { "zai/glm-4.7": {} },
},
},
}
ãã¹ããããã€ã³ã¯ã«ãŒã
z.ai/*ãšz-ai/*ã¯ãšã€ãªã¢ã¹ãšããŠåãå ¥ããããzai/*ã«æ£èŠåãããŸããZAI_API_KEYãèŠã€ãããªãå Žåãzai/*ãžã®ãªã¯ãšã¹ãã¯å®è¡æã«èªèšŒãšã©ãŒã§å€±æããŸãã- äŸãšã©ãŒ:
ãããã€ã㌠"zai" ã® API ããŒãèŠã€ãããŸããã - Z.AI ã®äžè¬ç㪠API ãšã³ããã€ã³ãã¯
https://api.z.ai/api/paas/v4ã§ãã GLMã³ãŒãã£ã³ã° ãªã¯ãšã¹ãã¯å°çšã®ã³ãŒãã£ã³ã°ãšã³ããã€ã³ãhttps://api.zai/api/coding/paas/v4ã䜿çšããŸãã çµã¿èŸŒã¿ã®zaiãããã€ãã¯ã³ãŒãã£ã³ã°ãšã³ããã€ã³ãã䜿çšããŸãã äžè¬ç㪠ãšã³ããã€ã³ããå¿ èŠãªå Žåã¯ãããŒã¹ URL ããªãŒããŒã©ã€ãããmodels.providersã®ã«ã¹ã¿ã ãããã€ããå®çŸ©ããŸã (äžã®ã«ã¹ã¿ã ãããã€ãã»ã¯ã·ã§ã³ãåç §ããŠãã ãã)ã - docs/configsã§åœã®ãã¬ãŒã¹ãã«ãã䜿çšããŠãã ãããå®éã®APIããŒã¯ã³ãããããªãã§ãã ããã
Moonshot AIïŒKimiïŒÂ¶
Moonshot ã® OpenAI äºæãšã³ããã€ã³ãã䜿çš:
36. {
env: { MOONSHOT_API_KEY: "sk-..." },
agents: {
defaults: {
model: { primary: "moonshot/kimi-k2.5" },
models: { "moonshot/kimi-k2.5": { alias: "Kimi K2.5" } },
},
},
models: {
mode: "merge",
providers: {
moonshot: {
baseUrl: "https://api.moonshot.ai/v1",
apiKey: "${MOONSHOT_API_KEY}",
api: "openai-completions",
models: [
{
id: "kimi-k2.5",
name: "Kimi K2.5",
reasoning: false,
input: ["text"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 256000,
maxTokens: 8192,
},
],
},
},
},
}
é åã¯çœ®æ
- ç°å¢ã§
MOONSHOT_API_KEYãèšå®ããããopenclawãªã³ --auth-choice moonshot-api-keyã䜿çšããŸãã - Model ref:
moonshot/kimi-k2.5 - äžåœã®ãšã³ããã€ã³ãã®ãããã:
openclawãªã³ --auth-choice moonshot-api-key-cnãå®è¡ããŸã (ãŠã£ã¶ãŒãã¯https://api.moonshot.cn/v1ãèšå®ããŸã)ãmodels.providers.moonshotã«baseUrl: "https://api.moonshot.cn/v1"ãæåã§èšå®ããŸãã
Kimi Coding¶
Moonshot AIã®ããã³ãŒãã£ã³ã°ãšã³ããã€ã³ãã䜿çšïŒã¢ã³ããããŒäºæãçµã¿èŸŒã¿ãããã€ããŒïŒïŒ
{
env: { KIMI_API_KEY: "sk-..." },
agents: {
defaults: {
model: { primary: "kimi-coding/k2p5" },
models: { "kimi-coding/k2p5": { alias: "Kimi K2.5" } },
},
},
}
泚èšïŒ
- ç°å¢ã§
KIMI_API_KEYãèšå®ããããopenclawãªã³ --auth-choice kimi-code-api-keyã䜿çšããŸãã - Model ref:
kimi-coding/k2p5
åæïŒAnthropicäºæïŒÂ¶
Syntheticã®Anthropicäºæãšã³ããã€ã³ãã䜿çšããŠãã ãã:
{
env: { SYNTHETIC_API_KEY: "sk-..." },
agents: {
defaults: {
model: { primary: "synthetic/hf:MiniMaxAI/MiniMax-M2.1" },
models: { "synthetic/hf:MiniMaxAI/MiniMax-M2.1": { alias: "MiniMax M2.1" } },
},
},
models: {
mode: "merge",
providers: {
synthetic: {
baseUrl: "https://api.synthetic.new/anthropic",
apiKey: "${SYNTHETIC_API_KEY}",
api: "anthropic-messages",
models: [
{
id: "hf:MiniMaxAI/MiniMax-M2.1",
name: "MiniMax M2.1",
reasoning: false,
input: ["text"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 192000,
maxTokens: 65536,
},
],
},
},
},
}
gpt-5.2-chat-latest
SYNTHETIC_API_KEYãèšå®ããããopenclawãªã³ --auth-choice synthetic-api-keyã䜿çšããŠãã ããã- Model ref:
synthetic/hf:MiniMaxAI/MiniMax-M2.1 - Anthropic ã¯ã©ã€ã¢ã³ãã远å ãããããBase URL ã¯
/v1ãçç¥ããŠãã ããã
ããŒã«ã«ã¢ãã« (LMã¹ã¿ãžãª) â æšå¥šèšå®Â¶
çŸåšã®ããŒã«ã«ã¬ã€ãã³ã¹ã«ã€ããŠã¯ã/gateway/local-models ãåç §ããŠãã ããã TL;DR: LM Studio Responses API ãä»ã㊠MiniMax M2.1 ãæ·±å»ãªããŒããŠã§ã¢äžã§å®è¡ãããã¹ããããã¢ãã«ããã©ãŒã«ããã¯ã®ããã«ããŒãžãç¶ããŸãã
MiniMax M2.1¶
LMã¹ã¿ãžãªãªãã§MiniMax M2.1ãçŽæ¥äœ¿çš:
37. {
agent: {
model: { primary: "minimax/MiniMax-M2.1" },
models: {
"anthropic/claude-opus-4-6": { alias: "Opus" },
"minimax/MiniMax-M2.1": { alias: "Minimax" },
},
},
models: {
mode: "merge",
providers: {
minimax: {
baseUrl: "https://api.minimax.io/anthropic",
apiKey: "${MINIMAX_API_KEY}",
api: "anthropic-messages",
models: [
{
id: "MiniMax-M2.1",
name: "MiniMax M2.1",
reasoning: false,
input: ["text"],
// Pricing: update in models.json if you need exact cost tracking.
cost: { input: 15, output: 60, cacheRead: 2, cacheWrite: 10 },
contextWindow: 200000,
maxTokens: 8192,
},
],
},
},
},
}
äžæžãïŒ
MINIMAX_API_KEYç°å¢å€æ°ãèšå®ããããopenclawãªã³ --auth-choice minimax-apiã䜿çšããŠãã ããã- å©çšå¯èœãªã¢ãã«:
MiniMax-M2.1(ããã©ã«ã)ã - æ£ç¢ºãªã³ã¹ããã©ããã³ã°ãå¿
èŠãªå Žåã¯ã
models.jsonã§äŸ¡æ ŒãæŽæ°ããŠãã ããã
Cerebras (GLM 4.6 / 4.7)¶
OpenAI察å¿ãšã³ããã€ã³ãçµç±ã§Cerebraã䜿çš:
38. {
env: { CEREBRAS_API_KEY: "sk-..." },
agents: {
defaults: {
model: {
primary: "cerebras/zai-glm-4.7",
fallbacks: ["cerebras/zai-glm-4.6"],
},
models: {
"cerebras/zai-glm-4.7": { alias: "GLM 4.7 (Cerebras)" },
"cerebras/zai-glm-4.6": { alias: "GLM 4.6 (Cerebras)" },
},
},
},
models: {
mode: "merge",
providers: {
cerebras: {
baseUrl: "https://api.cerebras.ai/v1",
apiKey: "${CEREBRAS_API_KEY}",
api: "openai-completions",
models: [
{ id: "zai-glm-4.7", name: "GLM 4.7 (Cerebras)" },
{ id: "zai-glm-4.6", name: "GLM 4.6 (Cerebras)" },
],
},
},
},
}
config.apply ã䜿çšãããšãèšå®å
šäœãæ€èšŒã»æžã蟌ã¿ãã1 ã¹ãããã§ Gateway ãåèµ·åã§ããŸãã
åèµ·åã»ã³ããã«ãæžã蟌ã¿ãGateway 埩垰åŸã«æåŸã«ã¢ã¯ãã£ãã ã£ãã»ãã·ã§ã³ãž ping ãéä¿¡ããŸãã
- Cerebrasã«ã¯
倧è³/zai-glm-4.7ã䜿çšããŸããZ.AIãã€ã¬ã¯ãã«ã¯zai/glm-4.7ã䜿çšããŸãã - ç°å¢ãŸã㯠config ã§
CEREBRAS_API_KEYãèšå®ããŸãã
èšå®å ã§ã€ã³ã©ã€ã³ç°å¢å€æ°ãæå®ããããšãã§ããŸãããããã¯ãããã»ã¹ç°å¢ã«ããŒãååšããªãå Žåã«ã®ã¿é©çšãããŸãïŒåããäžæžãããŸããïŒã
- ãµããŒããããŠããAPI:
openai-completionsãopenai-responsesãanthropic-messagesãgoogle-generative-ai - ã«ã¹ã¿ã èªèšŒã«ã¯ã
authHeader: true+headersã䜿çšããŸãã - èŠåïŒ
config.apply㯠èšå®å šäœ ã眮ãæããŸãã
äžéšã®ããŒã®ã¿ã倿Žãããå Žåã¯ãconfig.patchãŸãã¯openclaw config setã䜿çšããŠãã ããã
~/.openclaw/openclaw.jsonã®ããã¯ã¢ãããä¿æããŠãã ããã
ã»ãã·ã§ã³Â¶
ã»ãã·ã§ã³ã¹ã³ãŒãããªã»ããããªã·ãŒããªã»ããããªã¬ãŒãããã³ã»ãã·ã§ã³ã¹ãã¢ãæžã蟌ãŸããå Žæãå¶åŸ¡ããŸãã
{
session: {
scope: "per-sender",
dmScope: "main",
identityLinks: {
alice: ["telegram:123456789", "discord:987654321012345678"],
},
reset: {
mode: "daily",
atHour: 4,
idleMinutes: 60,
},
resetByType: {
thread: { mode: "daily", atHour: 4 },
direct: { mode: "idle", idleMinutes: 240 },
group: { mode: "idle", idleMinutes: 120 },
},
resetTriggers: ["/new", "/reset"],
// æ¢å®ã§ã¯ ~/.openclaw/agents/<agentId>/sessions/sessions.json ã®ãšãŒãžã§ã³ãåäœ
// {agentId} ãã³ãã¬ãŒãã§äžæžãã§ããŸã:
store: "~/.openclaw/agents/{agentId}/sessions/sessions.json",
// ãã€ã¬ã¯ããã£ãã㯠agent:<agentId>:<mainKey> ã«éçŽãããŸãïŒæ¢å®: "main"ïŒã
mainKey: "main",
agentToAgent: {
// ãªã¯ãšã¹ã¿ãŒïŒã¿ãŒã²ããéã®æå€§ãã³ãã³è¿ä¿¡ã¿ãŒã³æ°ïŒ0â5ïŒã
maxPingPongTurns: 5,
},
sendPolicy: {
rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }],
default: "allow",
},
},
}
ãã£ãŒã«ãïŒ
mainKey: çŽæ¥ãã£ãããã±ããã㌠(ããã©ã«ã:"main")ãagentIdã倿Žããã«ãã©ã€ããªDMã¹ã¬ããããååã倿Žããããå Žåã«äŸ¿å©ã§ãã- Sandbox note:
agents.defaults.sandbox.mode: "non-main"ã¯ãã®ããŒã䜿çšããŠã¡ã€ã³ã»ãã·ã§ã³ãæ€åºããŸããmainKey(groups/channels) ãšäžèŽããªãã»ãã·ã§ã³ããŒã¯ãã¹ãŠãµã³ãããã¯ã¹åãããŠããŸãã dmScope: DM ã»ãã·ã§ã³ãã°ã«ãŒãåãããæ¹æ³ (ããã©ã«ã:"main")ãmain: ãã¹ãŠã®DMãç¶ç¶æ§ã®ããã®ã¡ã€ã³ã»ãã·ã§ã³ãå ±æããŸããper-peer: ãã£ã³ãã«éã®éä¿¡è IDã§DMãåé¢ããŸããper-channel-peer: ãã£ã³ãã«ããšã®DMãšéä¿¡è ãåé¢ããŸã(ãã«ããŠãŒã¶ãŒåä¿¡ããã¯ã¹ã«æšå¥š)ãper-account-channel-peer: ã¢ã«ãŠã³ã+ãã£ã³ãã«+éä¿¡è ãããã®DMãéé¢ããŸã (ãã«ãã¢ã«ãŠã³ãåä¿¡ããã¯ã¹ã«æšå¥š)ã- ã»ãã¥ã¢DMã¢ãŒã(æšå¥š):
session.dmScope: "per-channel-peer"ãèšå®ããŸããè€æ°ã®äººãBotïŒå ±æã€ã³ããã¯ã¹ããã«ãå人蚱å¯ãªã¹ãããŸãã¯dmPolicy: "open"ïŒãDMã§ããããã«ããŸãã identityLinks:per-peerãper-channel-peerãper-channel-peerãper-account-channel-peerã䜿çšãããšãåã人ããã£ã³ãã«éã§DMã»ãã·ã§ã³ãå ±æããããã«ããŸãã- äŸ:
alice: ["telegram:123456789", "discord:987654321012345678"]ã reset: primary reset policy ã²ãŒããŠã§ã€ãã¹ãã®ããŒã«ã«æéåå4æã«ãããã©ã«ãã§ã¯æ¯æ¥ãªã»ãããããŸããmode:dailyãŸãã¯idle(ããã©ã«ã:resetãååšããå Žåã¯daily)ãatHour: æ¯æ¥ã®ãªã»ããå¢çã® ããŒã«ã«æé (0-23) ãidleMinutes: ã¢ã€ãã«ãŠã£ã³ããŠãååäœã§ã¹ã©ã€ããã æ¯æ¥+ã¢ã€ãã«ãèšå®ãããŠããå Žåãããããã®æ¹ãæåã®åå©ã«å€±å¹ããŸããresetByType:directãgroupãthreadããšã®ã»ãã·ã§ã³åäœã®äžæžãã ã¬ã¬ã·ãŒã®dmããŒã¯directã®ãšã€ãªã¢ã¹ãšããŠåãä»ããããŸãã- ã¬ã¬ã·ãŒã®
session.idleMinutesãreset/resetByTypeãèšå®ããªãå ŽåãåŸæ¹äºææ§ã®ããã«OpenClawã¯ã¢ã€ãã«ã®ã¿ã®ã¢ãŒãã«çãŸããŸãã heartbeatIdleMinutes: ããŒãããŒããã§ãã¯ã®ã¢ã€ãã«ãªãŒããŒã©ã€ããªãã·ã§ã³ïŒæå¹ã«ãããšãã€ãªãŒãªã»ãããé©çšãããŸãïŒãagentToAgent.maxPingPongTurns: requester/target (0â5, default 5) ã®éã§æå€§å¿çãè¿ãããŸããsendPolicy.default: ã«ãŒã«ãäžèŽããªãå ŽåãallowãŸãã¯denyãã©ãŒã«ããã¯ãsendPolicy.rules[]:channel,chatType(direct|group|room), orkeyPrefix(äŸ:cron:). æåã®æåŠãåå©ããŸã; ããã§ãªããã°èš±å¯ããŸãã
skills (skillsconfig)¶
- ãã³ãã«ãããèš±å¯ãªã¹ããã€ã³ã¹ããŒã«èšå®ã远å ã®ã¹ãã«ãã©ã«ããŒãããã³ã¹ãã«ããšã®äžæžããå¶åŸ¡ããŸãã ãã³ãã«ã¹ãã«ãš
~/.openclaw/skillsã«é©çšãããŸãïŒã¯ãŒã¯ã¹ããŒã¹ã¹ãã« ã¯ååã®ç«¶åã§åå©ããŸãïŒã
ãã£ãŒã«ãïŒ
allowBundledïŒå梱 skills ã®ã¿ã察象ãšããä»»æã®èš±å¯ãªã¹ããèšå®ãããŠããå Žåããªã¹ãå ã®å梱 skills ã®ã¿ãæå¹ã«ãªããŸãïŒãããŒãžãïŒã¯ãŒã¯ã¹ããŒã¹ skills ã«ã¯åœ±é¿ããŸããïŒã èšå®ãããŠããå Žåã ãã³ãã«ãããã¹ãã«ã®ã¿ã察象ãšãªããŸã(管çã¹ãã«/ã¯ãŒã¯ã¹ããŒã¹ã¹ãã«ã¯åœ±é¿ãåããŸãã)ãload.extraDirs: ã¹ãã£ã³å¯Ÿè±¡ãšãã远å ã® Skill ãã£ã¬ã¯ããªïŒåªå åºŠã¯æãäœãïŒãinstall.preferBrew: å©çšå¯èœãªå Žåã« brew ã€ã³ã¹ããŒã©ãŒãåªå ããŸãïŒããã©ã«ã: trueïŒãinstall.nodeManager: node installer preference(npm|pnpm|yarn, default: npm).entries.<skillKey>: ã¹ãã«ããšã®èšå®ãäžæžããããŸãã
Skill ããšã®ãã£ãŒã«ã:
enabled:falseãèšå®ãããšã忢±ïŒã€ã³ã¹ããŒã«æžã¿ã§ãã£ãŠã Skill ãç¡å¹åããŸããenv: ãšãŒãžã§ã³ãå®è¡æã«æ³šå ¥ãããç°å¢å€æ°ïŒæªèšå®ã®å Žåã®ã¿ïŒãapiKey: ãã©ã€ããªenvã宣èšããã¹ãã«ã®ãªãã·ã§ã³ã®å©äŸ¿æ§ïŒäŸ:nano-banana-proâGEMINI_API_KEYïŒã
äŸïŒ
{
skills: {
allowBundled: ["gemini", "peekaboo"],
load: {
extraDirs: ["~/Projects/agent-scripts/skills", "~/Projects/oss/some-skill-pack/skills"],
},
install: {
preferBrew: true,
nodeManager: "npm",
},
entries: {
"nano-banana-pro": {
apiKey: "GEMINI_KEY_HERE",
env: {
GEMINI_API_KEY: "GEMINI_KEY_HERE",
},
},
peekaboo: { enabled: true },
sag: { enabled: false },
},
},
}
plugins (extensions)¶
ãã©ã°ã€ã³ã®æ€åºãèš±å¯/æåŠãããã³ãã©ã°ã€ã³ããšã®èšå®ãå¶åŸ¡ããŸãã ãã©ã°ã€ã³ã¯ ~/.openclaw/extensions ãã
èªã¿èŸŒãŸããŸãã<workspace>/.openclaw/extensions ã«å ããŠã
plugins.load.paths ãšã³ããªããããŸãã èšå®ã®å€æŽã«ã¯ã²ãŒããŠã§ã€ã®åèµ·åãå¿
èŠã§ãã
å®å
šã«äœ¿çšããã«ã¯ /plugin ãåç
§ããŠãã ããã
ãã£ãŒã«ãïŒ
enabled: ãã©ã°ã€ã³ã®èªã¿èŸŒã¿ããã¹ã¿ãŒåãæ¿ããŸã (ããã©ã«ã: true)ãallow: ãªãã·ã§ã³ã®ãã©ã°ã€ã³IDã®allowlist; èšå®ãããå Žåããªã¹ãããããã©ã°ã€ã³ã®ã¿ãããŒããããŸããdeny: ãªãã·ã§ã³ã®ãã©ã°ã€ã³IDã®denylist(denylist)ã§ããload.paths: 远å ã®ãã©ã°ã€ã³ãã¡ã€ã«ãŸãã¯ããŒããããã£ã¬ã¯ã㪠(absolute ãŸãã¯~) ãentries.<pluginId>: ãã©ã°ã€ã³ããšã®ãªãŒããŒã©ã€ããenabled:falseãç¡å¹ã«ããŸããconfig: ãã©ã°ã€ã³åºæã®èšå®ãªããžã§ã¯ã (æå®ãããå Žåããã©ã°ã€ã³ã«ãã£ãŠæ€èšŒãããŸã)ã
ç°å¢å€æ° + .env
{
plugins: {
enabled: true,
allow: ["voice-call"],
load: {
paths: ["~/Projects/oss/voice-call-extension"],
},
entries: {
"voice-call": {
enabled: true,
config: {
provider: "twilio",
},
},
},
},
}
browser (openclaw-managed browser)¶
OpenClawã¯ãªãŒãã³ã¯ããŒã®ããã®å°çšã®ãåé¢ããã Chrome/Brave/Edge/Chromiumã€ã³ã¹ã¿ã³ã¹ãéå§ããå°ããªã«ãŒãããã¯å¶åŸ¡ãµãŒãã¹ãå
¬éããããšãã§ããŸãã
ãããã¡ã€ã«ã¯ãprofilesïŒãããã¡ã€ã«ïŒãä»ããŠ**ãªã¢ãŒã** ChromiumããŒã¹ã®ãã©ãŠã¶ãæãããšãã§ããŸãã<name>.cdpUrlã ãªã¢ãŒã
ãããã¡ã€ã«ã¯ã¢ã¿ããã®ã¿ã®ãããã¡ã€ã«ã§ãïŒéå§/忢/ãªã»ããã¯ç¡å¹ã§ãïŒã
browser.cdpUrl ã¯ãã¬ã¬ã·ãŒåäžãããã¡ã€ã«ã®èšå®ã§ãcdpPortã®ã¿ãèšå®ãããããã¡ã€ã«ã®ããŒã¹
ã¹ããŒã /ãã¹ããšããŠæ®ããŸãã
æ¢å®ïŒ
- æå¹:
true - evaluateEnabled:
true(falseãèšå®ãããšact:evaluateãšwait --fn) - å¶åŸ¡ãµãŒãã¹: loopback only (
gateway.portããæŽŸçããããŒã, ããã©ã«ã18791) - CDP URL:
http://127.0.0.1:18792(å¶åŸ¡ãµãŒãã¹ + 1ãã¬ã¬ã·ãŒã·ã³ã°ã«ãããã¡ã€ã«) - profile color:
#FF4500(lobster-orange) - 泚æ: å¶åŸ¡ãµãŒãã¯å®è¡äžã®ã²ãŒããŠã§ã€ (OpenClaw.app menubarããŸãã¯
openclawã²ãŒããŠã§ã€) ã«ãã£ãŠèµ·åãããŸãã - èªåæ€åº: Chromium ããŒã¹ã®å Žåã¯æ¢å®ã®ãã©ãŠã¶; ããã§ãªãå Žå㯠Chrome â Brave â Edge â Chromium â Chrome Canary ã
{
browser: {
enabled: true,
evaluateEnabled: true,
// cdpUrl: "http://127.0.0.1:18792", // legacy single-profile override
defaultProfile: "chrome",
profiles: {
openclaw: { cdpPort: 18800, color: "#FF4500" },
work: { cdpPort: 18801, color: "#0066CC" },
remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" },
},
color: "#FF4500",
// Advanced:
// headless: false,
// noSandbox: false,
// executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
// attachOnly: false, // set true when tunneling a remote CDP to localhost
},
}
uiïŒå€èгïŒÂ¶
UIã¯ãã ã®ãã€ãã£ãã¢ããªã§äœ¿çšãããä»»æã®ã¢ã¯ã»ã³ãã«ã©ãŒ(äŸ:ããŒã¯ã¢ãŒãããã«ã®è²)ã
æªèšå®ã®å Žåãã¯ã©ã€ã¢ã³ãã¯ãã¥ãŒããããã©ã€ããã«ãŒã«æ»ããŸãã
{
ui: {
seamColor: "#FF4500", // hex (RRGGBB or #RRGGBB)
// Optional: Control UI assistant identity override.
// If unset, the Control UI uses the active agent identity (config or IDENTITY.md).
assistant: {
name: "OpenClaw",
avatar: "CB", // emoji, short text, or image URL/data URI
},
},
}
gateway (ã²ãŒããŠã§ã€ãµãŒããŒã¢ãŒã + bind)¶
ãã®ãã·ã³ãGatewayãå®è¡ãããã©ãããæç€ºçã«å®£èšããã«ã¯ã gateway.mode ã䜿çšããŸãã
æ¢å®ïŒ
- ã¢ãŒã: unset (ãèªåèµ·åããªãããšããŠæ±ãããŸã)
- bind:
loopback - port:
18789(WS + HTTPã®åäžããŒã)
{
gateway: {
mode: "local", // or "remote"
port: 18789, // WS + HTTP multiplex
bind: "loopback",
// controlUi: { enabled: true, basePath: "/openclaw" }
// auth: { mode: "token", token: "your-token" } // token gates WS + Control UI access
// tailscale: { mode: "off" | "serve" | "funnel" }
},
}
UIããŒã¹ãã¹ã®å¶åŸ¡:
gateway.controlUi.basePathã¯ãControl UI ãæäŸãããURLãã¬ãã£ãã¯ã¹ãèšå®ããŸãã- äŸ:
"/ui","/openclaw","/apps/openclaw". - ããã©ã«ã: root (
/) (倿Žãªã)ã gateway.controlUi.root㯠Control UI ã¢ã»ããã®ãã¡ã€ã«ã·ã¹ãã ã«ãŒããèšå®ããŸã (ããã©ã«ã:dist/control-ui)ãgateway.controlUi.allowInsecureAuthã¯ã ããã€ã¹IDãçç¥ããããšã(é垞㯠HTTP äž)ã«å¶åŸ¡UIã®ããŒã¯ã³å°çšã®èªèšŒãèš±å¯ããŸãã ããã©ã«ã:falseHTTPS (Tailscale Serve) ãŸãã¯127.0.0.1ãåªå ããŸããgateway.controlUi.dangerouslyDisableDeviceAuth㯠Control UI (ããŒã¯ã³/ãã¹ã¯ãŒãã®ã¿) ã®ããã€ã¹èå¥ãã§ãã¯ãç¡å¹ã«ããŸãã ããã©ã«ã:falseãã¬ã€ã¯ã°ã©ã¹ã®ã¿
é¢é£ããã¥ã¡ã³ãïŒ
ä¿¡é Œããããããã·:
gateway.trustedProxies: ã²ãŒããŠã§ã€ã®åã§ TLS ãçµäºããããªããŒã¹ãããã· IP ã®ãªã¹ãã- ãããã®IPã®ããããããæ¥ç¶ãããå Žå OpenClawã¯
x-forwarded-for(ãŸãã¯x-real-ip)ã䜿çšããŠãããŒã«ã«ãã¢ãªã³ã°ãã§ãã¯ãšHTTPèªèšŒ/ããŒã«ã«ãã§ãã¯ã®ã¯ã©ã€ã¢ã³ãIPãæ±ºå®ããŸãã - ãããã·ã®ã¿ãå®å
šã«å¶åŸ¡ãã
x-forwarded-forã®çä¿¡ãäžæžãããŠãã ããã
ç°å¢å€æ°ã§ã®æå®ïŒ
gateway.modeãlocalã«èšå®ãããŠããªãéããopenclawã²ãŒããŠã§ã€ã¯èµ·åãæåŠããŸã(ãŸãã¯ãªãŒããŒã©ã€ããã©ã°ãæž¡ããŸã)ãgateway.portã¯ãWebSocket + HTTP (å¶åŸ¡UIãããã¯ãA2UI)ã«äœ¿çšãããåäžã®å€éåããŒããå¶åŸ¡ããŸãã- OpenAI ãã£ããå®äºãšã³ããã€ã³ã: ããã©ã«ãã§ç¡å¹;
gateway.http.endpoints.chatCompletions.enabled: trueã§æå¹ã«ããŸãã - åæ:
--port>OPENCLAW_GATEWAY_PORT>gateway.port> ããã©ã«ãã®18789ã - ã²ãŒããŠã§ã€èªèšŒã¯ããã©ã«ãã§å¿ èŠã§ã(token/password ãŸã㯠Tailscale Serve ID)ã éã«ãŒãããã¯ãã€ã³ãã£ã³ã°ã«ã¯å ±æããŒã¯ã³/ãã¹ã¯ãŒããå¿ èŠã§ãã
- ãªã³ããŒãã£ã³ã° ãŠã£ã¶ãŒãã¯ã(ã«ãŒãããã¯æã§ã) ããã©ã«ãã§ã²ãŒããŠã§ã€ ããŒã¯ã³ãçæããŸãã
gateway.remote.tokenã¯ããªã¢ãŒãCLIåŒã³åºãã«å¯ŸããŠã®ã¿**ã§ããããŒã«ã«ã²ãŒããŠã§ã€èªèšŒãæå¹ã«ããŸãããgateway.tokenã¯ç¡èŠãããŸãã
èªèšŒãšããŒã«ã¹ã±ãŒã«:
gateway.auth.modeã¯ãã³ãã·ã§ã€ã¯èŠä»¶ (tokenãŸãã¯password) ãèšå®ããŸãã æªèšå®ã®å ŽåãããŒã¯ã³èªèšŒã¯ä»®å®ãããŸããgateway.auth.tokenã«ã¯ããŒã¯ã³èªèšŒçšã®å ±æããŒã¯ã³ãæ ŒçŽãããŠããŸã (CLIã«ãã£ãŠåããã·ã³äžã§äœ¿çšãããŸã)ãgateway.auth.modeãèšå®ãããŠããå Žåã¯ããã®ã¡ãœããã®ã¿ãåãä»ããããŸã (ãªãã·ã§ã³ã® Tailscale ããããŒãå ããŠãã ãã)ãgateway.auth.passwordã¯ããã«èšå®ããããOPENCLAW_GATEWAY_PASSWORDïŒæšå¥šïŒ ãä»ããŠèšå®ã§ããŸããgateway.auth.allowTailscaleã¯ããªã¯ãšã¹ããã«ãŒãããã¯ã«å°éããx-forwarded-forãx-forwarded-protoãx-forwarded-hostãä»äžãããŠããå Žåã«ãTailscale Serve ã® ID ããããŒïŒtailscale-user-loginïŒãèªèšŒãšããŠæºããããšãèš±å¯ããŸãã OpenClaw ã¯ãtailscale whoisãä»ããŠx-forwarded-forã¢ãã¬ã¹ã解決ããŠèº«å ã確èªããŸããtrueã®å ŽåãServe ãªã¯ãšã¹ãã«ã¯ããŒã¯ã³ïŒãã¹ã¯ãŒãã¯äžèŠã§ããæç€ºçãªè³æ Œæ å ±ãèŠæ±ããã«ã¯falseã«èšå®ããŠãã ããã ããã©ã«ãã¯trueã§ãtailscale.mode = "serve"ãš auth ã¢ãŒããpasswordã§ã¯ãããŸãããgateway.tailscale.mode: "serve"㯠Tailscale Serve (tailnet only loopback bind) ã䜿çšããŸããgateway.tailscale.mode: "funnel"ã¯ããã·ã¥ããŒããå ¬éããŸããauth ãå¿ èŠã§ããgateway.tailscale.resetOnExitã·ã£ããããŠã³æã«Serve/Funnelèšå®ããªã»ããããŸãã
ãªã¢ãŒãã¯ã©ã€ã¢ã³ãã®ããã©ã«ã (CLI):
gateway.remote.urlã¯ãgateway.mode = "remote"ã®ãšãã«CLIã³ãŒã«ã®ããã©ã«ãã®ã²ãŒããŠã§ã€WebSocket URLãèšå®ããŸããgateway.remote.transportã¯macOSã®ãªã¢ãŒããã©ã³ã¹ããŒããéžæããŸã (sshããã©ã«ããdirectfor ws/ws)ãdirectã®å Žåãgateway.remote.urlã¯ws://ãŸãã¯wss://ã§ãªããã°ãªããŸãããws://hostã®ããã©ã«ãã¯18789ã§ããgateway.remote.tokenã¯ããªã¢ãŒãåŒã³åºãã®ããŒã¯ã³ãæäŸããŸã (èªèšŒãªãã§ unset ã®ãŸãŸã«ããŸã)ãgateway.remote.passwordã¯ãªã¢ãŒãåŒã³åºãã®ãã¹ã¯ãŒããæäŸããŸã (èªèšŒãªãã§æªèšå®ã®ãŸãŸã«ããŠãã ãã)ã
macOS ã¢ããªã®åäœ:
- OpenClaw.app ã¯
~/.openclaw/openclaw.jsonãç£èŠããgateway.modeãŸãã¯gateway.remote.urlã倿Žããããšãã«ã¹ã€ããã¢ãŒããåäœããŸãã gateway.modeã unset ãããŠããŠãgateway.remote.urlãèšå®ãããŠããå ŽåãmacOS ã¢ããªã¯ãªã¢ãŒãã¢ãŒããšããŠæ±ããŸãã- macOS ã¢ããªã§æ¥ç¶ã¢ãŒãã倿Žãããšã
gateway.mode(ããã³gateway.remote.url+gateway.remote.transport)ãèšå®ãã¡ã€ã«ã«æžãæ»ããŸãã
{
gateway: {
mode: "remote",
remote: {
url: "ws://gateway.tailnet:18789",
token: "your-token",
password: "your-password",
},
},
}
ãã€ã¬ã¯ã転éã®äŸ (macOS ã¢ããª)
{
gateway: {
mode: "remote",
remote: {
transport: "direct",
url: "wss://gateway.example.ts.net",
token: "your-token",
},
},
}
gateway.reload (Config hot reload)¶
ã²ãŒããŠã§ã€ã¯ ~/.openclaw/openclaw.json (ãŸã㯠OPENCLAW_CONFIG_PATH ) ãç£èŠãã倿Žãèªåçã«é©çšããŸãã
ã¢ãŒã:
hybrid(default): ãããé©çšã®å®å šãªå€æŽãéèŠãªå€æŽãããå Žåã¯ã²ãŒããŠã§ã€ãåèµ·åããŠãã ãããhot: ãããã»ãŒããªå€æŽã®ã¿ãé©çšããŸããåèµ·åãå¿ èŠãªå Žåã¯ãã°ã«èšé²ããŸããrestart: èšå®å€æŽæã«ã²ãŒããŠã§ã€ãåèµ·åããŸããoff: ããããªããŒããç¡å¹ã«ãã
{
gateway: {
reload: {
mode: "hybrid",
debounceMs: 300,
},
},
}
Hot reload matrix (files + impact)¶
èŠããããã¡ã€ã«:
- OpenClaw ã¯ãã¹ããŒãã«å®å
šäžèŽããèšå®ã®ã¿ãåãä»ããŸãã
æªç¥ã®ããŒãäžæ£ãªåãç¡å¹ãªå€ãããå Žåãå®å šã®ãã GatewayïŒã²ãŒããŠã§ã€ïŒã¯ èµ·åãæåŠ ããŸãã
ãããé©çš (å®å šãªã²ãŒããŠã§ã€ã®åèµ·åã¯ãããŸãã):
hooks(webhook auth/path/mappings) +hooks.gmail(Gmail ãŠã©ããã£ãŒãåèµ·å)browser(ãã©ãŠã¶å¶åŸ¡ãµãŒãã®åèµ·å)cron(cronãµãŒãã¹ã®åèµ·å+忿޿°)agents.defaults.heartbeat(heartbeat runner restart)web(WhatsApp Web ãã£ã³ãã«åèµ·å)telegramãdiscordãsignalãimessage(ãã£ãã«ã®åèµ·å)agent,models,routing,messages,session,whatsapp,logging,skills,ui,talk,identity,wizard(dynamic reads)
å®å šãªã²ãŒããŠã§ã€ã®åèµ·åãå¿ èŠã§ã:
gateway(port/bind/auth/control UI/tailscale)bridge(ã¬ã¬ã·ãŒ)æ€åºcanvasHostãã©ã°ã€ã³- ä»»æã®äžæ/ãµããŒããããŠããªãèšå®ãã¹ïŒããã©ã«ãã§ã¯å®å šã®ããã«åèµ·åïŒ
è€æ°ã€ã³ã¹ã¿ã³ã¹ã®å颿§Â¶
è€æ°ã®ã²ãŒããŠã§ã€ã1ã€ã®ãã¹ã(åé·æ§ãŸãã¯ã¬ã¹ãã¥ãŒããã)ã§å®è¡ããã«ã¯ãã€ã³ã¹ã¿ã³ã¹ããšã®ç¶æ + èšå®ãåé¢ããäžæã®ããŒãã䜿çšããŸãã
OPENCLAW_CONFIG_PATH(ã€ã³ã¹ã¿ã³ã¹æ¯ã®èšå®)OPENCLAW_STATE_DIR(sessions/creds)agents.defaults.workspace(memores)gateway.port(ã€ã³ã¹ã¿ã³ã¹æ¯ã«äžæ)
䟿å©ãã©ã°ïŒCLIïŒ
openclaw --dev âŠâ~/.openclaw-devã䜿çšããŠãã ãã + ããŒã¹ã®19001ããããŒãopenclaw --profile <name> âŠâ~/.openclaw-<name>ïŒconfig/env/flagsçµç±ã®ããŒãïŒ
掟çããããŒããããã³ã°(ã²ãŒããŠã§ã€/ãã©ãŠã¶ãŒ/ãã£ã³ãã¹)ã«ã€ããŠã¯ãã²ãŒããŠã§ã€ã©ã³ããã¯ãåç §ããŠãã ããã ãã©ãŠã¶ãŒ/CDPããŒãã®åé¢ã®è©³çްã«ã€ããŠã¯ãMultiple gatewaysãåç §ããŠãã ããã
openai
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \
OPENCLAW_STATE_DIR=~/.openclaw-a \
openclawã²ãŒããŠã§ã€ ---port 19001
ãã㯠(Gateway webhooks)¶
ã²ãŒããŠã§ã€HTTPãµãŒããŒã§ã·ã³ãã«ãªHTTPWebhookãšã³ããã€ã³ããæå¹ã«ããŸãã
æ¢å®ïŒ
- æå¹:
false - path:
/hooks - maxBodyBytes:
262144(256 KB)
{
hooks: {
enabled: true,
token: "shared-secret",
path: "/hooks",
presets: ["gmail"],
transformsDir: "~/.openclaw/hooks",
mappings: [
{
match: { path: "gmail" },
action: "agent",
wakeMode: "now",
name: "Gmail",
sessionKey: "hook:gmail:{{messages[0].id}}",
messageTemplate: "From: {{messages[0].from}}\nSubject: {{messages[0].subject}}\n{{messages[0].snippet}}",
deliver: true,
channel: "last",
model: "openai/gpt-5.2-mini",
},
],
},
}
èŠæ±ã«ã¯ããã¯ããŒã¯ã³ãå«ããå¿ èŠããããŸã:
Authorization: Bearer <token>ãŸã㯠**x-openclaw-token: <token>
ãšã³ããã€ã³ã:
POST /hooks/wakeâ{ text, mode?: "now"|"next-heartbeat" }POST /hooks/agentâ{ message, name?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }ãè¿åŽPOST /hooks/<name>âhooks.mappingsã§è§£æ±º
/hooks/agent ã¯åžžã«ãµããªãŒãã¡ã€ã³ã»ãã·ã§ã³ã«æçš¿ããŸãïŒãªãã·ã§ã³ã§ã wakeMode: "now"ãä»ããŠããŒãããŒããããªã¬ãŒããããšãã§ããŸãïŒã
ãããã³ã°ããŒã:
match.pathã¯/hooksã®åŸã®ãµããã¹ã«ãããããŸãã(äŸ:/hooks/gmailâgmail)ãmatch.sourceã¯ãã€ããŒããã£ãŒã«ãã«äžèŽããŸã(äŸ:{ source: "gmail" }) ã®ã§ãäžè¬çãª/hooks/ingestãã¹ã䜿çšã§ããŸãã- ãã€ããŒãããèªã¿èŸŒãã ã{{messages[0].subject}}ãã®ãããªãã³ãã¬ãŒãã
transformã¯ããã¯ã¢ã¯ã·ã§ã³ãè¿ãJS/TSã¢ãžã¥ãŒã«ãæãããšãã§ããŸããdeliver: trueã¯æçµè¿ä¿¡ããã£ã³ãã«ã«éä¿¡ããŸããchannelã®ããã©ã«ãã¯last(WhatsAppã«æ»ããŸã) ã§ãã- äºåã®é
ä¿¡ã«ãŒãããªãå Žåã¯ã
channel+toãæç€ºçã«èšå®ããŠãã ãã(Telegram/Discord/Google Chat/Slack/Signal/iMessage/MS Teamsã«ã¯å¿ é )ã modelã¯ããã®ããã¯å®è¡ã®ããã® LLM ãäžæžãããŸãïŒprovider/modelãŸã㯠alias;agents.defaults.modelsãèšå®ãããŠããå Žåã¯èš±å¯ããªããã°ãªããŸããïŒã
Gmailãã«ããŒèšå® (openclaw webhooks gmail setup / runã§äœ¿çš):
{
hooks: {
gmail: {
account: "openclaw@gmail.com",
topic: "projects/<project-id>/topics/gog-gmail-watch",
subscription: "gog-gmail-watch-push",
pushToken: "shared-push-token",
hookUrl: "http://127.0.0.1:18789/hooks/gmail",
includeBody: true,
maxBytes: 20000,
renewEveryMinutes: 720,
serve: { bind: "127.0.0.1", port: 8788, path: "/" },
tailscale: { mode: "funnel", path: "/gmail-pubsub" },
// Optional: use a cheaper model for Gmail hook processing
// Falls back to agents.defaults.model.fallbacks, then primary, on auth/rate-limit/timeout
model: "openrouter/meta-llama/llama-3.3-70b-instruct:free",
// Optional: default thinking level for Gmail hooks
thinking: "off",
},
},
}
Gmail ããã¯ã®ã¢ãã«ãªãŒããŒã©ã€ã:
hooks.gmail.model㯠Gmail ããã¯åŠçã«äœ¿çšããã¢ãã«ãæå®ããŸã (ããã©ã«ã㯠session primary ã§ã)ãagents.defaults.modelsããprovider/modelåç §ãŸãã¯ãšã€ãªã¢ã¹ãåãä»ããŸããagents.defaults.model.fallbacksã«æ»ããagents.defaults.model.primaryãauth/rate-limit/timeoutã«æ»ããŸããagents.defaults.modelsãèšå®ãããŠããå Žåã¯ãèš±å¯ãªã¹ãã«ããã¯ã¢ãã«ãå«ããŸãã- èµ·åæã«ãèšå®ãããã¢ãã«ãã¢ãã« ã«ã¿ãã°ãŸãã¯èš±å¯ãªã¹ãã«ãªãå Žåã«èŠåããŸãã
hooks.gmail.thinkingã¯Gmailããã¯ã®ããã©ã«ãã®æèã¬ãã«ãèšå®ããããã¯ãããã®æè`ã§äžæžããããŸãã
ã²ãŒããŠã§ã€ã®èªåã¹ã¿ãŒã:
hooks.enabled=trueãšhooks.gmail.accountãèšå®ãããŠããå Žåãã²ãŒããŠã§ã€ã¯èµ·åæã«gog gmail watch serveãèµ·åãããŠã©ãããèªåçã«æŽæ°ããŸããOPENCLAW_SKIP_GMAIL_WATCHER=1ãèšå®ãããšãèªåèµ·åãç¡å¹ã«ããŸãã- Gateway ãšäžŠè¡ããŠå¥ã®
gog gmail watch serveãå®è¡ããªãã§ãã ãããlisten tcp 127.0.0.1:8788: bind: address already in useã§å€±æããŸãã
泚: tailscale.mode ãæå¹ãªå ŽåãOpenClaw 㯠Tailscale ã /gmail-pubsub ãæ£ãããããã·ã§ãããããserve.path ã®æ¢å®å€ã / ã«èšå®ããŸãïŒèšå®ããããã¹ãã¬ãã£ãã¯ã¹ã¯åé€ãããŸãïŒã
æ¥é èŸä»ããã¹ãåãåãããã¯ãšã³ããå¿
èŠãªå Žåã¯ã
hooks.gmail.tailscale.target ã«ãã«URLãèšå®ããŠãã ãã (serve.pathãæŽåãããŸã)ã
canvasHost (LAN/tailnet Canvas ãã¡ã€ã«ãµãŒã㌠+ ã©ã€ããªããŒã)¶
Gatewayã¯HTTPçµç±ã§HTML/CSS/JSã®ãã£ã¬ã¯ããªãæäŸãããããiOS/AndroidããŒãã¯åã«canvas.navigateã䜿çšã§ããŸãã
ããã©ã«ãã®ã«ãŒã: ~/ ã penclaw/workspace/canvas
ããã©ã«ãããŒã: 18793 (openclawãã©ãŠã¶ã®CDPããŒã18792ãé¿ããããã«éžæ)
ãµãŒããŒã¯ããŒããå°éã§ããããã«ãã²ãŒããŠã§ã€ãã€ã³ããã¹ã (LANãŸãã¯Tailnet) äžã§ãªãã¹ã³ããŸãã
ãµãŒããŒ:
canvasHost.rootã®äžã«ãããã¡ã€ã«ãæäŸããŸã- éä¿¡æžã¿ã® HTML ã«å°ããªã©ã€ããªããŒãã¯ã©ã€ã¢ã³ããæ³šå ¥ããŸã
- ãã£ã¬ã¯ããªãç£èŠãã
/__openclaw__/wsã§WebSocketãšã³ããã€ã³ããåããŒãããŸãã - ãã£ã¬ã¯ããªã空ã®å Žåã¯ã¹ã¿ãŒã¿ãŒ
index.htmlãèªåçã«äœæããŸãïŒããã«äœãã衚瀺ãããããã«ãªããŸãïŒ /__openclaw__/a2ui/ã§ãA2UIãæäŸããããŒãã«canvasHostUrl(Canvas/A2UIã®ããŒãã§åžžã«äœ¿çš) ãšããŠå®£äŒãããŸãã
ãã£ã¬ã¯ããªã倧ããå ŽåããŸãã¯EMFILEãæŒããŠãã ãã:
- config:
canvasHost: { liveReload: false }
{
canvasHost: {
root: "~/.openclaw/workspace/canvas",
port: 18793,
liveReload: true,
},
}
canvasHost.* ãžã®å€æŽã«ã¯ã²ãŒããŠã§ã€ã®åèµ·åãå¿
èŠã§ãïŒèšå®ã®åèªã¿èŸŒã¿ã¯åèµ·åãããŸãïŒã
ç¡å¹åããã«ã¯ïŒ
- config:
canvasHost: { enabled: false } - env:
OPENCLAW_SKIP_CANVAS_HOST=1
bridge (ã¬ã¬ã·ãŒTCPããªããžãåé€)¶
çŸåšã®ãã«ãã«ã¯ TCP ããªããžãªã¹ããŒãå«ãŸããªããªããŸãããbridge.* èšå®ããŒã¯ç¡èŠãããŸãã
ããŒãã¯ã²ãŒããŠã§ã€WebSocketã«æ¥ç¶ããŸãã ãã®é
ç®ã¯æŽå²çåèãšããŠæ®ãããŠããã
åŸæ¥ã®åäœ:
- ã²ãŒããŠã§ã€ã¯ããŒã(iOS/Android)ã®ç°¡åãªTCPããªããž(éåžžã¯ããŒã
18790)ãå ¬éããããšãã§ããŸãã
æ¢å®ïŒ
- æå¹:
true - ããŒã:
18790 - bind:
lan(0.0.0.0ã«ãã€ã³ã)
Bind modes:
lan:0.0.0.0(LAN/Wi-FiãããŒã«ã¹ã±ãŒã«ãå«ãä»»æã®ã€ã³ã¿ãŒãã§ãŒã¹ã«å°éå¯èœ)tailnet: ãã·ã³ã® Tailscale IP ã«ã®ã¿ãã€ã³ãããïŒãŠã£ãŒã³Londonã«æšå¥šïŒ loopback:127.0.0.1(ããŒã«ã«ã®ã¿)auto: tailnet IP ãããã°, elselan
TLS:
bridge.tls.enabled: ããªããžæ¥ç¶ (æå¹ãªå Žå㯠TLS ã®ã¿) ã® TLS ãæå¹ã«ããŸããbridge.tls.autoGenerate: èšŒææž/ããŒãååšããªããšãã«èªå·±çœ²åèšŒææžãçæããŸã (ããã©ã«ã: true)ãbridge.tls.certPath/bridge.tls.keyPath: PEM paths for the bridge certificate + private key.bridge.tls.caPath: ãªãã·ã§ã³ã® PEM CA ãã³ãã« (ã«ã¹ã¿ã ã«ãŒããŸã㯠future mTLS) ã
TLS ãæå¹ãªå ŽåãGateway ã¯æ€åºçš TXT ã¬ã³ãŒãã« bridgeTls=1 ãš bridgeTlsSha256 ãåºåããããŒããèšŒææžããã³çãã§ããããã«ããŸãã æåæ¥ç¶ã§ã¯ã
ãã£ã³ã¬ãŒããªã³ãããŸã ä¿åãããŠããªãå Žåãtrust-on-first-useã䜿çšããŸãã
èªåçæãããèšŒææžã¯PATHäžã§opensslãå¿
èŠãšããŸããçæã«å€±æããå Žåãããªããžã¯èµ·åããŸããã
{
bridge: {
enabled: true,
port: 18790,
bind: "tailnet",
tls: {
enabled: true,
// Uses ~/.openclaw/bridge/tls/bridge-{cert,key}.pem when omitted.
// certPath: "~/.openclaw/bridge/tls/bridge-cert.pem",
// keyPath: "~/.openclaw/bridge/tls/bridge-key.pem"
},
},
}
discovery.mdns (Bonjour / mDNS ãããŒããã£ã¹ãã¢ãŒã)¶
LAN mDNS ãã£ã¹ã«ããªãããŒããã£ã¹ããå¶åŸ¡ããŸã (_openclaw-gw._tcp)ã
minimal(ããã©ã«ã): TXTã¬ã³ãŒãããcliPath+sshPortãçç¥ããŸãfull: TXTã¬ã³ãŒãã«cliPath+sshPortãå«ãoff: mDNS ãããŒããã£ã¹ããå®å šã«ç¡å¹ã«ãã- ãã¹ãå: ããã©ã«ãã¯
openclaw(openclaw.localã宣äŒããŸã)ãOPENCLAW_MDNS_HOSTNAMEã§äžæžãããŸãã
{
discovery: { mdns: { mode: "minimal" } },
}
discovery.wideArea (ã¯ã€ã-Area Bonjour / ãŠããã£ã¹ãDNSâSD)¶
æå¹ã«ãããšãã²ãŒããŠã§ã€ã¯èšå®ããããã£ã¹ã«ããªãã¡ã€ã³ã䜿çšããŠã~/.openclaw/dns/ã®äžã®_openclaw-gw._tcpã«ãŠããã£ã¹ãDNS-SDãŸãŒã³ãæžã蟌ã¿ãŸã(äŸ: openclaw.internal.)ã
iOS/Androidããããã¯ãŒã¯(Vienna
- éžæãããã¡ã€ã³ãæäŸããã²ãŒããŠã§ã€ãã¹ãäžã® DNS ãµãŒã㌠(CoreDNS ãæšå¥š)
- ã¯ã©ã€ã¢ã³ããã²ãŒããŠã§ã€DNSãµãŒããŒãä»ããŠãã®ãã¡ã€ã³ã解決ããããã«ãTailscale split DNS
ã¯ã³ã¿ã€ã ã»ããã¢ãããã«ã㌠(ã²ãŒããŠã§ã€ãã¹ã):
openclaw dns setup --apply
{
discovery: { wideArea: { enabled: true } },
}
ã¡ãã£ã¢ã¢ãã«ãã³ãã¬ãŒã倿°Â¶
ãã³ãã¬ãŒããã¬ãŒã¹ãã«ãã¯ã tools.media.*.models[].args ãš tools.media.models[].args (ããã³å°æ¥ãã³ãã¬ãŒããããåŒæ°ãã£ãŒã«ã)ã§å±éãããŸãã
| Variable | 説æ | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
{{Body}} |
åä¿¡ã¡ãã»ãŒãžæ¬æã®å šæ | |||||||||
{{RawBody}} |
çã®åä¿¡ã¡ãã»ãŒãžæ¬æïŒå±¥æŽïŒéä¿¡è ã©ãããŒãªããã³ãã³ãè§£æã«æé©ïŒ | |||||||||
{{BodyStripped}} |
ã°ã«ãŒãã¡ã³ã·ã§ã³ãé€å»ããæ¬æïŒãšãŒãžã§ã³ãã®æ¢å®ã«æé©ïŒ | |||||||||
{{From}} |
éä¿¡è èå¥åïŒWhatsApp ã§ã¯ E.164ããã£ãã«ã«ããç°ãªãå ŽåããïŒ | |||||||||
{{To}} |
å®å èå¥å | |||||||||
{{MessageSid}} |
ãã£ãã«ã®ã¡ãã»ãŒãž IDïŒå©çšå¯èœãªå ŽåïŒ | |||||||||
{{SessionId}} |
çŸåšã®ã»ãã·ã§ã³ UUID | |||||||||
{{IsNewSession}} |
æ°ããã»ãã·ã§ã³ãäœæãããå Žå㯠"true" |
|||||||||
{{MediaUrl}} |
åä¿¡ã¡ãã£ã¢ã®ç䌌 URLïŒååšããå ŽåïŒ | |||||||||
{{MediaPath}} |
ããŒã«ã«ã®ã¡ãã£ã¢ãã¹ïŒããŠã³ããŒããããå ŽåïŒ | |||||||||
{{MediaType}} |
ã¡ãã£ã¢çš®å¥ïŒimage/audio/document/âŠïŒ | {{Transcript}} |
é³å£°æåèµ·ããïŒæå¹æïŒ | |||||||
{{Prompt}} |
CLI ãšã³ããªåãã«è§£æ±ºãããã¡ãã£ã¢ããã³ãã | |||||||||
{{MaxChars}} |
CLI ãšã³ããªåãã«è§£æ±ºãããæå€§åºåæåæ° | |||||||||
{{ChatType}} |
"direct" ãŸã㯠"group" |
|||||||||
{{GroupSubject}} |
ã°ã«ãŒãã®ä»¶åïŒãã¹ããšãã©ãŒãïŒ | |||||||||
{{GroupMembers}} |
ã°ã«ãŒãã¡ã³ããŒã®ãã¬ãã¥ãŒïŒãã¹ããšãã©ãŒãïŒ | |||||||||
{{SenderName}} |
éä¿¡è ã®è¡šç€ºåïŒãã¹ããšãã©ãŒãïŒ | |||||||||
{{SenderE164}} |
éä¿¡è ã®é»è©±çªå·ïŒãã¹ããšãã©ãŒãïŒ | |||||||||
{{Provider}} |
ãããã€ãã®ãã³ãïŒwhatsapp | telegram | discord | googlechat | slack | signal | imessage | msteams | webchat | âŠïŒ |
Cron (ã²ãŒããŠã§ã€ã¹ã±ãžã¥ãŒã©)¶
Cronã¯ããŠã§ã€ã¯ã¢ãããšã¹ã±ãžã¥ãŒã«ããããžã§ãã®ããã®ã²ãŒããŠã§ã€ææã®ã¹ã±ãžã¥ãŒã©ã§ãã æ©èœã®æŠèŠãš CLI ã®äŸã«ã€ããŠã¯ Cron jobs ãåç §ããŠãã ããã
{
cron: {
enabled: true,
maxConcurrentRuns: 2,
},
}
次ãžïŒAgent Runtime ðŠ