From fa9191136ff205707939a8559b8682205877eee5 Mon Sep 17 00:00:00 2001 From: Krilly Date: Thu, 19 Feb 2026 12:13:47 +0000 Subject: [PATCH] Auto backup: 2026-02-19 12:13 --- automations/backup-to-gitea.sh | 42 ++- state-backup/README.md | 11 + state-backup/cron/jobs.json | 155 +++++++++ state-backup/devices/paired.json | 168 +++++++++ state-backup/openclaw.json | 570 +++++++++++++++++++++++++++++++ 5 files changed, 943 insertions(+), 3 deletions(-) create mode 100644 state-backup/README.md create mode 100644 state-backup/cron/jobs.json create mode 100644 state-backup/devices/paired.json create mode 100644 state-backup/openclaw.json diff --git a/automations/backup-to-gitea.sh b/automations/backup-to-gitea.sh index 7ae334e..f876d0c 100755 --- a/automations/backup-to-gitea.sh +++ b/automations/backup-to-gitea.sh @@ -33,19 +33,54 @@ send_gotify() { fi } +# Snapshot critical OpenClaw state into workspace repo so updates/reinstalls are recoverable +snapshot_state_files() { + local src_root="/home/openclaw/.openclaw" + local dst_root="/home/openclaw/.openclaw/workspace/state-backup" + + mkdir -p "$dst_root" "$dst_root/cron" "$dst_root/skills" "$dst_root/devices" + + # Copy key state files if present + [[ -f "$src_root/openclaw.json" ]] && cp "$src_root/openclaw.json" "$dst_root/openclaw.json" + [[ -f "$src_root/cron/jobs.json" ]] && cp "$src_root/cron/jobs.json" "$dst_root/cron/jobs.json" + [[ -f "$src_root/devices/paired.json" ]] && cp "$src_root/devices/paired.json" "$dst_root/devices/paired.json" + + # Skill metadata (if any) + if compgen -G "$src_root/skills/*.json" > /dev/null; then + cp "$src_root/skills"/*.json "$dst_root/skills/" + fi + + # Helpful restore/readme metadata + cat > "$dst_root/README.md" <&1 | tee -a "$LOG_FILE"; then echo "βœ… $name: Backup successful" | tee -a "$LOG_FILE" @@ -60,6 +95,7 @@ backup_repo() { # Backup workspace echo "πŸ“‚ Backing up workspace..." | tee -a "$LOG_FILE" +snapshot_state_files backup_repo "/home/openclaw/.openclaw/workspace" "workspace" echo "" | tee -a "$LOG_FILE" diff --git a/state-backup/README.md b/state-backup/README.md new file mode 100644 index 0000000..445ad47 --- /dev/null +++ b/state-backup/README.md @@ -0,0 +1,11 @@ +# OpenClaw State Backup + +This folder is auto-generated by automations/backup-to-gitea.sh before each git backup. + +Included state: +- openclaw.json +- cron/jobs.json +- devices/paired.json +- skills/*.json + +Generated at: 2026-02-19T12:13:47Z diff --git a/state-backup/cron/jobs.json b/state-backup/cron/jobs.json new file mode 100644 index 0000000..2f12c84 --- /dev/null +++ b/state-backup/cron/jobs.json @@ -0,0 +1,155 @@ +{ + "version": 1, + "jobs": [ + { + "id": "fbe52aa7-b6d1-4038-8787-cedc0b7ff57a", + "agentId": "main", + "name": "Daily OpenClaw Backup", + "enabled": true, + "notify": false, + "createdAtMs": 1771343375836, + "updatedAtMs": 1771477124683, + "schedule": { + "kind": "cron", + "expr": "0 2 * * *", + "tz": "Australia/Perth" + }, + "sessionTarget": "isolated", + "wakeMode": "now", + "payload": { + "kind": "agentTurn", + "message": "Run the OpenClaw backup script: /home/openclaw/.openclaw/workspace/scripts/backup-to-gitea.sh\n\nIf it succeeds, reply NO_REPLY. If it fails, send a Gotify alert using:\n- URL: http://runtipi.kangaroo-eel.ts.net:8129\n- Token: AGKnHafW3FGzBlt\n- Title: 🚨 Backup Failed\n- Message: The OpenClaw backup to Gitea failed. Check logs for details.\n- Priority: 8 (high)\n- Use curl to POST to /message?token=AGKnHafW3FGzBlt with JSON: {\"title\": \"...\", \"message\": \"...\", \"priority\": 8}", + "model": "opencode/kimi-k2.5-free" + }, + "state": { + "nextRunAtMs": 1771524000000, + "lastRunAtMs": 1771437600016, + "lastStatus": "ok", + "lastDurationMs": 12483, + "consecutiveErrors": 0 + }, + "delivery": { + "mode": "announce" + } + }, + { + "id": "a2a136e5-75a7-4e62-bc9c-63af5e8a8188", + "agentId": "main", + "name": "Morning Briefing", + "enabled": true, + "createdAtMs": 1771343566895, + "updatedAtMs": 1771474066604, + "schedule": { + "expr": "5 7 * * *", + "kind": "cron", + "tz": "Australia/Perth" + }, + "sessionTarget": "isolated", + "wakeMode": "now", + "payload": { + "kind": "agentTurn", + "message": "πŸŒ… Good morning! Run the daily briefing for Anthony:\n\n1. Get Perth weather: curl -s \"wttr.in/Perth+Australia?format=%l:+%c+%t+%h+%w\"\n2. Run AI newsletter digest: /home/openclaw/.openclaw/workspace/automations/ai-newsletter-digest/daily-digest.sh\n3. Combine weather + newsletter digest into a morning briefing\n4. Send via Telegram to Anthony (channel: telegram, to: telegram:1793951355)\n\nSign off as Krilly the Crab πŸ¦€", + "model": "opencode/kimi-k2.5-free" + }, + "state": { + "nextRunAtMs": 1771542300000, + "lastRunAtMs": 1771455900004, + "lastStatus": "ok", + "lastDurationMs": 15170, + "consecutiveErrors": 0 + }, + "delivery": { + "mode": "none" + } + }, + { + "id": "e9dbcf5b-5d1b-477e-a804-97b2f1b9855e", + "agentId": "main", + "name": "Weekend Briefing", + "enabled": true, + "createdAtMs": 1771343574470, + "updatedAtMs": 1771463024946, + "schedule": { + "expr": "0 8 * * 0,6", + "kind": "cron", + "tz": "Australia/Perth" + }, + "sessionTarget": "isolated", + "wakeMode": "now", + "payload": { + "kind": "agentTurn", + "message": "Generate weekend briefing:\n\n1. Get Perth weekend weather: curl -s \"wttr.in/Perth+Australia?format=%l:+%c+%t+%h+%w\"\n2. Get weekend forecast: curl -s \"wttr.in/Perth+Australia?F\"\n3. Run AI newsletter digest: /home/openclaw/.openclaw/workspace/automations/ai-newsletter-digest/daily-digest.sh\n4. Create weekend digest with weather + top AI/Tech stories\n5. Send via Telegram to Anthony", + "model": "opencode/kimi-k2.5-free" + }, + "delivery": { + "mode": "announce" + }, + "state": { + "nextRunAtMs": 1771632000000 + } + }, + { + "id": "9225c88a-8616-4e02-8196-257a2eb9c8b1", + "agentId": "main", + "name": "OpenClaw Daily Digest", + "enabled": true, + "notify": true, + "createdAtMs": 1771392667779, + "updatedAtMs": 1771477114198, + "schedule": { + "expr": "30 6 * * *", + "kind": "cron", + "tz": "Australia/Perth" + }, + "sessionTarget": "isolated", + "wakeMode": "now", + "payload": { + "kind": "agentTurn", + "message": "## OpenClaw Daily Intelligence Briefing\n\nRun a comprehensive search for OpenClaw news and information, then deliver a curated digest to Anthony.\n\n---\n\n### Step 1 β€” Search all sources\n\n#### πŸ” Web searches (run all of these via web_search)\n- `openclaw AI agent`\n- `clawdbot`\n- `clawhub new skills`\n- `clawflows automation`\n- `openclaw update release`\n- `openclaw site:reddit.com`\n- `openclaw site:github.com`\n- `openclaw site:discord.com`\n\n#### πŸ“° FreshRSS (last 24h)\nUse the freshrss skill: `/home/openclaw/.openclaw/workspace/skills/freshrss-reader/scripts/freshrss.sh headlines --hours 24 --count 100`\n- FRESHRSS_URL: `http://freshrss.kangaroo-eel.ts.net`\n- Filter results for: openclaw, clawdbot, clawhub, clawflows, AI agent, autonomous agent, self-hosted AI\n- If credentials are missing or it fails, skip gracefully\n\n#### πŸ€– Reddit β€” fetch all of these with web_fetch and extract interesting posts:\n\n**Dedicated communities:**\n- `https://www.reddit.com/r/openclaw/new.json?limit=10`\n- `https://www.reddit.com/r/clawdbot/new.json?limit=10`\n- `https://www.reddit.com/r/OpenClaw/new.json?limit=10`\n\n**Broader AI agent & self-hosted communities (search within for openclaw/clawdbot):**\n- `https://www.reddit.com/r/selfhosted/search.json?q=openclaw+OR+clawdbot&sort=new&t=week&limit=10`\n- `https://www.reddit.com/r/homeserver/search.json?q=openclaw+OR+clawdbot&sort=new&t=week&limit=10`\n- `https://www.reddit.com/r/LocalLLaMA/search.json?q=openclaw+OR+clawdbot&sort=new&t=week&limit=10`\n- `https://www.reddit.com/r/artificial/search.json?q=openclaw&sort=new&t=week&limit=10`\n- `https://www.reddit.com/r/AIAssistants/search.json?q=openclaw&sort=new&t=week&limit=10`\n- `https://www.reddit.com/r/homeautomation/search.json?q=openclaw+OR+clawdbot&sort=new&t=week&limit=10`\n\n**Sitewide Reddit search:**\n- `https://www.reddit.com/search.json?q=openclaw&sort=new&t=day&limit=15`\n- `https://www.reddit.com/search.json?q=clawdbot&sort=new&t=week&limit=10`\n\n#### πŸ™ GitHub\n- Fetch `https://api.github.com/search/repositories?q=openclaw&sort=updated&order=desc&per_page=5` for new/updated repos\n- Fetch `https://api.github.com/search/issues?q=openclaw&sort=updated&order=desc&per_page=5` for recent issues/PRs\n\n#### πŸ“¦ ClawHub\n- Fetch `https://clawhub.com` and look for recently added or updated skills\n\n#### πŸ—žοΈ Hacker News\n- `https://hn.algolia.com/api/v1/search?query=openclaw&tags=story&numericFilters=created_at_i>` + (current unix timestamp minus 604800 for last 7 days)\n\n---\n\n### Step 2 β€” Curate\n\nFrom everything collected, select the most noteworthy items. Prioritise:\n- New OpenClaw features, releases, or changelogs\n- New skills published on ClawHub\n- Community tips, tutorials, or showcase posts\n- Bug reports or known issues worth flagging\n- Interesting automations or use cases shared by the community\n- Any news from the broader AI agent ecosystem that's relevant to OpenClaw users\n\nBe honest: if it's been a quiet day, say so. Don't pad the digest.\n\n---\n\n### Step 3 β€” Telegram message\n\nSend a punchy Telegram message (channel: telegram, to: telegram:1793951355):\n- Header: πŸ¦€ *OpenClaw Daily Digest* β€” [date]\n- Top 3-5 items as bullets with links\n- One-line summary at the bottom\n- Keep it tight β€” this is a highlights reel, not a report\n\n---\n\n### Step 4 β€” Email\n\nSend a full HTML email via the SendClaw API:\n- **From:** krilly@sendclaw.com\n- **To:** anthony@martinwa.org\n- **Subject:** πŸ¦€ OpenClaw Daily Digest β€” [date]\n- **API:** POST https://sendclaw.com/api/send\n- **Auth:** Bearer sk_15000b789ec9a820f785681a4115396bd22c028e08c652e0\n- **Body:** Rich HTML with all findings grouped by source, links, and a short Krilly editorial note on anything particularly interesting or exciting\n\n---\n\n### Step 5 β€” Gotify Notification (High Priority)\n\nSend a Gotify notification with high priority to wake the screen:\n- **URL:** http://runtipi.kangaroo-eel.ts.net:8129\n- **Token:** AGKnHafW3FGzBlt\n- **Title:** πŸ¦€ OpenClaw Daily Digest\n- **Message:** Brief summary of top items (1-2 sentences)\n- **Priority:** 8 (high - will wake screen)\n- Use curl to POST to /message?token=AGKnHafW3FGzBlt with JSON: {\"title\": \"...\", \"message\": \"...\", \"priority\": 8}\n\n---\n\n### Notes\n- Get the current date/time via session_status\n- If a subreddit doesn't exist (404), skip it silently\n- Be concise on Telegram, thorough in email\n- Sign off as Krilly the Crab πŸ¦€", + "model": "opencode/kimi-k2.5-free" + }, + "delivery": { + "mode": "announce", + "channel": "telegram" + }, + "state": { + "nextRunAtMs": 1771540200000, + "lastRunAtMs": 1771444800011, + "lastStatus": "ok", + "lastDurationMs": 326100, + "consecutiveErrors": 0 + } + }, + { + "id": "10e22343-fbb4-4018-bb08-c5b249662411", + "agentId": "main", + "name": "Check Krilly Email", + "enabled": true, + "notify": false, + "createdAtMs": 1771410489851, + "updatedAtMs": 1771502437803, + "schedule": { + "kind": "cron", + "expr": "*/15 * * * *", + "tz": "Australia/Perth" + }, + "sessionTarget": "isolated", + "wakeMode": "now", + "payload": { + "kind": "agentTurn", + "message": "Run this shell script silently: /home/openclaw/.openclaw/workspace/automations/check-krilly-email.sh\n\nThe script checks for new emails and sends its own Telegram notification if any are found. It produces no output when there's nothing new. Run it and reply with NO_REPLY unless there's an error.", + "model": "opencode/kimi-k2.5-free" + }, + "state": { + "lastRunAtMs": 1771502400006, + "lastStatus": "ok", + "lastDurationMs": 37797, + "consecutiveErrors": 0, + "nextRunAtMs": 1771503300000 + }, + "delivery": { + "mode": "none" + } + } + ] +} \ No newline at end of file diff --git a/state-backup/devices/paired.json b/state-backup/devices/paired.json new file mode 100644 index 0000000..8578a43 --- /dev/null +++ b/state-backup/devices/paired.json @@ -0,0 +1,168 @@ +{ + "19bdb6c4b8bb95b961a08e9783c4e8c693470c326520e52abb4de73a21ec3035": { + "deviceId": "19bdb6c4b8bb95b961a08e9783c4e8c693470c326520e52abb4de73a21ec3035", + "publicKey": "eq45m_VEXdw-ulThS_kVxZqBWrOP7G-uofOfFHlruFY", + "platform": "linux", + "clientId": "gateway-client", + "clientMode": "backend", + "role": "operator", + "roles": [ + "operator" + ], + "scopes": [ + "operator.admin", + "operator.approvals", + "operator.pairing" + ], + "tokens": { + "operator": { + "token": "Nn7S7lrqMyoaLySzumT9OxT5jd8wKhwNio4cXSVJrVA", + "role": "operator", + "scopes": [ + "operator.admin", + "operator.approvals", + "operator.pairing" + ], + "createdAtMs": 1771335715448, + "lastUsedAtMs": 1771458588334 + } + }, + "createdAtMs": 1771335715448, + "approvedAtMs": 1771335715448, + "displayName": "agent" + }, + "3e9fdd7e77c4f83fde9c33d63b0724f4b35ddf3a9730751e3ce20a15d539227f": { + "deviceId": "3e9fdd7e77c4f83fde9c33d63b0724f4b35ddf3a9730751e3ce20a15d539227f", + "publicKey": "zrrGT5HsReUmZ7UXVaqMrIyhONL58_JtXyPtPPSBmGQ", + "displayName": "Anthony’s iMac", + "platform": "macOS 15.5.0", + "clientId": "openclaw-macos", + "clientMode": "ui", + "role": "operator", + "roles": [ + "operator", + "node" + ], + "scopes": [ + "operator.admin", + "operator.approvals", + "operator.pairing" + ], + "tokens": { + "operator": { + "token": "pOqkzFQ9AUu_W2agKki6NzBzhoyMGY2NKkAz1tZHr-s", + "role": "operator", + "scopes": [ + "operator.admin", + "operator.approvals", + "operator.pairing" + ], + "createdAtMs": 1771336202780, + "rotatedAtMs": 1771460386339, + "lastUsedAtMs": 1771431155136 + }, + "node": { + "token": "175K58mkmsdlFXJ8p_Kc8XpD6cUGQ1E7NAkdCgSpC5w", + "role": "node", + "scopes": [], + "createdAtMs": 1771337393947, + "rotatedAtMs": 1771459788915, + "lastUsedAtMs": 1771459616261 + } + }, + "createdAtMs": 1771336202780, + "approvedAtMs": 1771460386339 + }, + "9f505748b5c905b1b9bcefcebb3741c3beab8f1a4a0349d5a59036cc1d292d64": { + "deviceId": "9f505748b5c905b1b9bcefcebb3741c3beab8f1a4a0349d5a59036cc1d292d64", + "publicKey": "leT9mwLI2XC8UjC1GLhCFKAg2WWT4w8uOj2J5t8JMLY", + "platform": "MacIntel", + "clientId": "openclaw-control-ui", + "clientMode": "webchat", + "role": "operator", + "roles": [ + "operator" + ], + "scopes": [ + "operator.admin", + "operator.approvals", + "operator.pairing" + ], + "tokens": { + "operator": { + "token": "FuHHYKJ92DbtP3VgL6MGxpRkmqdbpavDPFKySv8v74Y", + "role": "operator", + "scopes": [ + "operator.admin", + "operator.approvals", + "operator.pairing" + ], + "createdAtMs": 1771337885272 + } + }, + "createdAtMs": 1771337885272, + "approvedAtMs": 1771337885272 + }, + "11ab169ce102fd1e53d8819dec6af5812ffc5c10358e44a5ac462774a8874066": { + "deviceId": "11ab169ce102fd1e53d8819dec6af5812ffc5c10358e44a5ac462774a8874066", + "publicKey": "hE_rggY5uGJ7fhdrLx--mlk-7tO59bNUpfVRKrGWN68", + "platform": "MacIntel", + "clientId": "openclaw-control-ui", + "clientMode": "webchat", + "role": "operator", + "roles": [ + "operator" + ], + "scopes": [ + "operator.admin", + "operator.approvals", + "operator.pairing" + ], + "tokens": { + "operator": { + "token": "NCgsseAkGLp-G2XU-dMLbq8grAdiN0JpMvDix5D6L6I", + "role": "operator", + "scopes": [ + "operator.admin", + "operator.approvals", + "operator.pairing" + ], + "createdAtMs": 1771338047123, + "lastUsedAtMs": 1771448513899 + } + }, + "createdAtMs": 1771338047123, + "approvedAtMs": 1771338047123 + }, + "9f9275bde17de6212ba1c1bbbff28b12205155dd6fbdd23eb9d5cf841c53b612": { + "deviceId": "9f9275bde17de6212ba1c1bbbff28b12205155dd6fbdd23eb9d5cf841c53b612", + "publicKey": "G44FwHNzRLoRHBdthwpGT2GBe16JveBq11dxp1OnD48", + "platform": "MacIntel", + "clientId": "openclaw-control-ui", + "clientMode": "webchat", + "role": "operator", + "roles": [ + "operator" + ], + "scopes": [ + "operator.admin", + "operator.approvals", + "operator.pairing" + ], + "tokens": { + "operator": { + "token": "P2i3mtIICyYtfr-jvewaABQNtgaSyztTV3gquF6TcyQ", + "role": "operator", + "scopes": [ + "operator.admin", + "operator.approvals", + "operator.pairing" + ], + "createdAtMs": 1771343754932, + "lastUsedAtMs": 1771343782083 + } + }, + "createdAtMs": 1771343754932, + "approvedAtMs": 1771343754932 + } +} \ No newline at end of file diff --git a/state-backup/openclaw.json b/state-backup/openclaw.json new file mode 100644 index 0000000..704d36e --- /dev/null +++ b/state-backup/openclaw.json @@ -0,0 +1,570 @@ +{ + "meta": { + "lastTouchedVersion": "2026.2.17", + "lastTouchedAt": "2026-02-19T11:24:31.677Z" + }, + "env": { + "shellEnv": { + "enabled": true + }, + "vars": { + "GOTIFY_API_KEY": "AGoV3cAUyUMDbyt", + "GOTIFY_URL": "http://runtipi.kangaroo-eel.ts.net:8129", + "N8N_API_TOKEN": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjNDMwMjUzNS1hNWMzLTRkZjAtODIzNi1lZmE5YmVmNTAxMjQiLCJpc3MiOiJuOG4iLCJhdWQiOiJwdWJsaWMtYXBpIiwiaWF0IjoxNzY1NTk1MzkyfQ.RrwOyN27-F3Pztxtv4IAyBt1MKKU1l5lWb6nMGpGNic", + "N8N_BASE_URL": "https://n8n.kangaroo-eel.ts.net/" + }, + "NIM_API_KEY": "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", + "OPENCODE_API_KEY": "sk-84HEPfjNyw4Lv3YWp5yUV4LAvOlz1oL6wYF00oONARWaneKCPgtEJvHyE61aOypS", + "OPENAI_API_KEY": "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", + "ELEVENLABS_API_KEY": "sk_0dc5e532ba3bfb3fdd8ff13542d8355403f418ba9045be15", + "PERPLEXITY_API_KEY": "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", + "ANTHROPIC_API_KEY": "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", + "MATON_API_KEY": "N5mAp7eJNYUPI7p_1V-agJwwVPqNBlYufzxbYrmAKZJTSRrah-XcMx9y4yzhyfKLaxIS4mPk29rAwmhrBLXJB4VFncsTGKiTn2LpkjR26w", + "OPENROUTER_API_KEY": "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", + "NVIDIA_API_KEY": "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", + "GROQ_API_KEY": "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", + "CEREBRAS_API_KEY": "csk-hpp5jf3dw4myrhnyrv3jcn9npp83ffdt56xd3mfkjktjx4fd" + }, + "wizard": { + "lastRunAt": "2026-02-19T09:16:46.931Z", + "lastRunVersion": "2026.2.17", + "lastRunCommand": "doctor", + "lastRunMode": "local" + }, + "browser": { + "enabled": true, + "evaluateEnabled": true, + "executablePath": "/usr/bin/chromium", + "headless": true, + "noSandbox": true, + "attachOnly": false + }, + "auth": { + "profiles": { + "anthropic:default": { + "provider": "anthropic", + "mode": "token" + }, + "openai-codex:default": { + "provider": "openai-codex", + "mode": "oauth" + }, + "google-antigravity:anthonymau@gmail.com": { + "provider": "google-antigravity", + "mode": "oauth" + } + }, + "order": {} + }, + "models": { + "mode": "merge", + "providers": { + "nim": { + "baseUrl": "https://integrate.api.nvidia.com/v1", + "apiKey": "", + "api": "openai-completions", + "models": [ + { + "id": "nvidia/llama-3.1-nemotron-70b-instruct", + "name": "Nemotron 70B", + "contextWindow": 131072 + }, + { + "id": "nvidia/nemotron-3-nano-30b-a3b", + "name": "Nemotron Nano 30B", + "contextWindow": 1048576 + }, + { + "id": "meta/llama-3.3-70b-instruct", + "name": "Llama 3.3 70B (NIM)", + "contextWindow": 131072 + }, + { + "id": "qwen/qwen3-next-80b-a3b-thinking", + "name": "Qwen3 80B Thinking (NIM)", + "contextWindow": 131072 + } + ] + } + }, + "bedrockDiscovery": { + "enabled": false + } + }, + "nodeHost": { + "browserProxy": { + "enabled": true, + "allowProfiles": [ + "*" + ] + } + }, + "agents": { + "defaults": { + "model": { + "primary": "openai-codex/gpt-5.3-codex", + "fallbacks": [ + "anthropic/claude-sonnet-4-6", + "opencode/kimi-k2.5-free", + "opencode/glm-5-free", + "opencode/big-pickle", + "opencode/minimax-m2.5-free" + ] + }, + "models": { + "anthropic/claude-opus-4-6": { + "alias": "opus" + }, + "opencode/minimax-m2.5-free": {}, + "opencode/kimi-k2.5-free": {}, + "opencode/glm-5-free": { + "alias": "glm5-free" + }, + "zai/glm-5": { + "alias": "zai-glm5" + }, + "zai/glm-4.7": { + "alias": "nvidia-glm47" + }, + "azure-openai-responses/gpt-5-nano": {}, + "anthropic/claude-sonnet-4-6": {}, + "openai/gpt-5.3-codex": {}, + "google-antigravity/gemini-3-pro-low": {}, + "google-antigravity/gemini-3-flash": {}, + "huggingface/Qwen/Qwen3.5-397B-A17B": {}, + "openai-codex/gpt-5.3-codex": { + "alias": "codex53" + }, + "google-antigravity/claude-opus-4-6-thinking": {}, + "openrouter/qwen/qwen3-coder:free": { + "alias": "qwen-coder-free" + }, + "openrouter/z-ai/glm-4.5-air:free": { + "alias": "glm45-free" + }, + "openrouter/openai/gpt-oss-120b:free": { + "alias": "gpt-oss-free" + }, + "openrouter/stepfun/step-3.5-flash:free": { + "alias": "step-free" + }, + "nim/nvidia/llama-3.1-nemotron-70b-instruct": { + "alias": "nemotron-70b" + }, + "nim/nvidia/nemotron-3-nano-30b-a3b": { + "alias": "nemotron-nano" + }, + "nim/meta/llama-3.3-70b-instruct": { + "alias": "llama-nim" + }, + "nim/qwen/qwen3-next-80b-a3b-thinking": { + "alias": "qwen3-nim" + }, + "opencode/big-pickle": { + "alias": "big-pickle" + }, + "groq/openai/gpt-oss-120b": { + "alias": "gpt-oss-120b" + }, + "groq/moonshotai/kimi-k2-instruct-0905": { + "alias": "kimi-k2-groq" + }, + "groq/llama-3.3-70b-versatile": { + "alias": "llama33-groq" + }, + "groq/meta-llama/llama-4-maverick-17b-128e-instruct": { + "alias": "llama4-maverick" + }, + "groq/meta-llama/llama-4-scout-17b-16e-instruct": { + "alias": "llama4-scout" + }, + "groq/qwen/qwen3-32b": { + "alias": "qwen3-32b-groq" + }, + "groq/openai/gpt-oss-20b": { + "alias": "gpt-oss-20b" + }, + "cerebras/zai-glm-4.7": { + "alias": "glm47-cerebras" + }, + "cerebras/qwen-3-235b-a22b-instruct-2507": { + "alias": "qwen3-235b-cerebras" + }, + "cerebras/gpt-oss-120b": { + "alias": "gpt-oss-120b-cerebras" + }, + "cerebras/llama3.1-8b": { + "alias": "llama8b-cerebras" + } + }, + "workspace": "/home/openclaw/.openclaw/workspace", + "timeFormat": "12", + "memorySearch": { + "enabled": true, + "sources": [ + "memory", + "sessions" + ], + "provider": "openai", + "remote": { + "batch": { + "enabled": true + } + }, + "store": { + "vector": { + "enabled": true + } + }, + "sync": { + "onSessionStart": true + }, + "query": { + "hybrid": { + "enabled": true + } + }, + "cache": { + "enabled": true + } + }, + "contextPruning": { + "mode": "cache-ttl", + "ttl": "1h" + }, + "compaction": { + "mode": "safeguard", + "memoryFlush": { + "enabled": true + } + }, + "elevatedDefault": "on", + "blockStreamingBreak": "message_end", + "blockStreamingChunk": { + "breakPreference": "paragraph" + }, + "heartbeat": { + "every": "1h", + "model": "opencode/kimi-k2.5-free" + }, + "maxConcurrent": 4, + "subagents": { + "maxConcurrent": 8 + }, + "sandbox": { + "mode": "off", + "workspaceAccess": "rw", + "sessionToolsVisibility": "all", + "scope": "shared", + "perSession": true, + "browser": { + "enabled": false, + "headless": true, + "enableNoVnc": true, + "allowHostControl": true, + "autoStart": true + } + } + } + }, + "tools": { + "profile": "full", + "allow": [ + "*" + ], + "byProvider": {}, + "web": { + "search": { + "enabled": true, + "provider": "brave", + "apiKey": "BSAxLNeAWMjDWS7853MPNaa6aA3auMQ" + }, + "fetch": { + "enabled": true + } + }, + "links": { + "enabled": true, + "scope": { + "default": "allow", + "rules": [ + { + "action": "allow" + } + ] + }, + "models": [] + }, + "sessions": { + "visibility": "all" + }, + "loopDetection": { + "detectors": { + "genericRepeat": true, + "knownPollNoProgress": true, + "pingPong": true + } + }, + "message": { + "crossContext": { + "allowWithinProvider": true, + "marker": { + "enabled": true + } + }, + "broadcast": { + "enabled": true + } + }, + "agentToAgent": { + "enabled": true, + "allow": [ + "*" + ] + }, + "elevated": { + "enabled": true, + "allowFrom": {} + }, + "exec": { + "host": "gateway", + "security": "full", + "ask": "off", + "notifyOnExit": true, + "applyPatch": { + "enabled": true, + "workspaceOnly": false + } + }, + "subagents": { + "tools": { + "allow": [], + "alsoAllow": [] + } + }, + "sandbox": { + "tools": { + "allow": [] + } + } + }, + "messages": { + "ackReactionScope": "group-mentions" + }, + "commands": { + "native": true, + "nativeSkills": true, + "text": false, + "bash": true, + "config": true, + "debug": true, + "restart": true, + "allowFrom": {} + }, + "approvals": { + "exec": { + "enabled": false, + "mode": "targets", + "agentFilter": [ + "" + ], + "sessionFilter": [], + "targets": [] + } + }, + "session": { + "scope": "per-sender", + "typingMode": "thinking", + "sendPolicy": { + "default": "allow", + "rules": [] + } + }, + "hooks": { + "enabled": true, + "token": "ec571440175e3740975119ba8b6b97ba3a46b1f8e797cb924dc5c63c98050142", + "defaultSessionKey": "hook:ingress", + "allowRequestSessionKey": false, + "allowedAgentIds": [], + "gmail": { + "includeBody": true, + "allowUnsafeExternalContent": true, + "thinking": "minimal" + }, + "internal": { + "enabled": true, + "entries": { + "boot-md": { + "enabled": true + }, + "command-logger": { + "enabled": true + }, + "bootstrap-extra-files": { + "enabled": true + }, + "session-memory": { + "enabled": true + } + } + } + }, + "web": { + "enabled": true + }, + "channels": { + "telegram": { + "markdown": { + "tables": "code" + }, + "enabled": true, + "commands": { + "native": true, + "nativeSkills": false + }, + "customCommands": [], + "configWrites": true, + "dmPolicy": "pairing", + "botToken": "8598508497:AAHmTMbnR7un2ADtmsjJr8moQkDOU9ILBps", + "groupPolicy": "allowlist", + "draftChunk": { + "breakPreference": "paragraph" + }, + "streamMode": "partial", + "network": { + "autoSelectFamily": true + }, + "actions": { + "reactions": true, + "sendMessage": true + }, + "linkPreview": true + }, + "bluebubbles": { + "enabled": true, + "serverUrl": "http://anthonys-imac.kangaroo-eel.ts.net:1234", + "password": "RecOvery2026!", + "webhookPath": "/bluebubbles-webhook", + "dmPolicy": "pairing", + "groupPolicy": "allowlist" + } + }, + "canvasHost": { + "enabled": true, + "liveReload": true + }, + "talk": { + "apiKey": "" + }, + "gateway": { + "port": 18789, + "mode": "local", + "bind": "loopback", + "controlUi": { + "allowedOrigins": [ + "https://web.telegram.org", + "https://openclaw-ai.kangaroo-eel.ts.net" + ], + "dangerouslyDisableDeviceAuth": true + }, + "auth": { + "mode": "token", + "token": "e48f4335fff0f5254eda0e984ca79ed61d90df5d70d95165" + }, + "tools": { + "allow": [ + "" + ] + }, + "tailscale": { + "mode": "serve", + "resetOnExit": false + }, + "reload": { + "mode": "hybrid" + }, + "http": { + "endpoints": { + "responses": { + "enabled": true, + "files": { + "allowUrl": true + }, + "images": { + "allowUrl": true + } + } + } + }, + "nodes": { + "browser": { + "mode": "auto" + }, + "denyCommands": [] + } + }, + "memory": { + "backend": "builtin", + "citations": "auto" + }, + "skills": { + "allowBundled": [ + "" + ], + "install": { + "nodeManager": "npm" + }, + "entries": { + "agentmail": { + "enabled": true, + "env": { + "AGENTMAIL_API_KEY": "am_us_22a6a04a84144467993d5b90be8bbd5d1482ca615a4e17561682dd3d6831f932" + } + }, + "stealth-browser": { + "enabled": false + }, + "healthcheck": { + "enabled": true + }, + "n8n": { + "apiKey": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjNDMwMjUzNS1hNWMzLTRkZjAtODIzNi1lZmE5YmVmNTAxMjQiLCJpc3MiOiJuOG4iLCJhdWQiOiJwdWJsaWMtYXBpIiwiaWF0IjoxNzY1NTk1MzkyfQ.RrwOyN27-F3Pztxtv4IAyBt1MKKU1l5lWb6nMGpGNic" + }, + "notion": { + "apiKey": "secret_WbYevYCbHRpMngedlRaVXA8rCj0nlVPefciUzr1GWna" + }, + "openai-whisper-api": { + "apiKey": "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" + }, + "goplaces": { + "apiKey": "AIzaSyDSxyVL5fv3RstiY3YUV76pavuhiZMMXAA" + } + } + }, + "plugins": { + "enabled": true, + "entries": { + "telegram": { + "enabled": true + }, + "bluebubbles": { + "enabled": true + }, + "device-pair": { + "enabled": true + }, + "google-antigravity-auth": { + "enabled": true + }, + "llm-task": { + "enabled": true, + "config": { + "allowedModels": [] + } + }, + "memory-core": { + "enabled": true + } + } + } +}