Gateway
نمونههای پیکربندی
نمونههای زیر با طرحوارهٔ پیکربندی فعلی همراستا هستند. برای مرجع جامع و توضیحات هر فیلد، به پیکربندی مراجعه کنید.
شروع سریع
حداقل مطلق
{ agents: { defaults: { workspace: "~/.openclaw/workspace" } }, channels: { whatsapp: { allowFrom: ["+15555550123"] } },}آن را در ~/.openclaw/openclaw.json ذخیره کنید؛ سپس میتوانید از آن شماره به ربات پیام خصوصی بفرستید.
پیکربندی آغازین پیشنهادی
{ agents: { defaults: { workspace: "~/.openclaw/workspace", model: { primary: "anthropic/claude-sonnet-4-6" }, }, entries: { main: { identity: { name: "Clawd", theme: "helpful assistant", emoji: "🦞", }, }, }, }, channels: { whatsapp: { allowFrom: ["+15555550123"], groups: { "*": { requireMention: true } }, }, }, messages: { visibleReplies: "automatic", groupChat: { visibleReplies: "message_tool", // نیازمند فعالسازی؛ خروجی قابلمشاهده مستلزم message(action=send) است unmentionedInbound: "room_event", }, },}نمونهٔ گسترده (گزینههای اصلی)
JSON5 امکان استفاده از توضیحات و ویرگولهای انتهایی را فراهم میکند. JSON معمولی نیز قابلاستفاده است.
{ // محیط + پوسته env: { OPENROUTER_API_KEY: "sk-or-...", vars: { GROQ_API_KEY: "gsk-...", }, shellEnv: { enabled: true, timeoutMs: 15000, }, }, // فرادادهٔ نمایهٔ احراز هویت (اسرار در auth-profiles.json نگهداری میشوند) auth: { profiles: { "anthropic:default": { provider: "anthropic", mode: "api_key" }, "anthropic:work": { provider: "anthropic", mode: "api_key" }, "openai:default": { provider: "openai", mode: "api_key" }, "openai:personal": { provider: "openai", mode: "oauth" }, }, order: { anthropic: ["anthropic:default", "anthropic:work"], openai: ["openai:personal", "openai:default"], }, }, // هویت مختص هر عامل است — آن را در agents.entries.<id>.identity زیر تنظیم کنید. // گزارشگیری logging: { level: "info", file: "/tmp/openclaw/openclaw.log", consoleLevel: "info", consoleStyle: "pretty", redactSensitive: "tools", }, // قالببندی پیام messages: { visibleReplies: "automatic", responsePrefix: ">", ackReaction: "👀", ackReactionScope: "group-mentions", groupChat: { historyLimit: 50, visibleReplies: "message_tool", // برای اتاقهای مشترک با مدلهایی که ابزارها را قابلاعتماد فراخوانی میکنند، فعال شود unmentionedInbound: "room_event", }, queue: { mode: "followup", cap: 20, drop: "summarize", byChannel: { whatsapp: "followup", telegram: "followup", discord: "collect", slack: "collect", signal: "followup", imessage: "followup", webchat: "followup", }, }, }, // رفتار نشست session: { scope: "per-sender", dmScope: "per-channel-peer", // برای صندوقهای ورودی چندکاربره توصیه میشود reset: { mode: "daily", atHour: 4, idleMinutes: 60, }, resetByChannel: { discord: { mode: "idle", idleMinutes: 10080 }, }, resetTriggers: ["/new", "/reset"], store: "~/.openclaw/agents/main/sessions/sessions.json", maintenance: { mode: "warn", pruneAfter: "30d", maxEntries: 500, resetArchiveRetention: "30d", // مدتزمان یا false maxDiskBytes: "500mb", // اختیاری highWaterBytes: "400mb", // اختیاری (مقدار پیشفرض 80% از maxDiskBytes است) }, sendPolicy: { default: "allow", rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }], }, }, // کانالها channels: { whatsapp: { dmPolicy: "pairing", allowFrom: ["+15555550123"], groupPolicy: "allowlist", groupAllowFrom: ["+15555550123"], groups: { "*": { requireMention: true } }, }, telegram: { enabled: true, botToken: "YOUR_TELEGRAM_BOT_TOKEN", allowFrom: ["123456789"], groupPolicy: "allowlist", groupAllowFrom: ["123456789"], groups: { "*": { requireMention: true } }, }, discord: { enabled: true, token: "YOUR_DISCORD_BOT_TOKEN", dmPolicy: "allowlist", allowFrom: ["123456789012345678"], guilds: { "123456789012345678": { slug: "friends-of-openclaw", requireMention: false, channels: { general: { enabled: true }, help: { enabled: true, requireMention: true }, }, }, }, }, slack: { enabled: true, botToken: "xoxb-REPLACE_ME", appToken: "xapp-REPLACE_ME", channels: { "#general": { enabled: true, requireMention: true }, }, dmPolicy: "allowlist", allowFrom: ["U123"], slashCommand: { enabled: true, name: "openclaw", sessionPrefix: "slack:slash", ephemeral: true, }, }, }, // محیط اجرای عامل agents: { defaults: { workspace: "~/.openclaw/workspace", userTimezone: "America/Chicago", model: { primary: "anthropic/claude-sonnet-4-6", fallbacks: ["anthropic/claude-opus-4-6", "openai/gpt-5.4"], }, imageModel: { primary: "openrouter/anthropic/claude-sonnet-4-6", }, models: { "anthropic/claude-opus-4-6": { alias: "opus" }, "anthropic/claude-sonnet-4-6": { alias: "sonnet" }, "openai/gpt-5.4": { alias: "gpt" }, }, skills: ["github", "weather"], // عاملهایی که list[].skills را مشخص نکردهاند، این مقدار را به ارث میبرند thinkingDefault: "low", verboseDefault: "off", toolProgressDetail: "explain", reasoningDefault: "off", elevatedDefault: "on", blockStreamingDefault: "off", blockStreamingBreak: "text_end", blockStreamingChunk: { minChars: 800, maxChars: 1200, breakPreference: "paragraph", }, blockStreamingCoalesce: { idleMs: 1000, }, humanDelay: { mode: "natural", }, timeoutSeconds: 600, mediaMaxMb: 5, typingIntervalSeconds: 5, maxConcurrent: 3, heartbeat: { every: "30m", model: "anthropic/claude-sonnet-4-6", target: "last", directPolicy: "allow", // allow (پیشفرض) | block to: "+15555550123", prompt: "HEARTBEAT", ackMaxChars: 300, }, sandbox: { mode: "non-main", scope: "session", // بر perSession: true قدیمی ترجیح داده میشود workspaceRoot: "~/.openclaw/sandboxes", docker: { image: "openclaw-sandbox:bookworm-slim", workdir: "/workspace", readOnlyRoot: true, tmpfs: ["/tmp", "/var/tmp", "/run"], network: "none", user: "1000:1000", }, browser: { enabled: false, }, }, }, entries: { main: { default: true, identity: { name: "Samantha", theme: "helpful sloth", emoji: "🦥", }, // defaults.skills را به ارث میبرد -> github، weather groupChat: { mentionPatterns: ["@openclaw", "openclaw"], }, thinkingDefault: "high", // بازنویسی تنظیم تفکر برای هر عامل reasoningDefault: "on", // قابلیت مشاهدهٔ استدلال برای هر عامل fastModeDefault: false, // حالت سریع برای هر عامل }, quick: { skills: [], // این عامل هیچ مهارتی ندارد fastModeDefault: true, // این عامل همیشه سریع اجرا میشود thinkingDefault: "off", }, }, }, memory: { search: { provider: "gemini", model: "gemini-embedding-001", remote: { apiKey: "${GEMINI_API_KEY}", }, extraPaths: ["../team-docs", "/srv/shared-notes"], }, }, tools: { media: { models: [ { provider: "openai", model: "gpt-4o-transcribe", capabilities: ["audio"] }, { provider: "google", model: "gemini-3-flash-preview", capabilities: ["video"] }, ], audio: { enabled: true, maxBytes: 20971520, timeoutSeconds: 120 }, video: { enabled: true, maxBytes: 52428800 }, }, allow: ["exec", "process", "read", "write", "edit", "apply_patch"], deny: ["browser", "canvas"], exec: { backgroundMs: 10000, timeoutSeconds: 1800, cleanupMs: 1800000, }, elevated: { enabled: true, allowFrom: { whatsapp: ["+15555550123"], telegram: ["123456789"], discord: ["123456789012345678"], slack: ["U123"], signal: ["+15555550123"], imessage: ["user@example.com"], webchat: ["session:demo"], }, }, }, // ارائهدهندگان مدل سفارشی models: { mode: "merge", providers: { "custom-proxy": { baseUrl: "http://localhost:4000/v1", apiKey: "LITELLM_KEY", api: "openai-responses", authHeader: true, headers: { "X-Proxy-Region": "us-west" }, models: [ { id: "llama-3.1-8b", name: "Llama 3.1 8B", api: "openai-responses", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128000, maxTokens: 32000, }, ], }, }, }, // کارهای Cron cron: { enabled: true, store: "~/.openclaw/cron/jobs.json", sessionRetention: "24h", }, // Webhookها hooks: { enabled: true, path: "/hooks", token: "shared-secret", presets: ["gmail"], transformsDir: "~/.openclaw/hooks/transforms", mappings: [ { id: "gmail-hook", match: { path: "gmail" }, action: "agent", wakeMode: "now", name: "Gmail", sessionKey: "hook:gmail:{{messages[0].id}}", messageTemplate: "From: {{messages[0].from}}\nSubject: {{messages[0].subject}}", textTemplate: "{{messages[0].snippet}}", deliver: true, channel: "last", to: "+15555550123", thinking: "low", timeoutSeconds: 300, transform: { module: "gmail.js", export: "transformGmail", }, }, ], gmail: { account: "openclaw@gmail.com", label: "INBOX", 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" }, }, }, // Gateway + شبکه gateway: { mode: "local", port: 18789, bind: "loopback", controlUi: { enabled: true, basePath: "/openclaw" }, auth: { mode: "token", token: "gateway-token", allowTailscale: true, }, tailscale: { mode: "serve", resetOnExit: false }, remote: { url: "ws://gateway-host.ts.net:18789", token: "remote-token" }, reload: { mode: "hybrid" }, }, skills: { allowBundled: ["gemini", "peekaboo"], load: { extraDirs: ["~/Projects/agent-scripts/skills"], allowSymlinkTargets: ["~/Projects/agent-scripts/skills"], }, install: { preferBrew: true, nodeManager: "npm", // npm | pnpm | yarn | bun allowUploadedArchives: false, }, entries: { "image-lab": { enabled: true, apiKey: "GEMINI_KEY_HERE", env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, }, peekaboo: { enabled: true }, }, },}مخزن خواهرِ Skills با پیوند نمادین
زمانی از این روش استفاده کنید که ریشهٔ یک Skills داخلی دارای پیوند نمادین به یک مخزن خواهر باشد؛ برای
مثال ~/.agents/skills/manager -> ~/Projects/manager/skills.
{ skills: { load: { extraDirs: ["~/Projects/manager/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, },}extraDirsمخزن همجوار را بهعنوان ریشه صریح Skills پویش میکند.allowSymlinkTargetsبه پوشههای Skills دارای پیوند نمادین اجازه میدهد در آن ریشه مقصد واقعی و مورداعتماد تفکیک شوند، بدون آنکه خروج دلخواه پیوندهای نمادین مجاز شود.- برای اینکه Skill Workshop بتواند عملیات نوشتن را از طریق همان مقصد مورداعتماد پیوند نمادین اعمال کند،
skills.workshop.allowSymlinkTargetWrites: trueرا تنظیم کنید.
الگوهای رایج
خط مبنای مشترک Skills با یک بازنویسی
{ agents: { defaults: { workspace: "~/.openclaw/workspace", skills: ["github", "weather"], }, entries: { main: { default: true }, docs: { workspace: "~/.openclaw/workspace-docs", skills: ["docs-search"] }, }, },}agents.defaults.skillsخط مبنای مشترک است.agents.entries.*.skillsآن خط مبنا را برای یک عامل جایگزین میکند.- وقتی یک عامل نباید هیچ Skillsی را ببیند، از
skills: []استفاده کنید.
راهاندازی چندسکویی
{ agents: { defaults: { workspace: "~/.openclaw/workspace" } }, channels: { whatsapp: { allowFrom: ["+15555550123"], responsePrefix: "[openclaw]" }, telegram: { enabled: true, botToken: "YOUR_TOKEN", allowFrom: ["123456789"], }, discord: { enabled: true, token: "YOUR_TOKEN", allowFrom: ["123456789012345678"], }, },}تأیید خودکار شبکه مورداعتماد Node
جفتسازی دستگاه را دستی نگه دارید، مگر اینکه مسیر شبکه را کنترل کنید. برای یک آزمایشگاه اختصاصی یا زیرشبکه tailnet، میتوانید با CIDRها یا IPهای دقیق، تأیید خودکار نخستین دستگاه Node را فعال کنید:
{ gateway: { nodes: { pairing: { autoApproveCidrs: ["192.168.1.0/24", "fd00:1234:5678::/64"], }, }, },}اگر تنظیم نشود، غیرفعال میماند. این گزینه فقط برای جفتسازی جدید role: node
بدون دامنههای درخواستی اعمال میشود. کلاینتهای اپراتور/مرورگر و ارتقای نقش، دامنه، فراداده یا
کلید عمومی همچنان به تأیید دستی نیاز دارند.
حالت امن پیام مستقیم (صندوق ورودی مشترک / پیامهای مستقیم چندکاربره)
اگر بیش از یک نفر میتواند به ربات شما پیام مستقیم بفرستد (چندین ورودی در allowFrom، تأیید جفتسازی برای چند نفر، یا dmPolicy: "open")، حالت امن پیام مستقیم را فعال کنید تا پیامهای مستقیم فرستندگان مختلف بهطور پیشفرض یک زمینه مشترک نداشته باشند:
{ // حالت امن پیام مستقیم (برای عاملهای پیام مستقیم چندکاربره یا حساس توصیه میشود) session: { dmScope: "per-channel-peer" }, channels: { // نمونه: صندوق ورودی چندکاربره WhatsApp whatsapp: { dmPolicy: "allowlist", allowFrom: ["+15555550123", "+15555550124"], }, // نمونه: صندوق ورودی چندکاربره Discord discord: { enabled: true, token: "YOUR_DISCORD_BOT_TOKEN", allowFrom: ["123456789012345678", "987654321098765432"], }, },}برای Discord/Google Chat/IRC/Mattermost/Microsoft Teams/Slack، مجوزدهی فرستنده بهطور پیشفرض ابتدا بر اساس شناسه انجام میشود.
تطبیق مستقیم نام/ایمیل/نام مستعار تغییرپذیر را تنها زمانی با dangerouslyAllowNameMatching: true هر کانال فعال کنید که صراحتاً آن خطر را پذیرفته باشید.
کلید API Anthropic بههمراه بازگشت جایگزین MiniMax
{ auth: { profiles: { "anthropic:api": { provider: "anthropic", mode: "api_key", }, }, order: { anthropic: ["anthropic:api"], }, }, models: { providers: { minimax: { baseUrl: "https://api.minimax.io/anthropic", api: "anthropic-messages", apiKey: "${MINIMAX_API_KEY}", }, }, }, agents: { defaults: { workspace: "~/.openclaw/workspace", model: { primary: "anthropic/claude-opus-4-6", fallbacks: ["minimax/MiniMax-M2.7"], }, }, },}ربات کاری (دسترسی محدود)
{ agents: { defaults: { workspace: "~/work-openclaw", elevatedDefault: "off", }, entries: { main: { identity: { name: "WorkBot", theme: "professional assistant", }, }, }, }, channels: { slack: { enabled: true, botToken: "xoxb-...", channels: { "#engineering": { enabled: true, requireMention: true }, "#general": { enabled: true, requireMention: true }, }, }, },}فقط مدلهای محلی
{ agents: { defaults: { workspace: "~/.openclaw/workspace", model: { primary: "lmstudio/my-local-model" }, }, }, models: { mode: "merge", providers: { lmstudio: { baseUrl: "http://127.0.0.1:1234/v1", apiKey: "lmstudio", api: "openai-responses", models: [ { id: "my-local-model", name: "Local Model", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 196608, maxTokens: 8192, }, ], }, }, },}نکتهها
- اگر
dmPolicy: "open"را تنظیم میکنید، فهرست متناظرallowFromباید شامل"*"باشد. - شناسههای ارائهدهندگان متفاوتاند (شماره تلفن، شناسه کاربر، شناسه کانال). برای تأیید قالب، به مستندات ارائهدهنده مراجعه کنید.
- بخشهای اختیاری که میتوانید بعداً اضافه کنید:
web،browser،ui،discovery،plugins،talk،signal،imessage. - برای یادداشتهای عمیقتر راهاندازی، ارائهدهندگان و عیبیابی را ببینید.