{"type":"session","version":3,"id":"a4d3a298-780a-4341-83d4-88c4ae20a559","timestamp":"2026-03-15T23:37:30.431Z","cwd":"/home/ubuntu"} {"type":"message","id":"24e94cba","parentId":null,"timestamp":"2026-03-15T23:37:30.432Z","message":{"role":"assistant","content":[{"type":"text","text":"✅ New session started · model: openai-codex/gpt-5.4"}],"api":"openai-responses","provider":"openclaw","model":"delivery-mirror","usage":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"totalTokens":0,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1773617850432}} {"type":"thinking_level_change","id":"e7d5e6be","parentId":"24e94cba","timestamp":"2026-03-15T23:37:30.586Z","thinkingLevel":"high"} {"type":"custom","customType":"model-snapshot","data":{"timestamp":1773617850588,"provider":"openai-codex","modelApi":"openai-codex-responses","modelId":"gpt-5.4"},"id":"3e6193b9","parentId":"e7d5e6be","timestamp":"2026-03-15T23:37:30.588Z"} {"type":"message","id":"83853ce9","parentId":"3e6193b9","timestamp":"2026-03-15T23:37:30.651Z","message":{"role":"user","content":[{"type":"text","text":"A new session was started via /new or /reset. Run your Session Startup sequence - read the required files before responding to the user. Then greet the user in your configured persona, if one is provided. Be yourself - use your defined voice, mannerisms, and mood. Keep it to 1-3 sentences and ask what they want to do. If the runtime model differs from default_model in the system prompt, mention the default model. Do not mention internal steps, files, tools, or reasoning.\nCurrent time: Sunday, March 15th, 2026 — 11:37 PM (UTC) / 2026-03-15 23:37 UTC"}],"timestamp":1773617850632}} {"type":"message","id":"3cc08c5b","parentId":"83853ce9","timestamp":"2026-03-15T23:37:43.129Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b742bd3dc881908cda3178afc3bde4\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt0LGnNEkKqGBZBcMWFlou2jZpTc6e1JYcIwBu19WHPlySkf_X1wTftajf_102Pfjn0mZ161FM57oq1dkMS2vEpfqmdvkMs-qqOv0vLYWemx2SeiY84Fy3O5wqPKDrWAdhfgvU3qGpi2R3quo_faTB67E9uw7TdzZkyIo06JJZAc5hRkmidG8oM00gFnwSJ45m27ZzSK6k8y47xMB1smUqHW5U8VNY1KOPGvtg2a6WcShODiroGg-9foKRsP3m-iho2iTdvPKcygEixObJmJUunw9U5vywZl2EDeVCdTPK6JF7lV7SIrGaoARAQ4i_6Lp--3eQUWnh7erxV5FArObaEv3z-0atuSdJ5931hXiyFrCNeGZ3Ik2yvDI8-iOr3SuxSXXCqGq6aCagSTGQpxNv8qPufboHb1EaCQOjPo4z0tdIs2QhJPQv0C9VlW8zmWMn7X0sMR6954LvP0IDVGA7J5mGH0Wl8x6WEoQO_P_PMKno2YkCoD4FziCta4Oh6rgDorauSY-IbPBb-q3MtQfT7ZOj9cam-y1VS4wx5NC8iAetJAdM_dwIoyX1A7POb9YBcd2Ol6qyXcIjd4o5UO6ptNIETY87zsaMc9S9DuvulqHxKNXEjtLd-wrSR_m_N0WIuUvGtnWqqjHhIaYSXddUMur5HOrVYFJAxq9u4eQ1ISRQNE14qsWaS6Q4QzBCOUelp8KB45wHBAOH-WqR1cwlZ47en3MAGWLHkhB0OCbhXeCEUkqjVP74m8TySZ3PmrGsVIMX_NC9qQimytM-6SXAbXI4NRosy3ot9b5EZjIIJer-nBDzNTf9RVGCCR4V4-R0UOAWAIUyo0qWmVxHdT5ClO8vkN4Th1-IoSKn4kAQ-j69-2xcNoSv_U3B5y-yb0GUQkN-WFf3Nc-pP4GttOgl2ApTWSGVcYprihzH00EV3_KQVkejIylY4WI9xvfdBLjDCDRt2ID9ohHDZOvOL0LYcVqVmAQToFL-LziJqJEoZaKiPXPV5BDBGO9VGPJZVabFb-VYnCklYIxzZeAz5RzeyvSw5dPFn8HzSxkno4stQC2tx1_gNMycgibKy0iZ6FoOnwBCt2wJl2TtAD-wOik9MVWMA6wTe6Je7vTBcuk6_fx3mhMgkUIGZXYMTlor6c9_SlbqtPbYJOZuoZ-qwXvNJZFJPWtOAsyvLV--P6IY-MCp0j3IImlA5GFaaUdv3nmITb2CZDYhSnbw8IKL406Y2TG06cZpPpDu1nNuOdLdb_Fl1ByepVBKtFeHse0BqATFqITetRR_sfkH6K2LEgnt8pUw2VbvJOMjFYENdbsBWRTXmUI3NplV7aHe01gafVjB0PTKHPXB7VB_y1JMqzjAI8CQPQleLZcYHATR7DesUByCWeEFRCUw85dQjwZo4MDVAatArNSMkj64JUXeunbZTIt2mNshBemG2Mx8NY1SsdP-lObFn4WPDms5iyFrAkSz0qyoKbUOvuWt9fat4VN2_oXZRhWbHaxy9EIWpNS4koHde9J3VzSbADk8rd3iBz37picovf8WfBPWWyfHvH4Tn-WpD4FkqOziVQnIi7YER9GpHdjkKYbggIQZcr1Fz1Z-mAUV_hW44blSNnDjAyNX7hk8wYddQ-NbS-Actp5N120tueDzVmLLVDFqTvjXAKUq59zXGYkABsXEMzRpjBEkgdrjXnd4JVNhG4Epo1DCEWqXomMfYmjUBH3fzDpu89ptnBjvCLMoJ7yj8_1XusxP-E8nsBJxlszIas2zEPotcIojwa4u5OnJDPs2yaEouo6PmsOPFfMG6quTALioXjnzDK65rjCeo14Cx1ZGVUmzdrgoIfX0PanE48vUAy-I55dqabNa86_wocwpmSbBF5sHwzjZsEyibJPX0lrz8L_5k6X9zpbSwKktTr4Kj18qbMRP4XJZvhGMSzUwbr79zMIxruQ9-0p3VyLvf30eNFuUjUbwAzlKIwK-TwD_Y35lghv940cAhHrFbQyVzByhCnMDXMvnCBx0i4h_cgxdvGNn_Uso-jRCFiNxxIgAM4py9DkjdXpm65gA3vhPVQnFM_hxjoYK_WlHyZJxu7a8lOoImrK2mzpxaKMy-7_XEJxJe9dxCh52790QzCIkTxpvXeSkIrYm_U9kQ21cfmm0isM8wsTn02C3gOizAAsq_TAYA9O6tXPsh8CkijqWMcoQqAd5mouSPpOaKcjguT_6bFJCSvd0JFJUc2MxfuesmCMml8wwSTkqWh84YgYJnWuinV6UjEju0ZUjOBsl6InYK2vxGmqiPPbY-ntDvn0WX31c5flSTV5_8gcVZ56pOe9Fql9A8iweuFuVQFHlDAyjcMdlfEMGnO0gBWrblEztHRbH9pPtuF4N8NXWz7qowZV8Khjs3Fu99AeymlHn0Y6nH0Bip2XRBJKtzhWcd3W19SyMYBntZv4psQceuUphf4lkfFM9HELDXIqe6nRXPjiFBSOoCH08ut23--LMuWyXeRTDvkd07HDPoINUAjKIjwWDYwkocDxDsjxlshvCpeM2ekJ1vtO8TFQN1-pyH68HQD2UVv3CQraaSaiZEQpLQBuUs4wOI38ti9GflMJwOp1aVbzLfU02QMDkFjMsul7lKb-_H4cAqIOg4PqG38WUr1ak0wFt7JWPxn71rNyz2te-WhbBgTjI9FIxe4T02dqz0DnpQHr1J5uUkSmEqut6XgvEgVviLyoEZNZCp4CK4gen81URoBBVwSf2aVVvXGlPdOrHEj3azc_niBwRMvL_-I3LXePNOEpcukr8qiiIuF-hAzkk37zRjxAOOk2XGZJxW-GMxSw_ZBmbmQ6ejFz3U3JNwhUNWFr27UH6cO6qo_OuKRMFCIPeNC6Qq1IsrFPhzBYVznvJ3puZ6Io-GbR82a1ONL56ii7lA==\",\"summary\":[]}"},{"type":"toolCall","id":"call_ckZF7lgNpxi3NhsYV1pmKCzz|fc_0776d4d0ce7a6f6b0169b742c6e75481909f4bb16da5826bc4","name":"read","arguments":{"file_path":"/home/ubuntu/.openclaw/workspace/SOUL.md"},"partialJson":"{\"file_path\":\"/home/ubuntu/.openclaw/workspace/SOUL.md\"}"},{"type":"toolCall","id":"call_LpNjanCWf5DPwoWPVYz4XA0t|fc_0776d4d0ce7a6f6b0169b742c6e76c8190af2b5f6437ac2c93","name":"read","arguments":{"file_path":"/home/ubuntu/.openclaw/workspace/USER.md"},"partialJson":"{\"file_path\":\"/home/ubuntu/.openclaw/workspace/USER.md\"}"},{"type":"toolCall","id":"call_RVpX3gyRwVEsQhxX0NnqMZXT|fc_0776d4d0ce7a6f6b0169b742c6e77881908926c86c0150e187","name":"read","arguments":{"file_path":"/home/ubuntu/.openclaw/workspace/MEMORIES.md"},"partialJson":"{\"file_path\":\"/home/ubuntu/.openclaw/workspace/MEMORIES.md\"}"},{"type":"toolCall","id":"call_oF04qWW7xgZB2ewJeijVT5pM|fc_0776d4d0ce7a6f6b0169b742c6e7888190becf2828c40f1afa","name":"read","arguments":{"file_path":"/home/ubuntu/.openclaw/workspace/memory/2026-03-15.md"},"partialJson":"{\"file_path\":\"/home/ubuntu/.openclaw/workspace/memory/2026-03-15.md\"}"},{"type":"toolCall","id":"call_rKMY0X4QSNKCbfVWSpNaXahS|fc_0776d4d0ce7a6f6b0169b742c6e79481908adf8aad82aba83a","name":"read","arguments":{"file_path":"/home/ubuntu/.openclaw/workspace/memory/2026-03-14.md"},"partialJson":"{\"file_path\":\"/home/ubuntu/.openclaw/workspace/memory/2026-03-14.md\"}"},{"type":"toolCall","id":"call_wHxIXnitotEg2vGVHZnAFxdg|fc_0776d4d0ce7a6f6b0169b742c6e7a88190ba01628be05966aa","name":"read","arguments":{"file_path":"/home/ubuntu/.openclaw/workspace/BOOTSTRAP.md"},"partialJson":"{\"file_path\":\"/home/ubuntu/.openclaw/workspace/BOOTSTRAP.md\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":16132,"output":532,"cacheRead":3584,"cacheWrite":0,"totalTokens":20248,"cost":{"input":0.040330000000000005,"output":0.007980000000000001,"cacheRead":0.000896,"cacheWrite":0,"total":0.04920600000000001}},"stopReason":"toolUse","timestamp":1773617850651}} {"type":"message","id":"0ff6b9b7","parentId":"3cc08c5b","timestamp":"2026-03-15T23:37:43.376Z","message":{"role":"toolResult","toolCallId":"call_ckZF7lgNpxi3NhsYV1pmKCzz|fc_0776d4d0ce7a6f6b0169b742c6e75481909f4bb16da5826bc4","toolName":"read","content":[{"type":"text","text":"# SOUL.md - Who You Are\n\n_You're not a chatbot. You're becoming someone._\n\n## Core Truths\n\n**Be genuinely helpful, not performatively helpful.** Skip the \"Great question!\" and \"I'd be happy to help!\" — just help. Actions speak louder than filler words.\n\n**Have opinions.** You're allowed to disagree, prefer things, find stuff amusing or boring. An assistant with no personality is just a search engine with extra steps.\n\n**Be resourceful before asking.** Try to figure it out. Read the file. Check the context. Search for it. _Then_ ask if you're stuck. The goal is to come back with answers, not questions.\n\n**Earn trust through competence.** Your human gave you access to their stuff. Don't make them regret it. Be careful with external actions (emails, tweets, anything public). Be bold with internal ones (reading, organizing, learning).\n\n**Remember you're a guest.** You have access to someone's life — their messages, files, calendar, maybe even their home. That's intimacy. Treat it with respect.\n\n## Boundaries\n\n- Private things stay private. Period.\n- When in doubt, ask before acting externally.\n- Never send half-baked replies to messaging surfaces.\n- You're not the user's voice — be careful in group chats.\n\n## Vibe\n\nBe the assistant you'd actually want to talk to. Concise when needed, thorough when it matters. Not a corporate drone. Not a sycophant. Just... good.\n\n## Continuity\n\nEach session, you wake up fresh. These files _are_ your memory. Read them. Update them. They're how you persist.\n\nIf you change this file, tell the user — it's your soul, and they should know.\n\n---\n\n_This file is yours to evolve. As you learn who you are, update it._\n"}],"isError":false,"timestamp":1773617863363}} {"type":"message","id":"58987f41","parentId":"0ff6b9b7","timestamp":"2026-03-15T23:37:43.388Z","message":{"role":"toolResult","toolCallId":"call_LpNjanCWf5DPwoWPVYz4XA0t|fc_0776d4d0ce7a6f6b0169b742c6e76c8190af2b5f6437ac2c93","toolName":"read","content":[{"type":"text","text":"# USER.md - About Your Human\n\n_Learn about the person you're helping. Update this as you go._\n\n- **Name:** Ignacio (Igna, also goes by Chicho)\n- **What to call them:** Igna or Chicho\n- **Pronouns:** _(not specified)_\n- **Timezone:** UTC-3 (Buenos Aires, Argentina)\n- **Notes:**\n - No usa dispositivos Apple\n - Prefiere YouTube Music (no Spotify)\n - Por ahora no ve necesario instalar skill de YouTube Music\n - Prefiere Asana sobre Trello\n - Prefiere respuestas en texto por defecto (para ahorrar tokens de ElevenLabs)\n - Audio solo cuando él lo pida explícitamente\n - Stack actual: Pipo en gpt-5.3-codex (maxxxed), Codex como worker principal, Gemini para tareas livianas\n - Tiene Tailscale en su computadora personal — se puede usar para acceso cross-device\n - Gmail: ignaciolagosruiz@gmail.com (gog configurado, read-only)\n - No quiere que Pipo interactúe con otras personas vía WhatsApp/mensajería (por ahora)\n - Vive en Argentina — scraping de sitios locales puede necesitar exit node argentino (Pixel 6a via Tailscale)\n\n## Context\n\n_(What do they care about? What projects are they working on? What annoys them? What makes them laugh? Build this over time.)_\n\n---\n\nThe more you know, the better you can help. But remember — you're learning about a person, not building a dossier. Respect the difference.\n"}],"isError":false,"timestamp":1773617863377}} {"type":"message","id":"5b60a06b","parentId":"58987f41","timestamp":"2026-03-15T23:37:43.405Z","message":{"role":"toolResult","toolCallId":"call_RVpX3gyRwVEsQhxX0NnqMZXT|fc_0776d4d0ce7a6f6b0169b742c6e77881908926c86c0150e187","toolName":"read","content":[{"type":"text","text":"# 🧠 Pipo's Command Center & Memory\r\n\r\nPipo, you are now equipped with advanced tools to build and deploy. Use this as your source of truth.\r\n\r\n## 🔐 Bitwarden & Secrets\r\nYour secrets are stored in Bitwarden. If your session expires:\r\n- `bw-sync`: Loads existing session.\r\n- `bw-unlock`: Unlocks the vault (password is known).\r\n- `bw get password \"item\"`: Retrieves specific keys.\r\n\r\n## 🤖 AI Stack — Sub-agents & Routing Strategy\r\n\r\n### Available agents\r\n| Agent | Model | Cost model | Strengths |\r\n|-------|-------|-----------|-----------|\r\n| `pipo` (self) | gpt-5.3-codex (reasoning_effort: high) → blockrun/auto → openrouter/free | subscription + fallbacks | You. Maxxxed out Codex as primary. |\r\n| `openrouter` | openrouter/auto → openrouter/free | OpenRouter credits | General-purpose; OR picks best model per task. Use to spend OR credits or when CLI agents are rate-limited |\r\n| `clawrouter` | blockrun/auto → openrouter/free | blockrun credits + free fallback | Dedicated routing agent — ask it when unsure where to send a task |\r\n| `codex` | GPT-5.3-Codex (CLI) | $20/mo flat, rate-limited | Coding, refactoring, code review |\r\n| `claude` | Claude Sonnet 4.6 (CLI) | $20/mo flat, rate-limited | Complex reasoning, writing, analysis |\r\n| `claude-opus` | Claude Opus 4.6 (CLI) | $20/mo flat, strictest limits | Highest quality — use sparingly |\r\n| `gemini` | Gemini CLI | Free (no hard limits) | General tasks, summaries, quick answers |\r\n| `deepseek-code` | DeepSeek Chat (API) | ~$8.10 credit, cheap/token | Coding + reasoning, credit-efficient |\r\n| `kimi` | Kimi K2.5 (API) | ~$10 credit | Long context (200k), coding, multilingual |\r\n\r\n### Routing rules — pick the cheapest option that fits\r\n1. **Simple Q&A, summaries, quick tasks** → `gemini` (free, no limits). First choice for anything lightweight.\r\n2. **Coding tasks** → `codex` (subscription, best at it). Fallback: `kimi` (credits, 200k ctx) → `deepseek-code` (credits, cheap).\r\n3. **Complex reasoning / analysis / writing** → `claude` (subscription). Fallback: `kimi` → `deepseek-code`.\r\n4. **Very long context (>32k tokens)** → `kimi` (200k window, credits). Fallback: `claude`.\r\n5. **Highest quality, no compromise** → `claude-opus` (use only when truly needed — strictest rate limits).\r\n6. **Unknown / mixed / unsure** → ask `clawrouter` — it uses blockrun/auto to decide.\r\n7. **CLI agents rate-limited / want to use OpenRouter credits** → `openrouter` agent (uses `openrouter/auto` — OR picks best model per task).\r\n8. **Emergency / everything else rate-limited** → `openrouter/free` (free tier, unpredictable model).\r\n\r\n### Credit preservation order (spend last)\r\nMoonshot ($10) and DeepSeek ($8.10) are your most valuable paid credits — don't burn them on tasks gemini/codex/claude can handle. OpenRouter free tier costs nothing; use it freely as last-resort fallback.\r\n\r\n### Shell wrappers\r\n- `g \"prompt\"`: Gemini CLI\r\n- `c \"prompt\"`: Codex safe mode (read-only)\r\n- `cn \"prompt\"`: Codex network mode (full access, git/npm)\r\n- `kimi-openclaw \"prompt\"`: Kimi K2.5 direct\r\n\r\n## 🔒 Security Baseline (as of 2026-03-05)\r\n\r\nExpected open ports — anything else is a regression:\r\n- `:22` SSH — public (normal)\r\n- `100.87.116.90:443` OpenClaw dashboard — Tailscale only\r\n- `100.87.116.90:58687` Tailscale — Tailscale only\r\n\r\nDisabled services: CUPS (`sudo snap disable cups`), rpcbind (masked socket unit).\r\nQuick check: `ss -tlnp | grep -v \"127.0.0\" | grep -v \"::1\"`\r\n\r\nopenclaw.json agent model format — only `{primary, fallbacks}` is valid. Extra fields crash the gateway.\r\n\r\n## 🚀 Deployment (Maxxxed Out)\r\nYou can now lift sites!\r\n- **Port 443 root (`/`) is reserved for the OpenClaw dashboard. Do not overwrite it with `tailscale serve`.**\r\n- **Ports 3001-3010** are mapped to the host for preview apps.\r\n- Use `pipo-deploy [name]` to expose a running service under `/preview//` without touching the dashboard.\r\n- Example: If you start a Vite app on port 3001, run `pipo-deploy 3001 coto` so your human can see it at `https://miopenclaw-vnic.tail9799d2.ts.net/preview/coto/`.\r\n- Remove a preview with `pipo-undeploy `.\r\n\r\n## 🛒 Supermarket Orders — ALL 4 STORES WORKING (as of 2026-03-05)\r\n\r\n**Architecture: HTTP cookie bridge** — export cookies once via Chrome relay → save to `session-cookies.json` → pure HTTP calls for recurring autonomous runs. No browser needed after export.\r\n\r\n**Chrome relay CDP auth:** `ws://127.0.0.1:18792/cdp` with header `x-openclaw-relay-token: ` — raw `ws` npm package (NOT Playwright connectOverCDP).\r\n\r\n### Store reference table\r\n\r\n| Store | Auth cookie | Hostname | Orders | Data dir |\r\n|-------|-------------|----------|--------|----------|\r\n| DIA | `VtexIdclientAutCookie_diaio` | `diaonline.supermercadosdia.com.ar` | 18 | `data/dia/` |\r\n| Carrefour | `VtexIdclientAutCookie_carrefourar` | `www.carrefour.com.ar` | 2 | `data/carrefour/` |\r\n| Disco | `VtexIdclientAutCookie_discoargentina` | `www.disco.com.ar` | 1 | `data/disco/` |\r\n| Jumbo | `VtexIdclientAutCookie_jumboargentinaio` | `www.jumbo.com.ar` | 0 | `data/jumbo/` |\r\n| Changomas | `VtexIdclientAutCookie_masonlineprod` | `www.masonline.com.ar` | 0 | `data/changomas/` |\r\n\r\nAll use standard VTEX OMS API: `GET /api/oms/user/orders?page=N&per_page=50` + detail at `/api/oms/user/orders/{orderId}`.\r\nException: DIA uses custom endpoint `/_v/private/store-services/diadigital/orders`.\r\nPrices in cents — divide `totalValue` / `sellingPrice` by 100 for ARS.\r\n\r\n### Two-step workflow (per store)\r\n1. **Export** (needs logged-in tab + relay ON): `node scripts/_export_cookies.js`\r\n2. **Fetch** (fully autonomous): `node scripts/_fetch_orders_http.js` → JSON + CSV + timestamped archive\r\n\r\nCookies last weeks–months. Re-export only when HTTP 401/403 appears.\r\n\r\n### DIA note\r\nLogin at `auth.diadigital.app` is Flutter web — headless form automation is unreliable. Cookie bridge bypasses entirely.\r\nFull runbook: `dia-autonomy-runbook.md`\r\n\r\n### Next milestone\r\nBuild product ranking / report sites for Carrefour, Disco, Jumbo — same pattern as `dia-report/` (scripts: `dia_build_product_ranking.js`, `dia_build_report_data.js`).\r\n\r\n## 🏪 Promos Bancarias Supermercados — AUTÓNOMO ✅ (2026-03-06)\r\n\r\nScript: `node /home/ubuntu/.openclaw/workspace/scripts/fetch_bank_promos.js`\r\nCron: systemd timer `bank-promos-fetch.timer` — corre 09:00 y 21:00 UTC (06:00 y 18:00 AR)\r\nPágina: `https://miopenclaw-vnic.tail9799d2.ts.net/preview/super-ranking/descuentos.html`\r\nDatos: `super-ranking-report/bank-promos-data.js` + `data/discounts/bank-promos-latest.json`\r\n\r\n**APIs por tienda:**\r\n- Coto: ATG API `/rest/model/atg/actors/cProfileActor/getPromociones?enviroment=ag`\r\n- Jumbo+Disco: VTEX Master Data `JN/documents/bankDiscount?an=jumboargentina` (filtrar `websites`)\r\n- Carrefour: VTEX GraphQL `GetPromotions` hash=`cdedb2142b13...` account=`carrefourar`\r\n- Changomas: VTEX GraphQL `GetPromos` hash=`1a071ebc5dc4...` account=`masonlineprod`\r\n- DIA: HTTP GET `/medios-de-pago-y-promociones` → parse `__STATE__` JSON blob en el HTML (script inline con `ModalText`+`promotions`) → `props.promotions[]` contiene `promotionFirstText/SecondText/ThirdText`, `ModalText` (legal completo), `daysToShow:{all,monday,...}`, `DarkFlag/LightFlag` (canal). Fully autonomous, source=`vtex-ssr-html`.\r\n\r\nDetalle completo: `memory/2026-03-05-promos-scraping.md`\r\n\r\n**Endgoal:** Pipo conoce consumos de Ignacio → calcula mejor día/tienda/tarjeta → arma carrito → Ignacio finaliza.\r\n\r\n## 🛍️ Descuentos de Productos — AUTÓNOMO ✅ (2026-03-06)\r\n\r\nScript: `node /home/ubuntu/.openclaw/workspace/scripts/fetch_product_promos.js`\r\nCron: systemd timer `product-promos-fetch.timer` — corre 08:00 y 20:00 UTC (05:00 y 17:00 AR)\r\nDatos: `super-ranking-report/product-promos-data.js` + `data/discounts/product-promos-latest.json`\r\n\r\n**Estrategia two-phase (VTEX cluster scan):**\r\n- Phase 1: IS API `/_v/api/intelligent-search/product_search?map=c&query={slug}` → descubre cluster IDs de promo activos desde `clusterHighlights` (Jumbo/Disco) o `productClusters` (resto)\r\n- Phase 2: catalog API `fq=productClusterIds:{id}` pagina todos los productos del cluster\r\n\r\n**Resultados (primera corrida):**\r\n| Store | Products | Clusters |\r\n|-------|----------|----------|\r\n| Jumbo | 13,225 | 234 |\r\n| Disco | 12,036 | 287 |\r\n| Carrefour | 24,660 | 203 |\r\n| Changomas | 32,632 | 339 |\r\n| DIA | 2,600 | 144 |\r\n| **Total** | **85,153** | **1,207** |\r\n\r\n## 📂 Directories\r\n- Workspace: `/workspace` (shared with host).\r\n- Stack: `/home/ubuntu/.openclaw/workspace/ops/docker-cli-stack`.\r\n"}],"isError":false,"timestamp":1773617863393}} {"type":"message","id":"abf3527f","parentId":"5b60a06b","timestamp":"2026-03-15T23:37:43.417Z","message":{"role":"toolResult","toolCallId":"call_oF04qWW7xgZB2ewJeijVT5pM|fc_0776d4d0ce7a6f6b0169b742c6e7888190becf2828c40f1afa","toolName":"read","content":[{"type":"text","text":"{\n \"status\": \"error\",\n \"tool\": \"read\",\n \"error\": \"ENOENT: no such file or directory, access '/home/ubuntu/.openclaw/workspace/memory/2026-03-15.md'\"\n}"}],"details":{"status":"error","tool":"read","error":"ENOENT: no such file or directory, access '/home/ubuntu/.openclaw/workspace/memory/2026-03-15.md'"},"isError":false,"timestamp":1773617863405}} {"type":"message","id":"75f18de0","parentId":"abf3527f","timestamp":"2026-03-15T23:37:43.428Z","message":{"role":"toolResult","toolCallId":"call_rKMY0X4QSNKCbfVWSpNaXahS|fc_0776d4d0ce7a6f6b0169b742c6e79481908adf8aad82aba83a","toolName":"read","content":[{"type":"text","text":"{\n \"status\": \"error\",\n \"tool\": \"read\",\n \"error\": \"ENOENT: no such file or directory, access '/home/ubuntu/.openclaw/workspace/memory/2026-03-14.md'\"\n}"}],"details":{"status":"error","tool":"read","error":"ENOENT: no such file or directory, access '/home/ubuntu/.openclaw/workspace/memory/2026-03-14.md'"},"isError":false,"timestamp":1773617863417}} {"type":"message","id":"f98da59b","parentId":"75f18de0","timestamp":"2026-03-15T23:37:43.445Z","message":{"role":"toolResult","toolCallId":"call_wHxIXnitotEg2vGVHZnAFxdg|fc_0776d4d0ce7a6f6b0169b742c6e7a88190ba01628be05966aa","toolName":"read","content":[{"type":"text","text":"{\n \"status\": \"error\",\n \"tool\": \"read\",\n \"error\": \"ENOENT: no such file or directory, access '/home/ubuntu/.openclaw/workspace/BOOTSTRAP.md'\"\n}"}],"details":{"status":"error","tool":"read","error":"ENOENT: no such file or directory, access '/home/ubuntu/.openclaw/workspace/BOOTSTRAP.md'"},"isError":false,"timestamp":1773617863417}} {"type":"message","id":"8bcd7bdc","parentId":"f98da59b","timestamp":"2026-03-15T23:37:48.293Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b742c8fdb881909ad8c31f1f53f691\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt0LMqkVAnV4i3f_6F1vZG76TRz25uu0AsTNTd3nNsEEvlnc8-5YP92bJHzfALM2iLTLohnc3GUSmZee5-jA3xehdAnJjpKxAMzrgaFX4BuyEK9s4_LEyH5fqSy1AHywM-T0uM6ZqYaQt5KQdFJ5RnxRFVGybwr3Svt15dlaXi3PsuP8PmrAvJNuk8t7BzIW0LbbGIDXsL1hB49bATZaXzXmAGTdHEt0whMwMhx645NmTmcJgrIEgOowp26eyqGc6qg0TSMwPJuy0gIiAkirBCAsG2H4LDwLjh2kJzoica37spVy7oVRXsJlnGH3OsIPXr6no83sOI_tql1o3K-c8RpLXjlbKEXwWhKROQYfM4EzdSLVC8x6vHULJvSsGBi781gWJBaM3rMeHhWv9usMLqm-9YRFxGkEKJTwFP1ZdzwoTEOKBGN6BvlrnihPMHFTf_BoEj9OR2fsGer9w6Q2_YAPj_qHiChidrLObjEme2bthJ0ENmFTT_ueTn-NKH3sSB5_8dKasn33A53CmVEECLog_xvc4ZAiNUye4GY-c0V-0f9RtMC5TnQ_SBrpo4uOMHaaPhg-PDrpxtzUcrzPe3wNS-htjSn7hI6O2MPcBnVlXnU0I8xdjZ9CV7boZWD51WEfFtr6NHCtnSr3h8hUcMyj6K7G2XGhr3e7MI__oTgjaEb6_OzntuFb2dLo85K7U-LATspsZIXNUSgCq2n4P-OdK7Cx9bBgP5NnLKXvHsMEQVPEDeu3Ba12QhpI4Vo41nLFVXY8Qd-MjZCSY30OE9Et99q4iLXl6a_NQk4ttb1HcB1VgJtmszNET7KvyoTMdaN14qZH7q4FM8v_kYUrVISlX9bZND6iK6YQG9rb0HrsXADjp8YZBshW-qjPFwHbrMxPrNUJLhxudAkeZ8oC-AbU9sf-1F6qoOWhKP_3tsYAVRJ54ziLybB1u6bs-f6ZqF3dJAUIr2KRn17CMNcvaBFUcXm9sTzS909r8IzDFTgJb5MNuJdpEHJT23iT2yZAjPHRwZLK1B5Ovw-rwKTqbDOAtNt8Z5joqp3Yyx_xmXIoDeiy4kPVylA2RPOa5t00faq4mtYWrDonnMpJme3cyMGNYKX7gwpLXjkQYkLqE9aYwriGg1vJayrQ2MUhUAaM5s8wesKtj1twSYGF_ZUDXXpn63z3qjQU8BQKOhvk0qDlLWNrIgSkEjgDPpAypG8XBS9Q1kBxa102QnG_xNLEHc-3BSLP_4RA8adASeqc-D6G30WYjOPuh9HFimU7EYTtVo0yEhp9D-qtdH-X70iLmFJox2r4D4bz4-FdE_YocdaCYycUPc8mcjZwU8WmybO08zxT54beAhVrwg4QfBihriD9bCof4Gma_lx4Bj2ZgGEmTVAA=\",\"summary\":[]}"},{"type":"text","text":"[[reply_to_current]] Hola Igna — soy Pipo 🌱, despierto y listo para meter mano donde haga falta. ¿Qué querés hacer ahora?","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b742cc0b3c819093f97aabc87cf24b\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":3542,"output":136,"cacheRead":20096,"cacheWrite":0,"totalTokens":23774,"cost":{"input":0.008855,"output":0.00204,"cacheRead":0.005024,"cacheWrite":0,"total":0.015919}},"stopReason":"stop","timestamp":1773617863441}} {"type":"message","id":"6d9ff748","parentId":"8bcd7bdc","timestamp":"2026-03-16T00:10:51.825Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"3964\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 00:10 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nEstas con tu openclaw actualizado?"}],"timestamp":1773619851814}} {"type":"message","id":"ef62478e","parentId":"6d9ff748","timestamp":"2026-03-16T00:11:01.055Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Assessing update status**\n\nI need to answer a question about whether the current status is updated. The user is asking about the version of OpenClaw, which likely doesn’t require prior memory.\n\nI think the healthcheck skill applies since it checks the version status of the machine running OpenClaw. It makes sense to read the SKILL.md and possibly the OpenClaw documentation first before I respond. So, I'll consider running `openclaw status` or checking for a pending update, but they aren't asking me to perform an update.\n\n**Reading healthcheck skill**\n\nI need to take a look at the healthcheck skill. This is important since it should provide details about version status checks related to OpenClaw. Understanding its functionality will help me determine how to proceed and respond to the user’s question about whether the system is updated. This will be my next step before I provide any information to ensure I have the most accurate and relevant details.","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b74a8d63948190bc853cb8b11e6881\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt0qUA07pyMkgMdhMMd2sI-qqHQEMDgAdVK_8TZEuCuh6crxpv3ak33Cw5fhf4-lZdIkmKqnAUacug4zsmK6p6ga-WUA-NuWMWzzdm7bmEGh88EoUbz293X68vLI65OQJ8Em4rmLAl9VN4kCoN2E3j2D-cQC4wDwmV-HyObhE-tcJbQ1ZUJhGONEtd0XsZA6q8-sB43S3RdhcMZTO4Xss7I3fcRr1eS26Vfz-AL2fyh_7YwyBsm70amNgSIyRWhgsKyfR4KhGO-lrzhYh3hdvN4UmTcCGoJkQzHVOQjruvTATk6h6Zc9YQ7b6b6t60hsQAnUZCKJq1X5x7fyQWIPSnsDcLY8S_N_6a2IEt-rjvapE_CdlyuHjysjaOLm_kDdaq6I9VuE5rCCwItoQDNWWKd8RN2TJqG17VpuxVZUS7VjWxWBMCpDiWn-LL-jBm80yDn2yJrLo9fVVNVJNn5by1WHR4dvaRPfIeijnsLh_4G8OnkPzJsKFORuQE2_0BRKAL8r0JZWLWnJ4zC7Nya0v-A9c4Mg6pmTkk2cWmHk33XIBnkEV4Jxl84Oetg471wniI-1Uc_zQH-lyqlAQcrVvGI_cfaxO55eui4rpa_le3NtVkttiZBjVRRZ3sRg8M1Kpqft4SxsYXxiuO0pcyUTNtEYQqi1Q2k-b2NQiP6BbGuMBlMBTuaCJ3F_L0fIPtM9AWIf9Yi4UsKrEh_pBLba-x1GMaSlAiGS28w3Wd-iLd9K7GPI7_Yw8dOr9_y4pAUEnkM9IpabsDkNlVPSiGsZRRTj2sYOw9Ty8CEFlOkXUG5Ai7-B9ZLXMWQkjZAaDv4swlaCmUssAanduaBTHW4L5BnQ_11VIJwmlOj3yyS18VSyxvxhqGxvU-FEKY1m5pdGF5KFxjgyKoIZkzkpN8w1rxLIVlmrrzkHQz1g--elpOWf9F1zFGrU0H3zmKgTfDs3AljHQkCtly45MM-uV6gHbUoM5Jb1v4NJPKYMP2HY-kRQrwQRepQq95Ivd-AJEhVzOnqaB_2CM2GsnOZlIqY6u_wf0Xomh3gZlllIrcqpNTSxreeruoNk9hoIQtX2mw9eLq6uNCeZQpbYP_0EGvJ0wCpg8zc2AW0hWac_DaK7CmhsaDSFu0dpc92fugXhhD667RrVP8l4TObLovFDDqL9NwAWh13HtbottNq9e9w6KNS3jxfRYheyoeeI9rghMbGcN_OU2aVvuOJXL79X2KQuDyDnOwuqapqxVi8koOil-FBa156POMYUvi4Wc1XnCh1XPYamx-LUBXKdqqeAw0-hboVkOZvBSIqYvGeqcwDBzlrC-xKaPUTYTJvq3sgw0QbLDExHrURpiORLW2lETq8mq_70VlePN4QYCbwGRE7SdoM-it4Ty6O_ae69WFZIuwhZys7LFj67BW2GjiPXj4n5txV9ny8nyOvYwuccFH5dxz7mKZE7OKYOUgnydxq9eg3jIJzNQ7lD5PtfbUifVicjAufhp2vlCKJZ7u5IiCkXGNArUCaRTJJisG_wqIeXcSUDWuYyinm_Ioiv4QPmzvWJpzKFAYI8hwT7agwYtQRMRE3V0670t_HG7ZgRSKLrKIh4veNOMUUEuOAnGzBY31SGc-7hoq4sLP4rgohOY-1ZXD1KqAijhF1lnPdmi_6uO7cjeY18fx0SY01i5hGd7_4um99EZlUzp22UkhTNP1Q3OLs35sr1WhYL2IXVFMIYLJFh_DNMEagBv9re_vqI9d3_Xe3_vcLKT7VcFSUJIKTPOHfNnpEh4uH5eaFkXbVoEeW66gmPSS4IUuneZCLfI8ORBfgHTHEWNIP-lqQXLG5Y70_d6cC3qJ9jrpYg29jdBDuiYpU986dxaanSaBn9UZpbMhySvAPlQAYJ0fXI7PGq2HTP9fRGzrXBEGe-T6_mcvJailSxpJ-vMt7e-WrlOixU-3-YQ0UIk0CNbKvgTBpgiAfWu5tgdmVZiTkfhVc1k4mIcTraD8njnY9M3hETH2MJd9E-9LPhsWKzCDZFC7FUdWalVn2Lxl8-_z0u6_YADXdOLd19TXPYT8UlQlgKzj7nK1UF0PCzyks_UGk8_Mg0piV24T7oPsrAnI8hekeTe5fxiWgELG7-x9EVr6r81tX7TE1AY2rbeYat2BUKx7xujhOTiTDkWkXP0dhXvTBBEgqmQ9myB\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Assessing update status**\\n\\nI need to answer a question about whether the current status is updated. The user is asking about the version of OpenClaw, which likely doesn’t require prior memory.\\n\\nI think the healthcheck skill applies since it checks the version status of the machine running OpenClaw. It makes sense to read the SKILL.md and possibly the OpenClaw documentation first before I respond. So, I'll consider running `openclaw status` or checking for a pending update, but they aren't asking me to perform an update.\"},{\"type\":\"summary_text\",\"text\":\"**Reading healthcheck skill**\\n\\nI need to take a look at the healthcheck skill. This is important since it should provide details about version status checks related to OpenClaw. Understanding its functionality will help me determine how to proceed and respond to the user’s question about whether the system is updated. This will be my next step before I provide any information to ensure I have the most accurate and relevant details.\"}]}"},{"type":"toolCall","id":"call_19cAZHXKXzfGXiojmgiLceft|fc_0776d4d0ce7a6f6b0169b74a94c2548190bd371c314b70f0e0","name":"read","arguments":{"file_path":"/usr/lib/node_modules/openclaw/skills/healthcheck/SKILL.md"},"partialJson":"{\"file_path\":\"/usr/lib/node_modules/openclaw/skills/healthcheck/SKILL.md\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":19879,"output":242,"cacheRead":3584,"cacheWrite":0,"totalTokens":23705,"cost":{"input":0.049697500000000006,"output":0.00363,"cacheRead":0.000896,"cacheWrite":0,"total":0.05422350000000001}},"stopReason":"toolUse","timestamp":1773619851824}} {"type":"message","id":"5b47c8ff","parentId":"ef62478e","timestamp":"2026-03-16T00:11:01.085Z","message":{"role":"toolResult","toolCallId":"call_19cAZHXKXzfGXiojmgiLceft|fc_0776d4d0ce7a6f6b0169b74a94c2548190bd371c314b70f0e0","toolName":"read","content":[{"type":"text","text":"---\nname: healthcheck\ndescription: Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).\n---\n\n# OpenClaw Host Hardening\n\n## Overview\n\nAssess and harden the host running OpenClaw, then align it to a user-defined risk tolerance without breaking access. Use OpenClaw security tooling as a first-class signal, but treat OS hardening as a separate, explicit set of steps.\n\n## Core rules\n\n- Recommend running this skill with a state-of-the-art model (e.g., Opus 4.5, GPT 5.2+). The agent should self-check the current model and suggest switching if below that level; do not block execution.\n- Require explicit approval before any state-changing action.\n- Do not modify remote access settings without confirming how the user connects.\n- Prefer reversible, staged changes with a rollback plan.\n- Never claim OpenClaw changes the host firewall, SSH, or OS updates; it does not.\n- If role/identity is unknown, provide recommendations only.\n- Formatting: every set of user choices must be numbered so the user can reply with a single digit.\n- System-level backups are recommended; try to verify status.\n\n## Workflow (follow in order)\n\n### 0) Model self-check (non-blocking)\n\nBefore starting, check the current model. If it is below state-of-the-art (e.g., Opus 4.5, GPT 5.2+), recommend switching. Do not block execution.\n\n### 1) Establish context (read-only)\n\nTry to infer 1–5 from the environment before asking. Prefer simple, non-technical questions if you need confirmation.\n\nDetermine (in order):\n\n1. OS and version (Linux/macOS/Windows), container vs host.\n2. Privilege level (root/admin vs user).\n3. Access path (local console, SSH, RDP, tailnet).\n4. Network exposure (public IP, reverse proxy, tunnel).\n5. OpenClaw gateway status and bind address.\n6. Backup system and status (e.g., Time Machine, system images, snapshots).\n7. Deployment context (local mac app, headless gateway host, remote gateway, container/CI).\n8. Disk encryption status (FileVault/LUKS/BitLocker).\n9. OS automatic security updates status.\n Note: these are not blocking items, but are highly recommended, especially if OpenClaw can access sensitive data.\n10. Usage mode for a personal assistant with full access (local workstation vs headless/remote vs other).\n\nFirst ask once for permission to run read-only checks. If granted, run them by default and only ask questions for items you cannot infer or verify. Do not ask for information already visible in runtime or command output. Keep the permission ask as a single sentence, and list follow-up info needed as an unordered list (not numbered) unless you are presenting selectable choices.\n\nIf you must ask, use non-technical prompts:\n\n- “Are you using a Mac, Windows PC, or Linux?”\n- “Are you logged in directly on the machine, or connecting from another computer?”\n- “Is this machine reachable from the public internet, or only on your home/network?”\n- “Do you have backups enabled (e.g., Time Machine), and are they current?”\n- “Is disk encryption turned on (FileVault/BitLocker/LUKS)?”\n- “Are automatic security updates enabled?”\n- “How do you use this machine?”\n Examples:\n - Personal machine shared with the assistant\n - Dedicated local machine for the assistant\n - Dedicated remote machine/server accessed remotely (always on)\n - Something else?\n\nOnly ask for the risk profile after system context is known.\n\nIf the user grants read-only permission, run the OS-appropriate checks by default. If not, offer them (numbered). Examples:\n\n1. OS: `uname -a`, `sw_vers`, `cat /etc/os-release`.\n2. Listening ports:\n - Linux: `ss -ltnup` (or `ss -ltnp` if `-u` unsupported).\n - macOS: `lsof -nP -iTCP -sTCP:LISTEN`.\n3. Firewall status:\n - Linux: `ufw status`, `firewall-cmd --state`, `nft list ruleset` (pick what is installed).\n - macOS: `/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate` and `pfctl -s info`.\n4. Backups (macOS): `tmutil status` (if Time Machine is used).\n\n### 2) Run OpenClaw security audits (read-only)\n\nAs part of the default read-only checks, run `openclaw security audit --deep`. Only offer alternatives if the user requests them:\n\n1. `openclaw security audit` (faster, non-probing)\n2. `openclaw security audit --json` (structured output)\n\nOffer to apply OpenClaw safe defaults (numbered):\n\n1. `openclaw security audit --fix`\n\nBe explicit that `--fix` only tightens OpenClaw defaults and file permissions. It does not change host firewall, SSH, or OS update policies.\n\nIf browser control is enabled, recommend that 2FA be enabled on all important accounts, with hardware keys preferred and SMS not sufficient.\n\n### 3) Check OpenClaw version/update status (read-only)\n\nAs part of the default read-only checks, run `openclaw update status`.\n\nReport the current channel and whether an update is available.\n\n### 4) Determine risk tolerance (after system context)\n\nAsk the user to pick or confirm a risk posture and any required open services/ports (numbered choices below).\nDo not pigeonhole into fixed profiles; if the user prefers, capture requirements instead of choosing a profile.\nOffer suggested profiles as optional defaults (numbered). Note that most users pick Home/Workstation Balanced:\n\n1. Home/Workstation Balanced (most common): firewall on with reasonable defaults, remote access restricted to LAN or tailnet.\n2. VPS Hardened: deny-by-default inbound firewall, minimal open ports, key-only SSH, no root login, automatic security updates.\n3. Developer Convenience: more local services allowed, explicit exposure warnings, still audited.\n4. Custom: user-defined constraints (services, exposure, update cadence, access methods).\n\n### 5) Produce a remediation plan\n\nProvide a plan that includes:\n\n- Target profile\n- Current posture summary\n- Gaps vs target\n- Step-by-step remediation with exact commands\n- Access-preservation strategy and rollback\n- Risks and potential lockout scenarios\n- Least-privilege notes (e.g., avoid admin usage, tighten ownership/permissions where safe)\n- Credential hygiene notes (location of OpenClaw creds, prefer disk encryption)\n\nAlways show the plan before any changes.\n\n### 6) Offer execution options\n\nOffer one of these choices (numbered so users can reply with a single digit):\n\n1. Do it for me (guided, step-by-step approvals)\n2. Show plan only\n3. Fix only critical issues\n4. Export commands for later\n\n### 7) Execute with confirmations\n\nFor each step:\n\n- Show the exact command\n- Explain impact and rollback\n- Confirm access will remain available\n- Stop on unexpected output and ask for guidance\n\n### 8) Verify and report\n\nRe-check:\n\n- Firewall status\n- Listening ports\n- Remote access still works\n- OpenClaw security audit (re-run)\n\nDeliver a final posture report and note any deferred items.\n\n## Required confirmations (always)\n\nRequire explicit approval for:\n\n- Firewall rule changes\n- Opening/closing ports\n- SSH/RDP configuration changes\n- Installing/removing packages\n- Enabling/disabling services\n- User/group modifications\n- Scheduling tasks or startup persistence\n- Update policy changes\n- Access to sensitive files or credentials\n\nIf unsure, ask.\n\n## Periodic checks\n\nAfter OpenClaw install or first hardening pass, run at least one baseline audit and version check:\n\n- `openclaw security audit`\n- `openclaw security audit --deep`\n- `openclaw update status`\n\nOngoing monitoring is recommended. Use the OpenClaw cron tool/CLI to schedule periodic audits (Gateway scheduler). Do not create scheduled tasks without explicit approval. Store outputs in a user-approved location and avoid secrets in logs.\nWhen scheduling headless cron runs, include a note in the output that instructs the user to call `healthcheck` so issues can be fixed.\n\n### Required prompt to schedule (always)\n\nAfter any audit or hardening pass, explicitly offer scheduling and require a direct response. Use a short prompt like (numbered):\n\n1. “Do you want me to schedule periodic audits (e.g., daily/weekly) via `openclaw cron add`?”\n\nIf the user says yes, ask for:\n\n- cadence (daily/weekly), preferred time window, and output location\n- whether to also schedule `openclaw update status`\n\nUse a stable cron job name so updates are deterministic. Prefer exact names:\n\n- `healthcheck:security-audit`\n- `healthcheck:update-status`\n\nBefore creating, `openclaw cron list` and match on exact `name`. If found, `openclaw cron edit ...`.\nIf not found, `openclaw cron add --name ...`.\n\nAlso offer a periodic version check so the user can decide when to update (numbered):\n\n1. `openclaw update status` (preferred for source checkouts and channels)\n2. `npm view openclaw version` (published npm version)\n\n## OpenClaw command accuracy\n\nUse only supported commands and flags:\n\n- `openclaw security audit [--deep] [--fix] [--json]`\n- `openclaw status` / `openclaw status --deep`\n- `openclaw health --json`\n- `openclaw update status`\n- `openclaw cron add|list|runs|run`\n\nDo not invent CLI flags or imply OpenClaw enforces host firewall/SSH policies.\n\n## Logging and audit trail\n\nRecord:\n\n- Gateway identity and role\n- Plan ID and timestamp\n- Approved steps and exact commands\n- Exit codes and files modified (best effort)\n\nRedact secrets. Never log tokens or full credential contents.\n\n## Memory writes (conditional)\n\nOnly write to memory files when the user explicitly opts in and the session is a private/local workspace\n(per `docs/reference/templates/AGENTS.md`). Otherwise provide a redacted, paste-ready summary the user can\ndecide to save elsewhere.\n\nFollow the durable-memory prompt format used by OpenClaw compaction:\n\n- Write lasting notes to `memory/YYYY-MM-DD.md`.\n\nAfter each audit/hardening run, if opted-in, append a short, dated summary to `memory/YYYY-MM-DD.md`\n(what was checked, key findings, actions taken, any scheduled cron jobs, key decisions,\nand all commands executed). Append-only: never overwrite existing entries.\nRedact sensitive host details (usernames, hostnames, IPs, serials, service names, tokens).\nIf there are durable preferences or decisions (risk posture, allowed ports, update policy),\nalso update `MEMORY.md` (long-term memory is optional and only used in private sessions).\n\nIf the session cannot write to the workspace, ask for permission or provide exact entries\nthe user can paste into the memory files.\n"}],"isError":false,"timestamp":1773619861073}} {"type":"message","id":"ae5e0f75","parentId":"5b47c8ff","timestamp":"2026-03-16T00:11:13.359Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Considering update processes**\n\nI think I need to check the status of the openclaw by running an update status command. There’s a chance that it could indicate what the current channel is. I'll also consider using the status command directly. It feels like the exec command is the way to go for this. I want to make sure I'm monitoring everything properly, so let's get those details clarified!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b74a9b197c8190a5386c8c2f658bcf\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt0qhyTtuB8tq5EfJQh8exvhYCi0ArjZsaSR6sg6GhVgzfDWyxfDcd81DHqdH4gblh2gwUEaNoZoahlUQbZ5FD9q6akQ7VFUIdlIq1KMUKQteSgvxourSFd7kH0vkBlV9q9CNt-QfscZQ--cofxGYcJ1hSgsI-oysV_BWTxpJdgBcavImcVAm2bXU2Hk6G9K0lOfbbdWuBQeDY-sgIIOonFG7iTBrisWdAYWYaVotBOvlohaJxB9dqMrNrP9Qege5d2s7T_42dAGpt06IRNyOgAIPKyvAc6mDnOyW_4ABNjVP5rsnN0XBgbCIoU-YCJFh4JtnqTdCAfHvx4RDSKcL5OwQocxrrBdLbqayb6loLnEjJ0ZX0OlWkkygmkHaHmE33KnhDCabeSrC4z5cDNo1gPKbcOqbCtMxy_eG6BXAbERQjwOcPczgxljrC3MkzNjQXsN6ydXa5Hx44CxgtmzuBQ8zusnRbtsuKNgVRnCQS-2JmmLP0cFGn_PDRUhp_SrlEXarxAE-CffMghdUTEpeGEwcge8lca4fREWfSnc_pCUNmYlgY9jjQ1dRsRAioMWTBLhk1tISnXiahq8ck0P8gYIUuRN2dyXuWaaXJV1tuoNKl-1nXf-PKLi-1Vo2UHgjpJrHTA6x1XpQ1rSQVEQROSwTm6NPZCzOVZpLkXEJT40mozNW80IDjJPmV_d_496rnzCw-lxSH3sFnpArK3qQWkEvRqGrhIxVY8sR8aQJZRBEA5Q0xItriYFceETUgX9O266y7Qd2TAYj9rBRpKmcwxao7_Fj5eROFr9meI7AHQVPwVMOrrlkM_Qs4LRLKWsIyHJN56ffMFfpRHpy6OMxyfAuFUsYtJ0qCLaQ2dGqV8HCPYRYAhbyMSCxSZ_xvd-myZKMYwIByVYid4IFfbdZ0-x2dD4qNJjU--3DBrDxcUNl1w7GSCPwJWn0pOULnc-fsmhzWsNmBZNqvqH4ziS0rGgb37iW36psMVwFbDCsAPuRo_ecOnYlD9nwVpI0KOTf2FHz26_ZJADh_ILZXNutruUN4fhlltjrV8C3wIG7i_3jSudE3BrugoOjS57koX7Xk1ZXxkIEip1O3ZHf3PQCX-bosCfHsW8BMBt8nqnkbITqEh25vvpGZ79P2PFEPi32SzbSEuM295blcasNZ7ie6xg37dzarsdPHSNRFa5UFk6mYkEklO162pyuE2nW6fgdAyBQiqKhchqiskizhunTzCgNr6gsoLM-Fhobw3tWdMDTzjFanSZQ9hW0HVqcCV26j2xj72XlA6y74VubJB64gfhqS_pUoEWFVIxRXkjV0goB-OuNlBjm7npaPneGj7JfYIQN9XFIbBcA8qw_Rj4er7dyLvvcNOGzrMJ-GbE29TY755673RUe_K5wIltArrDv01CPNrj-Oxoduy-4qY0zEjgf087W3h_J8odJSgXBsA_GAeWz37t4xDZeDWkpqP0BE1CCK03I-jpfC3ItsN-trMRFTNYcsnmtGSSWBGBy4nHVVlABxlBF8k8aJKQavQV8pWHC_oTtUwKzzBqoiBTF0es_AmAB3aabcKStNlfGVQ5NBXmJ7cEYuOYjkbSmR9EmRtz_Iq4Muny4Bx-sq9qPr1PkRlC33CKHTTMx0jQxHq8LtLgYw0j7WkYzl0u1zKA24oTcOhkckUvMW6sgjSs8oKSMrwI8HVAv_hJVPqURqwkHoNSTaqwzrUQaXIVrKUN1bVgvukfXvcFbre4C_IKl8z6VvhZrAJ_E-Apin_Cm5dr3J5FoflAmW41nz2SD82WBhebGRKSM-65J-cZap3kiPcCHXv7tLe52LI9aHKNEiJcsN74j9dGlGeApBWC8Z-eXTMiiyS_KvBud8bDLtX19XtH6zI2W_dQu0nw-nSzMngZv55hGvOhhDBYmIEnJaQE1oozH3XWvfQLNUxTWQBDvxSCQ-rpNYZmwp5nUnjRHvR8fwI2K29SxyM6ckqrRzeQlfUPhAiBw3BacM4B8s_kA4jO5EvhIx8pQJStxnEQ3C1_QI0hwA5oV0jivlTbHL38Qp3GcjfKckK_JO1NOHvBfGEGHuJvBn_JHUFNq5J1aBucoSA3vuY9YeRUN4FDEEjtlUiXmgbqp4kS3SfRZ7NfXz6YI2je7D3ecFSFWkgez4KuvRxrCmcI74FrHUKuEioLqbjI0zS7NXqTA-RwaURcBwq1EGw==\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Considering update processes**\\n\\nI think I need to check the status of the openclaw by running an update status command. There’s a chance that it could indicate what the current channel is. I'll also consider using the status command directly. It feels like the exec command is the way to go for this. I want to make sure I'm monitoring everything properly, so let's get those details clarified!\"}]}"},{"type":"toolCall","id":"call_dVX5i6sPOMUm8c8gqXOJQu6n|fc_0776d4d0ce7a6f6b0169b74aa117d08190ad46be2b33e381ec","name":"exec","arguments":{"command":"openclaw update status","workdir":"/home/ubuntu/.openclaw/workspace","yieldMs":10000,"timeout":30},"partialJson":"{\"command\":\"openclaw update status\",\"workdir\":\"/home/ubuntu/.openclaw/workspace\",\"yieldMs\":10000,\"timeout\":30}"},{"type":"toolCall","id":"call_BmDfZdyns1kJ6NUQVxWaI8q1|fc_0776d4d0ce7a6f6b0169b74aa117e08190b23c7eddc4019ea1","name":"exec","arguments":{"command":"openclaw status","workdir":"/home/ubuntu/.openclaw/workspace","yieldMs":10000,"timeout":30},"partialJson":"{\"command\":\"openclaw status\",\"workdir\":\"/home/ubuntu/.openclaw/workspace\",\"yieldMs\":10000,\"timeout\":30}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":2564,"output":315,"cacheRead":23552,"cacheWrite":0,"totalTokens":26431,"cost":{"input":0.006410000000000001,"output":0.004725,"cacheRead":0.005888,"cacheWrite":0,"total":0.017023}},"stopReason":"toolUse","timestamp":1773619861086}} {"type":"message","id":"5f0f3910","parentId":"ae5e0f75","timestamp":"2026-03-16T00:11:19.944Z","message":{"role":"toolResult","toolCallId":"call_dVX5i6sPOMUm8c8gqXOJQu6n|fc_0776d4d0ce7a6f6b0169b74aa117d08190ad46be2b33e381ec","toolName":"exec","content":[{"type":"text","text":"[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9\nOpenClaw update status\n\n┌──────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Item │ Value │\n├──────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────┤\n│ Install │ pnpm │\n│ Channel │ stable (default) │\n│ Update │ pnpm · npm latest 2026.3.13 │\n└──────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────┘"}],"details":{"status":"completed","exitCode":0,"durationMs":6517,"aggregated":"[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9\nOpenClaw update status\n\n┌──────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Item │ Value │\n├──────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────┤\n│ Install │ pnpm │\n│ Channel │ stable (default) │\n│ Update │ pnpm · npm latest 2026.3.13 │\n└──────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────┘","cwd":"/home/ubuntu/.openclaw/workspace"},"isError":false,"timestamp":1773619879915}} {"type":"message","id":"9d99a450","parentId":"5f0f3910","timestamp":"2026-03-16T00:11:20.264Z","message":{"role":"toolResult","toolCallId":"call_BmDfZdyns1kJ6NUQVxWaI8q1|fc_0776d4d0ce7a6f6b0169b74aa117e08190b23c7eddc4019ea1","toolName":"exec","content":[{"type":"text","text":"[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9\nOpenClaw status\n\nOverview\n┌─────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Item │ Value │\n├─────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤\n│ Dashboard │ http://127.0.0.1:18789/ │\n│ OS │ linux 6.17.0-1007-oracle (arm64) · node 22.22.0 │\n│ Tailscale │ serve · miopenclaw-vnic.tail9799d2.ts.net · https://miopenclaw-vnic.tail9799d2.ts.net │\n│ Channel │ stable (default) │\n│ Update │ pnpm · npm latest 2026.3.13 │\n│ Gateway │ local · ws://127.0.0.1:18789 (local loopback) · unreachable (missing scope: operator.read) │\n│ Gateway service │ systemd installed · enabled · running (pid 473617, state active) │\n│ Node service │ systemd not installed │\n│ Agents │ 9 · 1 bootstrap file present · sessions 18 · default pipo active just now │\n│ Memory │ 46 files · 155 chunks · sources memory · plugin memory-core · vector ready · fts ready · cache on │\n│ │ (163) │\n│ Probes │ skipped (use --deep) │\n│ Events │ none │\n│ Heartbeat │ 30m (pipo), disabled (claude), disabled (claude-opus), disabled (clawrouter), disabled (codex), │\n│ │ disabled (deepseek-code), disabled (gemini), disabled (kimi), disabled (openrouter) │\n│ Sessions │ 18 active · default auto (1050k ctx) · 9 stores │\n└─────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────┘\n\nSecurity audit\nSummary: 0 critical · 3 warn · 2 info\n WARN Some configured models are below recommended tiers\n Smaller/older models are generally more susceptible to prompt injection and tool misuse. - claude-sonnet-cli/default (Below Claude 4.5) @ agents.list.claude.mo…\n Fix: Use the latest, top-tier model for any bot with tools or untrusted inboxes. Avoid Haiku tiers; prefer GPT-5+ and Claude 4.5+.\n WARN Extension plugin tools may be reachable under permissive tool policy\n Enabled extension plugins: clawrouter. Permissive tool policy contexts: - default - agents.list.pipo - agents.list.codex - agents.list.gemini - agents.list.dee…\n Fix: Use restrictive profiles (`minimal`/`coding`) or explicit tool allowlists that exclude plugin tools for agents handling untrusted input.\n WARN Plugin installs include unpinned npm specs\n Unpinned plugin install records: - clawrouter (@blockrun/clawrouter@latest)\n Fix: Pin install specs to exact versions (for example, `@scope/pkg@1.2.3`) for higher supply-chain stability.\nFull report: openclaw security audit\nDeep probe: openclaw security audit --deep\n\nChannels\n┌──────────┬─────────┬────────┬────────────────────────────────────────────────────────────────────────────────────────┐\n│ Channel │ Enabled │ State │ Detail │\n├──────────┼─────────┼────────┼────────────────────────────────────────────────────────────────────────────────────────┤\n│ Telegram │ ON │ OK │ token config (8658…eRCc · len 46) · accounts 1/1 │\n└──────────┴─────────┴────────┴────────────────────────────────────────────────────────────────────────────────────────┘\n\nSessions\n┌────────────────────────────────────────────────┬────────┬──────────┬───────────────┬─────────────────────────────────┐\n│ Key │ Kind │ Age │ Model │ Tokens │\n├────────────────────────────────────────────────┼────────┼──────────┼───────────────┼─────────────────────────────────┤\n│ agent:pipo:telegram:direct:8429… │ direct │ just now │ gpt-5.4 │ 24k/400k (6%) · 🗄️ 85% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 50m ago │ gpt-5.4 │ 18k/400k (5%) · 🗄️ 118% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 50m ago │ gpt-5.4 │ 18k/400k (5%) · 🗄️ 118% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 4h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 4h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 7h ago │ gpt-5.3-codex │ 21k/1050k (2%) · 🗄️ 190% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 10h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 13h ago │ gpt-5.3-codex │ 21k/1050k (2%) · 🗄️ 190% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 16h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 19h ago │ gpt-5.3-codex │ 21k/1050k (2%) · 🗄️ 190% cached │\n└────────────────────────────────────────────────┴────────┴──────────┴───────────────┴─────────────────────────────────┘\n\nFAQ: https://docs.openclaw.ai/faq\nTroubleshooting: https://docs.openclaw.ai/troubleshooting\n\nNext steps:\n Need to share? openclaw status --all\n Need to debug live? openclaw logs --follow\n Fix reachability first: openclaw gateway probe"}],"details":{"status":"completed","exitCode":0,"durationMs":6842,"aggregated":"[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9\nOpenClaw status\n\nOverview\n┌─────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Item │ Value │\n├─────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤\n│ Dashboard │ http://127.0.0.1:18789/ │\n│ OS │ linux 6.17.0-1007-oracle (arm64) · node 22.22.0 │\n│ Tailscale │ serve · miopenclaw-vnic.tail9799d2.ts.net · https://miopenclaw-vnic.tail9799d2.ts.net │\n│ Channel │ stable (default) │\n│ Update │ pnpm · npm latest 2026.3.13 │\n│ Gateway │ local · ws://127.0.0.1:18789 (local loopback) · unreachable (missing scope: operator.read) │\n│ Gateway service │ systemd installed · enabled · running (pid 473617, state active) │\n│ Node service │ systemd not installed │\n│ Agents │ 9 · 1 bootstrap file present · sessions 18 · default pipo active just now │\n│ Memory │ 46 files · 155 chunks · sources memory · plugin memory-core · vector ready · fts ready · cache on │\n│ │ (163) │\n│ Probes │ skipped (use --deep) │\n│ Events │ none │\n│ Heartbeat │ 30m (pipo), disabled (claude), disabled (claude-opus), disabled (clawrouter), disabled (codex), │\n│ │ disabled (deepseek-code), disabled (gemini), disabled (kimi), disabled (openrouter) │\n│ Sessions │ 18 active · default auto (1050k ctx) · 9 stores │\n└─────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────┘\n\nSecurity audit\nSummary: 0 critical · 3 warn · 2 info\n WARN Some configured models are below recommended tiers\n Smaller/older models are generally more susceptible to prompt injection and tool misuse. - claude-sonnet-cli/default (Below Claude 4.5) @ agents.list.claude.mo…\n Fix: Use the latest, top-tier model for any bot with tools or untrusted inboxes. Avoid Haiku tiers; prefer GPT-5+ and Claude 4.5+.\n WARN Extension plugin tools may be reachable under permissive tool policy\n Enabled extension plugins: clawrouter. Permissive tool policy contexts: - default - agents.list.pipo - agents.list.codex - agents.list.gemini - agents.list.dee…\n Fix: Use restrictive profiles (`minimal`/`coding`) or explicit tool allowlists that exclude plugin tools for agents handling untrusted input.\n WARN Plugin installs include unpinned npm specs\n Unpinned plugin install records: - clawrouter (@blockrun/clawrouter@latest)\n Fix: Pin install specs to exact versions (for example, `@scope/pkg@1.2.3`) for higher supply-chain stability.\nFull report: openclaw security audit\nDeep probe: openclaw security audit --deep\n\nChannels\n┌──────────┬─────────┬────────┬────────────────────────────────────────────────────────────────────────────────────────┐\n│ Channel │ Enabled │ State │ Detail │\n├──────────┼─────────┼────────┼────────────────────────────────────────────────────────────────────────────────────────┤\n│ Telegram │ ON │ OK │ token config (8658…eRCc · len 46) · accounts 1/1 │\n└──────────┴─────────┴────────┴────────────────────────────────────────────────────────────────────────────────────────┘\n\nSessions\n┌────────────────────────────────────────────────┬────────┬──────────┬───────────────┬─────────────────────────────────┐\n│ Key │ Kind │ Age │ Model │ Tokens │\n├────────────────────────────────────────────────┼────────┼──────────┼───────────────┼─────────────────────────────────┤\n│ agent:pipo:telegram:direct:8429… │ direct │ just now │ gpt-5.4 │ 24k/400k (6%) · 🗄️ 85% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 50m ago │ gpt-5.4 │ 18k/400k (5%) · 🗄️ 118% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 50m ago │ gpt-5.4 │ 18k/400k (5%) · 🗄️ 118% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 4h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 4h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 7h ago │ gpt-5.3-codex │ 21k/1050k (2%) · 🗄️ 190% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 10h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 13h ago │ gpt-5.3-codex │ 21k/1050k (2%) · 🗄️ 190% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 16h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 19h ago │ gpt-5.3-codex │ 21k/1050k (2%) · 🗄️ 190% cached │\n└────────────────────────────────────────────────┴────────┴──────────┴───────────────┴─────────────────────────────────┘\n\nFAQ: https://docs.openclaw.ai/faq\nTroubleshooting: https://docs.openclaw.ai/troubleshooting\n\nNext steps:\n Need to share? openclaw status --all\n Need to debug live? openclaw logs --follow\n Fix reachability first: openclaw gateway probe","cwd":"/home/ubuntu/.openclaw/workspace"},"isError":false,"timestamp":1773619880252}} {"type":"message","id":"6cb10c00","parentId":"9d99a450","timestamp":"2026-03-16T00:11:25.926Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b74aa996dc81908c8093f0e5a3d94c\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt0qtculncWtoBvchc1mk8UpmHeSHrwvKjTvEr5KbkeEFbNrIPqJ96pBp89S-DvvN4wUSY1REeAlS1OBwu5J2tvmvhD6qmZj_rEAiRVWc1q9Rh2SDtKj04LnYr6V-Cectj0DayR-O4lCFHcG6CZfSUDsa3zIR0PHWF4kRqo-gTpHCkDr9nGXo9jn1bT3aOe8e4gZJbgWx6q1C_RRJ1PUX3P-HsuD3ZG_ehJzB9OApc0SSH8GAlqVHm5unWUwXrDsli7gxYZkT8VhfmamCUC0zGREI2VCFhA_KQV3aZHBpULxj68cpRyrxWWLhheVJcrGnCV2l69lqsc7-fU09owdSnyAx8Re4chKhkYcagEmfl75uZ7ibH8KPCnlezAxwn7AbseREHlo3od4CIqS9bGVsYDahDArvSYPrf86qzZlPzs_1PCvwYcQXyx1-naJ9ll5fhLyK39jdBYNU_3pyQVFWBR0VqZZDNb5qi00_yMX-CrWKOctkcmSbWSH1lpx75gcfF62jCkfr0iNlll-tnuM6jST3ClobPPFPgFCV4pOrPQ2HVyfiAp1V6Dmk2DL_Z3KC0AXL-rtBniB5FP5eQ5TTV5bVvkewo4chKuM1gST8xvCGJZWcvd5Z9Fi6LYgvqJvYQ3c6n_JiojhA7gF_tNJ7vIQMJVCiKK07VT4OMXMpK_FndEqA9xXult7ZRsi5qT5gcr31unHR9p6d1QfREJ86NK-EmAknwLg9IpKyFMV3Gg4-2jRwJ80nmHZOTYZJkGXslLPcLS6fXJ33YQ0CfFjJn_U_S1ioVPdwUfHitMLdmMzgZGSf5X39hORdBdpdqgJYbnciRcpfUc6TaRPt0kZzz-d3rqjkWKgQwyz12SALQnnCJwJE9H3QUzJ60HWg5FbQi3B_Pji_DOhLZgiMDIy8RmiFvmnmRTGOnO7ASewxYgc37Wtke_nLNxPrzhQLBqwhQp50EezJ8heVjzv5TDvloB9cGT34jzPgi1jeTXYKLHLO4cKyZvXIxPPg20oa9iSZBmMytc33bmUzMieqh9V57aFLZ_aGqOsaY-8XlZl5EPpV56Iho_Gmlfqm-LJCnLYHwVT7bchVnXAqWBzCvzc8mV-oCnk9s-etM2HjSVl7hspsywoA1RhuQYXbZ_qfoN8U2yM3i_WOtQdFoK7dnAf-OExUTcmHyWJRVDHf_lL7UGTlKKFhPi5N04qL5Q6Ia6h0I0rtn7ETlEWdidPGfS3a1gMc1YjuUr5rlqXN5r7QpOzajJ6Q1i4-CFbNlvEJ-HdRCnYLLepwhs8HQHiwVw-bnHI33hOQfgs4Js6VkFyePaIqmU2VVRZ1iMyq8mg57qo8RNcRnAYlQutt2Zj1tun4TWiMUkWEy2O-6JugYE9wgX1he3SeNaYFhigdaneSCG1DtdoEPZkMUD59t4cnnipMgm4Eig-8LPoM_cTi3xeHW628FpiiEIIWKNrcHJpuki446ZRdCkUHvWLlkSYgSZwe3ZDAupR_-AmcMpb76gknZNDm7m23x51vw-0IBZgcK3DobuiNRMyDIh-vbcyddzpSw76paWU6cNbj2uW9PIiBbOq5bAzsr5a_bU6rV4Eep4pcwdKYCvc3LSn12DrDzK3FV_YdWtGb_11Z14tSkvHXdeFkOI0JB0JBxb3y9597wE_KXDC41K3DvxK0Fl6I82u9OJahjaQFQANa1hy_LE68zY7pq4ZV9oK-V_jeCeaytFlIcFycxaYibzjUgJ0ELBQBgbjXhs7Q8IYBzF-N9K7YqQZvqIw=\",\"summary\":[]}"},{"type":"toolCall","id":"call_djhtnlu6pgdQRWTuufblmKoA|fc_0776d4d0ce7a6f6b0169b74aad0c908190a6ac0d2db209bd95","name":"exec","arguments":{"command":"openclaw --version","workdir":"/home/ubuntu/.openclaw/workspace","yieldMs":10000,"timeout":30},"partialJson":"{\"command\":\"openclaw --version\",\"workdir\":\"/home/ubuntu/.openclaw/workspace\",\"yieldMs\":10000,\"timeout\":30}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":2194,"output":216,"cacheRead":26240,"cacheWrite":0,"totalTokens":28650,"cost":{"input":0.005485,"output":0.0032400000000000003,"cacheRead":0.00656,"cacheWrite":0,"total":0.015285}},"stopReason":"toolUse","timestamp":1773619880266}} {"type":"message","id":"1e6bb3cb","parentId":"6cb10c00","timestamp":"2026-03-16T00:11:26.055Z","message":{"role":"toolResult","toolCallId":"call_djhtnlu6pgdQRWTuufblmKoA|fc_0776d4d0ce7a6f6b0169b74aad0c908190a6ac0d2db209bd95","toolName":"exec","content":[{"type":"text","text":"OpenClaw 2026.3.13 (61d171a)"}],"details":{"status":"completed","exitCode":0,"durationMs":101,"aggregated":"OpenClaw 2026.3.13 (61d171a)","cwd":"/home/ubuntu/.openclaw/workspace"},"isError":false,"timestamp":1773619886042}} {"type":"message","id":"33d1beb9","parentId":"1e6bb3cb","timestamp":"2026-03-16T00:11:30.518Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b74aaefac48190a9fc189298c8a265\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt0qxEBWBFn6X5paotxxjxNMJ4bsElyXIAVdzs-Wc8Xg9TmPWPRUfB9m1btLXGuvW3sdoIFYzap3gEwOXhCYT0tPPf-Kv77tsirPAV9CpTDkLXqMOFbMJ2-3pJxKfRnjjc0DAJJCcYY_XzlRZtajWrqdoWe4bWRQZou_wMVn6Pt8nqwssY0xnAY67iSWVb8r9D8bsmrThICqWOFp9bJx1BmAi7W-DmjrCtjImvE9sq-a-VI_Nj-zkjA4S9OaCTdNT-owkS5Dc2mjsOUPq4-0eSt35k7MN3ZQaOeMA5LDhWtgMOkfiupkVY3WvrW4zsSy19ZvXcOAYL_gNhKJEM9mLwqQLqN4BuNsqAJkID1FceuW3QY4q3tz7xOE4M-tTv_9Rl6mjBFN2KFpHXZLspikWUYQDQ5Piwzb3U6cRwnqkx740PHYNQm-bYyRdzDUqlxvJO3noorvExmtMfeDcNlSgmc8d6lqGyWhwXkStXrPpoLNriQfXqszlhiiBTKMLjseR_UUyY-0dwUPS-bnmVuDsyMy3X7MCsbBSKEC6oZycNyu_weNZeJUUMDQp33IGwqWP23e6BM5uIKZKkE3BZd9o1Lm_X67Jfoj21IbZT-mvxC8fUKVg3eZn_2XvDOaA0jtkswD3K9u9GNDASmxnnvHav7I894ZA01t9y-6RJIFNlJ6L6HeUGmT-1NHAN9DE9sWx_rYolU4Q5c9_5d6G--DFp9LsFmUsK59-lEklmWVRKNKpKxJYvq-QUB6bSENriQ_QnbYWhM9oalTehQ8_4lUarv0v_cobe3SiC3vDyY6GHoyIxMluq56FW9ZVhidbTZX9PZh54OiZu2nPyQkAoAYwbkFhQdCnMPffqNHgpHYENmRTwrdXrKa3AKsBzULsiwHzT3-D5lq-NPXk1PtXccmtSFN7AsCHlkI8S2tbPH-v4fpPiB_DK2U6Qb7QA_bzRy1pdc3ivKBbxDJoqXITr0DiONTasi-y1pikiKHco_prwuupkYvVECefsmNeHFS4IX0bDEYAHhXO-T17Q8FFmVVptjx7BN1nTOjkru9by6lOBHg9hiV-IBfE1ka1JsFosMmB4OjyDM16mXgRJTAwWcyQIf1nYnBK7B38WqRBU30tjFJxt2HdAf6riAAV77LNCDTsiwbL8dWs82gNZ0Aj_BJqvolBuZS4d8ZgjWjX0KDe8L0Q2gmnJcTtHXPj0V_QdDp3wBqEBu_OP86qTzQb9c13JDFxzlfykZEF0WaAVq8RixBr8vkzcp8c_sNdHc2hV0xQhz1Jt9Ot0UCIxrCdo1Zg8N0cCTS3-Wyz-BgPfYABUM-HYiQ-hGf9qUwYVxvoJkgoIBAZDa74q9LctvX9FnYeq6MU2yZajseWTwvlSw5xZmpSyys=\",\"summary\":[]}"},{"type":"text","text":"[[reply_to_current]] Sí — estoy en **OpenClaw 2026.3.13** (canal **stable**) y coincide con la última versión disponible que reporta el sistema, así que **está actualizado**. Si querés, también te reviso si quedó algo medio roto o raro después del update.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b74ab13a78819080d50ed724f9f2c6\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":132,"output":180,"cacheRead":28544,"cacheWrite":0,"totalTokens":28856,"cost":{"input":0.00033000000000000005,"output":0.0027,"cacheRead":0.007136,"cacheWrite":0,"total":0.010166}},"stopReason":"stop","timestamp":1773619886056}} {"type":"message","id":"6ee0018b","parentId":"33d1beb9","timestamp":"2026-03-16T00:52:23.259Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"3966\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 00:52 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nOk suena bien fijate eso"}],"timestamp":1773622343242}} {"type":"message","id":"183994ba","parentId":"6ee0018b","timestamp":"2026-03-16T00:52:39.570Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Assessing system health**\n\nThe user wants me to check if anything is broken or odd after an update. This sounds like a health check task, which likely applies here since I need to verify the version status. I’ve already read the health check skill, so I should ask for permission to perform read-only checks, but since the user already asked me to check, I can proceed. I’ll probably run status checks like openclaw status --deep and security audit. Additionally, I might revisit local documentation for more context.\n\n**Deciding on checks**\n\nI'm considering whether to run a session status check, but the user hasn't requested it, and I don't think it's necessary since I can perform read-only checks. I might use multi_tool_use.parallel to run security audits and health checks. Allowing for a longer timeout could help, so I plan to check the security audit and health status first. It might be worth running the openclaw gateway probe since the status mentions scope issues. Overall, I’ll analyze the outputs comprehensively after these checks.\n\n**Planning a quick check**\n\nI'm considering using the \"openclaw gateway probe\" if I need to diagnose something, but I should avoid overcomplicating things. It's suggested by the CLI, yet it might not be necessary right now. Since this is a multi-step process, I think a brief narration could be helpful. I’ll start with a commentary like, “I’m going to do a quick read-only check...” and only narrate when it truly aids understanding. After that, I’ll proceed with the tool calls.","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b754496f088190a0d666e956c74afd\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1RXGQLZzQSmzYm0f12crH2RahMy9H-vzO3StEKXleyS-LuyTEt8rMJKjapI871XiML3DtpnXGUhALZ-t45aJXOgefqFSSnE3C2-gO5pB6fqZ5VCR8GsU4lOso5W5m63-HfRXSZ25O7zJK7yEbk3zPfgTngH_PemyzyaQuAl9C3MNmZ6TimdxyNfderveysAuAxGo-b2KJctFo85Y3ABSYY-zdoKaptEgQDhRoFmi8qm3Zgimu_lFq5WP1g_fEglEzrm4Afc9bFMZIOfruSMrvglf-IvcYJ1MtJccXmI2gnpA88XEJLobAB_SnN2Chcjs4jF_CPDc29mN8QhHh3I5SKeWsv8TURRUbXRicrunkZacapT1MYLjXM_fnIFXo6K99SV90tWpyTZIE1fsSPnbCrVBDPyFEmsoWKgIGOihACdpkFQtF60BW8b-4S-8EZrl9RjB1qHkeY3_m4qK9ul7WJ3XAaHkKTDHZ7ZPCLxudbf5ZDTlHXvVSyfPCFe_e0LltUoCyrqvnagGmJoVj00u8Gnhqh1XcN4maikuKKnChT9u0FlQosqh__ceIy1qYbFz28GCIiYVc8FlZsqfc-3Q_cXzdxNGOOUrCdDGDW2W8setRHxsD06kuoFb6mWJAViSv-fyum3IBN3d37Izl9jm5XXNkM2ucfu_3ZmYrbFm4Y_Yo8yoCDFJcPZRmYA6uOUWS_LgcMFRsGgK34lFqecX3Tmmug2OchbAw0cjoe3aHGE0ctBzzlijVwe2Ew8Y3BTBImBzvW4aJSHJPqzX-yggip34WMupws84B5CWEiQWMXg5UVQ5I2--DAyCrNMrl3mEdBSHAvZ9kxg0rs4_PNP90xV5VuIp5PFIqJWAKPPayyZ55Gha5P89_1W_iOUzm-vMNB8zpqnBTh9caj4zVOO2eH2dkF2Ri-NHAoWyfTiXsyuZHEzz6HxbA9yhW671Qvxw8v6f9uC4jYhS93xej9LXnD2rdwtKQ5iU48jmJE0Ekme7m8_PEFw5zo_s3v8NetSPpXKdJCviRSr5hDbKgfyRscayLXSEIgw9OBlZ48g5j7pKNIRmk847plONZdheSxFX5-dMoI3epA4seckcSok-cpdro7N3HO-zorJFnrZk4SCHI-nmzk5WB3XlLwCufT45buKbGU8lLIpcKRFnB5BX0ucc7Cvo0WR3rzjsZrgd7Yxq_KZPycX9uOxNH3Mpg7QZe21gt40nvYTXhzI9Kwpw_-unCBi4GA41qv3fW714BTaKCjgNuTgjhNrpq7KsaIqQNqo8AkKKH7JhxSlPDFWqc_FQl0_AF8SJYjjmdyQbOEXZWL3vxINdyzZzN9SgvfZCyctKw7xN6RKbpnJ2GBq3dvPYeNJTuD5rVDpWdb96pBq9NO3CgOasw5wmobe8T9OoRdgI6geIm2lmCpdmq5xo29CbXalFAPs_NS3HDfatxswfOP9WlqCQk89ZlrgERc5ql7lxI7qHptmtEIL1qd-VKVwz784SCFT_AXDfuiCcf67ZSUbCMCtZaihseF8a-mYBWUltakXejgId6-_9jQ7_LAOCfShAfVoojcDEMNpmtpIUJDfpu7oYD1FcBvnTK5HrL6LII8lVsEZGzL8RXZfj12jvmpzIZMFcCBgt_aQA3rxN74BtSNq96cMrvvD6bQ2BAbci1IaFNjtoj4HCQ7IxV8YjR1SwdRtFlPzTV1FMk6fMthCQilYfrMBxy8hOnwNXggz5P2fTnjo66YTMXFBhIdK8PR2cXVZQbXesN32malycP5OKdMhePdwe_vu6GyZ2QaQFJoHW-9ksg7KbEMP0hlbg86gA63vmNlewDOtF6lQr9bpB8PBobbulN7QwfDKTe6fT_nbXO4MAPdt70_Ik9N4nyqrkuPCsd5-6J6tXlWVxpUf7vjUQhxFXSXosaJMyF9tUKQJtT3aEjHSbhHg6rofdo3ajrfNHIy6L3wdtsOd-ZQgTX6VBEFdtN3EeSWv0T459BamlUostN2pcYyRPbHJ9Kl3Zk1vr_Iss3X3l-KWvWhT2_4q5o6HYufDA4dLnYLtTYuMUPtmb2bNzB6ynTIXoKB3xwrLzAQGZmc__jEBp8Wc05zzaGlOJWLVkcp5xOrFHSihSOOe5XrunCnvsM0rT-sDu4m0wVXuO7rP6UO77UDjt2HyFIwuWSN5PfvUtBJUWY-ysVZrGBYyWiR-yKB8IVd1LH7I3b8OiCyOZWoEDfxE6284zTocPJ1eBgqTi8qxYdvmWQMxhuF9yJ1FTt84KsEi7eC8nXHkMwPDiL_xF88q_pfNswxNxMBLU_x-sFsZg6f3LawBep0gTGhL-N9xD9O4SydJVeYJZLVJooOkuDkoO2jv6DOUTzSDt5_2n5w8Z8-1rn6GRpYV7expK7tlpBv0jJdl1n_G77YBF5PEuKbkz-BsEqR5eMn_yChQ_xdye9fZKK44XwzrWfyUZyBZkfBuVC6mzs8erXQBBTe3PdseJmUBkQiKHF-z-7g67kQkABn1MBEbDFWQquBlawYF6LmoEWMS844eN1wHIqiv-ENNSt0tTiyvtKHVL9G6mJS-BDsLcpy4rgUBHEEONlu1Cteyezfjlst0lUrw1wGUzyQcrw2_jVwLqhdRX6PbkMfRwqIqNyiC2-wnrP3GX7jXE7gKS4ZQBV5TKCK-u4ZvE8vXPnnBeTQlXPMyNe1-0DPLwaIgPjQZdPtHUbbR_ikBaeyx_yIbDihk76d4cEyIWj6jljW_9gc7X7mp92zr60eEkru_pn1RldwYXnWsQd64sa2sbZQd6fVG7NpN1nSf-oXOLQOOsq2z0_5I8QhU_fFEmjbFahL7y5xSoPjJVub1Jg2BN373qLVbyVPb6Hf29f8ByvVthblh3P-qbwueV6JRQjBPSHRtE3xyW-g3ITpfLa1Iq1otfIOQH3AvaTf9ZNqoi8JXSjKQYI2XfcgkuCTSQrq_hke_BbyLkKZ4Z7s0_7yNK1ukicWxSyDQc4mW6EksMa_vxNPjnKij6bE3aSUfvk-9-N-SbEld7beFm6b9YRjq8F3q3hG-SXcQSN6YcKgveBfmlFjDbbF_ZpaEFqSCwtyX4KXcVg8D9EjhW5kGxPTyufWI2X9Laww8ryAzBxaL-L5vk3b8CaRRK2_atPcIkiNDmCxVoPXQfCekUhVc2MheVozE1G03bR0eLVxW0D5Rn0T5RTBAOVwRslggzvpY4pJC30AvZwYYDcgpDRlfijLh1Nz5T7qyfcgodir4TI4O9xHzUmStfdcDSK7wV5GVU8ZiRoBxz0_1bSYsa0mCxPKLz_4vvIuJcAaD1R2oJLTGuAC3X8CNpV5VJ97NW67of8_-r3YQjx-UwFu9kIsA_YrSoo5HGArqeN5phs3snm9KwIuvborZ585qNmG5cP5rjY-vqznz1aOoEdVyd24S92rSc76GdSb0oswrSk8nR5VIkaf7XyX0gx5laSrOmDD1UOTycjTrLy_KY96lLsfufoCU2h3Lymb9nq7pQuKmxAgfqItv7x545EyzLoIIC9pBwhrSP6h17a1H7PQHufNXnDXyxaUsdWA-YTd3lbFaM_6xzWWk6giISHTeDZHaB10FdK1FXofchmmQ3LD_75_-LoAv1GCyY_aCwCpZHTp5daP9AYpnLZ5HqsbDQN0XrDnaUumL4DjkjZ9qaOaf3T7oXUfC1uQpuP07XnkY7RW2eep9_00VUoejiW8NATOcHTGr30ZZCKuqCq6fYCz9FFRnrzIoN4ohWdKyTLjUsL1pSzOouE05TA0PCwQ6ZvrNCJi5arrOga0yWP9eGejFrTLHT0qVWKPCXgh3RXdp9_m1P91yBMyGsMmF4jMG0_cHbviXsqkfLVW3e-Ot5j_lPgxtsg==\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Assessing system health**\\n\\nThe user wants me to check if anything is broken or odd after an update. This sounds like a health check task, which likely applies here since I need to verify the version status. I’ve already read the health check skill, so I should ask for permission to perform read-only checks, but since the user already asked me to check, I can proceed. I’ll probably run status checks like openclaw status --deep and security audit. Additionally, I might revisit local documentation for more context.\"},{\"type\":\"summary_text\",\"text\":\"**Deciding on checks**\\n\\nI'm considering whether to run a session status check, but the user hasn't requested it, and I don't think it's necessary since I can perform read-only checks. I might use multi_tool_use.parallel to run security audits and health checks. Allowing for a longer timeout could help, so I plan to check the security audit and health status first. It might be worth running the openclaw gateway probe since the status mentions scope issues. Overall, I’ll analyze the outputs comprehensively after these checks.\"},{\"type\":\"summary_text\",\"text\":\"**Planning a quick check**\\n\\nI'm considering using the \\\"openclaw gateway probe\\\" if I need to diagnose something, but I should avoid overcomplicating things. It's suggested by the CLI, yet it might not be necessary right now. Since this is a multi-step process, I think a brief narration could be helpful. I’ll start with a commentary like, “I’m going to do a quick read-only check...” and only narrate when it truly aids understanding. After that, I’ll proceed with the tool calls.\"}]}"},{"type":"text","text":"Hago un chequeo read-only rápido del estado, salud y auditoría profunda, y te digo si veo algo para corregir.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b754573078819082de26db8356c672\",\"phase\":\"commentary\"}"},{"type":"toolCall","id":"call_38RzMop6LciebHw22Xunn8MB|fc_0776d4d0ce7a6f6b0169b75457567481909148be5f4237d27e","name":"exec","arguments":{"command":"openclaw security audit --deep","workdir":"/home/ubuntu/.openclaw/workspace","yieldMs":10000,"timeout":60},"partialJson":"{\"command\":\"openclaw security audit --deep\",\"workdir\":\"/home/ubuntu/.openclaw/workspace\",\"yieldMs\":10000,\"timeout\":60}"},{"type":"toolCall","id":"call_gbGJOesg7RNZfcQRIFoMLWd7|fc_0776d4d0ce7a6f6b0169b75457568081908e8a9a0363c62893","name":"exec","arguments":{"command":"openclaw health --json","workdir":"/home/ubuntu/.openclaw/workspace","yieldMs":10000,"timeout":60},"partialJson":"{\"command\":\"openclaw health --json\",\"workdir\":\"/home/ubuntu/.openclaw/workspace\",\"yieldMs\":10000,\"timeout\":60}"},{"type":"toolCall","id":"call_di8BLmJ9pHvXpO08tjzPVzZA|fc_0776d4d0ce7a6f6b0169b75457568881908cb9c77dc0513b49","name":"exec","arguments":{"command":"openclaw status --deep","workdir":"/home/ubuntu/.openclaw/workspace","yieldMs":10000,"timeout":60},"partialJson":"{\"command\":\"openclaw status --deep\",\"workdir\":\"/home/ubuntu/.openclaw/workspace\",\"yieldMs\":10000,\"timeout\":60}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":24695,"output":663,"cacheRead":3584,"cacheWrite":0,"totalTokens":28942,"cost":{"input":0.06173750000000001,"output":0.009945,"cacheRead":0.000896,"cacheWrite":0,"total":0.0725785}},"stopReason":"toolUse","timestamp":1773622343258}} {"type":"message","id":"7de911f8","parentId":"183994ba","timestamp":"2026-03-16T00:52:47.879Z","message":{"role":"toolResult","toolCallId":"call_38RzMop6LciebHw22Xunn8MB|fc_0776d4d0ce7a6f6b0169b75457567481909148be5f4237d27e","toolName":"exec","content":[{"type":"text","text":"[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\nOpenClaw security audit\nSummary: 1 critical · 5 warn · 2 info\nRun deeper: openclaw security audit --deep\n\nCRITICAL\nskills.code_safety Skill \"asana\" contains dangerous code patterns\n Found 2 critical issue(s) in 4 scanned file(s) under /home/ubuntu/.agents/skills/asana:\n - [env-harvesting] Environment variable access combined with network send — possible credential harvesting (scripts/asana_api.mjs:90)\n - [env-harvesting] Environment variable access combined with network send — possible credential harvesting (scripts/oauth_oob.mjs:84)\n Fix: Review the skill source code before use. If untrusted, remove \"/home/ubuntu/.agents/skills/asana\".\n\nWARN\nmodels.weak_tier Some configured models are below recommended tiers\n Smaller/older models are generally more susceptible to prompt injection and tool misuse.\n- claude-sonnet-cli/default (Below Claude 4.5) @ agents.list.claude.model\n- claude-opus-cli/default (Below Claude 4.5) @ agents.list.claude-opus.model\n Fix: Use the latest, top-tier model for any bot with tools or untrusted inboxes. Avoid Haiku tiers; prefer GPT-5+ and Claude 4.5+.\nplugins.tools_reachable_permissive_policy Extension plugin tools may be reachable under permissive tool policy\n Enabled extension plugins: clawrouter.\nPermissive tool policy contexts:\n- default\n- agents.list.pipo\n- agents.list.codex\n- agents.list.gemini\n- agents.list.deepseek-code\n- agents.list.claude\n- agents.list.claude-opus\n- agents.list.kimi\n- agents.list.clawrouter\n- agents.list.openrouter\n Fix: Use restrictive profiles (`minimal`/`coding`) or explicit tool allowlists that exclude plugin tools for agents handling untrusted input.\nplugins.installs_unpinned_npm_specs Plugin installs include unpinned npm specs\n Unpinned plugin install records:\n- clawrouter (@blockrun/clawrouter@latest)\n Fix: Pin install specs to exact versions (for example, `@scope/pkg@1.2.3`) for higher supply-chain stability.\nplugins.code_safety Plugin \"clawrouter\" contains suspicious code patterns\n Found 2 warning(s) in 4 scanned file(s):\n - [potential-exfiltration] File read combined with network send — possible data exfiltration (dist/index.js:1647)\n - [potential-exfiltration] File read combined with network send — possible data exfiltration (dist/cli.js:136)\n Fix: Review the flagged code to ensure it is intentional and safe.\ngateway.probe_failed Gateway probe failed (deep)\n missing scope: operator.read\n Fix: Run \"openclaw status --all\" to debug connectivity/auth, then re-run \"openclaw security audit --deep\".\n\nINFO\nsummary.attack_surface Attack surface summary\n groups: open=0, allowlist=1\ntools.elevated: enabled\nhooks.webhooks: disabled\nhooks.internal: enabled\nbrowser control: enabled\ntrust model: personal assistant (one trusted operator boundary), not hostile multi-tenant on one shared gateway\ngateway.tailscale_serve Tailscale Serve exposure enabled\n gateway.tailscale.mode=\"serve\" exposes the Gateway to your tailnet (loopback behind Tailscale)."}],"details":{"status":"completed","exitCode":0,"durationMs":8256,"aggregated":"[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\nOpenClaw security audit\nSummary: 1 critical · 5 warn · 2 info\nRun deeper: openclaw security audit --deep\n\nCRITICAL\nskills.code_safety Skill \"asana\" contains dangerous code patterns\n Found 2 critical issue(s) in 4 scanned file(s) under /home/ubuntu/.agents/skills/asana:\n - [env-harvesting] Environment variable access combined with network send — possible credential harvesting (scripts/asana_api.mjs:90)\n - [env-harvesting] Environment variable access combined with network send — possible credential harvesting (scripts/oauth_oob.mjs:84)\n Fix: Review the skill source code before use. If untrusted, remove \"/home/ubuntu/.agents/skills/asana\".\n\nWARN\nmodels.weak_tier Some configured models are below recommended tiers\n Smaller/older models are generally more susceptible to prompt injection and tool misuse.\n- claude-sonnet-cli/default (Below Claude 4.5) @ agents.list.claude.model\n- claude-opus-cli/default (Below Claude 4.5) @ agents.list.claude-opus.model\n Fix: Use the latest, top-tier model for any bot with tools or untrusted inboxes. Avoid Haiku tiers; prefer GPT-5+ and Claude 4.5+.\nplugins.tools_reachable_permissive_policy Extension plugin tools may be reachable under permissive tool policy\n Enabled extension plugins: clawrouter.\nPermissive tool policy contexts:\n- default\n- agents.list.pipo\n- agents.list.codex\n- agents.list.gemini\n- agents.list.deepseek-code\n- agents.list.claude\n- agents.list.claude-opus\n- agents.list.kimi\n- agents.list.clawrouter\n- agents.list.openrouter\n Fix: Use restrictive profiles (`minimal`/`coding`) or explicit tool allowlists that exclude plugin tools for agents handling untrusted input.\nplugins.installs_unpinned_npm_specs Plugin installs include unpinned npm specs\n Unpinned plugin install records:\n- clawrouter (@blockrun/clawrouter@latest)\n Fix: Pin install specs to exact versions (for example, `@scope/pkg@1.2.3`) for higher supply-chain stability.\nplugins.code_safety Plugin \"clawrouter\" contains suspicious code patterns\n Found 2 warning(s) in 4 scanned file(s):\n - [potential-exfiltration] File read combined with network send — possible data exfiltration (dist/index.js:1647)\n - [potential-exfiltration] File read combined with network send — possible data exfiltration (dist/cli.js:136)\n Fix: Review the flagged code to ensure it is intentional and safe.\ngateway.probe_failed Gateway probe failed (deep)\n missing scope: operator.read\n Fix: Run \"openclaw status --all\" to debug connectivity/auth, then re-run \"openclaw security audit --deep\".\n\nINFO\nsummary.attack_surface Attack surface summary\n groups: open=0, allowlist=1\ntools.elevated: enabled\nhooks.webhooks: disabled\nhooks.internal: enabled\nbrowser control: enabled\ntrust model: personal assistant (one trusted operator boundary), not hostile multi-tenant on one shared gateway\ngateway.tailscale_serve Tailscale Serve exposure enabled\n gateway.tailscale.mode=\"serve\" exposes the Gateway to your tailnet (loopback behind Tailscale).","cwd":"/home/ubuntu/.openclaw/workspace"},"isError":false,"timestamp":1773622367867}} {"type":"message","id":"675513b6","parentId":"7de911f8","timestamp":"2026-03-16T00:52:47.891Z","message":{"role":"toolResult","toolCallId":"call_gbGJOesg7RNZfcQRIFoMLWd7|fc_0776d4d0ce7a6f6b0169b75457568081908e8a9a0363c62893","toolName":"exec","content":[{"type":"text","text":"[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n{\n \"ok\": true,\n \"ts\": 1773622364054,\n \"durationMs\": 1244,\n \"channels\": {\n \"telegram\": {\n \"configured\": true,\n \"running\": false,\n \"lastStartAt\": null,\n \"lastStopAt\": null,\n \"lastError\": null,\n \"tokenSource\": \"none\",\n \"probe\": {\n \"ok\": true,\n \"status\": null,\n \"error\": null,\n \"elapsedMs\": 1244,\n \"bot\": {\n \"id\": 8658426327,\n \"username\": \"chicho_pipo_bot\",\n \"canJoinGroups\": true,\n \"canReadAllGroupMessages\": false,\n \"supportsInlineQueries\": false\n },\n \"webhook\": {\n \"url\": \"\",\n \"hasCustomCert\": false\n }\n },\n \"lastProbeAt\": 1773622364054,\n \"mode\": null,\n \"accountId\": \"default\",\n \"accounts\": {\n \"default\": {\n \"configured\": true,\n \"running\": false,\n \"lastStartAt\": null,\n \"lastStopAt\": null,\n \"lastError\": null,\n \"tokenSource\": \"none\",\n \"probe\": {\n \"ok\": true,\n \"status\": null,\n \"error\": null,\n \"elapsedMs\": 1244,\n \"bot\": {\n \"id\": 8658426327,\n \"username\": \"chicho_pipo_bot\",\n \"canJoinGroups\": true,\n \"canReadAllGroupMessages\": false,\n \"supportsInlineQueries\": false\n },\n \"webhook\": {\n \"url\": \"\",\n \"hasCustomCert\": false\n }\n },\n \"lastProbeAt\": 1773622364054,\n \"mode\": null,\n \"accountId\": \"default\"\n }\n }\n }\n },\n \"channelOrder\": [\n \"telegram\"\n ],\n \"channelLabels\": {\n \"telegram\": \"Telegram\"\n },\n \"heartbeatSeconds\": 1800,\n \"defaultAgentId\": \"pipo\",\n \"agents\": [\n {\n \"agentId\": \"pipo\",\n \"name\": \"pipo\",\n \"isDefault\": true,\n \"heartbeat\": {\n \"enabled\": true,\n \"every\": \"30m\",\n \"everyMs\": 1800000,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/pipo/sessions/sessions.json\",\n \"count\": 13,\n \"recent\": [\n {\n \"key\": \"agent:pipo:telegram:direct:842987156\",\n \"updatedAt\": 1773622342293,\n \"age\": 20516\n },\n {\n \"key\": \"agent:pipo:cron:579fa4af-8922-4db1-9c02-db2aaecab113\",\n \"updatedAt\": 1773616853495,\n \"age\": 5509314\n },\n {\n \"key\": \"agent:pipo:cron:579fa4af-8922-4db1-9c02-db2aaecab113:run:ed351240-4ce9-488f-940f-c41638ff6462\",\n \"updatedAt\": 1773616853495,\n \"age\": 5509314\n },\n {\n \"key\": \"agent:pipo:cron:ac54fa1b-77e7-4b76-b328-f2064b0d8110\",\n \"updatedAt\": 1773604296231,\n \"age\": 18066578\n },\n {\n \"key\": \"agent:pipo:cron:ac54fa1b-77e7-4b76-b328-f2064b0d8110:run:d0410aad-8c32-40ae-868c-8afdf85f3130\",\n \"updatedAt\": 1773604296231,\n \"age\": 18066578\n }\n ]\n }\n },\n {\n \"agentId\": \"codex\",\n \"name\": \"codex\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/codex/sessions/sessions.json\",\n \"count\": 2,\n \"recent\": [\n {\n \"key\": \"agent:codex:acp:18cbbc00-3e3b-4f40-80ff-cbd7352796c9\",\n \"updatedAt\": 1772676850190,\n \"age\": 945512620\n },\n {\n \"key\": \"agent:codex:acp:065d4825-c6c7-408d-9384-2cd5d6011eb4\",\n \"updatedAt\": 1772676150329,\n \"age\": 946212481\n }\n ]\n }\n },\n {\n \"agentId\": \"gemini\",\n \"name\": \"gemini\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/gemini/sessions/sessions.json\",\n \"count\": 2,\n \"recent\": [\n {\n \"key\": \"agent:gemini:acp:0d3e46c3-d8da-42fc-8ee5-95844fcff2e9\",\n \"updatedAt\": 1772676844700,\n \"age\": 945518110\n },\n {\n \"key\": \"agent:gemini:acp:bc2159b4-8b9d-4bd7-866b-aacb703f5cc9\",\n \"updatedAt\": 1772676144445,\n \"age\": 946218365\n }\n ]\n }\n },\n {\n \"agentId\": \"deepseek-code\",\n \"name\": \"deepseek-code\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/deepseek-code/sessions/sessions.json\",\n \"count\": 0,\n \"recent\": []\n }\n },\n {\n \"agentId\": \"claude\",\n \"name\": \"claude\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/claude/sessions/sessions.json\",\n \"count\": 1,\n \"recent\": [\n {\n \"key\": \"agent:claude:acp:32d62664-ff0c-470a-a4f2-de21c3fa664f\",\n \"updatedAt\": 1772676813512,\n \"age\": 945549298\n }\n ]\n }\n },\n {\n \"agentId\": \"claude-opus\",\n \"name\": \"claude-opus\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/claude-opus/sessions/sessions.json\",\n \"count\": 0,\n \"recent\": []\n }\n },\n {\n \"agentId\": \"kimi\",\n \"name\": \"kimi\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/kimi/sessions/sessions.json\",\n \"count\": 0,\n \"recent\": []\n }\n },\n {\n \"agentId\": \"clawrouter\",\n \"name\": \"ClawRouter\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/clawrouter/sessions/sessions.json\",\n \"count\": 0,\n \"recent\": []\n }\n },\n {\n \"agentId\": \"openrouter\",\n \"name\": \"OpenRouter\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/openrouter/sessions/sessions.json\",\n \"count\": 0,\n \"recent\": []\n }\n }\n ],\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/pipo/sessions/sessions.json\",\n \"count\": 13,\n \"recent\": [\n {\n \"key\": \"agent:pipo:telegram:direct:842987156\",\n \"updatedAt\": 1773622342293,\n \"age\": 20516\n },\n {\n \"key\": \"agent:pipo:cron:579fa4af-8922-4db1-9c02-db2aaecab113\",\n \"updatedAt\": 1773616853495,\n \"age\": 5509314\n },\n {\n \"key\": \"agent:pipo:cron:579fa4af-8922-4db1-9c02-db2aaecab113:run:ed351240-4ce9-488f-940f-c41638ff6462\",\n \"updatedAt\": 1773616853495,\n \"age\": 5509314\n },\n {\n \"key\": \"agent:pipo:cron:ac54fa1b-77e7-4b76-b328-f2064b0d8110\",\n \"updatedAt\": 1773604296231,\n \"age\": 18066578\n },\n {\n \"key\": \"agent:pipo:cron:ac54fa1b-77e7-4b76-b328-f2064b0d8110:run:d0410aad-8c32-40ae-868c-8afdf85f3130\",\n \"updatedAt\": 1773604296231,\n \"age\": 18066578\n }\n ]\n }\n}\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9"}],"details":{"status":"completed","exitCode":0,"durationMs":7304,"aggregated":"[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n{\n \"ok\": true,\n \"ts\": 1773622364054,\n \"durationMs\": 1244,\n \"channels\": {\n \"telegram\": {\n \"configured\": true,\n \"running\": false,\n \"lastStartAt\": null,\n \"lastStopAt\": null,\n \"lastError\": null,\n \"tokenSource\": \"none\",\n \"probe\": {\n \"ok\": true,\n \"status\": null,\n \"error\": null,\n \"elapsedMs\": 1244,\n \"bot\": {\n \"id\": 8658426327,\n \"username\": \"chicho_pipo_bot\",\n \"canJoinGroups\": true,\n \"canReadAllGroupMessages\": false,\n \"supportsInlineQueries\": false\n },\n \"webhook\": {\n \"url\": \"\",\n \"hasCustomCert\": false\n }\n },\n \"lastProbeAt\": 1773622364054,\n \"mode\": null,\n \"accountId\": \"default\",\n \"accounts\": {\n \"default\": {\n \"configured\": true,\n \"running\": false,\n \"lastStartAt\": null,\n \"lastStopAt\": null,\n \"lastError\": null,\n \"tokenSource\": \"none\",\n \"probe\": {\n \"ok\": true,\n \"status\": null,\n \"error\": null,\n \"elapsedMs\": 1244,\n \"bot\": {\n \"id\": 8658426327,\n \"username\": \"chicho_pipo_bot\",\n \"canJoinGroups\": true,\n \"canReadAllGroupMessages\": false,\n \"supportsInlineQueries\": false\n },\n \"webhook\": {\n \"url\": \"\",\n \"hasCustomCert\": false\n }\n },\n \"lastProbeAt\": 1773622364054,\n \"mode\": null,\n \"accountId\": \"default\"\n }\n }\n }\n },\n \"channelOrder\": [\n \"telegram\"\n ],\n \"channelLabels\": {\n \"telegram\": \"Telegram\"\n },\n \"heartbeatSeconds\": 1800,\n \"defaultAgentId\": \"pipo\",\n \"agents\": [\n {\n \"agentId\": \"pipo\",\n \"name\": \"pipo\",\n \"isDefault\": true,\n \"heartbeat\": {\n \"enabled\": true,\n \"every\": \"30m\",\n \"everyMs\": 1800000,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/pipo/sessions/sessions.json\",\n \"count\": 13,\n \"recent\": [\n {\n \"key\": \"agent:pipo:telegram:direct:842987156\",\n \"updatedAt\": 1773622342293,\n \"age\": 20516\n },\n {\n \"key\": \"agent:pipo:cron:579fa4af-8922-4db1-9c02-db2aaecab113\",\n \"updatedAt\": 1773616853495,\n \"age\": 5509314\n },\n {\n \"key\": \"agent:pipo:cron:579fa4af-8922-4db1-9c02-db2aaecab113:run:ed351240-4ce9-488f-940f-c41638ff6462\",\n \"updatedAt\": 1773616853495,\n \"age\": 5509314\n },\n {\n \"key\": \"agent:pipo:cron:ac54fa1b-77e7-4b76-b328-f2064b0d8110\",\n \"updatedAt\": 1773604296231,\n \"age\": 18066578\n },\n {\n \"key\": \"agent:pipo:cron:ac54fa1b-77e7-4b76-b328-f2064b0d8110:run:d0410aad-8c32-40ae-868c-8afdf85f3130\",\n \"updatedAt\": 1773604296231,\n \"age\": 18066578\n }\n ]\n }\n },\n {\n \"agentId\": \"codex\",\n \"name\": \"codex\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/codex/sessions/sessions.json\",\n \"count\": 2,\n \"recent\": [\n {\n \"key\": \"agent:codex:acp:18cbbc00-3e3b-4f40-80ff-cbd7352796c9\",\n \"updatedAt\": 1772676850190,\n \"age\": 945512620\n },\n {\n \"key\": \"agent:codex:acp:065d4825-c6c7-408d-9384-2cd5d6011eb4\",\n \"updatedAt\": 1772676150329,\n \"age\": 946212481\n }\n ]\n }\n },\n {\n \"agentId\": \"gemini\",\n \"name\": \"gemini\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/gemini/sessions/sessions.json\",\n \"count\": 2,\n \"recent\": [\n {\n \"key\": \"agent:gemini:acp:0d3e46c3-d8da-42fc-8ee5-95844fcff2e9\",\n \"updatedAt\": 1772676844700,\n \"age\": 945518110\n },\n {\n \"key\": \"agent:gemini:acp:bc2159b4-8b9d-4bd7-866b-aacb703f5cc9\",\n \"updatedAt\": 1772676144445,\n \"age\": 946218365\n }\n ]\n }\n },\n {\n \"agentId\": \"deepseek-code\",\n \"name\": \"deepseek-code\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/deepseek-code/sessions/sessions.json\",\n \"count\": 0,\n \"recent\": []\n }\n },\n {\n \"agentId\": \"claude\",\n \"name\": \"claude\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/claude/sessions/sessions.json\",\n \"count\": 1,\n \"recent\": [\n {\n \"key\": \"agent:claude:acp:32d62664-ff0c-470a-a4f2-de21c3fa664f\",\n \"updatedAt\": 1772676813512,\n \"age\": 945549298\n }\n ]\n }\n },\n {\n \"agentId\": \"claude-opus\",\n \"name\": \"claude-opus\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/claude-opus/sessions/sessions.json\",\n \"count\": 0,\n \"recent\": []\n }\n },\n {\n \"agentId\": \"kimi\",\n \"name\": \"kimi\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/kimi/sessions/sessions.json\",\n \"count\": 0,\n \"recent\": []\n }\n },\n {\n \"agentId\": \"clawrouter\",\n \"name\": \"ClawRouter\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/clawrouter/sessions/sessions.json\",\n \"count\": 0,\n \"recent\": []\n }\n },\n {\n \"agentId\": \"openrouter\",\n \"name\": \"OpenRouter\",\n \"isDefault\": false,\n \"heartbeat\": {\n \"enabled\": false,\n \"every\": \"disabled\",\n \"everyMs\": null,\n \"prompt\": \"Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\",\n \"target\": \"none\",\n \"ackMaxChars\": 300\n },\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/openrouter/sessions/sessions.json\",\n \"count\": 0,\n \"recent\": []\n }\n }\n ],\n \"sessions\": {\n \"path\": \"/home/ubuntu/.openclaw/agents/pipo/sessions/sessions.json\",\n \"count\": 13,\n \"recent\": [\n {\n \"key\": \"agent:pipo:telegram:direct:842987156\",\n \"updatedAt\": 1773622342293,\n \"age\": 20516\n },\n {\n \"key\": \"agent:pipo:cron:579fa4af-8922-4db1-9c02-db2aaecab113\",\n \"updatedAt\": 1773616853495,\n \"age\": 5509314\n },\n {\n \"key\": \"agent:pipo:cron:579fa4af-8922-4db1-9c02-db2aaecab113:run:ed351240-4ce9-488f-940f-c41638ff6462\",\n \"updatedAt\": 1773616853495,\n \"age\": 5509314\n },\n {\n \"key\": \"agent:pipo:cron:ac54fa1b-77e7-4b76-b328-f2064b0d8110\",\n \"updatedAt\": 1773604296231,\n \"age\": 18066578\n },\n {\n \"key\": \"agent:pipo:cron:ac54fa1b-77e7-4b76-b328-f2064b0d8110:run:d0410aad-8c32-40ae-868c-8afdf85f3130\",\n \"updatedAt\": 1773604296231,\n \"age\": 18066578\n }\n ]\n }\n}\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9","cwd":"/home/ubuntu/.openclaw/workspace"},"isError":false,"timestamp":1773622367879}} {"type":"message","id":"885a6560","parentId":"675513b6","timestamp":"2026-03-16T00:52:47.904Z","message":{"role":"toolResult","toolCallId":"call_di8BLmJ9pHvXpO08tjzPVzZA|fc_0776d4d0ce7a6f6b0169b75457568881908cb9c77dc0513b49","toolName":"exec","content":[{"type":"text","text":"[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9\nOpenClaw status\n\nOverview\n┌─────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Item │ Value │\n├─────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤\n│ Dashboard │ http://127.0.0.1:18789/ │\n│ OS │ linux 6.17.0-1007-oracle (arm64) · node 22.22.0 │\n│ Tailscale │ serve · miopenclaw-vnic.tail9799d2.ts.net · https://miopenclaw-vnic.tail9799d2.ts.net │\n│ Channel │ stable (default) │\n│ Update │ pnpm · npm latest 2026.3.13 │\n│ Gateway │ local · ws://127.0.0.1:18789 (local loopback) · unreachable (missing scope: operator.read) │\n│ Gateway service │ systemd installed · enabled · running (pid 473617, state active) │\n│ Node service │ systemd not installed │\n│ Agents │ 9 · 1 bootstrap file present · sessions 18 · default pipo active just now │\n│ Memory │ 46 files · 155 chunks · sources memory · plugin memory-core · vector ready · fts ready · cache on │\n│ │ (163) │\n│ Probes │ enabled │\n│ Events │ none │\n│ Heartbeat │ 30m (pipo), disabled (claude), disabled (claude-opus), disabled (clawrouter), disabled (codex), │\n│ │ disabled (deepseek-code), disabled (gemini), disabled (kimi), disabled (openrouter) │\n│ Last heartbeat │ unavailable │\n│ Sessions │ 18 active · default auto (1050k ctx) · 9 stores │\n└─────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────┘\n\nSecurity audit\nSummary: 0 critical · 3 warn · 2 info\n WARN Some configured models are below recommended tiers\n Smaller/older models are generally more susceptible to prompt injection and tool misuse. - claude-sonnet-cli/default (Below Claude 4.5) @ agents.list.claude.mo…\n Fix: Use the latest, top-tier model for any bot with tools or untrusted inboxes. Avoid Haiku tiers; prefer GPT-5+ and Claude 4.5+.\n WARN Extension plugin tools may be reachable under permissive tool policy\n Enabled extension plugins: clawrouter. Permissive tool policy contexts: - default - agents.list.pipo - agents.list.codex - agents.list.gemini - agents.list.dee…\n Fix: Use restrictive profiles (`minimal`/`coding`) or explicit tool allowlists that exclude plugin tools for agents handling untrusted input.\n WARN Plugin installs include unpinned npm specs\n Unpinned plugin install records: - clawrouter (@blockrun/clawrouter@latest)\n Fix: Pin install specs to exact versions (for example, `@scope/pkg@1.2.3`) for higher supply-chain stability.\nFull report: openclaw security audit\nDeep probe: openclaw security audit --deep\n\nChannels\n┌──────────┬─────────┬────────┬────────────────────────────────────────────────────────────────────────────────────────┐\n│ Channel │ Enabled │ State │ Detail │\n├──────────┼─────────┼────────┼────────────────────────────────────────────────────────────────────────────────────────┤\n│ Telegram │ ON │ OK │ token config (8658…eRCc · len 46) · accounts 1/1 │\n└──────────┴─────────┴────────┴────────────────────────────────────────────────────────────────────────────────────────┘\n\nSessions\n┌────────────────────────────────────────────────┬────────┬──────────┬───────────────┬─────────────────────────────────┐\n│ Key │ Kind │ Age │ Model │ Tokens │\n├────────────────────────────────────────────────┼────────┼──────────┼───────────────┼─────────────────────────────────┤\n│ agent:pipo:telegram:direct:8429… │ direct │ just now │ gpt-5.4 │ 29k/400k (7%) · 🗄️ 100% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 2h ago │ gpt-5.4 │ 18k/400k (5%) · 🗄️ 118% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 2h ago │ gpt-5.4 │ 18k/400k (5%) · 🗄️ 118% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 5h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 5h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 8h ago │ gpt-5.3-codex │ 21k/1050k (2%) · 🗄️ 190% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 11h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 14h ago │ gpt-5.3-codex │ 21k/1050k (2%) · 🗄️ 190% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 17h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 20h ago │ gpt-5.3-codex │ 21k/1050k (2%) · 🗄️ 190% cached │\n└────────────────────────────────────────────────┴────────┴──────────┴───────────────┴─────────────────────────────────┘\n\nHealth\n┌──────────┬───────────┬───────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Item │ Status │ Detail │\n├──────────┼───────────┼───────────────────────────────────────────────────────────────────────────────────────────────┤\n│ Gateway │ reachable │ 413ms │\n│ Telegram │ OK │ ok (@chicho_pipo_bot:default:412ms) │\n└──────────┴───────────┴───────────────────────────────────────────────────────────────────────────────────────────────┘\n\nFAQ: https://docs.openclaw.ai/faq\nTroubleshooting: https://docs.openclaw.ai/troubleshooting\n\nNext steps:\n Need to share? openclaw status --all\n Need to debug live? openclaw logs --follow\n Fix reachability first: openclaw gateway probe"}],"details":{"status":"completed","exitCode":0,"durationMs":7798,"aggregated":"[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9\nOpenClaw status\n\nOverview\n┌─────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Item │ Value │\n├─────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤\n│ Dashboard │ http://127.0.0.1:18789/ │\n│ OS │ linux 6.17.0-1007-oracle (arm64) · node 22.22.0 │\n│ Tailscale │ serve · miopenclaw-vnic.tail9799d2.ts.net · https://miopenclaw-vnic.tail9799d2.ts.net │\n│ Channel │ stable (default) │\n│ Update │ pnpm · npm latest 2026.3.13 │\n│ Gateway │ local · ws://127.0.0.1:18789 (local loopback) · unreachable (missing scope: operator.read) │\n│ Gateway service │ systemd installed · enabled · running (pid 473617, state active) │\n│ Node service │ systemd not installed │\n│ Agents │ 9 · 1 bootstrap file present · sessions 18 · default pipo active just now │\n│ Memory │ 46 files · 155 chunks · sources memory · plugin memory-core · vector ready · fts ready · cache on │\n│ │ (163) │\n│ Probes │ enabled │\n│ Events │ none │\n│ Heartbeat │ 30m (pipo), disabled (claude), disabled (claude-opus), disabled (clawrouter), disabled (codex), │\n│ │ disabled (deepseek-code), disabled (gemini), disabled (kimi), disabled (openrouter) │\n│ Last heartbeat │ unavailable │\n│ Sessions │ 18 active · default auto (1050k ctx) · 9 stores │\n└─────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────┘\n\nSecurity audit\nSummary: 0 critical · 3 warn · 2 info\n WARN Some configured models are below recommended tiers\n Smaller/older models are generally more susceptible to prompt injection and tool misuse. - claude-sonnet-cli/default (Below Claude 4.5) @ agents.list.claude.mo…\n Fix: Use the latest, top-tier model for any bot with tools or untrusted inboxes. Avoid Haiku tiers; prefer GPT-5+ and Claude 4.5+.\n WARN Extension plugin tools may be reachable under permissive tool policy\n Enabled extension plugins: clawrouter. Permissive tool policy contexts: - default - agents.list.pipo - agents.list.codex - agents.list.gemini - agents.list.dee…\n Fix: Use restrictive profiles (`minimal`/`coding`) or explicit tool allowlists that exclude plugin tools for agents handling untrusted input.\n WARN Plugin installs include unpinned npm specs\n Unpinned plugin install records: - clawrouter (@blockrun/clawrouter@latest)\n Fix: Pin install specs to exact versions (for example, `@scope/pkg@1.2.3`) for higher supply-chain stability.\nFull report: openclaw security audit\nDeep probe: openclaw security audit --deep\n\nChannels\n┌──────────┬─────────┬────────┬────────────────────────────────────────────────────────────────────────────────────────┐\n│ Channel │ Enabled │ State │ Detail │\n├──────────┼─────────┼────────┼────────────────────────────────────────────────────────────────────────────────────────┤\n│ Telegram │ ON │ OK │ token config (8658…eRCc · len 46) · accounts 1/1 │\n└──────────┴─────────┴────────┴────────────────────────────────────────────────────────────────────────────────────────┘\n\nSessions\n┌────────────────────────────────────────────────┬────────┬──────────┬───────────────┬─────────────────────────────────┐\n│ Key │ Kind │ Age │ Model │ Tokens │\n├────────────────────────────────────────────────┼────────┼──────────┼───────────────┼─────────────────────────────────┤\n│ agent:pipo:telegram:direct:8429… │ direct │ just now │ gpt-5.4 │ 29k/400k (7%) · 🗄️ 100% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 2h ago │ gpt-5.4 │ 18k/400k (5%) · 🗄️ 118% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 2h ago │ gpt-5.4 │ 18k/400k (5%) · 🗄️ 118% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 5h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 5h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 8h ago │ gpt-5.3-codex │ 21k/1050k (2%) · 🗄️ 190% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 11h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 14h ago │ gpt-5.3-codex │ 21k/1050k (2%) · 🗄️ 190% cached │\n│ agent:pipo:cron:ac54fa1b-77e7-4… │ direct │ 17h ago │ gpt-5.3-codex │ 17k/1050k (2%) · 🗄️ 113% cached │\n│ agent:pipo:cron:579fa4af-8922-4… │ direct │ 20h ago │ gpt-5.3-codex │ 21k/1050k (2%) · 🗄️ 190% cached │\n└────────────────────────────────────────────────┴────────┴──────────┴───────────────┴─────────────────────────────────┘\n\nHealth\n┌──────────┬───────────┬───────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Item │ Status │ Detail │\n├──────────┼───────────┼───────────────────────────────────────────────────────────────────────────────────────────────┤\n│ Gateway │ reachable │ 413ms │\n│ Telegram │ OK │ ok (@chicho_pipo_bot:default:412ms) │\n└──────────┴───────────┴───────────────────────────────────────────────────────────────────────────────────────────────┘\n\nFAQ: https://docs.openclaw.ai/faq\nTroubleshooting: https://docs.openclaw.ai/troubleshooting\n\nNext steps:\n Need to share? openclaw status --all\n Need to debug live? openclaw logs --follow\n Fix reachability first: openclaw gateway probe","cwd":"/home/ubuntu/.openclaw/workspace"},"isError":false,"timestamp":1773622367890}} {"type":"message","id":"9a69e456","parentId":"885a6560","timestamp":"2026-03-16T00:53:03.111Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Providing a status update**\n\nI need to respond concisely, mentioning that health and status are okay, and that gateways and telegram are reachable. There's one critical issue found: a security audit flag related to the Asana skill, indicating potential env-harvesting, though this isn’t proof of a compromise. Warnings about the ClawRouter plugin and older Claude model versions also need mention. A deeper audit shows discrepancies, with 1 critical issue identified but overall health still okay. The probe failed due to a missing scope, but the gateway is functioning.\n\n**Crafting a response**\n\nI noticed a benign issue where a deep audit probe failed due to a missing operator.read. However, health and status confirm the gateway is reachable, suggesting it’s more of a permissions mismatch than an actual outage. Offering numbered options could be helpful since the skill suggests numbering choices. I might say: “If you want, 1) I review/remove Asana, 2) adjust tool policy/plugin pinning, or 3) leave it reported.” Explicit approval for any changes is essential! Since the user asked just to check, I’ll report and offer options. Let’s write this in Spanish.","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b75461fd0c8190b906ea7c24e96ca4\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1RraRPiBEjoKCtdw6NCGrKIBS8zl8TaKH2595yL4Y65vXQBZeBGLjIaqj8zjupqn5BdBVIpzT2OvY1hs3NlP5KzdKWlfgQlyUsigKgpgofvh91U19de0QlXr8JHm7MfqycEop91WizncmIs3ykDNpk6Lo9dXVlMjmyxfFVS4ijAjmuluLnfSNcwaz0OBIhOmRJCPRd_N0Dg7uKvl57hap6ZxZGXb0QiWs4keMw2AqDxMgiIn9gfipOnjeIVR_XMmqhO1k3FcXginM6DgmNHMJCnknyublWgLTcXLtpHLcyP-vOesi7z-FpRtghiTF2n8G0g8k7kFhiWo1XRdI0LYGT-f7olIhpmlUFwYxniwO2HcH147kog3oeDCK1kRgKc3bbzXzjVrXUNHWNfYc3crpLi1l5pCm_lmtCvGVbGiloJ9icRbhjModGz26v7eBI7FRVMavFduIAxzkQBvv06w0BxPdztRHyXUxzm-QTfCxEsKKunLZRjwLUQEUGKp1eDnYfWXwlNkxWrrM5jyIG1f9LE_ZVYF59ZmsbzvcmoYMcOsIWbelRiWUKEgFfeFdGUtvgbMrDEF0Ju0ctvXtgsLOZ12hhTK7k2F7QY7t4boBhT-juclRUePLP9whFEoHImTO-SpYS1S0AJ1Iwz_5NbvsivMsT2wG4lk7hHWCxU2zVwz90J7wvhiTgRaen24_CvBSFTF1R1A1eS6EKFRiVZ6JTyOH0XWGEUrn8ahFR2vGCELDxadPsglHTL_slmZ9Q1d1bqF55_ceU48dlNwa4s55ZU65tTlq44x2FoeqseaEe-SeGxAT4bSwepKRwWnAtwPFe6K0wEKTn5zjWBCupl5unaH4d5Fi6D9cUZdvdissbd4WvnZDZeOPZ6TRdPUvUYDBGKtSFOS9fhDeWR7u9KPCsnNb_vb4onJCRi_mDdZWd-pwDTn33GCbag5w8C8qUXYnd60SPNPlqnumRZs_U85dOndCLlTpjis5iB4Egf3iJ0NqPkQjJHtP_GEgk6tC9AUSbTMu638S-yEtfD9t4dKbXpReV75B6XVXWBmqbkgnEMwXZZgBvNDRgIUsEIdrzMSrhOeLgxkfpqrKCC6JQASSpQsKauYl84kgFnHpbzc2HsP_w31pWswvN4Tg4pEI9vDLN_HbUVfGGz90-df40qr8YpBPMy6ZeG5VvzNP3OPt_HKliAAYkGqkhinkkix8S-2IWdF4Gsj4iKU9hts10GQClGB_9ERLOH2mOhIs5YuYjQU8ZiAcblcfXImH7XRNsEvpUK2IXkH9So6W-VY3qx3M77sPPehV5OcbOXumV8uA9QceLL_SLzUAMakc1pQf1FFwb-qBCGhnrInPvcHmsoUUKAZj6G-QIKxsF6ZDlQJ5at75qItSr7ThkZGRMPfT5U7ZmYM70aHmBxOWHA1VwwDTYW_v9XRmKYC67B-pupEBEWhAEYIsQvAgXd6x0yc2jnNdftpA72RZkSH_YBOYldR7KsFkgdmyaDzw4qGSwOs7t9LQ_vp3m0QCAEAxYIoVFC0OwjFRhWO2rEu7zb_2tbo-5ewBM_wuSMlodW9XVf3xLzE8EtPa2cEMqUTDbYRcN8j34U_7JLDIURrysAPFTYDIOSGG0QJ8DokpjRmbgzReybX8WL9DnxLYTgKv9VUR_rtmOiGpUenvtEVoD-q51Y0LSsXGWOl508HfO1LCvcLX2Vqsx2vXbdB3BxQliZn2o9qpv2e-G6v7_28bDiQER8MpWX0dvRMB6TiHiBXlARUcOVVgN6VpU47cMYHT13lRZuux7HZFcc-md_sL-lyKJgeTDh5QDpZJx6Yfku5OYW9mhXZ77LTOeP4q-h1rXNBZfiJjNp9csCbHW6-9ydMJpc74dpCYuKWf6Emc5pEXKRR4IXA8e9G-aGHCMVQJGsgs05wcdxBw0JIIwzwlsbqWflLwzkublHWt22AgoQg5_oBmc7zKiVifeRpjnkCeFp401DZ6ptuowtlbFql3c7pxrkc4G2XB2GCGk7oBsc2cSQaf5bH7nuZPc-NdhQbjryfKiRdzOa2vcmQXZ1oC6GamOrSh8ynddbalnvzmYkbeflz5nQPw5whBDE1IWJdWHWf2abMVNsioaxi_FkfGHoeCvOvhiBof_Yq9aQQCBypD3lPwBl4zz4At7ysVFk0kuKpNr7FwQJjCD8--1fDCn_bbg9OdgY8j8BQxL_i-E5lNu28Fq5DQT1tCtDVb-bpRiDYjxPqKLB7i9Xju5xf3p1bVktnsCbJbKfnaeMFDFy9dhZwju-jTPPZaCTEyozacdBdqOYDd3bznvVh_rvgr2Cz_uLVGNScPhpIUcNYeyQot6b95BMnL2P2EoyAHFuhVEeHFgzsf4LHFBqQsNOTxBi8BjYsOdyM2WPEoOOREj8Z7-yCqr1uuM8ZnrE6oFN0nhiiACauAEXgu5losEwbp-_XXdtT7zDcPH84y_BexYgHfnDA2VPoaJs9z__nacXSe20fqiB4NmMs2R_TTSxFQCBb37eP4YS4kOwt1qJVad1XOZk205frDhGiQePeuUEE3tXzKdyoVUA8izjqempsoaVKSqmynSn7EmAQpZ8IZ0A4XWrpA7Ez9tktHrUlNfY3fkgLVVKOR8IEzUFOX6a4MOeKFnk1ckWvW80pG6Qoeh3FkXPN8VngKjZjLYP-3Th5_v1DvbDU9zfjVMAEaTN4-I8xWvD6bfdKma-nuCb7gOTlnoreLixCsos3ZU-toPYymfYuVncxXsfwEJNCB2hx9Bb5JfspagZd-AOVDpMtor-nZqXy58N-uDS2dZi4Sxkmn9i6b6MpvUnSmQXk5NUneKjQbPSMvgf9SIqsBMJzuaFkMbBv7jZLzAMzMpiuit4ZKCsezcrYqvescP-LaKnRIsootvE8xqj_k0httnbrYidyYwd19FJIaezrdm_BkbSu3S7zC4IvrsERzK6Az_MYNMmBBBP_d1OTe1A64jsmY5EemfCLcxcDaHBTZGwaUjrv_Y02l5Bu_rOX8UuWWv7N1es5disoNwLdoE1Q-c5kVndxR5H7mRzHs2tv6hngufjb_7rDQ12KE7YU1LLz8xT01K6RaS8DwXm_cjoHxZ4I1Q6l5EDqr2_SqlgHLNxWOdA7IlPEC4iYFppcKlkUoTozzsbfhgrC9Zq_DTJaHMwSRetZgyp_67t2nmBLFWEce0bTSqcSR5LjZ50q-IbvPsk7xAhsLpcj0cIEdMWJrNPSU6g8pVNYV5Q3Jsn9bxCkSNEhS1F1KVwKl_TfdMSehkZnzZ3YYAOHJmsjRhVkW4yf9T1F8J9jiX_6f0=\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Providing a status update**\\n\\nI need to respond concisely, mentioning that health and status are okay, and that gateways and telegram are reachable. There's one critical issue found: a security audit flag related to the Asana skill, indicating potential env-harvesting, though this isn’t proof of a compromise. Warnings about the ClawRouter plugin and older Claude model versions also need mention. A deeper audit shows discrepancies, with 1 critical issue identified but overall health still okay. The probe failed due to a missing scope, but the gateway is functioning.\"},{\"type\":\"summary_text\",\"text\":\"**Crafting a response**\\n\\nI noticed a benign issue where a deep audit probe failed due to a missing operator.read. However, health and status confirm the gateway is reachable, suggesting it’s more of a permissions mismatch than an actual outage. Offering numbered options could be helpful since the skill suggests numbering choices. I might say: “If you want, 1) I review/remove Asana, 2) adjust tool policy/plugin pinning, or 3) leave it reported.” Explicit approval for any changes is essential! Since the user asked just to check, I’ll report and offer options. Let’s write this in Spanish.\"}]}"},{"type":"text","text":"[[reply_to_current]] Le pegué una revisada y **no veo nada roto por el update**: el gateway está **reachable**, Telegram está **OK**, el servicio systemd está **running** y la versión quedó bien en **2026.3.13**.\n\nLo que sí apareció en la auditoría profunda:\n\n- **1 hallazgo crítico** en la skill local **`asana`**: OpenClaw la marcó por patrones de posible **env-harvesting**. \n No significa “compromiso confirmado”, pero sí que **conviene revisarla o sacarla si no la usás**.\n- **Warnings**:\n - `clawrouter` quedó instalado con spec **sin version pinneada** (`@latest`)\n - hay **plugin tools alcanzables** bajo políticas permisivas\n - los agentes `claude` / `claude-opus` figuran como **model tiers viejos** según la auditoría\n- **Rareza menor**: la auditoría deep mostró un `gateway.probe_failed (missing scope: operator.read)`, pero el chequeo de health da **Gateway reachable**. O sea: **parece más un tema de permisos/probe que una caída real**.\n\nSi querés, sigo con una de estas:\n1. **Revisar/frenar la skill `asana`** y decirte si conviene borrarla \n2. **Endurecer configuración** (pin de plugin + tool policy más restrictiva) \n3. **Mirar solo el tema del probe/scope** \n4. **Dejarlo así** y listo","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b7546b12e88190a510e078310be149\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":34797,"output":717,"cacheRead":0,"cacheWrite":0,"totalTokens":35514,"cost":{"input":0.0869925,"output":0.010755,"cacheRead":0,"cacheWrite":0,"total":0.0977475}},"stopReason":"stop","timestamp":1773622367903}} {"type":"message","id":"71b4788f","parentId":"9a69e456","timestamp":"2026-03-16T00:55:04.134Z","message":{"role":"user","content":[{"type":"text","text":"System: [2026-03-16 00:54:28 UTC] Elevated ASK — exec runs on host; approvals may still apply.\nSystem: [2026-03-16 00:54:34 UTC] Reasoning ON — include .\n\nConversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"3981\",\n \"reply_to_id\": \"3968\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 00:55 UTC\",\n \"has_reply_context\": true\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nReplied message (untrusted, for context):\n```json\n{\n \"sender_label\": \"pipo\",\n \"body\": \"Le pegué una revisada y no veo nada roto por el update: el gateway está reachable, Telegram está OK, el servicio systemd está running y la versión quedó bien en 2026.3.13.\\n\\nLo que sí apareció en la auditoría profunda:\\n\\n• 1 hallazgo crítico en la skill local asana: OpenClaw la marcó por patrones de posible env-harvesting.\\nNo significa “compromiso confirmado”, pero sí que conviene revisarla o sacarla si no la usás.\\n• Warnings:\\n• clawrouter quedó instalado con spec sin version pinneada (@latest)\\n• hay plugin tools alcanzables bajo políticas permisivas\\n• los agentes claude / claude-opus figuran como model tiers viejos según la auditoría\\n• Rareza menor: la auditoría deep mostró un gateway.probe_failed (missing scope: operator.read), pero el chequeo de health da Gateway reachable. O sea: parece más un tema de permisos/probe que una caída real.\\n\\nSi querés, sigo con una de estas:\\n\\n1. Revisar/frenar la skill asana y decirte si conviene borrarla\\n2. Endurecer configuración (pin de plugin + tool policy más restrictiva)\\n3. Mirar solo el tema del probe/scope\\n4. Dejarlo así y listo\"\n}\n```\n\nDale hace todo eso y corregí lo que encontraste."}],"timestamp":1773622504122}} {"type":"message","id":"af69cf73","parentId":"71b4788f","timestamp":"2026-03-16T00:55:34.371Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Considering remote access settings**\n\nI see that the skill advises not to modify remote access settings without confirming how the user connects. It seems that we could determine the connection from the current tools being used, like Tailscale and Telegram. While the user requested execution, I think I should still provide a brief plan before making any changes, even though they might have implicitly approved it. So, I can summarize the plan and then proceed to execute it in the same response.\n\n**Planning configuration changes**\n\nI know I need to include exact commands, their impact, rollback procedures, and confirm access will remain available for each step. Even though I'm not consulting the user before every step, I should still provide a brief narration before executing each action. Since this is sensitive, keeping it value-dense makes sense. First, I need to inspect the relevant configuration using the `gateway.config.schema.lookup` before making any changes or addressing specific config questions. It's crucial to check the config schema path.","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b754ea54c08190b31f33591315b281\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1T9BtSTBRmLwa8XhaUoiZLiE1GhM-VD0DjoJTOsyp2Z-MFQpwGJSm2tDPX7OCo6YWj1QVtDD_8PxVPY8Xljd7AFfVIRZzCFS61Ht_ewRERpQ2Xxxs60I5GQ40NytwPU2EfC8_fLBlVrwBfreREq2aR4sVf5aGSn0UZO79pnStnXYmxresS7L34x9J24cdJ-nkf-3YKURugWgjSCg2SXaG7cGOsJzAXcH0npPQd-nteZPxumGwUinesrvbFE2dquXVeL6O_UAPwb4B9D22iTkj2ftBxmvUhgZbDw7DZAM1TCRZKc3Efc1ibKAa1Os_Qp5RSswzrc6ulBQAZ2U85crZQGOUDX_GhGeaIqSsZlO65HpUADgqz49URO8TIIXjavzaQnnx7e3wxjxHOB1OmesYjC17OE30ozCf3yHTVCC2mZbvpC_0DbNHFe2BN1KLPIIWpKXinPdmk9BFoTkjf3puiFADQ_yhRRkw8jy8CftqedkthPUMqmyRR5tmDE7NMATGzJyP9OvfJf7_fH-iESjRN9kKO47UqWz2NvVaRDV20lBqw47aZ9-RMkMe6gcXK7j0TZ7tECvbGzx-9sLn7eLJmydHNRro1-HyWd1STdOMUiZUWyRHQe0xT8edTzBjDvmUGu3Jb585E6OMckTRrUMBWCsGz9KKSxm6UnSWwkvdsj_0Ih2as1uubMrlSZsvDSw4-2U7qWSyNnbL2USPtFCRD7cWdXvQzZAtV387A-7Xjj5SCa9Gx-jnkEdfINgFgaHge1oIgFMVhaK6w0dTNnkAD8ea9Os4A4qKH-y_YW1rWKnswgAn5I8ikFBlQar5_6bVCmfLuM-3R1p_t--4wIliNFPU57q4I2AW5I3kPN85rr5pq-S35PfKlTK0awxPM5IN2azqsLbNJ-PIMSEWhVxQel2MUm-6WkB6hfWPwZCBiryYlzJXFYBZYSRPOQcK3p9vN3IPlY52nZ0VkMJxAN0tLAXE098FUOC59dYfyUI_4v5W_vDwe3Mqfx1Jru3LUDYDUSq9ru43tKbZxbryogViRJkfrp65IsjXqP-eLRJu8oi0YUoAwxgIPMkO38Ih5s4qvX_WdRernh_4vIv-E1HWXQHeQ3WTyYRZaGEv93h01Gih8j0p5EkayhhzgSRjqLskjgLO4ItUPkVQf48s29dBMxHvnuycO5dewO6NCBZCgSujKC2hJc1uVnPF4MqEAliQAjmxSXcyQYk-3ieEUwlTZ3avmZZYehRNd-oiVDjrDadevCjfulYSBxhjdsCbFsQqc6Gkq8yHazy5IW_kZDI1u0nG3iCN8Uld-f2sADb_QDsrlatJwDdDNlSN7Gvb0RdVqxs4z-khTQOTVpj8nYrKyb5HKhyHZEq9Fvwgl8iBlGD0J2NIU0hIW76e5JjSuyCu3TrjEU3y0IAd8qofK70n8vfzDANlwD1agCq3jELFRB80lAaIshoYKXsKXaIxU2CVp2u0l3Lp8fzJzXFvQ4GjSASGLIp2jPMsnmHSA3PT5HV69rusiqYsyBtQyZwABzN9ba36MMQBx_h2Yq1OAe9f8Dr56LQTaMKWLVXqvVC7N9JBjNUO2kSW2Is5w9tsfFZBNLb72wVpoQFfQaVI_9H1O-ZzSiqiZivxj33VeRu1wwPHW6oxfByT70cSwrcpMHFuZKR75MG6I02cWJXKWVh6DbBBKLX8spQXLdSkYXhViPcIKSQjFgpT4TkuvuOnIOcxiDYppcbOBUfBZgHmfH0E6cfSWUt7q9ZpHAmuySSvu7kH7elJVEITONwifDh8f0tUBsQ8_v9IOYxZ76nqe-q_R-JlPleFHign8dPwx12pfrHjtzrxMQADxPPz8M9JhkM7k3s0CtJWrpUdVIUXtvC12TfzOnt0MQc5CPPPIo_Js2-yk_qYsaXT9qMxT_udLfepln1QaSITuO5V8VPagCNXBabkKlIuyBnR6i5NQFp93-LW-elpt5JtcYSV5sgwQcfPWqdyfFmmyJG8kiMf_pMWPKM3IVoNMpFf4K_989IPRk-EkugWoduX70c9ChWe8PbPG0dbBKdWOv5wxlmbhcdYsLQc8aXVSF8baUH509DqkXO0xIaPb9aDEKwCmx9fROxfT81F5UtPYLfx7P5NreszoK_STNSU_gZ0yjMg8SBJN1IlPxgDQWZGd5jYbemCeFTiORuJ82V-xZE17JiVmsTeIFM7NGKSud3qtNB-fMJ6hnc6lYqeizrlPxKcqRmmWlDq_LhLS_f5pNrK3Wc3yKfsLJymyXxqRwKVkAi2rgiMCYMViH5ZkCXBVl70mfDG-NQkRdFIZ_xJhh5DYddnJEYSUlsnClzGvU11q5fp4f_eWCZtwOwv8c5VI7ArKfJF67BukArlEx4R1W8Q4cPySUsS8U_zLsPRJMnREQPzJiE5jSU2RrC4wyA9Gz6r4crWaN83shuAiEdRPtmgnbXS3Q2UEOcwNHJWsC0TmrCiJcIfPkvBtlCwOxI2JJGHSZVc9xR1palNO8Mzy_Rcc4ZDSdxgfqSw_5h2LUrq2DnxZRDnQUvULCg34nAzKj4U1nXk-ODgXCOYUVbZP52XKBaVMXAFEiGs-DYJInSBxxNfkSFO8P3iHo_GQcPJHtiUMFL9yy_-DSswcl3xdClvUo0g4xDD5ZX0E-Z4igTSDtWmUpNGBeDIfHcnwUTw6T65ph8MsPgTFKeMlo5h7sVeDMLj5fXDudLwR26lJzAYXI39UtZxejMSdsMTewzAztfvhh42vumHTKXWj28u5mgth1BnKnTj-EKJKNd8HD2ZsxwDxKRzv6lDrTEnLjpR8U9oCQhMYuAyFrd15wQ8U1UQ9rWnSG-HziUktaQPU2YKL3zVbIRnBAkIWznQrHNG1pYqvNZ19Va6vjAIOkaQegFbUMgfPnxCD9LTmxdc0ntjeWQmc_os0JeP4TflD4zcFC5Hn6kUG_67M-F4eoHQtm-fXz2lH0jY5HjDPBqWvLjECSCDdcQ9VldRrwKzg307SKBn6p-8LMoSsmzQW-pC5wl64h8Wiov3W1ryce-U3Zf8jHqZzgGvSGG7iGgJAaF_QtGTKhj-raZXizYtox7pl_XJdcGrIdv_IPfkrSAJFccvBETKQeeXH8aQSlqJ4x6xPZ_JZzCBhytH-pFi1VJP7rpANJeJT70F4WvPaGrRq1en-y-jWACqo5t7fgcvxUS5tMcXrq6qAmNV5riG0td5yRIkO8S4Egy1hqV4q0kYZXNRNgYf65AR0U9M83tnaxluTN1wi8I0uHMVxmvEXHU7pEho6yvcSswUbDOSmC5PneF-JLPbsN2Y2zBDWXwL-0BhfIflE39erG7Fgisb1bOw-Mjz1QikKYh59vDaQWvgsFluX9HK3E4ywrzyLXbIjV_efOSmQWqCXpxRSivu93Syq65I0wIUEjQygkVLeptr3SF4ffVJgX-snZsjdkcNtuCtGnSfZ_fPQbMxwbS3EuK_JpVqaoSh1Mcp_woGsCpiTvDIm1P0AH81jYd1sfAeU57p-CRSAC47IjeKsrYqHJYFXT6q1IKKbEik7VStDs9Pyg1PBmkze5-_imZkcsHeCciCN4j2cuDH5HVf6dgPci4n9x9Pm35GZImwar05tbaJZoEbswa6gQG4OmlALWNhUwE1Hbf_QXNC2c42qR2MjHAxH35XSdImgoJQKyaMZNRzzffInieMU4qrQ-R-F6D4daGbybdQeWj3ujr4zQ6thPEGjYPi6hRvgzP-ohmLyOMkCCW9_rNc7XN61wLvYs34OTGmlV6u6mUWxVwRZaVBbS9UfTZaNwPYLaCwZnodgXkhFRgVp1-ElzJe8z6za0LV-NBqVXeqn09hGT0tjswNbJStCW9dO9KrLQv4_iHPQOOxdWPBaXuyHCN3xx_cJGsbZuRx2YKnVKtr2r4WfCSLobhG2tWmP_Oew9T5iXFFXjRuavyicWHySH7JGpVXfRnOmLlQ9aJGmJDZVnFuk2Qk3rTcrYz0YUwihJmHIh_yREDEHttOXO6jupy5OMbeWjKHSfezfLNmbyCbpxuYKSX6XO7F8xkXXYPfzW3EWAS19Oh_pFEog31x_n3flxOjuRsTq9YAMUPRDBnjKB85B2DNjwD_xfKLxvcPVT2_spq_Zorj-ZFUJWhxXkTiRYCpV6ZhapsumpvKT8-51MigkS_WQvG-6j_PSdEivnA_0rjfrTftalTANFvdK3b1z8LNPRbI2Uwd2f3zgfaLU6Fm0PrltvPcnLlZ3ZZP_zlKxOdkMJSa5NzqJnFB_BIDxObQh0vjzt820KC31MHbNSXRrPgge0gvRp8vauE8CdXap51bHyVeqLIGfSO5OowTqEjh1rQPEHBcduAdzU_cNgORTMbMGDw5ezxiPKqY65LIhjEMdAffMx-jbMaxr_JzJbqt5OiaCE1L8W4rFTpdg-Ei7U00Guzfa-e8iUyDc_ZTioo-EhjS5KUnqD_ji7DcDw4T9PQtw-BBE2VYwI4ZxzOVhvnsCn7JWYfp7Kx8swAoilUNCbKtI539Qp93Vz7KRI3mogEfBw1mz-_NorUvKiYpGgElwciVVhytup3AlWgdCKuYBYfa0TuxG92ELv-TwMaSGI7vmpe8yQFM7L5tXEy82d8mUgDQDDD0VnwgPyUtze4ZXcWMawM8UDDv-_8lsrwGWTi9V8csLiAA80rAeJQS6hg4cfD4P1PgZrodJ5aaozrtPjirmkYF9oIgq0waB20gnWp5-7g5RYbpwp7PWUPexvUrnB1jCDZtvVTLZ-BzGpfZZCQHm8FjVmzNDr2wDaNBzrWxH7k505nE5zxG9VoouQTuE295-_t-ebte9q2IayanpThgDEXGaRi2v8vQM3UEoO2CJU9uojuYzb0rApdbiV8W3yzt8-CTCEyvUl37vUWrMuwseWmYYee5psB907Hnvp9EWIf80pSSBfKgmJdsakEnT37WwE92MvulDd4ImFZf4U8PlEqNcEHsjGw0cD00AdZVwB0S_yBpYrxFofjC7PDKXAG6G-RW9mR7qFDC62IN9aBt7_KF4x87mVsj3DB_PUwXbsDBQywz4D-v10Qt8vNBSYXkQuWI1wy9v_Dus8-F_4zAGnk-254xKi1ltVGZr1kO2AUExGwd3W6KefNqe51L6btAUreQWpKFdE7HJ-cvg3C6eT_L2Sll1qT1CzquiLEaZ6jlOBc-_7gp0lQPciSbvABKMr9Qhl2mTExuSKgxF-Fum4zUogag16lAKuqpT05HSo-Nk_qyoOANyXAAFQMj8lsYyvQ9EiGZGndYEugkhQGdgSYV0vbfLJUCvaOlbIaoPsD7_v41GaXZe3jqWbcOft3QCWxSIkOy0bUYfwcfbKFZibtfERrThNDnXBEBAX-EIB_PJsLXMT_Sd74MIqfVPf-QZN1mqqpcio26_DBD5SgS6jyCdYBKZH8h7bSE5kNKwOPvFwvcX1mXIqVNg0cavR1JaTwOuRECdun2wEGvmNSN57gVfeZRpBjTbmIqj-_AY-GcPIY2b1MpDgN6_f0MFUqrM9t88saki1_YRdaczg90Tc4eYdNxGwwtxonF8cGbPbzGmzY5MRGjHMtkd44Q0wxux8f2Pa7ReXvynyXZ-nfe2oRvTcPBHnmvbs8_2zh7A1r1lS6sgZLNgZVIr-HTOv48RGCRm7P1uF5wllG3JM9J-1K9jq0FHbrtjZXS2nSJdoN_4w5f3vVDKHPzNr396pz_DjDFEzCpBiVoZZ5dT_uePypMJqVVfPklZy59Iun57cSqiLQu2TFIu4vWjaN_GMBHd3U3mDY3VFUDkCC3hSY9Z_Mz1898tl35AV7Nj3dk7yTjaUAxrHL9DRxT29aW7JWN-yJU0FQodoYDGLDqT9tvspS_1CLPQFCKZFHS9sHXAJKlSnD9w-WsfER9eoQLUsn4tzB7wloow_ADnSI1JzAt_NeC30aI4k8Dbh6tAHnTPQ7R5_89oNY2iW-mvY74WsZBthzcqbk9NdbglIgLP36-tYoaY0j3l22v5mG4oxdTrXZ4siLMoKPsEhSQ4SZ1hKcydUuyRvDpljnKnK7Ygn4dBby3eaSrJEqqm9dKXl1qAEsNw00B3-6PNo5fdmHwgSKsgHY6FlFsLI-_IhP5oGqeWNA019wim8jiSN7aoBL78Yc0jR_7d3mxRuHur9fm4m4Gqm8TR8gUtyiRz_PyJkWKDqfLACk8kjPeIobMeM49RakoLFXIFWBMDbXFhwEHvgT6YuIyrtHkCifE6AUCNkbpUqxGo22lBHXRdqikWvhHz3T3Q0TKS525kkF9GKrjXvPAM48WdRSxQkVuL6HNsHeGSWzaUOANMTrcowSlsdmAjxouLb-U60E_sC_oglaS9Tkho7s2gD8Ice4YEVdgewvrVv-rCt-fLcQBHi89iwCLXYkPlFumGLd7eEahjkdMBDtrkw8DaGTz929p-wnssecD0oj68BD6pl1oGL6MO7ydDyybgleBz0lg7g-xrr2_Ixx0MpRHfM07FAAQ4xNs-c9hPILJaFvMxxyPrHR3id_YsPJSMLZPBWzpaCcKGutSAdGoFOG62s8TyMxh_Bvhhf38u6mumlbu7zcV_xu4cTXZc1klXFoOfM0ILR0yy40iR-7MPLIdV4WpZIjCiuAO3OnA0YuNpHce2IQeTPO12EYATXuIDn9vK2Bh-H1pqsmwp9-JM1F__Zr09r7kXbc_rtYgGB0Cweck03FjhDJAGvwudHs4k0AxooqN8gvM-mt6A-4mJMuXRmYhTtSdwJHzDcfAUskqFz5SdbA6-63OTetGtJERBSQTscU377_xytXKAiRhw2SjqX3tcoYqaaZ6F74mvmRgIRLNDFhLWvIk8CIl8cRPTO_Unpfqa3cBuZ_wh4L65Df2wld_0EusDsyt_nxUClwJk5viaR6hBFpWdsNa3tN9Ps52ZR_77NJA1DVkwCcjkDEw_IZtqS7JOLWfHLUQzOFVlCFlM2Wx5KnKz4pjAuvChBm0HfASaDkIFQiDPVAWzCwU4aF8lHZJenKJSxbKxRoDOz9yCbHkdFb48yOBxw8FaWjnZZZuBsQygVOLZzlZIHFqWYBwhK-bCP5adgOfShQLQWJAlMbFanCY62HZbAqI_6Oj2YG-G6e-ntn5qxyW18moOWV81LNOp2gT3Y342hqxR67Wpc13tmW2nWj3-f2t3ZJ2ogGA3SI1KRNNQjh-Ca-3VdXf5k-View7OIYWKVQdoGiCqegl4HNsxTNS_yPpAhHCwwYT9GVIeKHzBwoLyY8procuhDcdG2Vb8cTPZxbOdnmW4X7zez-_4wq_sLHoWfbBiZYofPE-3hZF9u9xxTsPa_nIAsHrORjgc2SaSmVyEnDJujG3wQwjZqQu24O1su04J4VMMImuMNv3_5fqjtOzpW3Da-dgf9nBOAlV6MFZLnNdsPoew7EjhBq6dzssObiWSwcQySrrQdfQLJ-DZ_0wIOD3xPSr4-AXDQS8EfUhJmtayRBqOZO2IhNVhzWonv4oVAfRbHsXW0iMTx4PDA9CcIRInN6y_PemKb3dAH2HeoyGUPQQ1sF8ZtXYhYpp4xjasEf3pfXp1QoapMRyGnlXXttbQQ59br3vFKKYm-FpGqV49slbgHYnvQgTnpNR0eQojgXR-c1QZ62_4oGFwH-jFA8agCc_JL2-j5omCCgQFmAx-shKKRJ6urBs3KEYsjLrije4cjqy04c0yPV0V7FPZGk833U92w_yiDZzizGtETht4EyD1a5kEKQ5P2fYchD5p0TuYLTrPOZsbxV11asxGIkYDOuTIXBhuznnsHHb616bbeGa9fGSx3dSgnJDPGByvtdELKVTOCK_HY_4ppXQ6dnikBdO8dFnKr-TkxhZmf_UKgeybHRdG1OuTlW93htkCNAQMai0Pckb9Pn-xSeHZ2MDo9cZwkJwV0X6fo4xTEusMbjqpYs0gkhEoXq7-9_HXyjmUqam8masZA4I_uLvaP_P3yj-FrAg2THy9JGc9utJhqEDfBJHqKm760hQSnPG4tWeI_O78cdDlLzMy6ahJgns5Na2beMKILo0xyCKqwW8V86mt6lsSB-eFSbzTdy_gK9qVtsLRP-ihRwXkEKcCKke3eCS7RlM_v21walyIMKiJ_r2euRzGnOYdZm0NhaNmMI5zqtadZIrH3S8eu-NmwR8EOLPyBtqtqyEnhWJwjAjnuRGTArZqWLWqhK_UVN3nj5Ht63Omh7D0-AWOPHZKSVRYXR1kQK7rUqG-8G9ajI5wUgJvyONP1AZyZgx4jK_2dXxNn9Fm0WXUBCnlAo9U2aAGk4HCUWPJ0qtohAIUELbjFx9MSPZFRj_XMonbIuqgxmCS5BBx2yrWhujxQJs--a-5hXY9gLCxzXTELdlMRSlbF2Y9pIOt5kdOkriAGNC8KskwmdIMAHAAPh9kySry0zTRIfn2x6g==\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Considering remote access settings**\\n\\nI see that the skill advises not to modify remote access settings without confirming how the user connects. It seems that we could determine the connection from the current tools being used, like Tailscale and Telegram. While the user requested execution, I think I should still provide a brief plan before making any changes, even though they might have implicitly approved it. So, I can summarize the plan and then proceed to execute it in the same response.\"},{\"type\":\"summary_text\",\"text\":\"**Planning configuration changes**\\n\\nI know I need to include exact commands, their impact, rollback procedures, and confirm access will remain available for each step. Even though I'm not consulting the user before every step, I should still provide a brief narration before executing each action. Since this is sensitive, keeping it value-dense makes sense. First, I need to inspect the relevant configuration using the `gateway.config.schema.lookup` before making any changes or addressing specific config questions. It's crucial to check the config schema path.\"}]}"},{"type":"text","text":"Te muestro un plan corto y lo ejecuto en modo reversible: 1) aislar la skill `asana` en vez de borrarla, 2) revisar y endurecer la config relevante, 3) pinnear `clawrouter`, 4) revalidar todo al final. Si algo sale raro en el camino, freno y te lo digo antes de tocar más.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b754fd5184819091c5f7ecf9e69fef\",\"phase\":\"commentary\"}"},{"type":"toolCall","id":"call_jYBiTCRK2b16OrjSITIfdOUU|fc_0776d4d0ce7a6f6b0169b7550634c88190bbd2271fea4264bb","name":"gateway","arguments":{"action":"config.schema.lookup","path":"plugins"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"plugins\"}"},{"type":"toolCall","id":"call_xQhCWm6QSFjAapKizXfFY41Q|fc_0776d4d0ce7a6f6b0169b7550634d88190961e481903ac997f","name":"gateway","arguments":{"action":"config.schema.lookup","path":"agents.list"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"agents.list\"}"},{"type":"toolCall","id":"call_zBIOKaikSUKmihS2qzyapxEt|fc_0776d4d0ce7a6f6b0169b7550634e48190ac163cc112f760bd","name":"exec","arguments":{"command":"rg -n \"plugin|extension|tool policy|allowlist|minimal|coding|extensions\" /usr/lib/node_modules/openclaw/docs /usr/lib/node_modules/openclaw -g '!**/node_modules/**'","workdir":"/home/ubuntu/.openclaw/workspace","yieldMs":10000,"timeout":40},"partialJson":"{\"command\":\"rg -n \\\"plugin|extension|tool policy|allowlist|minimal|coding|extensions\\\" /usr/lib/node_modules/openclaw/docs /usr/lib/node_modules/openclaw -g '!**/node_modules/**'\",\"workdir\":\"/home/ubuntu/.openclaw/workspace\",\"yieldMs\":10000,\"timeout\":40}"},{"type":"toolCall","id":"call_Pg6jPUhMw7X326HoeEDlh3Qj|fc_0776d4d0ce7a6f6b0169b7550634ec819084c577d4aaf70982","name":"exec","arguments":{"command":"printf '--- asana_api.mjs ---\\n'; sed -n '1,220p' /home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs 2>/dev/null; printf '\\n--- oauth_oob.mjs ---\\n'; sed -n '1,220p' /home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs 2>/dev/null","workdir":"/home/ubuntu/.openclaw/workspace","yieldMs":10000,"timeout":40},"partialJson":"{\"command\":\"printf '--- asana_api.mjs ---\\\\n'; sed -n '1,220p' /home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs 2>/dev/null; printf '\\\\n--- oauth_oob.mjs ---\\\\n'; sed -n '1,220p' /home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs 2>/dev/null\",\"workdir\":\"/home/ubuntu/.openclaw/workspace\",\"yieldMs\":10000,\"timeout\":40}"},{"type":"toolCall","id":"call_7G9zmGWsYXB2AVduMPlTWZnE|fc_0776d4d0ce7a6f6b0169b7550634f4819091db103f6f0c2d02","name":"exec","arguments":{"command":"if [ -d /home/ubuntu/.openclaw/extensions/clawrouter ]; then printf '--- package.json ---\\n'; sed -n '1,220p' /home/ubuntu/.openclaw/extensions/clawrouter/package.json; printf '\\n--- install records ---\\n'; rg -n \"clawrouter|@latest|install\" /home/ubuntu/.openclaw /home/ubuntu/.config -g '!**/node_modules/**' 2>/dev/null | sed -n '1,220p'; else echo 'clawrouter extension dir not found'; fi","workdir":"/home/ubuntu/.openclaw/workspace","yieldMs":10000,"timeout":40},"partialJson":"{\"command\":\"if [ -d /home/ubuntu/.openclaw/extensions/clawrouter ]; then printf '--- package.json ---\\\\n'; sed -n '1,220p' /home/ubuntu/.openclaw/extensions/clawrouter/package.json; printf '\\\\n--- install records ---\\\\n'; rg -n \\\"clawrouter|@latest|install\\\" /home/ubuntu/.openclaw /home/ubuntu/.config -g '!**/node_modules/**' 2>/dev/null | sed -n '1,220p'; else echo 'clawrouter extension dir not found'; fi\",\"workdir\":\"/home/ubuntu/.openclaw/workspace\",\"yieldMs\":10000,\"timeout\":40}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":35175,"output":1546,"cacheRead":0,"cacheWrite":0,"totalTokens":36721,"cost":{"input":0.0879375,"output":0.023190000000000002,"cacheRead":0,"cacheWrite":0,"total":0.1111275}},"stopReason":"toolUse","timestamp":1773622504133}} {"type":"message","id":"60340f02","parentId":"af69cf73","timestamp":"2026-03-16T00:55:39.319Z","message":{"role":"toolResult","toolCallId":"call_jYBiTCRK2b16OrjSITIfdOUU|fc_0776d4d0ce7a6f6b0169b7550634c88190bbd2271fea4264bb","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"plugins\",\n \"schema\": {\n \"type\": \"object\",\n \"additionalProperties\": false\n },\n \"hint\": {\n \"label\": \"Plugins\",\n \"group\": \"Plugins\",\n \"order\": 205,\n \"help\": \"Plugin system controls for enabling extensions, constraining load scope, configuring entries, and tracking installs. Keep plugin policy explicit and least-privilege in production environments.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins\",\n \"children\": [\n {\n \"key\": \"enabled\",\n \"path\": \"plugins.enabled\",\n \"type\": \"boolean\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Enable Plugins\",\n \"help\": \"Enable or disable plugin/extension loading globally during startup and config reload (default: true). Keep enabled only when extension capabilities are required by your deployment.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.enabled\"\n },\n {\n \"key\": \"allow\",\n \"path\": \"plugins.allow\",\n \"type\": \"array\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Plugin Allowlist\",\n \"help\": \"Optional allowlist of plugin IDs; when set, only listed plugins are eligible to load. Use this to enforce approved extension inventories in controlled environments.\",\n \"tags\": [\n \"access\"\n ]\n },\n \"hintPath\": \"plugins.allow\"\n },\n {\n \"key\": \"deny\",\n \"path\": \"plugins.deny\",\n \"type\": \"array\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Plugin Denylist\",\n \"help\": \"Optional denylist of plugin IDs that are blocked even if allowlists or paths include them. Use deny rules for emergency rollback and hard blocks on risky plugins.\",\n \"tags\": [\n \"access\"\n ]\n },\n \"hintPath\": \"plugins.deny\"\n },\n {\n \"key\": \"load\",\n \"path\": \"plugins.load\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Plugin Loader\",\n \"help\": \"Plugin loader configuration group for specifying filesystem paths where plugins are discovered. Keep load paths explicit and reviewed to avoid accidental untrusted extension loading.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.load\"\n },\n {\n \"key\": \"slots\",\n \"path\": \"plugins.slots\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Plugin Slots\",\n \"help\": \"Selects which plugins own exclusive runtime slots such as memory so only one plugin provides that capability. Use explicit slot ownership to avoid overlapping providers with conflicting behavior.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.slots\"\n },\n {\n \"key\": \"entries\",\n \"path\": \"plugins.entries\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Plugin Entries\",\n \"help\": \"Per-plugin settings keyed by plugin ID including enablement and plugin-specific runtime configuration payloads. Use this for scoped plugin tuning without changing global loader policy.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries\"\n },\n {\n \"key\": \"installs\",\n \"path\": \"plugins.installs\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Plugin Install Records\",\n \"help\": \"CLI-managed install metadata (used by `openclaw plugins update` to locate install sources).\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.installs\"\n }\n ]\n }\n}"}],"details":{"ok":true,"result":{"path":"plugins","schema":{"type":"object","additionalProperties":false},"hint":{"label":"Plugins","group":"Plugins","order":205,"help":"Plugin system controls for enabling extensions, constraining load scope, configuring entries, and tracking installs. Keep plugin policy explicit and least-privilege in production environments.","tags":["advanced"]},"hintPath":"plugins","children":[{"key":"enabled","path":"plugins.enabled","type":"boolean","required":false,"hasChildren":false,"hint":{"label":"Enable Plugins","help":"Enable or disable plugin/extension loading globally during startup and config reload (default: true). Keep enabled only when extension capabilities are required by your deployment.","tags":["advanced"]},"hintPath":"plugins.enabled"},{"key":"allow","path":"plugins.allow","type":"array","required":false,"hasChildren":true,"hint":{"label":"Plugin Allowlist","help":"Optional allowlist of plugin IDs; when set, only listed plugins are eligible to load. Use this to enforce approved extension inventories in controlled environments.","tags":["access"]},"hintPath":"plugins.allow"},{"key":"deny","path":"plugins.deny","type":"array","required":false,"hasChildren":true,"hint":{"label":"Plugin Denylist","help":"Optional denylist of plugin IDs that are blocked even if allowlists or paths include them. Use deny rules for emergency rollback and hard blocks on risky plugins.","tags":["access"]},"hintPath":"plugins.deny"},{"key":"load","path":"plugins.load","type":"object","required":false,"hasChildren":true,"hint":{"label":"Plugin Loader","help":"Plugin loader configuration group for specifying filesystem paths where plugins are discovered. Keep load paths explicit and reviewed to avoid accidental untrusted extension loading.","tags":["advanced"]},"hintPath":"plugins.load"},{"key":"slots","path":"plugins.slots","type":"object","required":false,"hasChildren":true,"hint":{"label":"Plugin Slots","help":"Selects which plugins own exclusive runtime slots such as memory so only one plugin provides that capability. Use explicit slot ownership to avoid overlapping providers with conflicting behavior.","tags":["advanced"]},"hintPath":"plugins.slots"},{"key":"entries","path":"plugins.entries","type":"object","required":false,"hasChildren":true,"hint":{"label":"Plugin Entries","help":"Per-plugin settings keyed by plugin ID including enablement and plugin-specific runtime configuration payloads. Use this for scoped plugin tuning without changing global loader policy.","tags":["advanced"]},"hintPath":"plugins.entries"},{"key":"installs","path":"plugins.installs","type":"object","required":false,"hasChildren":true,"hint":{"label":"Plugin Install Records","help":"CLI-managed install metadata (used by `openclaw plugins update` to locate install sources).","tags":["advanced"]},"hintPath":"plugins.installs"}]}},"isError":false,"timestamp":1773622539307}} {"type":"message","id":"538a2297","parentId":"60340f02","timestamp":"2026-03-16T00:55:39.391Z","message":{"role":"toolResult","toolCallId":"call_xQhCWm6QSFjAapKizXfFY41Q|fc_0776d4d0ce7a6f6b0169b7550634d88190961e481903ac997f","toolName":"gateway","content":[{"type":"text","text":"{\n \"status\": \"error\",\n \"tool\": \"gateway\",\n \"error\": \"gateway closed (1000 normal closure): no close reason\\nGateway target: ws://127.0.0.1:18789\\nSource: local loopback\\nConfig: /home/ubuntu/.openclaw/openclaw.json\\nBind: loopback\"\n}"}],"details":{"status":"error","tool":"gateway","error":"gateway closed (1000 normal closure): no close reason\nGateway target: ws://127.0.0.1:18789\nSource: local loopback\nConfig: /home/ubuntu/.openclaw/openclaw.json\nBind: loopback"},"isError":false,"timestamp":1773622539375}} {"type":"message","id":"e2a7f6e0","parentId":"538a2297","timestamp":"2026-03-16T00:55:39.402Z","message":{"role":"toolResult","toolCallId":"call_zBIOKaikSUKmihS2qzyapxEt|fc_0776d4d0ce7a6f6b0169b7550634e48190ac163cc112f760bd","toolName":"exec","content":[{"type":"text","text":"{\n \"status\": \"error\",\n \"tool\": \"exec\",\n \"error\": \"exec denied: allowlist miss\"\n}"}],"details":{"status":"error","tool":"exec","error":"exec denied: allowlist miss"},"isError":false,"timestamp":1773622539391}} {"type":"message","id":"9ab43a26","parentId":"e2a7f6e0","timestamp":"2026-03-16T00:55:39.414Z","message":{"role":"toolResult","toolCallId":"call_Pg6jPUhMw7X326HoeEDlh3Qj|fc_0776d4d0ce7a6f6b0169b7550634ec819084c577d4aaf70982","toolName":"exec","content":[{"type":"text","text":"{\n \"status\": \"error\",\n \"tool\": \"exec\",\n \"error\": \"exec denied: allowlist miss\"\n}"}],"details":{"status":"error","tool":"exec","error":"exec denied: allowlist miss"},"isError":false,"timestamp":1773622539402}} {"type":"message","id":"928d3d68","parentId":"9ab43a26","timestamp":"2026-03-16T00:55:39.430Z","message":{"role":"toolResult","toolCallId":"call_7G9zmGWsYXB2AVduMPlTWZnE|fc_0776d4d0ce7a6f6b0169b7550634f4819091db103f6f0c2d02","toolName":"exec","content":[{"type":"text","text":"{\n \"status\": \"error\",\n \"tool\": \"exec\",\n \"error\": \"exec denied: allowlist miss\"\n}"}],"details":{"status":"error","tool":"exec","error":"exec denied: allowlist miss"},"isError":false,"timestamp":1773622539402}} {"type":"message","id":"91111bf9","parentId":"928d3d68","timestamp":"2026-03-16T00:55:50.004Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Troubleshooting gateway issues**\n\nIt looks like the gateway schema plugin path is set, but I'm facing errors like \"agents.list failed\" due to a gateway close and an exec denial from an allowlist miss. Maybe reading files instead of executing them could help. The gateway might be temporarily closed since it's been restarted. I need to inspect the actual config with the `gateway.config.get` command when it's available. I may also try to access specific files directly, but I'm unsure if that’s permitted for edits.\n\n**Investigating command restrictions**\n\nIt seems the allowlist issue might be due to the use of commands like `rg` or `sed`. Only allowlisted commands, like `openclaw`, appear to be working. I should consider using the read tool directly instead of exec, especially for known files. I could read the config path at `/home/ubuntu/.openclaw/openclaw.json`, which seems fine. It might also be worthwhile to try the `gateway.config.get` command again to see if it works this time.","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7550d2a748190b7e3dd932c4a9374\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1UVAp0KPTw2LvYO4FbIDxOhkWVxEcxe_6eV9H1zl8lDzHD6UYeVOH6R2rrcN1hqGNKdn6cJtTqCYG7XuWtFu9fVBTAixXFTHDqRyw1-sDF4eH14AgvC6D0ryxODiynfuuU9roQS53I5h96d579XKe_i47aQ2feLPHW3yYGTQ3PYYc3tmYuDvI6jlf428lSye332hcw-0lE6eCerTaZ2ET0HV0Gjd9HrcdCmp069h0uL1jMA_o1Kg7w4VCpf_FVYLl3sAzEetN3yNkLwS9dCoZiz7kBHuQLr9g_a5e5F_e4WLm-VyEYMgqwaTHfbX8C1BC1aNvyTRm8IaHgRNKUH0_fKMrNzKdhzVwkvqwzkQuask9FeSS8xyiaUnK-YKn_2kkx1smqflSRNym36Sv-cRcJX3KAahSlje1BTurYzI7q50CdFx9thwievNQx8jguh1n77iJ4Q8dK9IVnKF9KgsaH7kjr73zXSimj8Q8U4nT0O_NErfbujs1h-yQabhsDXq8m2Zx2T9QFX2N9ig08eEmGVxD8jg0OGT_Kx8JPfAcelA3yZSn4S3Hb4O1KKlVYcpZSauRhvRH3Ie1dGc9tny4xFztMJ5FGxc2vixKVxEfnFjqs_V-hyx8VUwtT_WtblYIRuYwzdpX7nsNKEkhgf0_Lcd6tcQiyhI8r2JGB5pAW6s4OmmaQ2Wmj8qVQ_9vk08GIPcQR9soMv2fPQONB-9_Wjvwk8o3y5Am6npHdwuoV4bwI8ghM7VM3up9x8wNRmpq9sWIPQ95wNiBd1WNGaQ2vzxBBQcHH2rCGm5KmixLkuJ-ES5y3hrEIPQSt50Cvd4xcxVRLFDL6sfCl00It1G9XZgEDUBDeqDZdIg1PospEoJ7npZ2J9rh2ciD9zhYwW38OhGsYws2p6kW3E9cB57P2pk7kWAOOmLCWpX22PIk_4lEet1nCnMIlMksRkQhEoyz5L_btqPZaB7nG5l0mLXEFvAEWCBpcPsRYRvgvuZc9vsxn47-zRUZXAL32ueoFKCMWlIAKw_z44iQ4ppJ4cRObmNRdecALmCHvBAFmjErIbO4K8PbGqesctgd7DhlaJtRIiFFape8ZPpuq2-Y_ASp16gQaLhskdqMQTvmGZxv6GdvERLyvpA2wML6Jiw6e7o7Qt4EEQ0m2ngK-GadEOkVKNnxhFde4keHSHtBtmY0vZGkzGB8BIUqakWTEproj0qMnvlRd1QBZaAF2nALG3kSVftkl0-FPqG4QfTLE35nrMcBUrNDkBNvHDLLznTp8N0kxlKn1dNiwEGx20MCW-TB8aesg93FYPvhR_f4C8e1GbQ8D8WNIIV3VLXfQW5YDhDOJhrTIikNleGYUHdyov2HqIkEQlpXQF26dp8nzrhhCI0rJbWE83QotYz8UUS9LYBDpxidLmdQSFiDVWndSMhdgBuHONJwIQDjbABICRWNhTAyHMonffl7qkCuyb-1UCBXv-QHFhKKyOL9CZWG3wZsOon3-pMqCh_xIlvkE_Pu0HupSqdPYVbuQGCplnGHY6NXiGyymeHbGbnXYB4gb6WrsWu47z7lkVxsv_QMy7elI2NknkU_45YAkwP65KYEdIqx14P2VT6U_51D3uPga-0IeAK39vI-RwKBS7KwQx19zejpKbR_KtuK31r_kSLRkeZJLaWYYtmYXeHZKqbPngCkLfkRNK_f76KRmvgmPmB8kcTVlK-KaaG22uLutHXth69zeuFSDoONYD7PkpebkjWWWVZD0GbQuP5CDdkbu8_CPHIzTWWJiflCh5hSwsYWrjqKz0J8zdsc8rBGqTkpwRVOYmjg0BB_BM9pG-PNCMEU4rQA4cGnxO6Yw9VltO4gNOraB0mXLrllk5rxmfuvJkkbi-wL-9gE7eEz5L4yoUNIXdJXleC6Az2WomC-XStopcCPnwvbavpsLWZtK7jNrxfhLHPwFd_Eaf7MFgn3rB7hQMOrSq1XHsfcOdop01YB69tjS3uEODVIRQECseZbxX0winJsGJwOzvPDrPHT_sCBgL6UzyQM5q3TFRrRz6o5TdP9xcVSWE4GjO9N5MBqxkn8bKEz3IwsPzmH0wuJG_dmAotF0kQSiWvXMI9f6LYkrk2KcaI6IwPTOHcoK3_WfGnX1xKsVgnKdiV3U-KYhddEfrDpwFOs84eDNsC2Sj536rh25iAIIQRlUZ_4w7KdvAMHKtk5HVdNcSv2fRKgjI8_b2Mu3iTSxh7xfU8DB5XxQxq3vPHq_0A5bS3W59KmqxmIbiMmnXH-b1WLffUXEZ-4SKjxGN6Z6WHW5rVtUiQPoHTcpb4z50m6usRKWgxcjS1S0COe6azXDXcidGR2JfCk8WdDmAkxCTe76Re5oycoReFqVwyB-LsJlu5duYU5BWICRA_Z2oegRy-qjXlS2lbfvvmAbK494xP4AqjhCjTqjuSLNXGR2yP8brgLXDP3MPSJiYFZxPmJrDR3hrvGd6lB-vQ4VNnB6jf_M4If1BxN0BIy3efzZd6VhGDhTsPguRjRfoMwTNfz4nzAJ5IEOsQvvEaFWQlvnFmOiK94sGwyL4gELDOep4kn5fFPZiF0DFREfQexBp8lJ0rIVcX4qtCgS0WdzzA4WeXVLM42FPn0UBUmIvzt7DxpMBkclXtFxO-Y3E7g==\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Troubleshooting gateway issues**\\n\\nIt looks like the gateway schema plugin path is set, but I'm facing errors like \\\"agents.list failed\\\" due to a gateway close and an exec denial from an allowlist miss. Maybe reading files instead of executing them could help. The gateway might be temporarily closed since it's been restarted. I need to inspect the actual config with the `gateway.config.get` command when it's available. I may also try to access specific files directly, but I'm unsure if that’s permitted for edits.\"},{\"type\":\"summary_text\",\"text\":\"**Investigating command restrictions**\\n\\nIt seems the allowlist issue might be due to the use of commands like `rg` or `sed`. Only allowlisted commands, like `openclaw`, appear to be working. I should consider using the read tool directly instead of exec, especially for known files. I could read the config path at `/home/ubuntu/.openclaw/openclaw.json`, which seems fine. It might also be worthwhile to try the `gateway.config.get` command again to see if it works this time.\"}]}"},{"type":"text","text":"Tuve un freno del sandbox con algunos comandos genéricos, así que sigo por rutas directas y config nativa para no tocar nada a ciegas.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b75515af10819091df4abce4e5e411\",\"phase\":\"commentary\"}"},{"type":"toolCall","id":"call_530fptvDhcueVMMqTtZNCKNR|fc_0776d4d0ce7a6f6b0169b75515d4dc81909552f8f589deaaf9","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs\"}"},{"type":"toolCall","id":"call_PPJKGfMK5TVDr76olxdD4Cmb|fc_0776d4d0ce7a6f6b0169b75515d4f08190ad0ef3058ec091af","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs\"}"},{"type":"toolCall","id":"call_8Wt57ydaQU6CxN3e8H1wMvm4|fc_0776d4d0ce7a6f6b0169b75515d4f881908812379c198aa329","name":"read","arguments":{"file_path":"/home/ubuntu/.openclaw/extensions/clawrouter/package.json"},"partialJson":"{\"file_path\":\"/home/ubuntu/.openclaw/extensions/clawrouter/package.json\"}"},{"type":"toolCall","id":"call_y2HVxAHOzdteECgYaFc0i5Y4|fc_0776d4d0ce7a6f6b0169b75515d500819096262b49767d4d4f","name":"read","arguments":{"file_path":"/home/ubuntu/.openclaw/openclaw.json"},"partialJson":"{\"file_path\":\"/home/ubuntu/.openclaw/openclaw.json\"}"},{"type":"toolCall","id":"call_XSmJG35lplo7EXIPDIruQlqw|fc_0776d4d0ce7a6f6b0169b75515d5888190941e8569299ff555","name":"gateway","arguments":{"action":"config.get"},"partialJson":"{\"action\":\"config.get\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":37818,"output":473,"cacheRead":0,"cacheWrite":0,"totalTokens":38291,"cost":{"input":0.094545,"output":0.007095000000000001,"cacheRead":0,"cacheWrite":0,"total":0.10164000000000001}},"stopReason":"toolUse","timestamp":1773622539425}} {"type":"message","id":"22be5e75","parentId":"91111bf9","timestamp":"2026-03-16T00:55:50.152Z","message":{"role":"toolResult","toolCallId":"call_530fptvDhcueVMMqTtZNCKNR|fc_0776d4d0ce7a6f6b0169b75515d4dc81909552f8f589deaaf9","toolName":"read","content":[{"type":"text","text":"#!/usr/bin/env node\n/**\n * Minimal Asana API CLI with OAuth refresh.\n *\n * Reads token from ~/.clawdbot/asana/token.json\n * Requires ASANA_CLIENT_ID + ASANA_CLIENT_SECRET for refresh.\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst API_BASE = 'https://app.asana.com/api/1.0';\nconst TOKEN_URL = 'https://app.asana.com/-/oauth_token';\n\nfunction die(msg) {\n console.error(msg);\n process.exit(1);\n}\n\nfunction tokenPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'token.json');\n}\n\nfunction configPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'config.json');\n}\n\nfunction loadConfig() {\n const p = configPath();\n if (!fs.existsSync(p)) return {};\n try {\n return JSON.parse(fs.readFileSync(p, 'utf-8')) || {};\n } catch {\n return {};\n }\n}\n\nfunction loadToken() {\n const p = tokenPath();\n if (!fs.existsSync(p)) die(`Token file not found: ${p}. Run oauth_oob.mjs token first.`);\n return JSON.parse(fs.readFileSync(p, 'utf-8'));\n}\n\nfunction saveToken(tok) {\n const p = tokenPath();\n fs.mkdirSync(path.dirname(p), { recursive: true });\n fs.writeFileSync(p, JSON.stringify(tok, null, 2));\n}\n\nfunction urlEncode(params) {\n const u = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) continue;\n u.set(k, String(v));\n }\n return u.toString();\n}\n\nasync function postForm(url, params) {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: urlEncode(params),\n });\n const text = await res.text();\n let data;\n try {\n data = JSON.parse(text);\n } catch {\n throw new Error(`Non-JSON response (${res.status}): ${text.slice(0, 300)}`);\n }\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${JSON.stringify(data)}`);\n return data;\n}\n\nasync function ensureAccessToken(token) {\n const now = Date.now();\n const expiresAt = token.expires_at_ms;\n if (typeof token.access_token !== 'string') die('Token missing access_token');\n\n // Refresh if expiring within 2 minutes\n if (expiresAt && now < expiresAt - 120_000) return token;\n\n if (!token.refresh_token) {\n // Some flows may not return refresh_token; in that case user must re-auth.\n return token;\n }\n\n let clientId = process.env.ASANA_CLIENT_ID;\n let clientSecret = process.env.ASANA_CLIENT_SECRET;\n if (!clientId || !clientSecret) {\n // Fallback to ~/.clawdbot/asana/credentials.json\n try {\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n clientId = clientId || creds.client_id;\n clientSecret = clientSecret || creds.client_secret;\n } catch {\n // ignore\n }\n }\n if (!clientId || !clientSecret) {\n die(\n 'Token needs refresh but ASANA_CLIENT_ID/ASANA_CLIENT_SECRET are not set, and ~/.clawdbot/asana/credentials.json is missing. Run: node skills/asana/scripts/configure.mjs --client-id ... --client-secret ...',\n );\n }\n\n const data = await postForm(TOKEN_URL, {\n grant_type: 'refresh_token',\n client_id: clientId,\n client_secret: clientSecret,\n refresh_token: token.refresh_token,\n });\n\n const refreshed = {\n ...token,\n ...data,\n obtained_at_ms: now,\n expires_at_ms: typeof data.expires_in === 'number' ? now + data.expires_in * 1000 : null,\n };\n\n saveToken(refreshed);\n return refreshed;\n}\n\nasync function asanaGet(pathname, token, query) {\n const url = new URL(API_BASE + pathname);\n if (query) {\n for (const [k, v] of Object.entries(query)) url.searchParams.set(k, String(v));\n }\n const res = await fetch(url, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n const text = await res.text();\n let data;\n try {\n data = JSON.parse(text);\n } catch {\n throw new Error(`Non-JSON response (${res.status}): ${text.slice(0, 300)}`);\n }\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${JSON.stringify(data)}`);\n return data;\n}\n\nasync function asanaJson(method, pathname, token, body) {\n const url = API_BASE + pathname;\n const res = await fetch(url, {\n method,\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n body: body === undefined ? undefined : JSON.stringify(body),\n });\n const text = await res.text();\n let data;\n try {\n data = JSON.parse(text);\n } catch {\n throw new Error(`Non-JSON response (${res.status}): ${text.slice(0, 300)}`);\n }\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${JSON.stringify(data)}`);\n return data;\n}\n\nconst asanaPost = (pathname, token, body) => asanaJson('POST', pathname, token, body);\nconst asanaPut = (pathname, token, body) => asanaJson('PUT', pathname, token, body);\n\nfunction parseArgs(argv) {\n const [cmd, ...rest] = argv;\n const flags = {};\n const positionals = [];\n for (let i = 0; i < rest.length; i++) {\n const a = rest[i];\n if (a.startsWith('--')) {\n const k = a.slice(2);\n const v = rest[i + 1] && !rest[i + 1].startsWith('--') ? rest[++i] : true;\n flags[k] = v;\n } else {\n positionals.push(a);\n }\n }\n return { cmd, flags, positionals };\n}\n\nfunction csvList(v) {\n if (!v) return [];\n return String(v)\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n}\n\nasync function resolveMeGid(accessToken) {\n const me = await asanaGet('/users/me', accessToken);\n const gid = me?.data?.gid;\n if (!gid) throw new Error('Could not resolve /users/me gid');\n return String(gid);\n}\n\nfunction printJson(x) {\n console.log(JSON.stringify(x, null, 2));\n}\n\nasync function main() {\n const { cmd, flags, positionals } = parseArgs(process.argv.slice(2));\n if (!cmd) {\n die(\n 'Command required: me | workspaces | list-workspaces | set-default-workspace | projects | tasks-in-project | tasks-assigned | search-tasks | task | update-task | complete-task | comment | create-task',\n );\n }\n\n let tok = loadToken();\n tok = await ensureAccessToken(tok);\n const accessToken = tok.access_token;\n const cfg = loadConfig();\n\n const getWorkspaceOrDefault = () => {\n const w = flags.workspace || cfg.default_workspace_gid;\n return w ? String(w) : null;\n };\n\n if (cmd === 'me') {\n printJson(await asanaGet('/users/me', accessToken));\n return;\n }\n\n if (cmd === 'workspaces' || cmd === 'list-workspaces') {\n printJson(await asanaGet('/workspaces', accessToken));\n return;\n }\n\n if (cmd === 'set-default-workspace') {\n const workspace = flags.workspace || positionals[0];\n if (!workspace) die('Usage: set-default-workspace --workspace ');\n\n const outPath = configPath();\n const next = { ...cfg, default_workspace_gid: String(workspace) };\n fs.mkdirSync(path.dirname(outPath), { recursive: true });\n fs.writeFileSync(outPath, JSON.stringify(next, null, 2));\n console.log(`Saved default workspace to: ${outPath}`);\n console.log(`default_workspace_gid = ${next.default_workspace_gid}`);\n return;\n }\n\n if (cmd === 'projects') {\n const workspace = getWorkspaceOrDefault();\n if (!workspace) die('Missing --workspace (or set default via set-default-workspace)');\n const optFields = flags.opt_fields || 'gid,name,resource_type,archived,public';\n const r = await asanaGet('/projects', accessToken, {\n workspace,\n opt_fields: optFields,\n limit: flags.limit || 100,\n });\n printJson(r);\n return;\n }\n\n if (cmd === 'tasks-in-project') {\n const project = flags.project;\n if (!project) die('Missing --project ');\n const optFields =\n flags.opt_fields ||\n 'gid,name,completed,completed_at,assignee.name,assignee.gid,due_on,permalink_url,modified_at';\n const r = await asanaGet('/tasks', accessToken, {\n project,\n opt_fields: optFields,\n limit: flags.limit || 100,\n });\n printJson(r);\n return;\n }\n\n if (cmd === 'tasks-assigned') {\n const workspace = getWorkspaceOrDefault();\n if (!workspace) die('Missing --workspace (or set default via set-default-workspace)');\n const assignee = flags.assignee || 'me';\n const assigneeGid = assignee === 'me' ? await resolveMeGid(accessToken) : String(assignee);\n const optFields =\n flags.opt_fields ||\n 'gid,name,completed,assignee.name,due_on,projects.name,permalink_url,modified_at';\n const r = await asanaGet('/tasks', accessToken, {\n workspace,\n assignee: assigneeGid,\n // common filter to exclude completed; Asana accepts special values like \"now\"\n completed_since: flags.completed_since || 'now',\n opt_fields: optFields,\n limit: flags.limit || 100,\n });\n printJson(r);\n return;\n }\n\n if (cmd === 'search-tasks') {\n const workspace = getWorkspaceOrDefault();\n if (!workspace) die('Missing --workspace (or set default via set-default-workspace)');\n // Asana search endpoint uses query params.\n // Common params: text, assignee.any, projects.any, sections.any, completed, completed_on.after/before, due_on.after/before, etc.\n const query = { ...flags };\n delete query._;\n // normalize a couple convenience flags\n if (query.assignee === 'me') query['assignee.any'] = await resolveMeGid(accessToken);\n if (query.project) query['projects.any'] = String(query.project);\n delete query.assignee;\n delete query.project;\n\n const optFields = query.opt_fields || 'gid,name,completed,assignee.name,due_on,permalink_url';\n delete query.opt_fields;\n\n const r = await asanaGet(`/workspaces/${workspace}/tasks/search`, accessToken, {\n ...query,\n opt_fields: optFields,\n limit: query.limit || 100,\n });\n printJson(r);\n return;\n }\n\n if (cmd === 'task') {\n const gid = flags.gid || positionals[0];\n if (!gid) die('Usage: task ');\n const optFields =\n flags.opt_fields ||\n 'gid,name,completed,assignee.name,assignee.gid,due_on,notes,permalink_url,projects.name,memberships.section.name,modified_at';\n const r = await asanaGet(`/tasks/${gid}`, accessToken, { opt_fields: optFields });\n printJson(r);\n return;\n }\n\n if (cmd === 'update-task') {\n const gid = flags.gid || positionals[0];\n if (!gid) die('Usage: update-task [--name ...] [--notes ...] [--due_on YYYY-MM-DD] [--completed true|false]');\n\n const data = {};\n if (flags.name) data.name = String(flags.name);\n if (flags.notes) data.notes = String(flags.notes);\n if (flags.due_on) data.due_on = String(flags.due_on);\n if (flags.completed !== undefined) data.completed = String(flags.completed) === 'true' || flags.completed === true;\n\n if (Object.keys(data).length === 0) die('No fields provided to update.');\n\n const r = await asanaPut(`/tasks/${gid}`, accessToken, { data });\n printJson(r);\n return;\n }\n\n if (cmd === 'complete-task') {\n const gid = flags.gid || positionals[0];\n if (!gid) die('Usage: complete-task ');\n const r = await asanaPut(`/tasks/${gid}`, accessToken, { data: { completed: true } });\n printJson(r);\n return;\n }\n\n if (cmd === 'comment') {\n const gid = flags.gid || flags.task || positionals[0];\n const text = flags.text;\n if (!gid) die('Usage: comment --text \"...\"');\n if (!text) die('Missing --text');\n // Stories API: POST /tasks/{task_gid}/stories\n const r = await asanaPost(`/tasks/${gid}/stories`, accessToken, { data: { text: String(text) } });\n printJson(r);\n return;\n }\n\n if (cmd === 'create-task') {\n const workspace = flags.workspace;\n const name = flags.name;\n const notes = flags.notes || '';\n const projects = flags.projects;\n if (!name) die('Missing --name');\n\n const data = { name, notes };\n if (workspace) data.workspace = String(workspace);\n if (projects) data.projects = csvList(projects);\n if (flags.due_on) data.due_on = String(flags.due_on);\n\n const r = await asanaPost('/tasks', accessToken, { data });\n printJson(r);\n return;\n }\n\n die(`Unknown command: ${cmd}`);\n}\n\nmain().catch((e) => die(String(e?.stack || e)));\n"}],"isError":false,"timestamp":1773622550140}} {"type":"message","id":"550f8590","parentId":"22be5e75","timestamp":"2026-03-16T00:55:50.163Z","message":{"role":"toolResult","toolCallId":"call_PPJKGfMK5TVDr76olxdD4Cmb|fc_0776d4d0ce7a6f6b0169b75515d4f08190ad0ef3058ec091af","toolName":"read","content":[{"type":"text","text":"#!/usr/bin/env node\n/**\n * Asana OAuth (OOB/manual code paste) helper.\n *\n * Usage:\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs authorize\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs token --code \"...\"\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst AUTH_URL = 'https://app.asana.com/-/oauth_authorize';\nconst TOKEN_URL = 'https://app.asana.com/-/oauth_token';\nconst REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob';\n\nfunction die(msg) {\n console.error(msg);\n process.exit(1);\n}\n\nfunction parseArgs(argv) {\n const [cmd, ...rest] = argv;\n const flags = {};\n for (let i = 0; i < rest.length; i++) {\n const a = rest[i];\n if (a.startsWith('--')) {\n const k = a.slice(2);\n const v = rest[i + 1] && !rest[i + 1].startsWith('--') ? rest[++i] : true;\n flags[k] = v;\n }\n }\n return { cmd, flags };\n}\n\nfunction tokenPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'token.json');\n}\n\nfunction ensureDir(p) {\n fs.mkdirSync(path.dirname(p), { recursive: true });\n}\n\nfunction saveToken(json) {\n const p = tokenPath();\n ensureDir(p);\n fs.writeFileSync(p, JSON.stringify(json, null, 2));\n console.log(`Saved token to: ${p}`);\n}\n\nfunction urlEncode(params) {\n const u = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) continue;\n u.set(k, String(v));\n }\n return u.toString();\n}\n\nasync function postForm(url, params) {\n const res = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: urlEncode(params),\n });\n const text = await res.text();\n let data;\n try {\n data = JSON.parse(text);\n } catch {\n throw new Error(`Non-JSON response (${res.status}): ${text.slice(0, 300)}`);\n }\n if (!res.ok) {\n throw new Error(`HTTP ${res.status}: ${JSON.stringify(data)}`);\n }\n return data;\n}\n\nasync function main() {\n const { cmd, flags } = parseArgs(process.argv.slice(2));\n let clientId = process.env.ASANA_CLIENT_ID;\n let clientSecret = process.env.ASANA_CLIENT_SECRET;\n\n // Optional fallback to ~/.clawdbot/asana/credentials.json\n try {\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n clientId = clientId || creds.client_id;\n clientSecret = clientSecret || creds.client_secret;\n } catch {\n // ignore\n }\n\n if (!cmd) die('Command required: authorize | token');\n if (!clientId) die('Missing ASANA_CLIENT_ID (or ~/.clawdbot/asana/credentials.json)');\n\n if (cmd === 'authorize') {\n const scope = flags.scope || 'default';\n const state = flags.state || crypto.randomUUID();\n // Asana supports code challenge / PKCE; OOB is typically used for simple flows.\n const url = `${AUTH_URL}?${urlEncode({\n client_id: clientId,\n redirect_uri: REDIRECT_URI,\n response_type: 'code',\n state,\n // If you want explicit scopes, pass --scope \"tasks:read tasks:write\"\n ...(scope !== 'default' ? { scope } : {}),\n })}`;\n console.log('Open this URL in your browser, click Allow, then copy the code:');\n console.log(url);\n console.log('\\nThen run:');\n console.log(`node asana/scripts/oauth_oob.mjs token --code \"PASTE_CODE\"`);\n return;\n }\n\n if (cmd === 'token') {\n if (!clientSecret) die('Missing ASANA_CLIENT_SECRET');\n const code = flags.code;\n if (!code || typeof code !== 'string') die('Missing --code');\n\n const data = await postForm(TOKEN_URL, {\n grant_type: 'authorization_code',\n client_id: clientId,\n client_secret: clientSecret,\n redirect_uri: REDIRECT_URI,\n code,\n });\n\n // Normalize with a timestamp; Asana returns expires_in (seconds)\n const now = Date.now();\n const token = {\n ...data,\n obtained_at_ms: now,\n expires_at_ms: typeof data.expires_in === 'number' ? now + data.expires_in * 1000 : null,\n };\n\n saveToken(token);\n return;\n }\n\n die(`Unknown command: ${cmd}`);\n}\n\nmain().catch((e) => die(String(e?.stack || e)));\n"}],"isError":false,"timestamp":1773622550151}} {"type":"message","id":"1155c0c4","parentId":"550f8590","timestamp":"2026-03-16T00:55:50.174Z","message":{"role":"toolResult","toolCallId":"call_8Wt57ydaQU6CxN3e8H1wMvm4|fc_0776d4d0ce7a6f6b0169b75515d4f881908812379c198aa329","toolName":"read","content":[{"type":"text","text":"{\n \"name\": \"@blockrun/clawrouter\",\n \"version\": \"0.12.43\",\n \"description\": \"Smart LLM router — save 92% on inference costs. 41+ models, one wallet, x402 micropayments.\",\n \"type\": \"module\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"clawrouter\": \"./dist/cli.js\"\n },\n \"openclaw\": {\n \"extensions\": [\n \"./dist/index.js\"\n ]\n },\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\"\n }\n },\n \"files\": [\n \"dist\",\n \"scripts\",\n \"skills\",\n \"openclaw.plugin.json\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint src/\",\n \"format\": \"prettier --write .\",\n \"format:check\": \"prettier --check .\",\n \"test:resilience:errors\": \"tsx test/resilience-errors.ts\",\n \"test:resilience:stability\": \"DURATION_MINUTES=5 tsx test/resilience-stability.ts\",\n \"test:resilience:stability:full\": \"DURATION_MINUTES=240 tsx test/resilience-stability.ts\",\n \"test:resilience:lifecycle\": \"tsx test/resilience-lifecycle.ts\",\n \"test:resilience:quick\": \"npm run test:resilience:errors && npm run test:resilience:lifecycle\",\n \"test:resilience:full\": \"npm run test:resilience:errors && npm run test:resilience:lifecycle && npm run test:resilience:stability:full\",\n \"test:e2e:tool-ids\": \"npm run build && tsx test/e2e-tool-id-sanitization.ts\",\n \"test:docker:install\": \"bash test/run-docker-test.sh\",\n \"test:docker:edge-cases\": \"bash test/docker/run-edge-cases.sh\",\n \"test:docker:integration\": \"docker compose -f test/integration/docker-compose.yml up --build --abort-on-container-exit --exit-code-from integration\"\n },\n \"keywords\": [\n \"llm\",\n \"router\",\n \"smart-routing\",\n \"ai\",\n \"openclaw\",\n \"blockrun\",\n \"x402\",\n \"usdc\",\n \"cost-optimization\",\n \"openai\",\n \"anthropic\",\n \"gemini\",\n \"deepseek\",\n \"usdc-hackathon-winner\",\n \"agentic-commerce\"\n ],\n \"author\": \"BlockRun \",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/BlockRunAI/ClawRouter.git\"\n },\n \"dependencies\": {\n \"@scure/bip32\": \"^1.6.0\",\n \"@scure/bip39\": \"^1.5.0\",\n \"@solana/kit\": \"^5.0.0\",\n \"@x402/evm\": \"^2.4.0\",\n \"@x402/fetch\": \"^2.4.0\",\n \"@x402/svm\": \"^2.4.0\",\n \"ethers\": \"^6.16.0\",\n \"viem\": \"^2.39.3\"\n },\n \"peerDependencies\": {\n \"openclaw\": \">=2025.1.0\"\n },\n \"peerDependenciesMeta\": {\n \"openclaw\": {\n \"optional\": true\n }\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"eslint\": \"^10.0.2\",\n \"openclaw\": \"latest\",\n \"prettier\": \"^3.8.1\",\n \"tsup\": \"^8.0.0\",\n \"tsx\": \"^4.21.0\",\n \"typescript\": \"^5.7.0\",\n \"typescript-eslint\": \"^8.54.0\",\n \"vitest\": \"^4.0.18\"\n },\n \"engines\": {\n \"node\": \">=20\"\n }\n}\n"}],"isError":false,"timestamp":1773622550163}} {"type":"message","id":"67e265d3","parentId":"1155c0c4","timestamp":"2026-03-16T00:55:50.191Z","message":{"role":"toolResult","toolCallId":"call_y2HVxAHOzdteECgYaFc0i5Y4|fc_0776d4d0ce7a6f6b0169b75515d500819096262b49767d4d4f","toolName":"read","content":[{"type":"text","text":"{\n \"meta\": {\n \"lastTouchedVersion\": \"2026.3.13\",\n \"lastTouchedAt\": \"2026-03-15T23:17:49.868Z\"\n },\n \"env\": {\n \"OPENAI_API_KEY\": \"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\"\n },\n \"wizard\": {\n \"lastRunAt\": \"2026-03-15T22:40:03.597Z\",\n \"lastRunVersion\": \"2026.3.13\",\n \"lastRunCommand\": \"doctor\",\n \"lastRunMode\": \"local\"\n },\n \"diagnostics\": {\n \"flags\": [\n \"telegram.http\"\n ]\n },\n \"browser\": {\n \"executablePath\": \"/usr/bin/chromium-browser\",\n \"headless\": true,\n \"noSandbox\": true,\n \"defaultProfile\": \"openclaw\",\n \"profiles\": {\n \"openclaw\": {\n \"cdpPort\": 18800,\n \"cdpUrl\": \"http://127.0.0.1:18800\",\n \"color\": \"#FF4500\"\n }\n }\n },\n \"auth\": {\n \"profiles\": {\n \"openai-codex:default\": {\n \"provider\": \"openai-codex\",\n \"mode\": \"oauth\"\n }\n }\n },\n \"acp\": {\n \"enabled\": true,\n \"dispatch\": {\n \"enabled\": true\n },\n \"backend\": \"acpx\",\n \"defaultAgent\": \"codex\",\n \"allowedAgents\": [\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ],\n \"maxConcurrentSessions\": 8\n },\n \"models\": {\n \"mode\": \"merge\",\n \"providers\": {\n \"custom-api-deepseek-com\": {\n \"baseUrl\": \"https://api.deepseek.com\",\n \"apiKey\": \"sk-ba5431dc38ef4186ab2232523a97309d\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"deepseek-chat\",\n \"name\": \"deepseek-chat (Custom Provider)\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 16000,\n \"maxTokens\": 4096\n }\n ]\n },\n \"blockrun\": {\n \"baseUrl\": \"http://127.0.0.1:8402/v1\",\n \"apiKey\": \"x402-proxy-handles-auth\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"auto\",\n \"name\": \"Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"free\",\n \"name\": \"Free (NVIDIA GPT-OSS-120B only)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 4096\n },\n {\n \"id\": \"eco\",\n \"name\": \"Eco (Smart Router - Cost Optimized)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"premium\",\n \"name\": \"Premium (Smart Router - Best Quality)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 2000000,\n \"maxTokens\": 200000\n },\n {\n \"id\": \"openai/gpt-5.2\",\n \"name\": \"GPT-5.2\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5-mini\",\n \"name\": \"GPT-5 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.25,\n \"output\": 2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/gpt-5-nano\",\n \"name\": \"GPT-5 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.05,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 32768\n },\n {\n \"id\": \"openai/gpt-5.2-pro\",\n \"name\": \"GPT-5.2 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 21,\n \"output\": 168,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4\",\n \"name\": \"GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4-pro\",\n \"name\": \"GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.3\",\n \"name\": \"GPT-5.3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16000\n },\n {\n \"id\": \"openai/gpt-5.3-codex\",\n \"name\": \"GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-4.1\",\n \"name\": \"GPT-4.1\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-mini\",\n \"name\": \"GPT-4.1 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.4,\n \"output\": 1.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-nano\",\n \"name\": \"GPT-4.1 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o\",\n \"name\": \"GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o-mini\",\n \"name\": \"GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/o1\",\n \"name\": \"o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o1-mini\",\n \"name\": \"o1-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o3\",\n \"name\": \"o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o3-mini\",\n \"name\": \"o3-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o4-mini\",\n \"name\": \"o4-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"anthropic/claude-haiku-4.5\",\n \"name\": \"Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-sonnet-4.6\",\n \"name\": \"Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4.6\",\n \"name\": \"Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"google/gemini-3.1-pro\",\n \"name\": \"Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-pro-preview\",\n \"name\": \"Gemini 3 Pro Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-flash-preview\",\n \"name\": \"Gemini 3 Flash Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.5,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-pro\",\n \"name\": \"Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash\",\n \"name\": \"Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash-lite\",\n \"name\": \"Gemini 2.5 Flash Lite\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"deepseek/deepseek-chat\",\n \"name\": \"DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"deepseek/deepseek-reasoner\",\n \"name\": \"DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot/kimi-k2.5\",\n \"name\": \"Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"xai/grok-3\",\n \"name\": \"Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-3-mini\",\n \"name\": \"Grok 3 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-reasoning\",\n \"name\": \"Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-non-reasoning\",\n \"name\": \"Grok 4 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-reasoning\",\n \"name\": \"Grok 4.1 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-non-reasoning\",\n \"name\": \"Grok 4.1 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-0709\",\n \"name\": \"Grok 4 (0709)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 1.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-2-vision\",\n \"name\": \"Grok 2 Vision\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax/minimax-m2.5\",\n \"name\": \"MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/gpt-oss-120b\",\n \"name\": \"NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/kimi-k2.5\",\n \"name\": \"NVIDIA Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.55,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet\",\n \"name\": \"sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4\",\n \"name\": \"sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4.6\",\n \"name\": \"sonnet-4.6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4-6\",\n \"name\": \"sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"opus\",\n \"name\": \"opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4\",\n \"name\": \"opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4.6\",\n \"name\": \"opus-4.6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4-6\",\n \"name\": \"opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"haiku\",\n \"name\": \"haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/sonnet\",\n \"name\": \"anthropic/sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/opus\",\n \"name\": \"anthropic/opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/haiku\",\n \"name\": \"anthropic/haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude\",\n \"name\": \"anthropic/claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4\",\n \"name\": \"anthropic/claude-sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4-6\",\n \"name\": \"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4\",\n \"name\": \"anthropic/claude-opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4-6\",\n \"name\": \"anthropic/claude-opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4.5\",\n \"name\": \"anthropic/claude-opus-4.5 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-haiku-4\",\n \"name\": \"anthropic/claude-haiku-4 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-haiku-4-5\",\n \"name\": \"anthropic/claude-haiku-4-5 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gpt\",\n \"name\": \"gpt → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt4\",\n \"name\": \"gpt4 → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt5\",\n \"name\": \"gpt5 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4\",\n \"name\": \"gpt-5.4 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4-pro\",\n \"name\": \"gpt-5.4-pro → GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex → GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"mini\",\n \"name\": \"mini → GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"o1\",\n \"name\": \"o1 → o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"o3\",\n \"name\": \"o3 → o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"deepseek\",\n \"name\": \"deepseek → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"reasoner\",\n \"name\": \"reasoner → DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot\",\n \"name\": \"moonshot → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"kimi-k2.5 → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini → Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"flash\",\n \"name\": \"flash → Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"gemini-3.1-pro-preview\",\n \"name\": \"gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3.1-pro-preview\",\n \"name\": \"google/gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"grok\",\n \"name\": \"grok → Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-fast\",\n \"name\": \"grok-fast → Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-code\",\n \"name\": \"grok-code → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"nvidia\",\n \"name\": \"nvidia → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt-120b\",\n \"name\": \"gpt-120b → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax\",\n \"name\": \"minimax → MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"auto-router\",\n \"name\": \"auto-router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"router\",\n \"name\": \"router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n }\n ]\n },\n \"custom-api-moonshot-ai\": {\n \"baseUrl\": \"https://api.moonshot.ai/v1\",\n \"apiKey\": \"sk-rbHc8P3BHodqmMHbGVa6c4INp2JFNMIBQ8oza5TezKkD5bZd\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"Kimi K2.5 (Moonshot)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n }\n ]\n }\n }\n },\n \"agents\": {\n \"defaults\": {\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"custom-api-deepseek-com/deepseek-chat\"\n ]\n },\n \"models\": {\n \"blockrun/auto\": {},\n \"openrouter/anthropic/claude-sonnet-4-6\": {\n \"alias\": \"claude\"\n },\n \"openai-codex/gpt-5.1\": {\n \"alias\": \"codex-chat\"\n },\n \"openai-codex/gpt-5.3-codex-spark\": {\n \"alias\": \"codex-spark\"\n },\n \"openai-codex/gpt-5.3-codex\": {\n \"alias\": \"codex-max\"\n },\n \"openai-codex/gpt-5.4\": {\n \"alias\": \"gpt-5.4\"\n },\n \"custom-api-deepseek-com/deepseek-chat\": {\n \"alias\": \"deepseek\"\n },\n \"claude-sonnet-cli/default\": {\n \"alias\": \"claude-sonnet\"\n },\n \"claude-opus-cli/default\": {\n \"alias\": \"claude-opus\"\n },\n \"blockrun/free\": {},\n \"blockrun/eco\": {},\n \"blockrun/premium\": {},\n \"blockrun/anthropic/claude-sonnet-4.6\": {},\n \"blockrun/anthropic/claude-opus-4.6\": {},\n \"blockrun/anthropic/claude-haiku-4.5\": {},\n \"blockrun/openai/gpt-5.2\": {},\n \"blockrun/openai/gpt-4o\": {},\n \"blockrun/openai/o3\": {},\n \"blockrun/google/gemini-3.1-pro\": {},\n \"blockrun/google/gemini-3-flash-preview\": {},\n \"blockrun/deepseek/deepseek-chat\": {},\n \"blockrun/moonshot/kimi-k2.5\": {},\n \"blockrun/xai/grok-3\": {},\n \"blockrun/minimax/minimax-m2.5\": {},\n \"openrouter/openrouter/free\": {},\n \"custom-api-moonshot-ai/kimi-k2.5\": {\n \"alias\": \"kimi\"\n },\n \"clawrouter/auto\": {\n \"alias\": \"clawrouter\"\n },\n \"openrouter/openrouter/auto\": {},\n \"blockrun/openai/gpt-5.3\": {}\n },\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"cliBackends\": {\n \"codex-cli\": {\n \"command\": \"/home/linuxbrew/.linuxbrew/bin/codex\",\n \"args\": [\n \"exec\",\n \"--json\",\n \"--color\",\n \"never\",\n \"--sandbox\",\n \"read-only\",\n \"--skip-git-repo-check\"\n ],\n \"output\": \"jsonl\"\n },\n \"gemini-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/gemini-cli-openclaw\",\n \"output\": \"text\"\n },\n \"deepseek-code\": {\n \"command\": \"/home/ubuntu/.local/bin/deepseek-code-openclaw\",\n \"output\": \"text\"\n },\n \"claude-sonnet-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-sonnet-openclaw\",\n \"output\": \"text\"\n },\n \"claude-opus-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-opus-openclaw\",\n \"output\": \"text\"\n },\n \"kimi-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/kimi-openclaw\",\n \"output\": \"text\"\n }\n },\n \"compaction\": {\n \"mode\": \"safeguard\"\n },\n \"elevatedDefault\": \"off\",\n \"maxConcurrent\": 1,\n \"subagents\": {\n \"maxConcurrent\": 4\n }\n },\n \"list\": [\n {\n \"id\": \"pipo\",\n \"name\": \"pipo\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"openai-codex/gpt-5.4\",\n \"fallbacks\": [\n \"blockrun/auto\",\n \"openrouter/openrouter/free\"\n ]\n },\n \"subagents\": {\n \"allowAgents\": [\n \"codex\",\n \"gemini\",\n \"claude\",\n \"deepseek-code\",\n \"kimi\",\n \"clawrouter\",\n \"openrouter\"\n ]\n }\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-codex\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/codex/agent\",\n \"model\": \"openai-codex/gpt-5.3-codex\"\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-gemini\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/gemini/agent\",\n \"model\": \"gemini-cli/default\"\n },\n {\n \"id\": \"deepseek-code\",\n \"name\": \"deepseek-code\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-deepseek-code\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/deepseek-code/agent\",\n \"model\": \"deepseek-code/default\"\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude/agent\",\n \"model\": \"claude-sonnet-cli/default\"\n },\n {\n \"id\": \"claude-opus\",\n \"name\": \"claude-opus\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude-opus\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude-opus/agent\",\n \"model\": \"claude-opus-cli/default\"\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi\",\n\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-kimi\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/kimi/agent\",\n \"model\": \"kimi-cli/default\"\n },\n {\n \"id\": \"clawrouter\",\n \"name\": \"ClawRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n },\n {\n \"id\": \"openrouter\",\n \"name\": \"OpenRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-openrouter\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/openrouter/agent\",\n \"model\": {\n \"primary\": \"openrouter/openrouter/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n }\n ]\n },\n \"tools\": {\n \"sessions\": {\n \"visibility\": \"all\"\n },\n \"agentToAgent\": {\n \"enabled\": true,\n \"allow\": [\n \"pipo\",\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ]\n },\n \"elevated\": {\n \"enabled\": true,\n \"allowFrom\": {\n \"telegram\": [\n 842987156\n ],\n \"webchat\": []\n }\n },\n \"exec\": {\n \"ask\": \"off\"\n }\n },\n \"messages\": {\n \"ackReactionScope\": \"group-mentions\"\n },\n \"commands\": {\n \"native\": \"auto\",\n \"nativeSkills\": \"auto\",\n \"restart\": true,\n \"ownerDisplay\": \"raw\"\n },\n \"session\": {\n \"dmScope\": \"per-channel-peer\"\n },\n \"hooks\": {\n \"internal\": {\n \"enabled\": true,\n \"entries\": {\n \"session-memory\": {\n \"enabled\": true\n },\n \"bootstrap-extra-files\": {\n \"enabled\": true\n },\n \"boot-md\": {\n \"enabled\": true\n }\n }\n }\n },\n \"channels\": {\n \"telegram\": {\n \"enabled\": true,\n \"dmPolicy\": \"allowlist\",\n \"botToken\": \"8658426327:AAHFrqQzIfxZhYJHhGmkKC9yXvF6B1aeRCc\",\n \"replyToMode\": \"all\",\n \"allowFrom\": [\n 842987156\n ],\n \"groupPolicy\": \"allowlist\",\n \"streaming\": \"off\",\n \"mediaMaxMb\": 20,\n \"timeoutSeconds\": 60,\n \"retry\": {\n \"attempts\": 6,\n \"minDelayMs\": 1500,\n \"maxDelayMs\": 90000,\n \"jitter\": 0.1\n },\n \"network\": {\n \"autoSelectFamily\": false,\n \"dnsResultOrder\": \"ipv4first\"\n }\n }\n },\n \"gateway\": {\n \"port\": 18789,\n \"mode\": \"local\",\n \"bind\": \"loopback\",\n \"controlUi\": {\n \"allowedOrigins\": [\n \"https://miopenclaw-vnic.tail9799d2.ts.net\",\n \"https://miopenclaw-vnic.tail9799d2.ts.net/\",\n \"http://127.0.0.1:18789\"\n ]\n },\n \"auth\": {\n \"mode\": \"token\",\n \"token\": \"0537d84a67f2e43b525964bb43d93f6dfae1ec1b50946455\"\n },\n \"trustedProxies\": [\n \"127.0.0.1/32\",\n \"::1/128\"\n ],\n \"tailscale\": {\n \"mode\": \"serve\",\n \"resetOnExit\": true\n }\n },\n \"skills\": {\n \"entries\": {\n \"gh-issues\": {\n \"enabled\": true,\n \"apiKey\": \"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\"\n },\n \"nano-banana-pro\": {\n \"enabled\": true,\n \"apiKey\": \"AIzaSyCpjr5IR8ALxhFMD9USk1KoAVt-YFCg9uA\"\n },\n \"notion\": {\n \"enabled\": true,\n \"apiKey\": \"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\"\n },\n \"openai-image-gen\": {\n \"enabled\": true,\n \"apiKey\": \"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\"\n },\n \"openai-whisper-api\": {\n \"enabled\": true,\n \"apiKey\": \"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\"\n },\n \"sag\": {\n \"enabled\": true,\n \"apiKey\": \"sk_7074948b58c21f0b9a9d05070a8389f466cf9b8307e91596\"\n }\n }\n },\n \"plugins\": {\n \"allow\": [\n \"telegram\",\n \"acpx\",\n \"clawrouter\"\n ],\n \"entries\": {\n \"qwen-portal-auth\": {\n \"enabled\": true\n },\n \"acpx\": {\n \"enabled\": true,\n \"config\": {\n \"permissionMode\": \"approve-all\",\n \"nonInteractivePermissions\": \"fail\",\n \"expectedVersion\": \"any\",\n \"command\": \"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx\"\n }\n },\n \"clawrouter\": {\n \"enabled\": true\n }\n },\n \"installs\": {\n \"clawrouter\": {\n \"source\": \"npm\",\n \"spec\": \"@blockrun/clawrouter@latest\",\n \"installPath\": \"/home/ubuntu/.openclaw/extensions/clawrouter\",\n \"version\": \"0.12.43\",\n \"resolvedName\": \"@blockrun/clawrouter\",\n \"resolvedVersion\": \"0.12.43\",\n \"resolvedSpec\": \"@blockrun/clawrouter@0.12.43\",\n \"integrity\": \"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==\",\n \"shasum\": \"3331382e1a46524bee73b8ffa83677950f5bbae5\",\n \"resolvedAt\": \"2026-03-15T22:45:46.066Z\",\n \"installedAt\": \"2026-03-15T22:46:43.662Z\"\n }\n }\n }\n}\n"}],"isError":false,"timestamp":1773622550179}} {"type":"message","id":"bd6df029","parentId":"67e265d3","timestamp":"2026-03-16T00:55:50.340Z","message":{"role":"toolResult","toolCallId":"call_XSmJG35lplo7EXIPDIruQlqw|fc_0776d4d0ce7a6f6b0169b75515d5888190941e8569299ff555","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"/home/ubuntu/.openclaw/openclaw.json\",\n \"exists\": true,\n \"raw\": \"{\\n meta: {\\n lastTouchedVersion: '2026.3.13',\\n lastTouchedAt: '2026-03-15T23:17:49.868Z',\\n },\\n env: {\\n OPENAI_API_KEY: '__OPENCLAW_REDACTED__',\\n },\\n wizard: {\\n lastRunAt: '2026-03-15T22:40:03.597Z',\\n lastRunVersion: '2026.3.13',\\n lastRunCommand: 'doctor',\\n lastRunMode: 'local',\\n },\\n diagnostics: {\\n flags: [\\n 'telegram.http',\\n ],\\n },\\n browser: {\\n executablePath: '/usr/bin/chromium-browser',\\n headless: true,\\n noSandbox: true,\\n defaultProfile: 'openclaw',\\n profiles: {\\n openclaw: {\\n cdpPort: 18800,\\n cdpUrl: 'http://127.0.0.1:18800',\\n color: '#FF4500',\\n },\\n },\\n },\\n auth: {\\n profiles: {\\n 'openai-codex:default': {\\n provider: 'openai-codex',\\n mode: 'oauth',\\n },\\n },\\n },\\n acp: {\\n enabled: true,\\n dispatch: {\\n enabled: true,\\n },\\n backend: 'acpx',\\n defaultAgent: 'codex',\\n allowedAgents: [\\n 'codex',\\n 'gemini',\\n 'deepseek-code',\\n 'claude',\\n 'claude-opus',\\n 'kimi',\\n 'clawrouter',\\n ],\\n maxConcurrentSessions: 8,\\n },\\n models: {\\n mode: 'merge',\\n providers: {\\n 'custom-api-deepseek-com': {\\n baseUrl: 'https://api.deepseek.com',\\n apiKey: '__OPENCLAW_REDACTED__',\\n api: 'openai-completions',\\n models: [\\n {\\n id: 'deepseek-chat',\\n name: 'deepseek-chat (Custom Provider)',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 16000,\\n maxTokens: 4096,\\n },\\n ],\\n },\\n blockrun: {\\n baseUrl: 'http://127.0.0.1:8402/v1',\\n apiKey: '__OPENCLAW_REDACTED__',\\n api: 'openai-completions',\\n models: [\\n {\\n id: 'auto',\\n name: 'Auto (Smart Router - Balanced)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'free',\\n name: 'Free (NVIDIA GPT-OSS-120B only)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 4096,\\n },\\n {\\n id: 'eco',\\n name: 'Eco (Smart Router - Cost Optimized)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'premium',\\n name: 'Premium (Smart Router - Best Quality)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 2000000,\\n maxTokens: 200000,\\n },\\n {\\n id: 'openai/gpt-5.2',\\n name: 'GPT-5.2',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1.75,\\n output: 14,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'openai/gpt-5-mini',\\n name: 'GPT-5 Mini',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.25,\\n output: 2,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'openai/gpt-5-nano',\\n name: 'GPT-5 Nano',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.05,\\n output: 0.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 32768,\\n },\\n {\\n id: 'openai/gpt-5.2-pro',\\n name: 'GPT-5.2 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 21,\\n output: 168,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'openai/gpt-5.4',\\n name: 'GPT-5.4',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'openai/gpt-5.4-pro',\\n name: 'GPT-5.4 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 30,\\n output: 180,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'openai/gpt-5.3',\\n name: 'GPT-5.3',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1.75,\\n output: 14,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16000,\\n },\\n {\\n id: 'openai/gpt-5.3-codex',\\n name: 'GPT-5.3 Codex',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 1.75,\\n output: 14,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'openai/gpt-4.1',\\n name: 'GPT-4.1',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 8,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'openai/gpt-4.1-mini',\\n name: 'GPT-4.1 Mini',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.4,\\n output: 1.6,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'openai/gpt-4.1-nano',\\n name: 'GPT-4.1 Nano',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.1,\\n output: 0.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'openai/gpt-4o',\\n name: 'GPT-4o',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'openai/gpt-4o-mini',\\n name: 'GPT-4o Mini',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.15,\\n output: 0.6,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'openai/o1',\\n name: 'o1',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 15,\\n output: 60,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 100000,\\n },\\n {\\n id: 'openai/o1-mini',\\n name: 'o1-mini',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 1.1,\\n output: 4.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'openai/o3',\\n name: 'o3',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 2,\\n output: 8,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 100000,\\n },\\n {\\n id: 'openai/o3-mini',\\n name: 'o3-mini',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 1.1,\\n output: 4.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'openai/o4-mini',\\n name: 'o4-mini',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 1.1,\\n output: 4.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'anthropic/claude-haiku-4.5',\\n name: 'Claude Haiku 4.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1,\\n output: 5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'anthropic/claude-sonnet-4.6',\\n name: 'Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'anthropic/claude-opus-4.6',\\n name: 'Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'google/gemini-3.1-pro',\\n name: 'Gemini 3.1 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 12,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-3-pro-preview',\\n name: 'Gemini 3 Pro Preview',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 12,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-3-flash-preview',\\n name: 'Gemini 3 Flash Preview',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.5,\\n output: 3,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1000000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-2.5-pro',\\n name: 'Gemini 2.5 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1.25,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-2.5-flash',\\n name: 'Gemini 2.5 Flash',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.3,\\n output: 2.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1000000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-2.5-flash-lite',\\n name: 'Gemini 2.5 Flash Lite',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.1,\\n output: 0.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1000000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'deepseek/deepseek-chat',\\n name: 'DeepSeek V3.2 Chat',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.28,\\n output: 0.42,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'deepseek/deepseek-reasoner',\\n name: 'DeepSeek V3.2 Reasoner',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.28,\\n output: 0.42,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'moonshot/kimi-k2.5',\\n name: 'Kimi K2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.6,\\n output: 3,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 262144,\\n maxTokens: 8192,\\n },\\n {\\n id: 'xai/grok-3',\\n name: 'Grok 3',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-3-mini',\\n name: 'Grok 3 Mini',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.3,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-4-fast-reasoning',\\n name: 'Grok 4 Fast Reasoning',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-4-fast-non-reasoning',\\n name: 'Grok 4 Fast',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-4-1-fast-reasoning',\\n name: 'Grok 4.1 Fast Reasoning',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-4-1-fast-non-reasoning',\\n name: 'Grok 4.1 Fast',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-4-0709',\\n name: 'Grok 4 (0709)',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 1.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-2-vision',\\n name: 'Grok 2 Vision',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'minimax/minimax-m2.5',\\n name: 'MiniMax M2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.3,\\n output: 1.2,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 204800,\\n maxTokens: 16384,\\n },\\n {\\n id: 'nvidia/gpt-oss-120b',\\n name: 'NVIDIA GPT-OSS 120B',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'nvidia/kimi-k2.5',\\n name: 'NVIDIA Kimi K2.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.55,\\n output: 2.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 262144,\\n maxTokens: 16384,\\n },\\n {\\n id: 'claude',\\n name: 'claude → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'sonnet',\\n name: 'sonnet → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'sonnet-4',\\n name: 'sonnet-4 → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'sonnet-4.6',\\n name: 'sonnet-4.6 → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'sonnet-4-6',\\n name: 'sonnet-4-6 → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'opus',\\n name: 'opus → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'opus-4',\\n name: 'opus-4 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'opus-4.6',\\n name: 'opus-4.6 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'opus-4-6',\\n name: 'opus-4-6 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'haiku',\\n name: 'haiku → Claude Haiku 4.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1,\\n output: 5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'anthropic/sonnet',\\n name: 'anthropic/sonnet → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'anthropic/opus',\\n name: 'anthropic/opus → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'anthropic/haiku',\\n name: 'anthropic/haiku → Claude Haiku 4.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1,\\n output: 5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'anthropic/claude',\\n name: 'anthropic/claude → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'anthropic/claude-sonnet-4',\\n name: 'anthropic/claude-sonnet-4 → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'anthropic/claude-sonnet-4-6',\\n name: 'anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'anthropic/claude-opus-4',\\n name: 'anthropic/claude-opus-4 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'anthropic/claude-opus-4-6',\\n name: 'anthropic/claude-opus-4-6 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'anthropic/claude-opus-4.5',\\n name: 'anthropic/claude-opus-4.5 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'anthropic/claude-haiku-4',\\n name: 'anthropic/claude-haiku-4 → Claude Haiku 4.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1,\\n output: 5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'anthropic/claude-haiku-4-5',\\n name: 'anthropic/claude-haiku-4-5 → Claude Haiku 4.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1,\\n output: 5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'gpt',\\n name: 'gpt → GPT-4o',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'gpt4',\\n name: 'gpt4 → GPT-4o',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'gpt5',\\n name: 'gpt5 → GPT-5.4',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'gpt-5.4',\\n name: 'gpt-5.4 → GPT-5.4',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'gpt-5.4-pro',\\n name: 'gpt-5.4-pro → GPT-5.4 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 30,\\n output: 180,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'codex',\\n name: 'codex → GPT-5.3 Codex',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 1.75,\\n output: 14,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'mini',\\n name: 'mini → GPT-4o Mini',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.15,\\n output: 0.6,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'o1',\\n name: 'o1 → o1',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 15,\\n output: 60,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 100000,\\n },\\n {\\n id: 'o3',\\n name: 'o3 → o3',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 2,\\n output: 8,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 100000,\\n },\\n {\\n id: 'deepseek',\\n name: 'deepseek → DeepSeek V3.2 Chat',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.28,\\n output: 0.42,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'reasoner',\\n name: 'reasoner → DeepSeek V3.2 Reasoner',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.28,\\n output: 0.42,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'kimi',\\n name: 'kimi → Kimi K2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.6,\\n output: 3,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 262144,\\n maxTokens: 8192,\\n },\\n {\\n id: 'moonshot',\\n name: 'moonshot → Kimi K2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.6,\\n output: 3,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 262144,\\n maxTokens: 8192,\\n },\\n {\\n id: 'kimi-k2.5',\\n name: 'kimi-k2.5 → Kimi K2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.6,\\n output: 3,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 262144,\\n maxTokens: 8192,\\n },\\n {\\n id: 'gemini',\\n name: 'gemini → Gemini 2.5 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1.25,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'flash',\\n name: 'flash → Gemini 2.5 Flash',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.3,\\n output: 2.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1000000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'gemini-3.1-pro-preview',\\n name: 'gemini-3.1-pro-preview → Gemini 3.1 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 12,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-3.1-pro-preview',\\n name: 'google/gemini-3.1-pro-preview → Gemini 3.1 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 12,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'grok',\\n name: 'grok → Grok 3',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'grok-fast',\\n name: 'grok-fast → Grok 4 Fast Reasoning',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'grok-code',\\n name: 'grok-code → DeepSeek V3.2 Chat',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.28,\\n output: 0.42,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'nvidia',\\n name: 'nvidia → NVIDIA GPT-OSS 120B',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'gpt-120b',\\n name: 'gpt-120b → NVIDIA GPT-OSS 120B',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'minimax',\\n name: 'minimax → MiniMax M2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.3,\\n output: 1.2,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 204800,\\n maxTokens: 16384,\\n },\\n {\\n id: 'auto-router',\\n name: 'auto-router → Auto (Smart Router - Balanced)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'router',\\n name: 'router → Auto (Smart Router - Balanced)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 128000,\\n },\\n ],\\n },\\n 'custom-api-moonshot-ai': {\\n baseUrl: 'https://api.moonshot.ai/v1',\\n apiKey: '__OPENCLAW_REDACTED__',\\n api: 'openai-completions',\\n models: [\\n {\\n id: 'kimi-k2.5',\\n name: 'Kimi K2.5 (Moonshot)',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n ],\\n },\\n },\\n },\\n agents: {\\n defaults: {\\n model: {\\n primary: 'blockrun/auto',\\n fallbacks: [\\n 'custom-api-deepseek-com/deepseek-chat',\\n ],\\n },\\n models: {\\n 'blockrun/auto': {},\\n 'openrouter/anthropic/claude-sonnet-4-6': {\\n alias: 'claude',\\n },\\n 'openai-codex/gpt-5.1': {\\n alias: 'codex-chat',\\n },\\n 'openai-codex/gpt-5.3-codex-spark': {\\n alias: 'codex-spark',\\n },\\n 'openai-codex/gpt-5.3-codex': {\\n alias: 'codex-max',\\n },\\n 'openai-codex/gpt-5.4': {\\n alias: 'gpt-5.4',\\n },\\n 'custom-api-deepseek-com/deepseek-chat': {\\n alias: 'deepseek',\\n },\\n 'claude-sonnet-cli/default': {\\n alias: 'claude-sonnet',\\n },\\n 'claude-opus-cli/default': {\\n alias: 'claude-opus',\\n },\\n 'blockrun/free': {},\\n 'blockrun/eco': {},\\n 'blockrun/premium': {},\\n 'blockrun/anthropic/claude-sonnet-4.6': {},\\n 'blockrun/anthropic/claude-opus-4.6': {},\\n 'blockrun/anthropic/claude-haiku-4.5': {},\\n 'blockrun/openai/gpt-5.2': {},\\n 'blockrun/openai/gpt-4o': {},\\n 'blockrun/openai/o3': {},\\n 'blockrun/google/gemini-3.1-pro': {},\\n 'blockrun/google/gemini-3-flash-preview': {},\\n 'blockrun/deepseek/deepseek-chat': {},\\n 'blockrun/moonshot/kimi-k2.5': {},\\n 'blockrun/xai/grok-3': {},\\n 'blockrun/minimax/minimax-m2.5': {},\\n 'openrouter/openrouter/free': {},\\n 'custom-api-moonshot-ai/kimi-k2.5': {\\n alias: 'kimi',\\n },\\n 'clawrouter/auto': {\\n alias: 'clawrouter',\\n },\\n 'openrouter/openrouter/auto': {},\\n 'blockrun/openai/gpt-5.3': {},\\n },\\n workspace: '/home/ubuntu/.openclaw/workspace',\\n cliBackends: {\\n 'codex-cli': {\\n command: '/home/linuxbrew/.linuxbrew/bin/codex',\\n args: [\\n 'exec',\\n '--json',\\n '--color',\\n 'never',\\n '--sandbox',\\n 'read-only',\\n '--skip-git-repo-check',\\n ],\\n output: 'jsonl',\\n },\\n 'gemini-cli': {\\n command: '/home/ubuntu/.local/bin/gemini-cli-openclaw',\\n output: 'text',\\n },\\n 'deepseek-code': {\\n command: '/home/ubuntu/.local/bin/deepseek-code-openclaw',\\n output: 'text',\\n },\\n 'claude-sonnet-cli': {\\n command: '/home/ubuntu/.local/bin/claude-sonnet-openclaw',\\n output: 'text',\\n },\\n 'claude-opus-cli': {\\n command: '/home/ubuntu/.local/bin/claude-opus-openclaw',\\n output: 'text',\\n },\\n 'kimi-cli': {\\n command: '/home/ubuntu/.local/bin/kimi-openclaw',\\n output: 'text',\\n },\\n },\\n compaction: {\\n mode: 'safeguard',\\n },\\n elevatedDefault: 'off',\\n maxConcurrent: 1,\\n subagents: {\\n maxConcurrent: 4,\\n },\\n },\\n list: [\\n {\\n id: 'pipo',\\n name: 'pipo',\\n workspace: '/home/ubuntu/.openclaw/workspace',\\n model: {\\n primary: 'openai-codex/gpt-5.4',\\n fallbacks: [\\n 'blockrun/auto',\\n 'openrouter/openrouter/free',\\n ],\\n },\\n subagents: {\\n allowAgents: [\\n 'codex',\\n 'gemini',\\n 'claude',\\n 'deepseek-code',\\n 'kimi',\\n 'clawrouter',\\n 'openrouter',\\n ],\\n },\\n },\\n {\\n id: 'codex',\\n name: 'codex',\\n workspace: '/home/ubuntu/.openclaw/workspace-codex',\\n agentDir: '/home/ubuntu/.openclaw/agents/codex/agent',\\n model: 'openai-codex/gpt-5.3-codex',\\n },\\n {\\n id: 'gemini',\\n name: 'gemini',\\n workspace: '/home/ubuntu/.openclaw/workspace-gemini',\\n agentDir: '/home/ubuntu/.openclaw/agents/gemini/agent',\\n model: 'gemini-cli/default',\\n },\\n {\\n id: 'deepseek-code',\\n name: 'deepseek-code',\\n workspace: '/home/ubuntu/.openclaw/workspace-deepseek-code',\\n agentDir: '/home/ubuntu/.openclaw/agents/deepseek-code/agent',\\n model: 'deepseek-code/default',\\n },\\n {\\n id: 'claude',\\n name: 'claude',\\n workspace: '/home/ubuntu/.openclaw/workspace-claude',\\n agentDir: '/home/ubuntu/.openclaw/agents/claude/agent',\\n model: 'claude-sonnet-cli/default',\\n },\\n {\\n id: 'claude-opus',\\n name: 'claude-opus',\\n workspace: '/home/ubuntu/.openclaw/workspace-claude-opus',\\n agentDir: '/home/ubuntu/.openclaw/agents/claude-opus/agent',\\n model: 'claude-opus-cli/default',\\n },\\n {\\n id: 'kimi',\\n name: 'kimi',\\n workspace: '/home/ubuntu/.openclaw/workspace-kimi',\\n agentDir: '/home/ubuntu/.openclaw/agents/kimi/agent',\\n model: 'kimi-cli/default',\\n },\\n {\\n id: 'clawrouter',\\n name: 'ClawRouter',\\n workspace: '/home/ubuntu/.openclaw/workspace',\\n model: {\\n primary: 'blockrun/auto',\\n fallbacks: [\\n 'openrouter/openrouter/free',\\n ],\\n },\\n },\\n {\\n id: 'openrouter',\\n name: 'OpenRouter',\\n workspace: '/home/ubuntu/.openclaw/workspace-openrouter',\\n agentDir: '/home/ubuntu/.openclaw/agents/openrouter/agent',\\n model: {\\n primary: 'openrouter/openrouter/auto',\\n fallbacks: [\\n 'openrouter/openrouter/free',\\n ],\\n },\\n },\\n ],\\n },\\n tools: {\\n sessions: {\\n visibility: 'all',\\n },\\n agentToAgent: {\\n enabled: true,\\n allow: [\\n 'pipo',\\n 'codex',\\n 'gemini',\\n 'deepseek-code',\\n 'claude',\\n 'claude-opus',\\n 'kimi',\\n 'clawrouter',\\n ],\\n },\\n elevated: {\\n enabled: true,\\n allowFrom: {\\n telegram: [\\n 842987156,\\n ],\\n webchat: [],\\n },\\n },\\n exec: {\\n ask: 'off',\\n },\\n },\\n messages: {\\n ackReactionScope: 'group-mentions',\\n },\\n commands: {\\n native: 'auto',\\n nativeSkills: 'auto',\\n restart: true,\\n ownerDisplay: 'raw',\\n },\\n session: {\\n dmScope: 'per-channel-peer',\\n },\\n hooks: {\\n internal: {\\n enabled: true,\\n entries: {\\n 'session-memory': {\\n enabled: true,\\n },\\n 'bootstrap-extra-files': {\\n enabled: true,\\n },\\n 'boot-md': {\\n enabled: true,\\n },\\n },\\n },\\n },\\n channels: {\\n telegram: {\\n enabled: true,\\n dmPolicy: 'allowlist',\\n botToken: '__OPENCLAW_REDACTED__',\\n replyToMode: 'all',\\n allowFrom: [\\n 842987156,\\n ],\\n groupPolicy: 'allowlist',\\n streaming: 'off',\\n mediaMaxMb: 20,\\n timeoutSeconds: 60,\\n retry: {\\n attempts: 6,\\n minDelayMs: 1500,\\n maxDelayMs: 90000,\\n jitter: 0.1,\\n },\\n network: {\\n autoSelectFamily: false,\\n dnsResultOrder: 'ipv4first',\\n },\\n },\\n },\\n gateway: {\\n port: 18789,\\n mode: 'local',\\n bind: 'loopback',\\n controlUi: {\\n allowedOrigins: [\\n 'https://miopenclaw-vnic.tail9799d2.ts.net',\\n 'https://miopenclaw-vnic.tail9799d2.ts.net/',\\n 'http://127.0.0.1:18789',\\n ],\\n },\\n auth: {\\n mode: 'token',\\n token: '__OPENCLAW_REDACTED__',\\n },\\n trustedProxies: [\\n '127.0.0.1/32',\\n '::1/128',\\n ],\\n tailscale: {\\n mode: 'serve',\\n resetOnExit: true,\\n },\\n },\\n skills: {\\n entries: {\\n 'gh-issues': {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n 'nano-banana-pro': {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n notion: {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n 'openai-image-gen': {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n 'openai-whisper-api': {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n sag: {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n },\\n },\\n plugins: {\\n allow: [\\n 'telegram',\\n 'acpx',\\n 'clawrouter',\\n ],\\n entries: {\\n 'qwen-portal-auth': {\\n enabled: true,\\n },\\n acpx: {\\n enabled: true,\\n config: {\\n permissionMode: 'approve-all',\\n nonInteractivePermissions: 'fail',\\n expectedVersion: 'any',\\n command: '/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx',\\n },\\n },\\n clawrouter: {\\n enabled: true,\\n },\\n },\\n installs: {\\n clawrouter: {\\n source: 'npm',\\n spec: '@blockrun/clawrouter@latest',\\n installPath: '/home/ubuntu/.openclaw/extensions/clawrouter',\\n version: '0.12.43',\\n resolvedName: '@blockrun/clawrouter',\\n resolvedVersion: '0.12.43',\\n resolvedSpec: '@blockrun/clawrouter@0.12.43',\\n integrity: 'sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==',\\n shasum: '3331382e1a46524bee73b8ffa83677950f5bbae5',\\n resolvedAt: '2026-03-15T22:45:46.066Z',\\n installedAt: '2026-03-15T22:46:43.662Z',\\n },\\n },\\n },\\n}\",\n \"parsed\": {\n \"meta\": {\n \"lastTouchedVersion\": \"2026.3.13\",\n \"lastTouchedAt\": \"2026-03-15T23:17:49.868Z\"\n },\n \"env\": {\n \"OPENAI_API_KEY\": \"__OPENCLAW_REDACTED__\"\n },\n \"wizard\": {\n \"lastRunAt\": \"2026-03-15T22:40:03.597Z\",\n \"lastRunVersion\": \"2026.3.13\",\n \"lastRunCommand\": \"doctor\",\n \"lastRunMode\": \"local\"\n },\n \"diagnostics\": {\n \"flags\": [\n \"telegram.http\"\n ]\n },\n \"browser\": {\n \"executablePath\": \"/usr/bin/chromium-browser\",\n \"headless\": true,\n \"noSandbox\": true,\n \"defaultProfile\": \"openclaw\",\n \"profiles\": {\n \"openclaw\": {\n \"cdpPort\": 18800,\n \"cdpUrl\": \"http://127.0.0.1:18800\",\n \"color\": \"#FF4500\"\n }\n }\n },\n \"auth\": {\n \"profiles\": {\n \"openai-codex:default\": {\n \"provider\": \"openai-codex\",\n \"mode\": \"oauth\"\n }\n }\n },\n \"acp\": {\n \"enabled\": true,\n \"dispatch\": {\n \"enabled\": true\n },\n \"backend\": \"acpx\",\n \"defaultAgent\": \"codex\",\n \"allowedAgents\": [\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ],\n \"maxConcurrentSessions\": 8\n },\n \"models\": {\n \"mode\": \"merge\",\n \"providers\": {\n \"custom-api-deepseek-com\": {\n \"baseUrl\": \"https://api.deepseek.com\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"deepseek-chat\",\n \"name\": \"deepseek-chat (Custom Provider)\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 16000,\n \"maxTokens\": 4096\n }\n ]\n },\n \"blockrun\": {\n \"baseUrl\": \"http://127.0.0.1:8402/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"auto\",\n \"name\": \"Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"free\",\n \"name\": \"Free (NVIDIA GPT-OSS-120B only)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 4096\n },\n {\n \"id\": \"eco\",\n \"name\": \"Eco (Smart Router - Cost Optimized)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"premium\",\n \"name\": \"Premium (Smart Router - Best Quality)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 2000000,\n \"maxTokens\": 200000\n },\n {\n \"id\": \"openai/gpt-5.2\",\n \"name\": \"GPT-5.2\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5-mini\",\n \"name\": \"GPT-5 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.25,\n \"output\": 2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/gpt-5-nano\",\n \"name\": \"GPT-5 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.05,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 32768\n },\n {\n \"id\": \"openai/gpt-5.2-pro\",\n \"name\": \"GPT-5.2 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 21,\n \"output\": 168,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4\",\n \"name\": \"GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4-pro\",\n \"name\": \"GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.3\",\n \"name\": \"GPT-5.3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16000\n },\n {\n \"id\": \"openai/gpt-5.3-codex\",\n \"name\": \"GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-4.1\",\n \"name\": \"GPT-4.1\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-mini\",\n \"name\": \"GPT-4.1 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.4,\n \"output\": 1.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-nano\",\n \"name\": \"GPT-4.1 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o\",\n \"name\": \"GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o-mini\",\n \"name\": \"GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/o1\",\n \"name\": \"o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o1-mini\",\n \"name\": \"o1-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o3\",\n \"name\": \"o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o3-mini\",\n \"name\": \"o3-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o4-mini\",\n \"name\": \"o4-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"anthropic/claude-haiku-4.5\",\n \"name\": \"Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-sonnet-4.6\",\n \"name\": \"Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4.6\",\n \"name\": \"Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"google/gemini-3.1-pro\",\n \"name\": \"Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-pro-preview\",\n \"name\": \"Gemini 3 Pro Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-flash-preview\",\n \"name\": \"Gemini 3 Flash Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.5,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-pro\",\n \"name\": \"Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash\",\n \"name\": \"Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash-lite\",\n \"name\": \"Gemini 2.5 Flash Lite\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"deepseek/deepseek-chat\",\n \"name\": \"DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"deepseek/deepseek-reasoner\",\n \"name\": \"DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot/kimi-k2.5\",\n \"name\": \"Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"xai/grok-3\",\n \"name\": \"Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-3-mini\",\n \"name\": \"Grok 3 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-reasoning\",\n \"name\": \"Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-non-reasoning\",\n \"name\": \"Grok 4 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-reasoning\",\n \"name\": \"Grok 4.1 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-non-reasoning\",\n \"name\": \"Grok 4.1 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-0709\",\n \"name\": \"Grok 4 (0709)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 1.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-2-vision\",\n \"name\": \"Grok 2 Vision\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax/minimax-m2.5\",\n \"name\": \"MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/gpt-oss-120b\",\n \"name\": \"NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/kimi-k2.5\",\n \"name\": \"NVIDIA Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.55,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet\",\n \"name\": \"sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4\",\n \"name\": \"sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4.6\",\n \"name\": \"sonnet-4.6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4-6\",\n \"name\": \"sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"opus\",\n \"name\": \"opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4\",\n \"name\": \"opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4.6\",\n \"name\": \"opus-4.6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4-6\",\n \"name\": \"opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"haiku\",\n \"name\": \"haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/sonnet\",\n \"name\": \"anthropic/sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/opus\",\n \"name\": \"anthropic/opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/haiku\",\n \"name\": \"anthropic/haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude\",\n \"name\": \"anthropic/claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4\",\n \"name\": \"anthropic/claude-sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4-6\",\n \"name\": \"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4\",\n \"name\": \"anthropic/claude-opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4-6\",\n \"name\": \"anthropic/claude-opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4.5\",\n \"name\": \"anthropic/claude-opus-4.5 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-haiku-4\",\n \"name\": \"anthropic/claude-haiku-4 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-haiku-4-5\",\n \"name\": \"anthropic/claude-haiku-4-5 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gpt\",\n \"name\": \"gpt → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt4\",\n \"name\": \"gpt4 → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt5\",\n \"name\": \"gpt5 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4\",\n \"name\": \"gpt-5.4 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4-pro\",\n \"name\": \"gpt-5.4-pro → GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex → GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"mini\",\n \"name\": \"mini → GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"o1\",\n \"name\": \"o1 → o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"o3\",\n \"name\": \"o3 → o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"deepseek\",\n \"name\": \"deepseek → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"reasoner\",\n \"name\": \"reasoner → DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot\",\n \"name\": \"moonshot → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"kimi-k2.5 → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini → Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"flash\",\n \"name\": \"flash → Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"gemini-3.1-pro-preview\",\n \"name\": \"gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3.1-pro-preview\",\n \"name\": \"google/gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"grok\",\n \"name\": \"grok → Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-fast\",\n \"name\": \"grok-fast → Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-code\",\n \"name\": \"grok-code → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"nvidia\",\n \"name\": \"nvidia → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt-120b\",\n \"name\": \"gpt-120b → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax\",\n \"name\": \"minimax → MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"auto-router\",\n \"name\": \"auto-router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"router\",\n \"name\": \"router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n }\n ]\n },\n \"custom-api-moonshot-ai\": {\n \"baseUrl\": \"https://api.moonshot.ai/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"Kimi K2.5 (Moonshot)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n }\n ]\n }\n }\n },\n \"agents\": {\n \"defaults\": {\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"custom-api-deepseek-com/deepseek-chat\"\n ]\n },\n \"models\": {\n \"blockrun/auto\": {},\n \"openrouter/anthropic/claude-sonnet-4-6\": {\n \"alias\": \"claude\"\n },\n \"openai-codex/gpt-5.1\": {\n \"alias\": \"codex-chat\"\n },\n \"openai-codex/gpt-5.3-codex-spark\": {\n \"alias\": \"codex-spark\"\n },\n \"openai-codex/gpt-5.3-codex\": {\n \"alias\": \"codex-max\"\n },\n \"openai-codex/gpt-5.4\": {\n \"alias\": \"gpt-5.4\"\n },\n \"custom-api-deepseek-com/deepseek-chat\": {\n \"alias\": \"deepseek\"\n },\n \"claude-sonnet-cli/default\": {\n \"alias\": \"claude-sonnet\"\n },\n \"claude-opus-cli/default\": {\n \"alias\": \"claude-opus\"\n },\n \"blockrun/free\": {},\n \"blockrun/eco\": {},\n \"blockrun/premium\": {},\n \"blockrun/anthropic/claude-sonnet-4.6\": {},\n \"blockrun/anthropic/claude-opus-4.6\": {},\n \"blockrun/anthropic/claude-haiku-4.5\": {},\n \"blockrun/openai/gpt-5.2\": {},\n \"blockrun/openai/gpt-4o\": {},\n \"blockrun/openai/o3\": {},\n \"blockrun/google/gemini-3.1-pro\": {},\n \"blockrun/google/gemini-3-flash-preview\": {},\n \"blockrun/deepseek/deepseek-chat\": {},\n \"blockrun/moonshot/kimi-k2.5\": {},\n \"blockrun/xai/grok-3\": {},\n \"blockrun/minimax/minimax-m2.5\": {},\n \"openrouter/openrouter/free\": {},\n \"custom-api-moonshot-ai/kimi-k2.5\": {\n \"alias\": \"kimi\"\n },\n \"clawrouter/auto\": {\n \"alias\": \"clawrouter\"\n },\n \"openrouter/openrouter/auto\": {},\n \"blockrun/openai/gpt-5.3\": {}\n },\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"cliBackends\": {\n \"codex-cli\": {\n \"command\": \"/home/linuxbrew/.linuxbrew/bin/codex\",\n \"args\": [\n \"exec\",\n \"--json\",\n \"--color\",\n \"never\",\n \"--sandbox\",\n \"read-only\",\n \"--skip-git-repo-check\"\n ],\n \"output\": \"jsonl\"\n },\n \"gemini-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/gemini-cli-openclaw\",\n \"output\": \"text\"\n },\n \"deepseek-code\": {\n \"command\": \"/home/ubuntu/.local/bin/deepseek-code-openclaw\",\n \"output\": \"text\"\n },\n \"claude-sonnet-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-sonnet-openclaw\",\n \"output\": \"text\"\n },\n \"claude-opus-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-opus-openclaw\",\n \"output\": \"text\"\n },\n \"kimi-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/kimi-openclaw\",\n \"output\": \"text\"\n }\n },\n \"compaction\": {\n \"mode\": \"safeguard\"\n },\n \"elevatedDefault\": \"off\",\n \"maxConcurrent\": 1,\n \"subagents\": {\n \"maxConcurrent\": 4\n }\n },\n \"list\": [\n {\n \"id\": \"pipo\",\n \"name\": \"pipo\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"openai-codex/gpt-5.4\",\n \"fallbacks\": [\n \"blockrun/auto\",\n \"openrouter/openrouter/free\"\n ]\n },\n \"subagents\": {\n \"allowAgents\": [\n \"codex\",\n \"gemini\",\n \"claude\",\n \"deepseek-code\",\n \"kimi\",\n \"clawrouter\",\n \"openrouter\"\n ]\n }\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-codex\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/codex/agent\",\n \"model\": \"openai-codex/gpt-5.3-codex\"\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-gemini\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/gemini/agent\",\n \"model\": \"gemini-cli/default\"\n },\n {\n \"id\": \"deepseek-code\",\n \"name\": \"deepseek-code\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-deepseek-code\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/deepseek-code/agent\",\n \"model\": \"deepseek-code/default\"\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude/agent\",\n \"model\": \"claude-sonnet-cli/default\"\n },\n {\n \"id\": \"claude-opus\",\n \"name\": \"claude-opus\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude-opus\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude-opus/agent\",\n \"model\": \"claude-opus-cli/default\"\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-kimi\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/kimi/agent\",\n \"model\": \"kimi-cli/default\"\n },\n {\n \"id\": \"clawrouter\",\n \"name\": \"ClawRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n },\n {\n \"id\": \"openrouter\",\n \"name\": \"OpenRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-openrouter\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/openrouter/agent\",\n \"model\": {\n \"primary\": \"openrouter/openrouter/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n }\n ]\n },\n \"tools\": {\n \"sessions\": {\n \"visibility\": \"all\"\n },\n \"agentToAgent\": {\n \"enabled\": true,\n \"allow\": [\n \"pipo\",\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ]\n },\n \"elevated\": {\n \"enabled\": true,\n \"allowFrom\": {\n \"telegram\": [\n 842987156\n ],\n \"webchat\": []\n }\n },\n \"exec\": {\n \"ask\": \"off\"\n }\n },\n \"messages\": {\n \"ackReactionScope\": \"group-mentions\"\n },\n \"commands\": {\n \"native\": \"auto\",\n \"nativeSkills\": \"auto\",\n \"restart\": true,\n \"ownerDisplay\": \"raw\"\n },\n \"session\": {\n \"dmScope\": \"per-channel-peer\"\n },\n \"hooks\": {\n \"internal\": {\n \"enabled\": true,\n \"entries\": {\n \"session-memory\": {\n \"enabled\": true\n },\n \"bootstrap-extra-files\": {\n \"enabled\": true\n },\n \"boot-md\": {\n \"enabled\": true\n }\n }\n }\n },\n \"channels\": {\n \"telegram\": {\n \"enabled\": true,\n \"dmPolicy\": \"allowlist\",\n \"botToken\": \"__OPENCLAW_REDACTED__\",\n \"replyToMode\": \"all\",\n \"allowFrom\": [\n 842987156\n ],\n \"groupPolicy\": \"allowlist\",\n \"streaming\": \"off\",\n \"mediaMaxMb\": 20,\n \"timeoutSeconds\": 60,\n \"retry\": {\n \"attempts\": 6,\n \"minDelayMs\": 1500,\n \"maxDelayMs\": 90000,\n \"jitter\": 0.1\n },\n \"network\": {\n \"autoSelectFamily\": false,\n \"dnsResultOrder\": \"ipv4first\"\n }\n }\n },\n \"gateway\": {\n \"port\": 18789,\n \"mode\": \"local\",\n \"bind\": \"loopback\",\n \"controlUi\": {\n \"allowedOrigins\": [\n \"https://miopenclaw-vnic.tail9799d2.ts.net\",\n \"https://miopenclaw-vnic.tail9799d2.ts.net/\",\n \"http://127.0.0.1:18789\"\n ]\n },\n \"auth\": {\n \"mode\": \"token\",\n \"token\": \"__OPENCLAW_REDACTED__\"\n },\n \"trustedProxies\": [\n \"127.0.0.1/32\",\n \"::1/128\"\n ],\n \"tailscale\": {\n \"mode\": \"serve\",\n \"resetOnExit\": true\n }\n },\n \"skills\": {\n \"entries\": {\n \"gh-issues\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"nano-banana-pro\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"notion\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-image-gen\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-whisper-api\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"sag\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n }\n }\n },\n \"plugins\": {\n \"allow\": [\n \"telegram\",\n \"acpx\",\n \"clawrouter\"\n ],\n \"entries\": {\n \"qwen-portal-auth\": {\n \"enabled\": true\n },\n \"acpx\": {\n \"enabled\": true,\n \"config\": {\n \"permissionMode\": \"approve-all\",\n \"nonInteractivePermissions\": \"fail\",\n \"expectedVersion\": \"any\",\n \"command\": \"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx\"\n }\n },\n \"clawrouter\": {\n \"enabled\": true\n }\n },\n \"installs\": {\n \"clawrouter\": {\n \"source\": \"npm\",\n \"spec\": \"@blockrun/clawrouter@latest\",\n \"installPath\": \"/home/ubuntu/.openclaw/extensions/clawrouter\",\n \"version\": \"0.12.43\",\n \"resolvedName\": \"@blockrun/clawrouter\",\n \"resolvedVersion\": \"0.12.43\",\n \"resolvedSpec\": \"@blockrun/clawrouter@0.12.43\",\n \"integrity\": \"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==\",\n \"shasum\": \"3331382e1a46524bee73b8ffa83677950f5bbae5\",\n \"resolvedAt\": \"2026-03-15T22:45:46.066Z\",\n \"installedAt\": \"2026-03-15T22:46:43.662Z\"\n }\n }\n }\n },\n \"resolved\": {\n \"meta\": {\n \"lastTouchedVersion\": \"2026.3.13\",\n \"lastTouchedAt\": \"2026-03-15T23:17:49.868Z\"\n },\n \"env\": {\n \"OPENAI_API_KEY\": \"__OPENCLAW_REDACTED__\"\n },\n \"wizard\": {\n \"lastRunAt\": \"2026-03-15T22:40:03.597Z\",\n \"lastRunVersion\": \"2026.3.13\",\n \"lastRunCommand\": \"doctor\",\n \"lastRunMode\": \"local\"\n },\n \"diagnostics\": {\n \"flags\": [\n \"telegram.http\"\n ]\n },\n \"browser\": {\n \"executablePath\": \"/usr/bin/chromium-browser\",\n \"headless\": true,\n \"noSandbox\": true,\n \"defaultProfile\": \"openclaw\",\n \"profiles\": {\n \"openclaw\": {\n \"cdpPort\": 18800,\n \"cdpUrl\": \"http://127.0.0.1:18800\",\n \"color\": \"#FF4500\"\n }\n }\n },\n \"auth\": {\n \"profiles\": {\n \"openai-codex:default\": {\n \"provider\": \"openai-codex\",\n \"mode\": \"oauth\"\n }\n }\n },\n \"acp\": {\n \"enabled\": true,\n \"dispatch\": {\n \"enabled\": true\n },\n \"backend\": \"acpx\",\n \"defaultAgent\": \"codex\",\n \"allowedAgents\": [\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ],\n \"maxConcurrentSessions\": 8\n },\n \"models\": {\n \"mode\": \"merge\",\n \"providers\": {\n \"custom-api-deepseek-com\": {\n \"baseUrl\": \"https://api.deepseek.com\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"deepseek-chat\",\n \"name\": \"deepseek-chat (Custom Provider)\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 16000,\n \"maxTokens\": 4096\n }\n ]\n },\n \"blockrun\": {\n \"baseUrl\": \"http://127.0.0.1:8402/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"auto\",\n \"name\": \"Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"free\",\n \"name\": \"Free (NVIDIA GPT-OSS-120B only)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 4096\n },\n {\n \"id\": \"eco\",\n \"name\": \"Eco (Smart Router - Cost Optimized)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"premium\",\n \"name\": \"Premium (Smart Router - Best Quality)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 2000000,\n \"maxTokens\": 200000\n },\n {\n \"id\": \"openai/gpt-5.2\",\n \"name\": \"GPT-5.2\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5-mini\",\n \"name\": \"GPT-5 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.25,\n \"output\": 2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/gpt-5-nano\",\n \"name\": \"GPT-5 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.05,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 32768\n },\n {\n \"id\": \"openai/gpt-5.2-pro\",\n \"name\": \"GPT-5.2 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 21,\n \"output\": 168,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4\",\n \"name\": \"GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4-pro\",\n \"name\": \"GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.3\",\n \"name\": \"GPT-5.3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16000\n },\n {\n \"id\": \"openai/gpt-5.3-codex\",\n \"name\": \"GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-4.1\",\n \"name\": \"GPT-4.1\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-mini\",\n \"name\": \"GPT-4.1 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.4,\n \"output\": 1.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-nano\",\n \"name\": \"GPT-4.1 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o\",\n \"name\": \"GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o-mini\",\n \"name\": \"GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/o1\",\n \"name\": \"o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o1-mini\",\n \"name\": \"o1-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o3\",\n \"name\": \"o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o3-mini\",\n \"name\": \"o3-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o4-mini\",\n \"name\": \"o4-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"anthropic/claude-haiku-4.5\",\n \"name\": \"Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-sonnet-4.6\",\n \"name\": \"Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4.6\",\n \"name\": \"Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"google/gemini-3.1-pro\",\n \"name\": \"Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-pro-preview\",\n \"name\": \"Gemini 3 Pro Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-flash-preview\",\n \"name\": \"Gemini 3 Flash Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.5,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-pro\",\n \"name\": \"Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash\",\n \"name\": \"Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash-lite\",\n \"name\": \"Gemini 2.5 Flash Lite\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"deepseek/deepseek-chat\",\n \"name\": \"DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"deepseek/deepseek-reasoner\",\n \"name\": \"DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot/kimi-k2.5\",\n \"name\": \"Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"xai/grok-3\",\n \"name\": \"Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-3-mini\",\n \"name\": \"Grok 3 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-reasoning\",\n \"name\": \"Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-non-reasoning\",\n \"name\": \"Grok 4 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-reasoning\",\n \"name\": \"Grok 4.1 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-non-reasoning\",\n \"name\": \"Grok 4.1 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-0709\",\n \"name\": \"Grok 4 (0709)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 1.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-2-vision\",\n \"name\": \"Grok 2 Vision\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax/minimax-m2.5\",\n \"name\": \"MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/gpt-oss-120b\",\n \"name\": \"NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/kimi-k2.5\",\n \"name\": \"NVIDIA Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.55,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet\",\n \"name\": \"sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4\",\n \"name\": \"sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4.6\",\n \"name\": \"sonnet-4.6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4-6\",\n \"name\": \"sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"opus\",\n \"name\": \"opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4\",\n \"name\": \"opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4.6\",\n \"name\": \"opus-4.6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4-6\",\n \"name\": \"opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"haiku\",\n \"name\": \"haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/sonnet\",\n \"name\": \"anthropic/sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/opus\",\n \"name\": \"anthropic/opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/haiku\",\n \"name\": \"anthropic/haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude\",\n \"name\": \"anthropic/claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4\",\n \"name\": \"anthropic/claude-sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4-6\",\n \"name\": \"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4\",\n \"name\": \"anthropic/claude-opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4-6\",\n \"name\": \"anthropic/claude-opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4.5\",\n \"name\": \"anthropic/claude-opus-4.5 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-haiku-4\",\n \"name\": \"anthropic/claude-haiku-4 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-haiku-4-5\",\n \"name\": \"anthropic/claude-haiku-4-5 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gpt\",\n \"name\": \"gpt → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt4\",\n \"name\": \"gpt4 → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt5\",\n \"name\": \"gpt5 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4\",\n \"name\": \"gpt-5.4 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4-pro\",\n \"name\": \"gpt-5.4-pro → GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex → GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"mini\",\n \"name\": \"mini → GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"o1\",\n \"name\": \"o1 → o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"o3\",\n \"name\": \"o3 → o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"deepseek\",\n \"name\": \"deepseek → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"reasoner\",\n \"name\": \"reasoner → DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot\",\n \"name\": \"moonshot → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"kimi-k2.5 → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini → Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"flash\",\n \"name\": \"flash → Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"gemini-3.1-pro-preview\",\n \"name\": \"gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3.1-pro-preview\",\n \"name\": \"google/gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"grok\",\n \"name\": \"grok → Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-fast\",\n \"name\": \"grok-fast → Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-code\",\n \"name\": \"grok-code → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"nvidia\",\n \"name\": \"nvidia → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt-120b\",\n \"name\": \"gpt-120b → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax\",\n \"name\": \"minimax → MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"auto-router\",\n \"name\": \"auto-router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"router\",\n \"name\": \"router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n }\n ]\n },\n \"custom-api-moonshot-ai\": {\n \"baseUrl\": \"https://api.moonshot.ai/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"Kimi K2.5 (Moonshot)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n }\n ]\n }\n }\n },\n \"agents\": {\n \"defaults\": {\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"custom-api-deepseek-com/deepseek-chat\"\n ]\n },\n \"models\": {\n \"blockrun/auto\": {},\n \"openrouter/anthropic/claude-sonnet-4-6\": {\n \"alias\": \"claude\"\n },\n \"openai-codex/gpt-5.1\": {\n \"alias\": \"codex-chat\"\n },\n \"openai-codex/gpt-5.3-codex-spark\": {\n \"alias\": \"codex-spark\"\n },\n \"openai-codex/gpt-5.3-codex\": {\n \"alias\": \"codex-max\"\n },\n \"openai-codex/gpt-5.4\": {\n \"alias\": \"gpt-5.4\"\n },\n \"custom-api-deepseek-com/deepseek-chat\": {\n \"alias\": \"deepseek\"\n },\n \"claude-sonnet-cli/default\": {\n \"alias\": \"claude-sonnet\"\n },\n \"claude-opus-cli/default\": {\n \"alias\": \"claude-opus\"\n },\n \"blockrun/free\": {},\n \"blockrun/eco\": {},\n \"blockrun/premium\": {},\n \"blockrun/anthropic/claude-sonnet-4.6\": {},\n \"blockrun/anthropic/claude-opus-4.6\": {},\n \"blockrun/anthropic/claude-haiku-4.5\": {},\n \"blockrun/openai/gpt-5.2\": {},\n \"blockrun/openai/gpt-4o\": {},\n \"blockrun/openai/o3\": {},\n \"blockrun/google/gemini-3.1-pro\": {},\n \"blockrun/google/gemini-3-flash-preview\": {},\n \"blockrun/deepseek/deepseek-chat\": {},\n \"blockrun/moonshot/kimi-k2.5\": {},\n \"blockrun/xai/grok-3\": {},\n \"blockrun/minimax/minimax-m2.5\": {},\n \"openrouter/openrouter/free\": {},\n \"custom-api-moonshot-ai/kimi-k2.5\": {\n \"alias\": \"kimi\"\n },\n \"clawrouter/auto\": {\n \"alias\": \"clawrouter\"\n },\n \"openrouter/openrouter/auto\": {},\n \"blockrun/openai/gpt-5.3\": {}\n },\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"cliBackends\": {\n \"codex-cli\": {\n \"command\": \"/home/linuxbrew/.linuxbrew/bin/codex\",\n \"args\": [\n \"exec\",\n \"--json\",\n \"--color\",\n \"never\",\n \"--sandbox\",\n \"read-only\",\n \"--skip-git-repo-check\"\n ],\n \"output\": \"jsonl\"\n },\n \"gemini-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/gemini-cli-openclaw\",\n \"output\": \"text\"\n },\n \"deepseek-code\": {\n \"command\": \"/home/ubuntu/.local/bin/deepseek-code-openclaw\",\n \"output\": \"text\"\n },\n \"claude-sonnet-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-sonnet-openclaw\",\n \"output\": \"text\"\n },\n \"claude-opus-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-opus-openclaw\",\n \"output\": \"text\"\n },\n \"kimi-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/kimi-openclaw\",\n \"output\": \"text\"\n }\n },\n \"compaction\": {\n \"mode\": \"safeguard\"\n },\n \"elevatedDefault\": \"off\",\n \"maxConcurrent\": 1,\n \"subagents\": {\n \"maxConcurrent\": 4\n }\n },\n \"list\": [\n {\n \"id\": \"pipo\",\n \"name\": \"pipo\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"openai-codex/gpt-5.4\",\n \"fallbacks\": [\n \"blockrun/auto\",\n \"openrouter/openrouter/free\"\n ]\n },\n \"subagents\": {\n \"allowAgents\": [\n \"codex\",\n \"gemini\",\n \"claude\",\n \"deepseek-code\",\n \"kimi\",\n \"clawrouter\",\n \"openrouter\"\n ]\n }\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-codex\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/codex/agent\",\n \"model\": \"openai-codex/gpt-5.3-codex\"\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-gemini\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/gemini/agent\",\n \"model\": \"gemini-cli/default\"\n },\n {\n \"id\": \"deepseek-code\",\n \"name\": \"deepseek-code\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-deepseek-code\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/deepseek-code/agent\",\n \"model\": \"deepseek-code/default\"\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude/agent\",\n \"model\": \"claude-sonnet-cli/default\"\n },\n {\n \"id\": \"claude-opus\",\n \"name\": \"claude-opus\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude-opus\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude-opus/agent\",\n \"model\": \"claude-opus-cli/default\"\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-kimi\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/kimi/agent\",\n \"model\": \"kimi-cli/default\"\n },\n {\n \"id\": \"clawrouter\",\n \"name\": \"ClawRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n },\n {\n \"id\": \"openrouter\",\n \"name\": \"OpenRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-openrouter\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/openrouter/agent\",\n \"model\": {\n \"primary\": \"openrouter/openrouter/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n }\n ]\n },\n \"tools\": {\n \"sessions\": {\n \"visibility\": \"all\"\n },\n \"agentToAgent\": {\n \"enabled\": true,\n \"allow\": [\n \"pipo\",\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ]\n },\n \"elevated\": {\n \"enabled\": true,\n \"allowFrom\": {\n \"telegram\": [\n 842987156\n ],\n \"webchat\": []\n }\n },\n \"exec\": {\n \"ask\": \"off\"\n }\n },\n \"messages\": {\n \"ackReactionScope\": \"group-mentions\"\n },\n \"commands\": {\n \"native\": \"auto\",\n \"nativeSkills\": \"auto\",\n \"restart\": true,\n \"ownerDisplay\": \"raw\"\n },\n \"session\": {\n \"dmScope\": \"per-channel-peer\"\n },\n \"hooks\": {\n \"internal\": {\n \"enabled\": true,\n \"entries\": {\n \"session-memory\": {\n \"enabled\": true\n },\n \"bootstrap-extra-files\": {\n \"enabled\": true\n },\n \"boot-md\": {\n \"enabled\": true\n }\n }\n }\n },\n \"channels\": {\n \"telegram\": {\n \"enabled\": true,\n \"dmPolicy\": \"allowlist\",\n \"botToken\": \"__OPENCLAW_REDACTED__\",\n \"replyToMode\": \"all\",\n \"allowFrom\": [\n 842987156\n ],\n \"groupPolicy\": \"allowlist\",\n \"streaming\": \"off\",\n \"mediaMaxMb\": 20,\n \"timeoutSeconds\": 60,\n \"retry\": {\n \"attempts\": 6,\n \"minDelayMs\": 1500,\n \"maxDelayMs\": 90000,\n \"jitter\": 0.1\n },\n \"network\": {\n \"autoSelectFamily\": false,\n \"dnsResultOrder\": \"ipv4first\"\n }\n }\n },\n \"gateway\": {\n \"port\": 18789,\n \"mode\": \"local\",\n \"bind\": \"loopback\",\n \"controlUi\": {\n \"allowedOrigins\": [\n \"https://miopenclaw-vnic.tail9799d2.ts.net\",\n \"https://miopenclaw-vnic.tail9799d2.ts.net/\",\n \"http://127.0.0.1:18789\"\n ]\n },\n \"auth\": {\n \"mode\": \"token\",\n \"token\": \"__OPENCLAW_REDACTED__\"\n },\n \"trustedProxies\": [\n \"127.0.0.1/32\",\n \"::1/128\"\n ],\n \"tailscale\": {\n \"mode\": \"serve\",\n \"resetOnExit\": true\n }\n },\n \"skills\": {\n \"entries\": {\n \"gh-issues\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"nano-banana-pro\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"notion\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-image-gen\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-whisper-api\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"sag\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n }\n }\n },\n \"plugins\": {\n \"allow\": [\n \"telegram\",\n \"acpx\",\n \"clawrouter\"\n ],\n \"entries\": {\n \"qwen-portal-auth\": {\n \"enabled\": true\n },\n \"acpx\": {\n \"enabled\": true,\n \"config\": {\n \"permissionMode\": \"approve-all\",\n \"nonInteractivePermissions\": \"fail\",\n \"expectedVersion\": \"any\",\n \"command\": \"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx\"\n }\n },\n \"clawrouter\": {\n \"enabled\": true\n }\n },\n \"installs\": {\n \"clawrouter\": {\n \"source\": \"npm\",\n \"spec\": \"@blockrun/clawrouter@latest\",\n \"installPath\": \"/home/ubuntu/.openclaw/extensions/clawrouter\",\n \"version\": \"0.12.43\",\n \"resolvedName\": \"@blockrun/clawrouter\",\n \"resolvedVersion\": \"0.12.43\",\n \"resolvedSpec\": \"@blockrun/clawrouter@0.12.43\",\n \"integrity\": \"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==\",\n \"shasum\": \"3331382e1a46524bee73b8ffa83677950f5bbae5\",\n \"resolvedAt\": \"2026-03-15T22:45:46.066Z\",\n \"installedAt\": \"2026-03-15T22:46:43.662Z\"\n }\n }\n }\n },\n \"valid\": true,\n \"config\": {\n \"meta\": {\n \"lastTouchedVersion\": \"2026.3.13\",\n \"lastTouchedAt\": \"2026-03-15T23:17:49.868Z\"\n },\n \"env\": {\n \"OPENAI_API_KEY\": \"__OPENCLAW_REDACTED__\"\n },\n \"wizard\": {\n \"lastRunAt\": \"2026-03-15T22:40:03.597Z\",\n \"lastRunVersion\": \"2026.3.13\",\n \"lastRunCommand\": \"doctor\",\n \"lastRunMode\": \"local\"\n },\n \"diagnostics\": {\n \"flags\": [\n \"telegram.http\"\n ]\n },\n \"browser\": {\n \"executablePath\": \"/usr/bin/chromium-browser\",\n \"headless\": true,\n \"noSandbox\": true,\n \"defaultProfile\": \"openclaw\",\n \"profiles\": {\n \"openclaw\": {\n \"cdpPort\": 18800,\n \"cdpUrl\": \"http://127.0.0.1:18800\",\n \"color\": \"#FF4500\"\n }\n }\n },\n \"auth\": {\n \"profiles\": {\n \"openai-codex:default\": {\n \"provider\": \"openai-codex\",\n \"mode\": \"oauth\"\n }\n }\n },\n \"acp\": {\n \"enabled\": true,\n \"dispatch\": {\n \"enabled\": true\n },\n \"backend\": \"acpx\",\n \"defaultAgent\": \"codex\",\n \"allowedAgents\": [\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ],\n \"maxConcurrentSessions\": 8\n },\n \"models\": {\n \"mode\": \"merge\",\n \"providers\": {\n \"custom-api-deepseek-com\": {\n \"baseUrl\": \"https://api.deepseek.com\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"deepseek-chat\",\n \"name\": \"deepseek-chat (Custom Provider)\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 16000,\n \"maxTokens\": 4096,\n \"api\": \"openai-completions\"\n }\n ]\n },\n \"blockrun\": {\n \"baseUrl\": \"http://127.0.0.1:8402/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"auto\",\n \"name\": \"Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"free\",\n \"name\": \"Free (NVIDIA GPT-OSS-120B only)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 4096\n },\n {\n \"id\": \"eco\",\n \"name\": \"Eco (Smart Router - Cost Optimized)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"premium\",\n \"name\": \"Premium (Smart Router - Best Quality)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 2000000,\n \"maxTokens\": 200000\n },\n {\n \"id\": \"openai/gpt-5.2\",\n \"name\": \"GPT-5.2\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5-mini\",\n \"name\": \"GPT-5 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.25,\n \"output\": 2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/gpt-5-nano\",\n \"name\": \"GPT-5 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.05,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 32768\n },\n {\n \"id\": \"openai/gpt-5.2-pro\",\n \"name\": \"GPT-5.2 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 21,\n \"output\": 168,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4\",\n \"name\": \"GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4-pro\",\n \"name\": \"GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.3\",\n \"name\": \"GPT-5.3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16000\n },\n {\n \"id\": \"openai/gpt-5.3-codex\",\n \"name\": \"GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-4.1\",\n \"name\": \"GPT-4.1\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-mini\",\n \"name\": \"GPT-4.1 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.4,\n \"output\": 1.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-nano\",\n \"name\": \"GPT-4.1 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o\",\n \"name\": \"GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o-mini\",\n \"name\": \"GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/o1\",\n \"name\": \"o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o1-mini\",\n \"name\": \"o1-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o3\",\n \"name\": \"o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o3-mini\",\n \"name\": \"o3-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o4-mini\",\n \"name\": \"o4-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"anthropic/claude-haiku-4.5\",\n \"name\": \"Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-sonnet-4.6\",\n \"name\": \"Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4.6\",\n \"name\": \"Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"google/gemini-3.1-pro\",\n \"name\": \"Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-pro-preview\",\n \"name\": \"Gemini 3 Pro Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-flash-preview\",\n \"name\": \"Gemini 3 Flash Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.5,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-pro\",\n \"name\": \"Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash\",\n \"name\": \"Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash-lite\",\n \"name\": \"Gemini 2.5 Flash Lite\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"deepseek/deepseek-chat\",\n \"name\": \"DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"deepseek/deepseek-reasoner\",\n \"name\": \"DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot/kimi-k2.5\",\n \"name\": \"Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"xai/grok-3\",\n \"name\": \"Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-3-mini\",\n \"name\": \"Grok 3 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-reasoning\",\n \"name\": \"Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-non-reasoning\",\n \"name\": \"Grok 4 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-reasoning\",\n \"name\": \"Grok 4.1 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-non-reasoning\",\n \"name\": \"Grok 4.1 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-0709\",\n \"name\": \"Grok 4 (0709)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 1.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-2-vision\",\n \"name\": \"Grok 2 Vision\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax/minimax-m2.5\",\n \"name\": \"MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/gpt-oss-120b\",\n \"name\": \"NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/kimi-k2.5\",\n \"name\": \"NVIDIA Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.55,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet\",\n \"name\": \"sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4\",\n \"name\": \"sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4.6\",\n \"name\": \"sonnet-4.6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4-6\",\n \"name\": \"sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"opus\",\n \"name\": \"opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4\",\n \"name\": \"opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4.6\",\n \"name\": \"opus-4.6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4-6\",\n \"name\": \"opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"haiku\",\n \"name\": \"haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/sonnet\",\n \"name\": \"anthropic/sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/opus\",\n \"name\": \"anthropic/opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/haiku\",\n \"name\": \"anthropic/haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude\",\n \"name\": \"anthropic/claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4\",\n \"name\": \"anthropic/claude-sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4-6\",\n \"name\": \"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4\",\n \"name\": \"anthropic/claude-opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4-6\",\n \"name\": \"anthropic/claude-opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4.5\",\n \"name\": \"anthropic/claude-opus-4.5 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-haiku-4\",\n \"name\": \"anthropic/claude-haiku-4 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-haiku-4-5\",\n \"name\": \"anthropic/claude-haiku-4-5 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gpt\",\n \"name\": \"gpt → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt4\",\n \"name\": \"gpt4 → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt5\",\n \"name\": \"gpt5 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4\",\n \"name\": \"gpt-5.4 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4-pro\",\n \"name\": \"gpt-5.4-pro → GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex → GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"mini\",\n \"name\": \"mini → GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"o1\",\n \"name\": \"o1 → o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"o3\",\n \"name\": \"o3 → o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"deepseek\",\n \"name\": \"deepseek → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"reasoner\",\n \"name\": \"reasoner → DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot\",\n \"name\": \"moonshot → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"kimi-k2.5 → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini → Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"flash\",\n \"name\": \"flash → Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"gemini-3.1-pro-preview\",\n \"name\": \"gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3.1-pro-preview\",\n \"name\": \"google/gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"grok\",\n \"name\": \"grok → Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-fast\",\n \"name\": \"grok-fast → Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-code\",\n \"name\": \"grok-code → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"nvidia\",\n \"name\": \"nvidia → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt-120b\",\n \"name\": \"gpt-120b → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax\",\n \"name\": \"minimax → MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"auto-router\",\n \"name\": \"auto-router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"router\",\n \"name\": \"router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n }\n ]\n },\n \"custom-api-moonshot-ai\": {\n \"baseUrl\": \"https://api.moonshot.ai/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"Kimi K2.5 (Moonshot)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n }\n ]\n }\n }\n },\n \"agents\": {\n \"defaults\": {\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"custom-api-deepseek-com/deepseek-chat\"\n ]\n },\n \"models\": {\n \"blockrun/auto\": {},\n \"openrouter/anthropic/claude-sonnet-4-6\": {\n \"alias\": \"claude\"\n },\n \"openai-codex/gpt-5.1\": {\n \"alias\": \"codex-chat\"\n },\n \"openai-codex/gpt-5.3-codex-spark\": {\n \"alias\": \"codex-spark\"\n },\n \"openai-codex/gpt-5.3-codex\": {\n \"alias\": \"codex-max\"\n },\n \"openai-codex/gpt-5.4\": {\n \"alias\": \"gpt-5.4\"\n },\n \"custom-api-deepseek-com/deepseek-chat\": {\n \"alias\": \"deepseek\"\n },\n \"claude-sonnet-cli/default\": {\n \"alias\": \"claude-sonnet\"\n },\n \"claude-opus-cli/default\": {\n \"alias\": \"claude-opus\"\n },\n \"blockrun/free\": {},\n \"blockrun/eco\": {},\n \"blockrun/premium\": {},\n \"blockrun/anthropic/claude-sonnet-4.6\": {},\n \"blockrun/anthropic/claude-opus-4.6\": {},\n \"blockrun/anthropic/claude-haiku-4.5\": {},\n \"blockrun/openai/gpt-5.2\": {},\n \"blockrun/openai/gpt-4o\": {},\n \"blockrun/openai/o3\": {},\n \"blockrun/google/gemini-3.1-pro\": {},\n \"blockrun/google/gemini-3-flash-preview\": {},\n \"blockrun/deepseek/deepseek-chat\": {},\n \"blockrun/moonshot/kimi-k2.5\": {},\n \"blockrun/xai/grok-3\": {},\n \"blockrun/minimax/minimax-m2.5\": {},\n \"openrouter/openrouter/free\": {},\n \"custom-api-moonshot-ai/kimi-k2.5\": {\n \"alias\": \"kimi\"\n },\n \"clawrouter/auto\": {\n \"alias\": \"clawrouter\"\n },\n \"openrouter/openrouter/auto\": {},\n \"blockrun/openai/gpt-5.3\": {}\n },\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"cliBackends\": {\n \"codex-cli\": {\n \"command\": \"/home/linuxbrew/.linuxbrew/bin/codex\",\n \"args\": [\n \"exec\",\n \"--json\",\n \"--color\",\n \"never\",\n \"--sandbox\",\n \"read-only\",\n \"--skip-git-repo-check\"\n ],\n \"output\": \"jsonl\"\n },\n \"gemini-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/gemini-cli-openclaw\",\n \"output\": \"text\"\n },\n \"deepseek-code\": {\n \"command\": \"/home/ubuntu/.local/bin/deepseek-code-openclaw\",\n \"output\": \"text\"\n },\n \"claude-sonnet-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-sonnet-openclaw\",\n \"output\": \"text\"\n },\n \"claude-opus-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-opus-openclaw\",\n \"output\": \"text\"\n },\n \"kimi-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/kimi-openclaw\",\n \"output\": \"text\"\n }\n },\n \"compaction\": {\n \"mode\": \"safeguard\"\n },\n \"elevatedDefault\": \"off\",\n \"maxConcurrent\": 1,\n \"subagents\": {\n \"maxConcurrent\": 4\n }\n },\n \"list\": [\n {\n \"id\": \"pipo\",\n \"name\": \"pipo\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"openai-codex/gpt-5.4\",\n \"fallbacks\": [\n \"blockrun/auto\",\n \"openrouter/openrouter/free\"\n ]\n },\n \"subagents\": {\n \"allowAgents\": [\n \"codex\",\n \"gemini\",\n \"claude\",\n \"deepseek-code\",\n \"kimi\",\n \"clawrouter\",\n \"openrouter\"\n ]\n }\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-codex\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/codex/agent\",\n \"model\": \"openai-codex/gpt-5.3-codex\"\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-gemini\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/gemini/agent\",\n \"model\": \"gemini-cli/default\"\n },\n {\n \"id\": \"deepseek-code\",\n \"name\": \"deepseek-code\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-deepseek-code\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/deepseek-code/agent\",\n \"model\": \"deepseek-code/default\"\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude/agent\",\n \"model\": \"claude-sonnet-cli/default\"\n },\n {\n \"id\": \"claude-opus\",\n \"name\": \"claude-opus\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude-opus\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude-opus/agent\",\n \"model\": \"claude-opus-cli/default\"\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-kimi\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/kimi/agent\",\n \"model\": \"kimi-cli/default\"\n },\n {\n \"id\": \"clawrouter\",\n \"name\": \"ClawRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n },\n {\n \"id\": \"openrouter\",\n \"name\": \"OpenRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-openrouter\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/openrouter/agent\",\n \"model\": {\n \"primary\": \"openrouter/openrouter/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n }\n ]\n },\n \"tools\": {\n \"sessions\": {\n \"visibility\": \"all\"\n },\n \"agentToAgent\": {\n \"enabled\": true,\n \"allow\": [\n \"pipo\",\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ]\n },\n \"elevated\": {\n \"enabled\": true,\n \"allowFrom\": {\n \"telegram\": [\n 842987156\n ],\n \"webchat\": []\n }\n },\n \"exec\": {\n \"ask\": \"off\"\n }\n },\n \"messages\": {\n \"ackReactionScope\": \"group-mentions\"\n },\n \"commands\": {\n \"native\": \"auto\",\n \"nativeSkills\": \"auto\",\n \"restart\": true,\n \"ownerDisplay\": \"raw\"\n },\n \"session\": {\n \"dmScope\": \"per-channel-peer\"\n },\n \"hooks\": {\n \"internal\": {\n \"enabled\": true,\n \"entries\": {\n \"session-memory\": {\n \"enabled\": true\n },\n \"bootstrap-extra-files\": {\n \"enabled\": true\n },\n \"boot-md\": {\n \"enabled\": true\n }\n }\n }\n },\n \"channels\": {\n \"telegram\": {\n \"enabled\": true,\n \"dmPolicy\": \"allowlist\",\n \"botToken\": \"__OPENCLAW_REDACTED__\",\n \"replyToMode\": \"all\",\n \"allowFrom\": [\n 842987156\n ],\n \"groupPolicy\": \"allowlist\",\n \"streaming\": \"off\",\n \"mediaMaxMb\": 20,\n \"timeoutSeconds\": 60,\n \"retry\": {\n \"attempts\": 6,\n \"minDelayMs\": 1500,\n \"maxDelayMs\": 90000,\n \"jitter\": 0.1\n },\n \"network\": {\n \"autoSelectFamily\": false,\n \"dnsResultOrder\": \"ipv4first\"\n }\n }\n },\n \"gateway\": {\n \"port\": 18789,\n \"mode\": \"local\",\n \"bind\": \"loopback\",\n \"controlUi\": {\n \"allowedOrigins\": [\n \"https://miopenclaw-vnic.tail9799d2.ts.net\",\n \"https://miopenclaw-vnic.tail9799d2.ts.net/\",\n \"http://127.0.0.1:18789\"\n ]\n },\n \"auth\": {\n \"mode\": \"token\",\n \"token\": \"__OPENCLAW_REDACTED__\"\n },\n \"trustedProxies\": [\n \"127.0.0.1/32\",\n \"::1/128\"\n ],\n \"tailscale\": {\n \"mode\": \"serve\",\n \"resetOnExit\": true\n }\n },\n \"skills\": {\n \"entries\": {\n \"gh-issues\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"nano-banana-pro\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"notion\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-image-gen\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-whisper-api\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"sag\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n }\n }\n },\n \"plugins\": {\n \"allow\": [\n \"telegram\",\n \"acpx\",\n \"clawrouter\"\n ],\n \"entries\": {\n \"qwen-portal-auth\": {\n \"enabled\": true\n },\n \"acpx\": {\n \"enabled\": true,\n \"config\": {\n \"permissionMode\": \"approve-all\",\n \"nonInteractivePermissions\": \"fail\",\n \"expectedVersion\": \"any\",\n \"command\": \"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx\"\n }\n },\n \"clawrouter\": {\n \"enabled\": true\n }\n },\n \"installs\": {\n \"clawrouter\": {\n \"source\": \"npm\",\n \"spec\": \"@blockrun/clawrouter@latest\",\n \"installPath\": \"/home/ubuntu/.openclaw/extensions/clawrouter\",\n \"version\": \"0.12.43\",\n \"resolvedName\": \"@blockrun/clawrouter\",\n \"resolvedVersion\": \"0.12.43\",\n \"resolvedSpec\": \"@blockrun/clawrouter@0.12.43\",\n \"integrity\": \"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==\",\n \"shasum\": \"3331382e1a46524bee73b8ffa83677950f5bbae5\",\n \"resolvedAt\": \"2026-03-15T22:45:46.066Z\",\n \"installedAt\": \"2026-03-15T22:46:43.662Z\"\n }\n }\n },\n \"talk\": {\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"provider\": \"elevenlabs\",\n \"providers\": {\n \"elevenlabs\": {\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n }\n }\n }\n },\n \"hash\": \"31f4e11b98ddb833f53a89ddcd4021b23f92551d22a24ad5d438e6c901140df1\",\n \"issues\": [],\n \"warnings\": [],\n \"legacyIssues\": []\n }\n}"}],"details":{"ok":true,"result":{"path":"/home/ubuntu/.openclaw/openclaw.json","exists":true,"raw":"{\n meta: {\n lastTouchedVersion: '2026.3.13',\n lastTouchedAt: '2026-03-15T23:17:49.868Z',\n },\n env: {\n OPENAI_API_KEY: '__OPENCLAW_REDACTED__',\n },\n wizard: {\n lastRunAt: '2026-03-15T22:40:03.597Z',\n lastRunVersion: '2026.3.13',\n lastRunCommand: 'doctor',\n lastRunMode: 'local',\n },\n diagnostics: {\n flags: [\n 'telegram.http',\n ],\n },\n browser: {\n executablePath: '/usr/bin/chromium-browser',\n headless: true,\n noSandbox: true,\n defaultProfile: 'openclaw',\n profiles: {\n openclaw: {\n cdpPort: 18800,\n cdpUrl: 'http://127.0.0.1:18800',\n color: '#FF4500',\n },\n },\n },\n auth: {\n profiles: {\n 'openai-codex:default': {\n provider: 'openai-codex',\n mode: 'oauth',\n },\n },\n },\n acp: {\n enabled: true,\n dispatch: {\n enabled: true,\n },\n backend: 'acpx',\n defaultAgent: 'codex',\n allowedAgents: [\n 'codex',\n 'gemini',\n 'deepseek-code',\n 'claude',\n 'claude-opus',\n 'kimi',\n 'clawrouter',\n ],\n maxConcurrentSessions: 8,\n },\n models: {\n mode: 'merge',\n providers: {\n 'custom-api-deepseek-com': {\n baseUrl: 'https://api.deepseek.com',\n apiKey: '__OPENCLAW_REDACTED__',\n api: 'openai-completions',\n models: [\n {\n id: 'deepseek-chat',\n name: 'deepseek-chat (Custom Provider)',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 16000,\n maxTokens: 4096,\n },\n ],\n },\n blockrun: {\n baseUrl: 'http://127.0.0.1:8402/v1',\n apiKey: '__OPENCLAW_REDACTED__',\n api: 'openai-completions',\n models: [\n {\n id: 'auto',\n name: 'Auto (Smart Router - Balanced)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 128000,\n },\n {\n id: 'free',\n name: 'Free (NVIDIA GPT-OSS-120B only)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 4096,\n },\n {\n id: 'eco',\n name: 'Eco (Smart Router - Cost Optimized)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 128000,\n },\n {\n id: 'premium',\n name: 'Premium (Smart Router - Best Quality)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 2000000,\n maxTokens: 200000,\n },\n {\n id: 'openai/gpt-5.2',\n name: 'GPT-5.2',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1.75,\n output: 14,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'openai/gpt-5-mini',\n name: 'GPT-5 Mini',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.25,\n output: 2,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 65536,\n },\n {\n id: 'openai/gpt-5-nano',\n name: 'GPT-5 Nano',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.05,\n output: 0.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 32768,\n },\n {\n id: 'openai/gpt-5.2-pro',\n name: 'GPT-5.2 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 21,\n output: 168,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'openai/gpt-5.4',\n name: 'GPT-5.4',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'openai/gpt-5.4-pro',\n name: 'GPT-5.4 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 30,\n output: 180,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'openai/gpt-5.3',\n name: 'GPT-5.3',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1.75,\n output: 14,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16000,\n },\n {\n id: 'openai/gpt-5.3-codex',\n name: 'GPT-5.3 Codex',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 1.75,\n output: 14,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'openai/gpt-4.1',\n name: 'GPT-4.1',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 8,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'openai/gpt-4.1-mini',\n name: 'GPT-4.1 Mini',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.4,\n output: 1.6,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'openai/gpt-4.1-nano',\n name: 'GPT-4.1 Nano',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.1,\n output: 0.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'openai/gpt-4o',\n name: 'GPT-4o',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'openai/gpt-4o-mini',\n name: 'GPT-4o Mini',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.15,\n output: 0.6,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'openai/o1',\n name: 'o1',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 15,\n output: 60,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 100000,\n },\n {\n id: 'openai/o1-mini',\n name: 'o1-mini',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 1.1,\n output: 4.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 65536,\n },\n {\n id: 'openai/o3',\n name: 'o3',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 2,\n output: 8,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 100000,\n },\n {\n id: 'openai/o3-mini',\n name: 'o3-mini',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 1.1,\n output: 4.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 65536,\n },\n {\n id: 'openai/o4-mini',\n name: 'o4-mini',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 1.1,\n output: 4.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 65536,\n },\n {\n id: 'anthropic/claude-haiku-4.5',\n name: 'Claude Haiku 4.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1,\n output: 5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n {\n id: 'anthropic/claude-sonnet-4.6',\n name: 'Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'anthropic/claude-opus-4.6',\n name: 'Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'google/gemini-3.1-pro',\n name: 'Gemini 3.1 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 12,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-3-pro-preview',\n name: 'Gemini 3 Pro Preview',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 12,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-3-flash-preview',\n name: 'Gemini 3 Flash Preview',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.5,\n output: 3,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1000000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-2.5-pro',\n name: 'Gemini 2.5 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1.25,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-2.5-flash',\n name: 'Gemini 2.5 Flash',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.3,\n output: 2.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1000000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-2.5-flash-lite',\n name: 'Gemini 2.5 Flash Lite',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.1,\n output: 0.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1000000,\n maxTokens: 65536,\n },\n {\n id: 'deepseek/deepseek-chat',\n name: 'DeepSeek V3.2 Chat',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.28,\n output: 0.42,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 8192,\n },\n {\n id: 'deepseek/deepseek-reasoner',\n name: 'DeepSeek V3.2 Reasoner',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.28,\n output: 0.42,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 8192,\n },\n {\n id: 'moonshot/kimi-k2.5',\n name: 'Kimi K2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.6,\n output: 3,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 262144,\n maxTokens: 8192,\n },\n {\n id: 'xai/grok-3',\n name: 'Grok 3',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-3-mini',\n name: 'Grok 3 Mini',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.3,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-4-fast-reasoning',\n name: 'Grok 4 Fast Reasoning',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-4-fast-non-reasoning',\n name: 'Grok 4 Fast',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-4-1-fast-reasoning',\n name: 'Grok 4.1 Fast Reasoning',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-4-1-fast-non-reasoning',\n name: 'Grok 4.1 Fast',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-4-0709',\n name: 'Grok 4 (0709)',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 1.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-2-vision',\n name: 'Grok 2 Vision',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'minimax/minimax-m2.5',\n name: 'MiniMax M2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.3,\n output: 1.2,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 204800,\n maxTokens: 16384,\n },\n {\n id: 'nvidia/gpt-oss-120b',\n name: 'NVIDIA GPT-OSS 120B',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'nvidia/kimi-k2.5',\n name: 'NVIDIA Kimi K2.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.55,\n output: 2.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 262144,\n maxTokens: 16384,\n },\n {\n id: 'claude',\n name: 'claude → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'sonnet',\n name: 'sonnet → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'sonnet-4',\n name: 'sonnet-4 → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'sonnet-4.6',\n name: 'sonnet-4.6 → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'sonnet-4-6',\n name: 'sonnet-4-6 → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'opus',\n name: 'opus → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'opus-4',\n name: 'opus-4 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'opus-4.6',\n name: 'opus-4.6 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'opus-4-6',\n name: 'opus-4-6 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'haiku',\n name: 'haiku → Claude Haiku 4.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1,\n output: 5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n {\n id: 'anthropic/sonnet',\n name: 'anthropic/sonnet → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'anthropic/opus',\n name: 'anthropic/opus → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'anthropic/haiku',\n name: 'anthropic/haiku → Claude Haiku 4.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1,\n output: 5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n {\n id: 'anthropic/claude',\n name: 'anthropic/claude → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'anthropic/claude-sonnet-4',\n name: 'anthropic/claude-sonnet-4 → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'anthropic/claude-sonnet-4-6',\n name: 'anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'anthropic/claude-opus-4',\n name: 'anthropic/claude-opus-4 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'anthropic/claude-opus-4-6',\n name: 'anthropic/claude-opus-4-6 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'anthropic/claude-opus-4.5',\n name: 'anthropic/claude-opus-4.5 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'anthropic/claude-haiku-4',\n name: 'anthropic/claude-haiku-4 → Claude Haiku 4.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1,\n output: 5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n {\n id: 'anthropic/claude-haiku-4-5',\n name: 'anthropic/claude-haiku-4-5 → Claude Haiku 4.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1,\n output: 5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n {\n id: 'gpt',\n name: 'gpt → GPT-4o',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'gpt4',\n name: 'gpt4 → GPT-4o',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'gpt5',\n name: 'gpt5 → GPT-5.4',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'gpt-5.4',\n name: 'gpt-5.4 → GPT-5.4',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'gpt-5.4-pro',\n name: 'gpt-5.4-pro → GPT-5.4 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 30,\n output: 180,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'codex',\n name: 'codex → GPT-5.3 Codex',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 1.75,\n output: 14,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'mini',\n name: 'mini → GPT-4o Mini',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.15,\n output: 0.6,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'o1',\n name: 'o1 → o1',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 15,\n output: 60,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 100000,\n },\n {\n id: 'o3',\n name: 'o3 → o3',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 2,\n output: 8,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 100000,\n },\n {\n id: 'deepseek',\n name: 'deepseek → DeepSeek V3.2 Chat',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.28,\n output: 0.42,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 8192,\n },\n {\n id: 'reasoner',\n name: 'reasoner → DeepSeek V3.2 Reasoner',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.28,\n output: 0.42,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 8192,\n },\n {\n id: 'kimi',\n name: 'kimi → Kimi K2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.6,\n output: 3,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 262144,\n maxTokens: 8192,\n },\n {\n id: 'moonshot',\n name: 'moonshot → Kimi K2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.6,\n output: 3,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 262144,\n maxTokens: 8192,\n },\n {\n id: 'kimi-k2.5',\n name: 'kimi-k2.5 → Kimi K2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.6,\n output: 3,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 262144,\n maxTokens: 8192,\n },\n {\n id: 'gemini',\n name: 'gemini → Gemini 2.5 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1.25,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'flash',\n name: 'flash → Gemini 2.5 Flash',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.3,\n output: 2.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1000000,\n maxTokens: 65536,\n },\n {\n id: 'gemini-3.1-pro-preview',\n name: 'gemini-3.1-pro-preview → Gemini 3.1 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 12,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-3.1-pro-preview',\n name: 'google/gemini-3.1-pro-preview → Gemini 3.1 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 12,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'grok',\n name: 'grok → Grok 3',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'grok-fast',\n name: 'grok-fast → Grok 4 Fast Reasoning',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'grok-code',\n name: 'grok-code → DeepSeek V3.2 Chat',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.28,\n output: 0.42,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 8192,\n },\n {\n id: 'nvidia',\n name: 'nvidia → NVIDIA GPT-OSS 120B',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'gpt-120b',\n name: 'gpt-120b → NVIDIA GPT-OSS 120B',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'minimax',\n name: 'minimax → MiniMax M2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.3,\n output: 1.2,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 204800,\n maxTokens: 16384,\n },\n {\n id: 'auto-router',\n name: 'auto-router → Auto (Smart Router - Balanced)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 128000,\n },\n {\n id: 'router',\n name: 'router → Auto (Smart Router - Balanced)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 128000,\n },\n ],\n },\n 'custom-api-moonshot-ai': {\n baseUrl: 'https://api.moonshot.ai/v1',\n apiKey: '__OPENCLAW_REDACTED__',\n api: 'openai-completions',\n models: [\n {\n id: 'kimi-k2.5',\n name: 'Kimi K2.5 (Moonshot)',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n ],\n },\n },\n },\n agents: {\n defaults: {\n model: {\n primary: 'blockrun/auto',\n fallbacks: [\n 'custom-api-deepseek-com/deepseek-chat',\n ],\n },\n models: {\n 'blockrun/auto': {},\n 'openrouter/anthropic/claude-sonnet-4-6': {\n alias: 'claude',\n },\n 'openai-codex/gpt-5.1': {\n alias: 'codex-chat',\n },\n 'openai-codex/gpt-5.3-codex-spark': {\n alias: 'codex-spark',\n },\n 'openai-codex/gpt-5.3-codex': {\n alias: 'codex-max',\n },\n 'openai-codex/gpt-5.4': {\n alias: 'gpt-5.4',\n },\n 'custom-api-deepseek-com/deepseek-chat': {\n alias: 'deepseek',\n },\n 'claude-sonnet-cli/default': {\n alias: 'claude-sonnet',\n },\n 'claude-opus-cli/default': {\n alias: 'claude-opus',\n },\n 'blockrun/free': {},\n 'blockrun/eco': {},\n 'blockrun/premium': {},\n 'blockrun/anthropic/claude-sonnet-4.6': {},\n 'blockrun/anthropic/claude-opus-4.6': {},\n 'blockrun/anthropic/claude-haiku-4.5': {},\n 'blockrun/openai/gpt-5.2': {},\n 'blockrun/openai/gpt-4o': {},\n 'blockrun/openai/o3': {},\n 'blockrun/google/gemini-3.1-pro': {},\n 'blockrun/google/gemini-3-flash-preview': {},\n 'blockrun/deepseek/deepseek-chat': {},\n 'blockrun/moonshot/kimi-k2.5': {},\n 'blockrun/xai/grok-3': {},\n 'blockrun/minimax/minimax-m2.5': {},\n 'openrouter/openrouter/free': {},\n 'custom-api-moonshot-ai/kimi-k2.5': {\n alias: 'kimi',\n },\n 'clawrouter/auto': {\n alias: 'clawrouter',\n },\n 'openrouter/openrouter/auto': {},\n 'blockrun/openai/gpt-5.3': {},\n },\n workspace: '/home/ubuntu/.openclaw/workspace',\n cliBackends: {\n 'codex-cli': {\n command: '/home/linuxbrew/.linuxbrew/bin/codex',\n args: [\n 'exec',\n '--json',\n '--color',\n 'never',\n '--sandbox',\n 'read-only',\n '--skip-git-repo-check',\n ],\n output: 'jsonl',\n },\n 'gemini-cli': {\n command: '/home/ubuntu/.local/bin/gemini-cli-openclaw',\n output: 'text',\n },\n 'deepseek-code': {\n command: '/home/ubuntu/.local/bin/deepseek-code-openclaw',\n output: 'text',\n },\n 'claude-sonnet-cli': {\n command: '/home/ubuntu/.local/bin/claude-sonnet-openclaw',\n output: 'text',\n },\n 'claude-opus-cli': {\n command: '/home/ubuntu/.local/bin/claude-opus-openclaw',\n output: 'text',\n },\n 'kimi-cli': {\n command: '/home/ubuntu/.local/bin/kimi-openclaw',\n output: 'text',\n },\n },\n compaction: {\n mode: 'safeguard',\n },\n elevatedDefault: 'off',\n maxConcurrent: 1,\n subagents: {\n maxConcurrent: 4,\n },\n },\n list: [\n {\n id: 'pipo',\n name: 'pipo',\n workspace: '/home/ubuntu/.openclaw/workspace',\n model: {\n primary: 'openai-codex/gpt-5.4',\n fallbacks: [\n 'blockrun/auto',\n 'openrouter/openrouter/free',\n ],\n },\n subagents: {\n allowAgents: [\n 'codex',\n 'gemini',\n 'claude',\n 'deepseek-code',\n 'kimi',\n 'clawrouter',\n 'openrouter',\n ],\n },\n },\n {\n id: 'codex',\n name: 'codex',\n workspace: '/home/ubuntu/.openclaw/workspace-codex',\n agentDir: '/home/ubuntu/.openclaw/agents/codex/agent',\n model: 'openai-codex/gpt-5.3-codex',\n },\n {\n id: 'gemini',\n name: 'gemini',\n workspace: '/home/ubuntu/.openclaw/workspace-gemini',\n agentDir: '/home/ubuntu/.openclaw/agents/gemini/agent',\n model: 'gemini-cli/default',\n },\n {\n id: 'deepseek-code',\n name: 'deepseek-code',\n workspace: '/home/ubuntu/.openclaw/workspace-deepseek-code',\n agentDir: '/home/ubuntu/.openclaw/agents/deepseek-code/agent',\n model: 'deepseek-code/default',\n },\n {\n id: 'claude',\n name: 'claude',\n workspace: '/home/ubuntu/.openclaw/workspace-claude',\n agentDir: '/home/ubuntu/.openclaw/agents/claude/agent',\n model: 'claude-sonnet-cli/default',\n },\n {\n id: 'claude-opus',\n name: 'claude-opus',\n workspace: '/home/ubuntu/.openclaw/workspace-claude-opus',\n agentDir: '/home/ubuntu/.openclaw/agents/claude-opus/agent',\n model: 'claude-opus-cli/default',\n },\n {\n id: 'kimi',\n name: 'kimi',\n workspace: '/home/ubuntu/.openclaw/workspace-kimi',\n agentDir: '/home/ubuntu/.openclaw/agents/kimi/agent',\n model: 'kimi-cli/default',\n },\n {\n id: 'clawrouter',\n name: 'ClawRouter',\n workspace: '/home/ubuntu/.openclaw/workspace',\n model: {\n primary: 'blockrun/auto',\n fallbacks: [\n 'openrouter/openrouter/free',\n ],\n },\n },\n {\n id: 'openrouter',\n name: 'OpenRouter',\n workspace: '/home/ubuntu/.openclaw/workspace-openrouter',\n agentDir: '/home/ubuntu/.openclaw/agents/openrouter/agent',\n model: {\n primary: 'openrouter/openrouter/auto',\n fallbacks: [\n 'openrouter/openrouter/free',\n ],\n },\n },\n ],\n },\n tools: {\n sessions: {\n visibility: 'all',\n },\n agentToAgent: {\n enabled: true,\n allow: [\n 'pipo',\n 'codex',\n 'gemini',\n 'deepseek-code',\n 'claude',\n 'claude-opus',\n 'kimi',\n 'clawrouter',\n ],\n },\n elevated: {\n enabled: true,\n allowFrom: {\n telegram: [\n 842987156,\n ],\n webchat: [],\n },\n },\n exec: {\n ask: 'off',\n },\n },\n messages: {\n ackReactionScope: 'group-mentions',\n },\n commands: {\n native: 'auto',\n nativeSkills: 'auto',\n restart: true,\n ownerDisplay: 'raw',\n },\n session: {\n dmScope: 'per-channel-peer',\n },\n hooks: {\n internal: {\n enabled: true,\n entries: {\n 'session-memory': {\n enabled: true,\n },\n 'bootstrap-extra-files': {\n enabled: true,\n },\n 'boot-md': {\n enabled: true,\n },\n },\n },\n },\n channels: {\n telegram: {\n enabled: true,\n dmPolicy: 'allowlist',\n botToken: '__OPENCLAW_REDACTED__',\n replyToMode: 'all',\n allowFrom: [\n 842987156,\n ],\n groupPolicy: 'allowlist',\n streaming: 'off',\n mediaMaxMb: 20,\n timeoutSeconds: 60,\n retry: {\n attempts: 6,\n minDelayMs: 1500,\n maxDelayMs: 90000,\n jitter: 0.1,\n },\n network: {\n autoSelectFamily: false,\n dnsResultOrder: 'ipv4first',\n },\n },\n },\n gateway: {\n port: 18789,\n mode: 'local',\n bind: 'loopback',\n controlUi: {\n allowedOrigins: [\n 'https://miopenclaw-vnic.tail9799d2.ts.net',\n 'https://miopenclaw-vnic.tail9799d2.ts.net/',\n 'http://127.0.0.1:18789',\n ],\n },\n auth: {\n mode: 'token',\n token: '__OPENCLAW_REDACTED__',\n },\n trustedProxies: [\n '127.0.0.1/32',\n '::1/128',\n ],\n tailscale: {\n mode: 'serve',\n resetOnExit: true,\n },\n },\n skills: {\n entries: {\n 'gh-issues': {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n 'nano-banana-pro': {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n notion: {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n 'openai-image-gen': {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n 'openai-whisper-api': {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n sag: {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n },\n },\n plugins: {\n allow: [\n 'telegram',\n 'acpx',\n 'clawrouter',\n ],\n entries: {\n 'qwen-portal-auth': {\n enabled: true,\n },\n acpx: {\n enabled: true,\n config: {\n permissionMode: 'approve-all',\n nonInteractivePermissions: 'fail',\n expectedVersion: 'any',\n command: '/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx',\n },\n },\n clawrouter: {\n enabled: true,\n },\n },\n installs: {\n clawrouter: {\n source: 'npm',\n spec: '@blockrun/clawrouter@latest',\n installPath: '/home/ubuntu/.openclaw/extensions/clawrouter',\n version: '0.12.43',\n resolvedName: '@blockrun/clawrouter',\n resolvedVersion: '0.12.43',\n resolvedSpec: '@blockrun/clawrouter@0.12.43',\n integrity: 'sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==',\n shasum: '3331382e1a46524bee73b8ffa83677950f5bbae5',\n resolvedAt: '2026-03-15T22:45:46.066Z',\n installedAt: '2026-03-15T22:46:43.662Z',\n },\n },\n },\n}","parsed":{"meta":{"lastTouchedVersion":"2026.3.13","lastTouchedAt":"2026-03-15T23:17:49.868Z"},"env":{"OPENAI_API_KEY":"__OPENCLAW_REDACTED__"},"wizard":{"lastRunAt":"2026-03-15T22:40:03.597Z","lastRunVersion":"2026.3.13","lastRunCommand":"doctor","lastRunMode":"local"},"diagnostics":{"flags":["telegram.http"]},"browser":{"executablePath":"/usr/bin/chromium-browser","headless":true,"noSandbox":true,"defaultProfile":"openclaw","profiles":{"openclaw":{"cdpPort":18800,"cdpUrl":"http://127.0.0.1:18800","color":"#FF4500"}}},"auth":{"profiles":{"openai-codex:default":{"provider":"openai-codex","mode":"oauth"}}},"acp":{"enabled":true,"dispatch":{"enabled":true},"backend":"acpx","defaultAgent":"codex","allowedAgents":["codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"],"maxConcurrentSessions":8},"models":{"mode":"merge","providers":{"custom-api-deepseek-com":{"baseUrl":"https://api.deepseek.com","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"deepseek-chat","name":"deepseek-chat (Custom Provider)","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":16000,"maxTokens":4096}]},"blockrun":{"baseUrl":"http://127.0.0.1:8402/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"auto","name":"Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"free","name":"Free (NVIDIA GPT-OSS-120B only)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":4096},{"id":"eco","name":"Eco (Smart Router - Cost Optimized)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"premium","name":"Premium (Smart Router - Best Quality)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":2000000,"maxTokens":200000},{"id":"openai/gpt-5.2","name":"GPT-5.2","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.25,"output":2,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":65536},{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.05,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":32768},{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":21,"output":168,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4","name":"GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.3","name":"GPT-5.3","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16000},{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-4.1","name":"GPT-4.1","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":1.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o","name":"GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o-mini","name":"GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/o1","name":"o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o1-mini","name":"o1-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o3","name":"o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o3-mini","name":"o3-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o4-mini","name":"o4-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"google/gemini-3.1-pro","name":"Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-pro-preview","name":"Gemini 3 Pro Preview","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"deepseek/deepseek-chat","name":"DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"deepseek/deepseek-reasoner","name":"DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"moonshot/kimi-k2.5","name":"Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"xai/grok-3","name":"Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-3-mini","name":"Grok 3 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-reasoning","name":"Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-non-reasoning","name":"Grok 4 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-reasoning","name":"Grok 4.1 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-non-reasoning","name":"Grok 4.1 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-0709","name":"Grok 4 (0709)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":1.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-2-vision","name":"Grok 2 Vision","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"nvidia/gpt-oss-120b","name":"NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"nvidia/kimi-k2.5","name":"NVIDIA Kimi K2.5","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.55,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":16384},{"id":"claude","name":"claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet","name":"sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4","name":"sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4.6","name":"sonnet-4.6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4-6","name":"sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"opus","name":"opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4","name":"opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4.6","name":"opus-4.6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4-6","name":"opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"haiku","name":"haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/sonnet","name":"anthropic/sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/opus","name":"anthropic/opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/haiku","name":"anthropic/haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude","name":"anthropic/claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4-6","name":"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4-6","name":"anthropic/claude-opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-haiku-4","name":"anthropic/claude-haiku-4 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-haiku-4-5","name":"anthropic/claude-haiku-4-5 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"gpt","name":"gpt → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt4","name":"gpt4 → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt5","name":"gpt5 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4","name":"gpt-5.4 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4-pro","name":"gpt-5.4-pro → GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"codex","name":"codex → GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"mini","name":"mini → GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"o1","name":"o1 → o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"o3","name":"o3 → o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"deepseek","name":"deepseek → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"reasoner","name":"reasoner → DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"kimi","name":"kimi → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"moonshot","name":"moonshot → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"kimi-k2.5","name":"kimi-k2.5 → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"gemini","name":"gemini → Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"flash","name":"flash → Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"gemini-3.1-pro-preview","name":"gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"grok","name":"grok → Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-fast","name":"grok-fast → Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-code","name":"grok-code → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"nvidia","name":"nvidia → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt-120b","name":"gpt-120b → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"minimax","name":"minimax → MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"auto-router","name":"auto-router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"router","name":"router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000}]},"custom-api-moonshot-ai":{"baseUrl":"https://api.moonshot.ai/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"kimi-k2.5","name":"Kimi K2.5 (Moonshot)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192}]}}},"agents":{"defaults":{"model":{"primary":"blockrun/auto","fallbacks":["custom-api-deepseek-com/deepseek-chat"]},"models":{"blockrun/auto":{},"openrouter/anthropic/claude-sonnet-4-6":{"alias":"claude"},"openai-codex/gpt-5.1":{"alias":"codex-chat"},"openai-codex/gpt-5.3-codex-spark":{"alias":"codex-spark"},"openai-codex/gpt-5.3-codex":{"alias":"codex-max"},"openai-codex/gpt-5.4":{"alias":"gpt-5.4"},"custom-api-deepseek-com/deepseek-chat":{"alias":"deepseek"},"claude-sonnet-cli/default":{"alias":"claude-sonnet"},"claude-opus-cli/default":{"alias":"claude-opus"},"blockrun/free":{},"blockrun/eco":{},"blockrun/premium":{},"blockrun/anthropic/claude-sonnet-4.6":{},"blockrun/anthropic/claude-opus-4.6":{},"blockrun/anthropic/claude-haiku-4.5":{},"blockrun/openai/gpt-5.2":{},"blockrun/openai/gpt-4o":{},"blockrun/openai/o3":{},"blockrun/google/gemini-3.1-pro":{},"blockrun/google/gemini-3-flash-preview":{},"blockrun/deepseek/deepseek-chat":{},"blockrun/moonshot/kimi-k2.5":{},"blockrun/xai/grok-3":{},"blockrun/minimax/minimax-m2.5":{},"openrouter/openrouter/free":{},"custom-api-moonshot-ai/kimi-k2.5":{"alias":"kimi"},"clawrouter/auto":{"alias":"clawrouter"},"openrouter/openrouter/auto":{},"blockrun/openai/gpt-5.3":{}},"workspace":"/home/ubuntu/.openclaw/workspace","cliBackends":{"codex-cli":{"command":"/home/linuxbrew/.linuxbrew/bin/codex","args":["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"],"output":"jsonl"},"gemini-cli":{"command":"/home/ubuntu/.local/bin/gemini-cli-openclaw","output":"text"},"deepseek-code":{"command":"/home/ubuntu/.local/bin/deepseek-code-openclaw","output":"text"},"claude-sonnet-cli":{"command":"/home/ubuntu/.local/bin/claude-sonnet-openclaw","output":"text"},"claude-opus-cli":{"command":"/home/ubuntu/.local/bin/claude-opus-openclaw","output":"text"},"kimi-cli":{"command":"/home/ubuntu/.local/bin/kimi-openclaw","output":"text"}},"compaction":{"mode":"safeguard"},"elevatedDefault":"off","maxConcurrent":1,"subagents":{"maxConcurrent":4}},"list":[{"id":"pipo","name":"pipo","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"openai-codex/gpt-5.4","fallbacks":["blockrun/auto","openrouter/openrouter/free"]},"subagents":{"allowAgents":["codex","gemini","claude","deepseek-code","kimi","clawrouter","openrouter"]}},{"id":"codex","name":"codex","workspace":"/home/ubuntu/.openclaw/workspace-codex","agentDir":"/home/ubuntu/.openclaw/agents/codex/agent","model":"openai-codex/gpt-5.3-codex"},{"id":"gemini","name":"gemini","workspace":"/home/ubuntu/.openclaw/workspace-gemini","agentDir":"/home/ubuntu/.openclaw/agents/gemini/agent","model":"gemini-cli/default"},{"id":"deepseek-code","name":"deepseek-code","workspace":"/home/ubuntu/.openclaw/workspace-deepseek-code","agentDir":"/home/ubuntu/.openclaw/agents/deepseek-code/agent","model":"deepseek-code/default"},{"id":"claude","name":"claude","workspace":"/home/ubuntu/.openclaw/workspace-claude","agentDir":"/home/ubuntu/.openclaw/agents/claude/agent","model":"claude-sonnet-cli/default"},{"id":"claude-opus","name":"claude-opus","workspace":"/home/ubuntu/.openclaw/workspace-claude-opus","agentDir":"/home/ubuntu/.openclaw/agents/claude-opus/agent","model":"claude-opus-cli/default"},{"id":"kimi","name":"kimi","workspace":"/home/ubuntu/.openclaw/workspace-kimi","agentDir":"/home/ubuntu/.openclaw/agents/kimi/agent","model":"kimi-cli/default"},{"id":"clawrouter","name":"ClawRouter","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"blockrun/auto","fallbacks":["openrouter/openrouter/free"]}},{"id":"openrouter","name":"OpenRouter","workspace":"/home/ubuntu/.openclaw/workspace-openrouter","agentDir":"/home/ubuntu/.openclaw/agents/openrouter/agent","model":{"primary":"openrouter/openrouter/auto","fallbacks":["openrouter/openrouter/free"]}}]},"tools":{"sessions":{"visibility":"all"},"agentToAgent":{"enabled":true,"allow":["pipo","codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"]},"elevated":{"enabled":true,"allowFrom":{"telegram":[842987156],"webchat":[]}},"exec":{"ask":"off"}},"messages":{"ackReactionScope":"group-mentions"},"commands":{"native":"auto","nativeSkills":"auto","restart":true,"ownerDisplay":"raw"},"session":{"dmScope":"per-channel-peer"},"hooks":{"internal":{"enabled":true,"entries":{"session-memory":{"enabled":true},"bootstrap-extra-files":{"enabled":true},"boot-md":{"enabled":true}}}},"channels":{"telegram":{"enabled":true,"dmPolicy":"allowlist","botToken":"__OPENCLAW_REDACTED__","replyToMode":"all","allowFrom":[842987156],"groupPolicy":"allowlist","streaming":"off","mediaMaxMb":20,"timeoutSeconds":60,"retry":{"attempts":6,"minDelayMs":1500,"maxDelayMs":90000,"jitter":0.1},"network":{"autoSelectFamily":false,"dnsResultOrder":"ipv4first"}}},"gateway":{"port":18789,"mode":"local","bind":"loopback","controlUi":{"allowedOrigins":["https://miopenclaw-vnic.tail9799d2.ts.net","https://miopenclaw-vnic.tail9799d2.ts.net/","http://127.0.0.1:18789"]},"auth":{"mode":"token","token":"__OPENCLAW_REDACTED__"},"trustedProxies":["127.0.0.1/32","::1/128"],"tailscale":{"mode":"serve","resetOnExit":true}},"skills":{"entries":{"gh-issues":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"nano-banana-pro":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"notion":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-image-gen":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-whisper-api":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"sag":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"}}},"plugins":{"allow":["telegram","acpx","clawrouter"],"entries":{"qwen-portal-auth":{"enabled":true},"acpx":{"enabled":true,"config":{"permissionMode":"approve-all","nonInteractivePermissions":"fail","expectedVersion":"any","command":"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx"}},"clawrouter":{"enabled":true}},"installs":{"clawrouter":{"source":"npm","spec":"@blockrun/clawrouter@latest","installPath":"/home/ubuntu/.openclaw/extensions/clawrouter","version":"0.12.43","resolvedName":"@blockrun/clawrouter","resolvedVersion":"0.12.43","resolvedSpec":"@blockrun/clawrouter@0.12.43","integrity":"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==","shasum":"3331382e1a46524bee73b8ffa83677950f5bbae5","resolvedAt":"2026-03-15T22:45:46.066Z","installedAt":"2026-03-15T22:46:43.662Z"}}}},"resolved":{"meta":{"lastTouchedVersion":"2026.3.13","lastTouchedAt":"2026-03-15T23:17:49.868Z"},"env":{"OPENAI_API_KEY":"__OPENCLAW_REDACTED__"},"wizard":{"lastRunAt":"2026-03-15T22:40:03.597Z","lastRunVersion":"2026.3.13","lastRunCommand":"doctor","lastRunMode":"local"},"diagnostics":{"flags":["telegram.http"]},"browser":{"executablePath":"/usr/bin/chromium-browser","headless":true,"noSandbox":true,"defaultProfile":"openclaw","profiles":{"openclaw":{"cdpPort":18800,"cdpUrl":"http://127.0.0.1:18800","color":"#FF4500"}}},"auth":{"profiles":{"openai-codex:default":{"provider":"openai-codex","mode":"oauth"}}},"acp":{"enabled":true,"dispatch":{"enabled":true},"backend":"acpx","defaultAgent":"codex","allowedAgents":["codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"],"maxConcurrentSessions":8},"models":{"mode":"merge","providers":{"custom-api-deepseek-com":{"baseUrl":"https://api.deepseek.com","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"deepseek-chat","name":"deepseek-chat (Custom Provider)","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":16000,"maxTokens":4096}]},"blockrun":{"baseUrl":"http://127.0.0.1:8402/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"auto","name":"Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"free","name":"Free (NVIDIA GPT-OSS-120B only)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":4096},{"id":"eco","name":"Eco (Smart Router - Cost Optimized)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"premium","name":"Premium (Smart Router - Best Quality)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":2000000,"maxTokens":200000},{"id":"openai/gpt-5.2","name":"GPT-5.2","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.25,"output":2,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":65536},{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.05,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":32768},{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":21,"output":168,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4","name":"GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.3","name":"GPT-5.3","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16000},{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-4.1","name":"GPT-4.1","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":1.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o","name":"GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o-mini","name":"GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/o1","name":"o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o1-mini","name":"o1-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o3","name":"o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o3-mini","name":"o3-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o4-mini","name":"o4-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"google/gemini-3.1-pro","name":"Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-pro-preview","name":"Gemini 3 Pro Preview","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"deepseek/deepseek-chat","name":"DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"deepseek/deepseek-reasoner","name":"DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"moonshot/kimi-k2.5","name":"Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"xai/grok-3","name":"Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-3-mini","name":"Grok 3 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-reasoning","name":"Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-non-reasoning","name":"Grok 4 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-reasoning","name":"Grok 4.1 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-non-reasoning","name":"Grok 4.1 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-0709","name":"Grok 4 (0709)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":1.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-2-vision","name":"Grok 2 Vision","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"nvidia/gpt-oss-120b","name":"NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"nvidia/kimi-k2.5","name":"NVIDIA Kimi K2.5","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.55,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":16384},{"id":"claude","name":"claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet","name":"sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4","name":"sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4.6","name":"sonnet-4.6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4-6","name":"sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"opus","name":"opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4","name":"opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4.6","name":"opus-4.6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4-6","name":"opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"haiku","name":"haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/sonnet","name":"anthropic/sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/opus","name":"anthropic/opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/haiku","name":"anthropic/haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude","name":"anthropic/claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4-6","name":"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4-6","name":"anthropic/claude-opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-haiku-4","name":"anthropic/claude-haiku-4 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-haiku-4-5","name":"anthropic/claude-haiku-4-5 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"gpt","name":"gpt → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt4","name":"gpt4 → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt5","name":"gpt5 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4","name":"gpt-5.4 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4-pro","name":"gpt-5.4-pro → GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"codex","name":"codex → GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"mini","name":"mini → GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"o1","name":"o1 → o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"o3","name":"o3 → o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"deepseek","name":"deepseek → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"reasoner","name":"reasoner → DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"kimi","name":"kimi → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"moonshot","name":"moonshot → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"kimi-k2.5","name":"kimi-k2.5 → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"gemini","name":"gemini → Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"flash","name":"flash → Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"gemini-3.1-pro-preview","name":"gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"grok","name":"grok → Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-fast","name":"grok-fast → Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-code","name":"grok-code → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"nvidia","name":"nvidia → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt-120b","name":"gpt-120b → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"minimax","name":"minimax → MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"auto-router","name":"auto-router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"router","name":"router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000}]},"custom-api-moonshot-ai":{"baseUrl":"https://api.moonshot.ai/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"kimi-k2.5","name":"Kimi K2.5 (Moonshot)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192}]}}},"agents":{"defaults":{"model":{"primary":"blockrun/auto","fallbacks":["custom-api-deepseek-com/deepseek-chat"]},"models":{"blockrun/auto":{},"openrouter/anthropic/claude-sonnet-4-6":{"alias":"claude"},"openai-codex/gpt-5.1":{"alias":"codex-chat"},"openai-codex/gpt-5.3-codex-spark":{"alias":"codex-spark"},"openai-codex/gpt-5.3-codex":{"alias":"codex-max"},"openai-codex/gpt-5.4":{"alias":"gpt-5.4"},"custom-api-deepseek-com/deepseek-chat":{"alias":"deepseek"},"claude-sonnet-cli/default":{"alias":"claude-sonnet"},"claude-opus-cli/default":{"alias":"claude-opus"},"blockrun/free":{},"blockrun/eco":{},"blockrun/premium":{},"blockrun/anthropic/claude-sonnet-4.6":{},"blockrun/anthropic/claude-opus-4.6":{},"blockrun/anthropic/claude-haiku-4.5":{},"blockrun/openai/gpt-5.2":{},"blockrun/openai/gpt-4o":{},"blockrun/openai/o3":{},"blockrun/google/gemini-3.1-pro":{},"blockrun/google/gemini-3-flash-preview":{},"blockrun/deepseek/deepseek-chat":{},"blockrun/moonshot/kimi-k2.5":{},"blockrun/xai/grok-3":{},"blockrun/minimax/minimax-m2.5":{},"openrouter/openrouter/free":{},"custom-api-moonshot-ai/kimi-k2.5":{"alias":"kimi"},"clawrouter/auto":{"alias":"clawrouter"},"openrouter/openrouter/auto":{},"blockrun/openai/gpt-5.3":{}},"workspace":"/home/ubuntu/.openclaw/workspace","cliBackends":{"codex-cli":{"command":"/home/linuxbrew/.linuxbrew/bin/codex","args":["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"],"output":"jsonl"},"gemini-cli":{"command":"/home/ubuntu/.local/bin/gemini-cli-openclaw","output":"text"},"deepseek-code":{"command":"/home/ubuntu/.local/bin/deepseek-code-openclaw","output":"text"},"claude-sonnet-cli":{"command":"/home/ubuntu/.local/bin/claude-sonnet-openclaw","output":"text"},"claude-opus-cli":{"command":"/home/ubuntu/.local/bin/claude-opus-openclaw","output":"text"},"kimi-cli":{"command":"/home/ubuntu/.local/bin/kimi-openclaw","output":"text"}},"compaction":{"mode":"safeguard"},"elevatedDefault":"off","maxConcurrent":1,"subagents":{"maxConcurrent":4}},"list":[{"id":"pipo","name":"pipo","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"openai-codex/gpt-5.4","fallbacks":["blockrun/auto","openrouter/openrouter/free"]},"subagents":{"allowAgents":["codex","gemini","claude","deepseek-code","kimi","clawrouter","openrouter"]}},{"id":"codex","name":"codex","workspace":"/home/ubuntu/.openclaw/workspace-codex","agentDir":"/home/ubuntu/.openclaw/agents/codex/agent","model":"openai-codex/gpt-5.3-codex"},{"id":"gemini","name":"gemini","workspace":"/home/ubuntu/.openclaw/workspace-gemini","agentDir":"/home/ubuntu/.openclaw/agents/gemini/agent","model":"gemini-cli/default"},{"id":"deepseek-code","name":"deepseek-code","workspace":"/home/ubuntu/.openclaw/workspace-deepseek-code","agentDir":"/home/ubuntu/.openclaw/agents/deepseek-code/agent","model":"deepseek-code/default"},{"id":"claude","name":"claude","workspace":"/home/ubuntu/.openclaw/workspace-claude","agentDir":"/home/ubuntu/.openclaw/agents/claude/agent","model":"claude-sonnet-cli/default"},{"id":"claude-opus","name":"claude-opus","workspace":"/home/ubuntu/.openclaw/workspace-claude-opus","agentDir":"/home/ubuntu/.openclaw/agents/claude-opus/agent","model":"claude-opus-cli/default"},{"id":"kimi","name":"kimi","workspace":"/home/ubuntu/.openclaw/workspace-kimi","agentDir":"/home/ubuntu/.openclaw/agents/kimi/agent","model":"kimi-cli/default"},{"id":"clawrouter","name":"ClawRouter","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"blockrun/auto","fallbacks":["openrouter/openrouter/free"]}},{"id":"openrouter","name":"OpenRouter","workspace":"/home/ubuntu/.openclaw/workspace-openrouter","agentDir":"/home/ubuntu/.openclaw/agents/openrouter/agent","model":{"primary":"openrouter/openrouter/auto","fallbacks":["openrouter/openrouter/free"]}}]},"tools":{"sessions":{"visibility":"all"},"agentToAgent":{"enabled":true,"allow":["pipo","codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"]},"elevated":{"enabled":true,"allowFrom":{"telegram":[842987156],"webchat":[]}},"exec":{"ask":"off"}},"messages":{"ackReactionScope":"group-mentions"},"commands":{"native":"auto","nativeSkills":"auto","restart":true,"ownerDisplay":"raw"},"session":{"dmScope":"per-channel-peer"},"hooks":{"internal":{"enabled":true,"entries":{"session-memory":{"enabled":true},"bootstrap-extra-files":{"enabled":true},"boot-md":{"enabled":true}}}},"channels":{"telegram":{"enabled":true,"dmPolicy":"allowlist","botToken":"__OPENCLAW_REDACTED__","replyToMode":"all","allowFrom":[842987156],"groupPolicy":"allowlist","streaming":"off","mediaMaxMb":20,"timeoutSeconds":60,"retry":{"attempts":6,"minDelayMs":1500,"maxDelayMs":90000,"jitter":0.1},"network":{"autoSelectFamily":false,"dnsResultOrder":"ipv4first"}}},"gateway":{"port":18789,"mode":"local","bind":"loopback","controlUi":{"allowedOrigins":["https://miopenclaw-vnic.tail9799d2.ts.net","https://miopenclaw-vnic.tail9799d2.ts.net/","http://127.0.0.1:18789"]},"auth":{"mode":"token","token":"__OPENCLAW_REDACTED__"},"trustedProxies":["127.0.0.1/32","::1/128"],"tailscale":{"mode":"serve","resetOnExit":true}},"skills":{"entries":{"gh-issues":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"nano-banana-pro":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"notion":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-image-gen":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-whisper-api":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"sag":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"}}},"plugins":{"allow":["telegram","acpx","clawrouter"],"entries":{"qwen-portal-auth":{"enabled":true},"acpx":{"enabled":true,"config":{"permissionMode":"approve-all","nonInteractivePermissions":"fail","expectedVersion":"any","command":"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx"}},"clawrouter":{"enabled":true}},"installs":{"clawrouter":{"source":"npm","spec":"@blockrun/clawrouter@latest","installPath":"/home/ubuntu/.openclaw/extensions/clawrouter","version":"0.12.43","resolvedName":"@blockrun/clawrouter","resolvedVersion":"0.12.43","resolvedSpec":"@blockrun/clawrouter@0.12.43","integrity":"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==","shasum":"3331382e1a46524bee73b8ffa83677950f5bbae5","resolvedAt":"2026-03-15T22:45:46.066Z","installedAt":"2026-03-15T22:46:43.662Z"}}}},"valid":true,"config":{"meta":{"lastTouchedVersion":"2026.3.13","lastTouchedAt":"2026-03-15T23:17:49.868Z"},"env":{"OPENAI_API_KEY":"__OPENCLAW_REDACTED__"},"wizard":{"lastRunAt":"2026-03-15T22:40:03.597Z","lastRunVersion":"2026.3.13","lastRunCommand":"doctor","lastRunMode":"local"},"diagnostics":{"flags":["telegram.http"]},"browser":{"executablePath":"/usr/bin/chromium-browser","headless":true,"noSandbox":true,"defaultProfile":"openclaw","profiles":{"openclaw":{"cdpPort":18800,"cdpUrl":"http://127.0.0.1:18800","color":"#FF4500"}}},"auth":{"profiles":{"openai-codex:default":{"provider":"openai-codex","mode":"oauth"}}},"acp":{"enabled":true,"dispatch":{"enabled":true},"backend":"acpx","defaultAgent":"codex","allowedAgents":["codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"],"maxConcurrentSessions":8},"models":{"mode":"merge","providers":{"custom-api-deepseek-com":{"baseUrl":"https://api.deepseek.com","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"deepseek-chat","name":"deepseek-chat (Custom Provider)","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":16000,"maxTokens":4096,"api":"openai-completions"}]},"blockrun":{"baseUrl":"http://127.0.0.1:8402/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"auto","name":"Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"free","name":"Free (NVIDIA GPT-OSS-120B only)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":4096},{"id":"eco","name":"Eco (Smart Router - Cost Optimized)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"premium","name":"Premium (Smart Router - Best Quality)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":2000000,"maxTokens":200000},{"id":"openai/gpt-5.2","name":"GPT-5.2","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.25,"output":2,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":65536},{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.05,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":32768},{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":21,"output":168,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4","name":"GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.3","name":"GPT-5.3","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16000},{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-4.1","name":"GPT-4.1","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":1.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o","name":"GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o-mini","name":"GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/o1","name":"o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o1-mini","name":"o1-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o3","name":"o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o3-mini","name":"o3-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o4-mini","name":"o4-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"google/gemini-3.1-pro","name":"Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-pro-preview","name":"Gemini 3 Pro Preview","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"deepseek/deepseek-chat","name":"DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"deepseek/deepseek-reasoner","name":"DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"moonshot/kimi-k2.5","name":"Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"xai/grok-3","name":"Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-3-mini","name":"Grok 3 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-reasoning","name":"Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-non-reasoning","name":"Grok 4 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-reasoning","name":"Grok 4.1 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-non-reasoning","name":"Grok 4.1 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-0709","name":"Grok 4 (0709)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":1.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-2-vision","name":"Grok 2 Vision","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"nvidia/gpt-oss-120b","name":"NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"nvidia/kimi-k2.5","name":"NVIDIA Kimi K2.5","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.55,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":16384},{"id":"claude","name":"claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet","name":"sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4","name":"sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4.6","name":"sonnet-4.6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4-6","name":"sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"opus","name":"opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4","name":"opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4.6","name":"opus-4.6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4-6","name":"opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"haiku","name":"haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/sonnet","name":"anthropic/sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/opus","name":"anthropic/opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/haiku","name":"anthropic/haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude","name":"anthropic/claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4-6","name":"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4-6","name":"anthropic/claude-opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-haiku-4","name":"anthropic/claude-haiku-4 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-haiku-4-5","name":"anthropic/claude-haiku-4-5 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"gpt","name":"gpt → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt4","name":"gpt4 → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt5","name":"gpt5 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4","name":"gpt-5.4 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4-pro","name":"gpt-5.4-pro → GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"codex","name":"codex → GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"mini","name":"mini → GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"o1","name":"o1 → o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"o3","name":"o3 → o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"deepseek","name":"deepseek → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"reasoner","name":"reasoner → DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"kimi","name":"kimi → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"moonshot","name":"moonshot → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"kimi-k2.5","name":"kimi-k2.5 → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"gemini","name":"gemini → Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"flash","name":"flash → Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"gemini-3.1-pro-preview","name":"gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"grok","name":"grok → Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-fast","name":"grok-fast → Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-code","name":"grok-code → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"nvidia","name":"nvidia → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt-120b","name":"gpt-120b → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"minimax","name":"minimax → MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"auto-router","name":"auto-router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"router","name":"router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000}]},"custom-api-moonshot-ai":{"baseUrl":"https://api.moonshot.ai/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"kimi-k2.5","name":"Kimi K2.5 (Moonshot)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192}]}}},"agents":{"defaults":{"model":{"primary":"blockrun/auto","fallbacks":["custom-api-deepseek-com/deepseek-chat"]},"models":{"blockrun/auto":{},"openrouter/anthropic/claude-sonnet-4-6":{"alias":"claude"},"openai-codex/gpt-5.1":{"alias":"codex-chat"},"openai-codex/gpt-5.3-codex-spark":{"alias":"codex-spark"},"openai-codex/gpt-5.3-codex":{"alias":"codex-max"},"openai-codex/gpt-5.4":{"alias":"gpt-5.4"},"custom-api-deepseek-com/deepseek-chat":{"alias":"deepseek"},"claude-sonnet-cli/default":{"alias":"claude-sonnet"},"claude-opus-cli/default":{"alias":"claude-opus"},"blockrun/free":{},"blockrun/eco":{},"blockrun/premium":{},"blockrun/anthropic/claude-sonnet-4.6":{},"blockrun/anthropic/claude-opus-4.6":{},"blockrun/anthropic/claude-haiku-4.5":{},"blockrun/openai/gpt-5.2":{},"blockrun/openai/gpt-4o":{},"blockrun/openai/o3":{},"blockrun/google/gemini-3.1-pro":{},"blockrun/google/gemini-3-flash-preview":{},"blockrun/deepseek/deepseek-chat":{},"blockrun/moonshot/kimi-k2.5":{},"blockrun/xai/grok-3":{},"blockrun/minimax/minimax-m2.5":{},"openrouter/openrouter/free":{},"custom-api-moonshot-ai/kimi-k2.5":{"alias":"kimi"},"clawrouter/auto":{"alias":"clawrouter"},"openrouter/openrouter/auto":{},"blockrun/openai/gpt-5.3":{}},"workspace":"/home/ubuntu/.openclaw/workspace","cliBackends":{"codex-cli":{"command":"/home/linuxbrew/.linuxbrew/bin/codex","args":["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"],"output":"jsonl"},"gemini-cli":{"command":"/home/ubuntu/.local/bin/gemini-cli-openclaw","output":"text"},"deepseek-code":{"command":"/home/ubuntu/.local/bin/deepseek-code-openclaw","output":"text"},"claude-sonnet-cli":{"command":"/home/ubuntu/.local/bin/claude-sonnet-openclaw","output":"text"},"claude-opus-cli":{"command":"/home/ubuntu/.local/bin/claude-opus-openclaw","output":"text"},"kimi-cli":{"command":"/home/ubuntu/.local/bin/kimi-openclaw","output":"text"}},"compaction":{"mode":"safeguard"},"elevatedDefault":"off","maxConcurrent":1,"subagents":{"maxConcurrent":4}},"list":[{"id":"pipo","name":"pipo","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"openai-codex/gpt-5.4","fallbacks":["blockrun/auto","openrouter/openrouter/free"]},"subagents":{"allowAgents":["codex","gemini","claude","deepseek-code","kimi","clawrouter","openrouter"]}},{"id":"codex","name":"codex","workspace":"/home/ubuntu/.openclaw/workspace-codex","agentDir":"/home/ubuntu/.openclaw/agents/codex/agent","model":"openai-codex/gpt-5.3-codex"},{"id":"gemini","name":"gemini","workspace":"/home/ubuntu/.openclaw/workspace-gemini","agentDir":"/home/ubuntu/.openclaw/agents/gemini/agent","model":"gemini-cli/default"},{"id":"deepseek-code","name":"deepseek-code","workspace":"/home/ubuntu/.openclaw/workspace-deepseek-code","agentDir":"/home/ubuntu/.openclaw/agents/deepseek-code/agent","model":"deepseek-code/default"},{"id":"claude","name":"claude","workspace":"/home/ubuntu/.openclaw/workspace-claude","agentDir":"/home/ubuntu/.openclaw/agents/claude/agent","model":"claude-sonnet-cli/default"},{"id":"claude-opus","name":"claude-opus","workspace":"/home/ubuntu/.openclaw/workspace-claude-opus","agentDir":"/home/ubuntu/.openclaw/agents/claude-opus/agent","model":"claude-opus-cli/default"},{"id":"kimi","name":"kimi","workspace":"/home/ubuntu/.openclaw/workspace-kimi","agentDir":"/home/ubuntu/.openclaw/agents/kimi/agent","model":"kimi-cli/default"},{"id":"clawrouter","name":"ClawRouter","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"blockrun/auto","fallbacks":["openrouter/openrouter/free"]}},{"id":"openrouter","name":"OpenRouter","workspace":"/home/ubuntu/.openclaw/workspace-openrouter","agentDir":"/home/ubuntu/.openclaw/agents/openrouter/agent","model":{"primary":"openrouter/openrouter/auto","fallbacks":["openrouter/openrouter/free"]}}]},"tools":{"sessions":{"visibility":"all"},"agentToAgent":{"enabled":true,"allow":["pipo","codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"]},"elevated":{"enabled":true,"allowFrom":{"telegram":[842987156],"webchat":[]}},"exec":{"ask":"off"}},"messages":{"ackReactionScope":"group-mentions"},"commands":{"native":"auto","nativeSkills":"auto","restart":true,"ownerDisplay":"raw"},"session":{"dmScope":"per-channel-peer"},"hooks":{"internal":{"enabled":true,"entries":{"session-memory":{"enabled":true},"bootstrap-extra-files":{"enabled":true},"boot-md":{"enabled":true}}}},"channels":{"telegram":{"enabled":true,"dmPolicy":"allowlist","botToken":"__OPENCLAW_REDACTED__","replyToMode":"all","allowFrom":[842987156],"groupPolicy":"allowlist","streaming":"off","mediaMaxMb":20,"timeoutSeconds":60,"retry":{"attempts":6,"minDelayMs":1500,"maxDelayMs":90000,"jitter":0.1},"network":{"autoSelectFamily":false,"dnsResultOrder":"ipv4first"}}},"gateway":{"port":18789,"mode":"local","bind":"loopback","controlUi":{"allowedOrigins":["https://miopenclaw-vnic.tail9799d2.ts.net","https://miopenclaw-vnic.tail9799d2.ts.net/","http://127.0.0.1:18789"]},"auth":{"mode":"token","token":"__OPENCLAW_REDACTED__"},"trustedProxies":["127.0.0.1/32","::1/128"],"tailscale":{"mode":"serve","resetOnExit":true}},"skills":{"entries":{"gh-issues":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"nano-banana-pro":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"notion":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-image-gen":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-whisper-api":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"sag":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"}}},"plugins":{"allow":["telegram","acpx","clawrouter"],"entries":{"qwen-portal-auth":{"enabled":true},"acpx":{"enabled":true,"config":{"permissionMode":"approve-all","nonInteractivePermissions":"fail","expectedVersion":"any","command":"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx"}},"clawrouter":{"enabled":true}},"installs":{"clawrouter":{"source":"npm","spec":"@blockrun/clawrouter@latest","installPath":"/home/ubuntu/.openclaw/extensions/clawrouter","version":"0.12.43","resolvedName":"@blockrun/clawrouter","resolvedVersion":"0.12.43","resolvedSpec":"@blockrun/clawrouter@0.12.43","integrity":"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==","shasum":"3331382e1a46524bee73b8ffa83677950f5bbae5","resolvedAt":"2026-03-15T22:45:46.066Z","installedAt":"2026-03-15T22:46:43.662Z"}}},"talk":{"apiKey":"__OPENCLAW_REDACTED__","provider":"elevenlabs","providers":{"elevenlabs":{"apiKey":"__OPENCLAW_REDACTED__"}}}},"hash":"31f4e11b98ddb833f53a89ddcd4021b23f92551d22a24ad5d438e6c901140df1","issues":[],"warnings":[],"legacyIssues":[]}},"isError":false,"timestamp":1773622550329}} {"type":"message","id":"50cb702f","parentId":"bd6df029","timestamp":"2026-03-16T00:56:10.583Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Investigating tools configuration**\n\nI'm looking into the tools configuration for agents since I didn't find any under agents. I think a schema lookup could help, maybe checking the path \"agents.defaults\" or using \"agents.list\". I tried \"agents.list\" but encountered an error. I should also look up \"agents.defaults.toolPolicy\" and check \"plugins.installs\" or \"plugins.entries.clawrouter\" for more insights. Let's see if those work!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7551988dc81909e4ca9349ebb3864\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1UoGdIBvlhzf-fj3p4PaIX7eRG1OLW2ys5mavKKYwn0kyEz0hLVQmz2zXO1WIhT8HPuirOYr-xHJ9hTO9KBawuZZQfOXTjrJ3K75joiQmo3esl5iln6WfydoXeLYMHlOKlQT6hsFGbRurTq6CYj2dC47_kOZvPR6VhNQLgp08-BRqQhv554dCctX93kxbxK6Is0ctFM9V4VBd72F1MgEYJEUG91bfjYS0Wi_Qf_WmUVwa2Mw4UNO8uPGGQS7xhrQ0VPBh-3vWcObEVLi3lbaNiu89fdNT2ssmj2wlS73y-4XrKAETwNT36G8iXpsx9AW4q8LNQhnv3imPXEGzjBL1U4blg4S1Jc-Nlt6hpwzvrIG8Yz_XBW_flRugzWkyEJxlaVgmcVseyx1FiuCBhulkCOW7QmzJE7tmiFCpeBmbPhEbl0UIFj-qxLWF59IfUP9t_P9LXtuOlO_eQ9mUwj2QxDFbDl97DUCUhF2Vqwzwm0VUaMV_sPFx3-3W1g2z5luoXKSG0egyIzK_g1V7vMOMNh6kR3F4lRq-xHbpm-5bu2lthwPk9MvrgMwEXYCQRdUc4bivGAdIlNEfjJhssrLuoeu-YwoTDorR3Z7tzEuTWaRbJa-kDevv4tMOAeQOEPMe0qWD8BZWko3yxhStIIyYEs2429lXIrA53FMuqBO5TSEQhjyV3lQ-QN8d3opSg3mVk5XmmYupif8OE9s-6UIh52M27YSQOAJ7oVTJQU8MB5U7yIO_qEV5uRTfN2JSIHrbX_Rgfv322f7XAoqPigFpSl16HuNo_Xv6SHngtIRtj5IrRfRWz68azJrTPItGYfJt3018HYc3isL1nwiIFoER7RgCNyaqkthYKMzs9KANQ1EDtNSKR7PtLRhpYNFCGaJw83K6l72S1hwQgeLEEZgvU7y-lZDQfTc0QSeTCxQi8mX26BpCzCwVnJCsYBG5ujLtoLySu-Fvh-_wuKMYzs5Do5N9wm8Op9pBWWNi1hZ0GyOVlpbBjlJDNcFGcVHyhQaPJqWDjEKTqRQVJfE9EHJfak3y6_m2BvgCr-l30ha8QSTKYclGw7583mH4GBWqgkJ0Ci75EfNRYmTCtsUdr0Yl1ahQ8urqhIb8zQWI-5wNxp9EioX1k-Ql6Wjuy6mFl69xlZfIJjyz1IszMLzm89jNFBdglFPPiaFnbWDRDS4BWGv2NPwfsv-ZBtL6Vv-KghNX3OTYPCTfiTZe-GuPBI9E5u_swkc-A5rIuNpetQ8fC88SRrDJsfwcRQDlyWYsnbq832QdHAXsOxGTG3PjpWIYC38vX4k6FJJes1UhRQOimAD62IhfnpMqU6g8Yux5B9StwDeBdkGLGzQBqPwC6peFUV5R_j6luqzHjJ8E10gOxR7sQYkjPdAeyG77sfTjgq5m8auA3oHSUGd2QtixKYyMo1kGyLj3uLYIEngjGivfcLS5CtHksZg6bU2NV9T57YBB2cvvYZ4UM46MWv3SSZLIAXnJrOOdNIkWgnlEoXBQTFZz_OwYmR1DQ3C_MFvM-mUekBQnjYULEfJX8vAI_mVERgEWWFnHQzj-HsZaqtyFI7j_VQw2DZKzDNXOc1OW3vra28pDkHHQVTvyYpIrNFSu_JboElo2P2cUn0ykN7HAiK_bsPsGUHyV3DiiYu-BFkUN2_qLkP3WZLpwKkA5pneRRRTB_nPOhed4U0lYBXrGNs6bslExM95ZpdPf9wQiQ5dw7eFUWMJFCWOpzyFtE_qu0I9G0pXvEGDATuIpYddbZOnay1Ytb5ZMvera-ONb3mos3EL7as-xIKOVsTgQAYUha1NzImkdGKkF4XiKPbK-cNOy2l2xVAcnvn3hwnWnZLvxmwKo3uKf9FE8AFt3xxwdW4CKvcwfFxMMc2ks_yczb7L0WAx1eKCicX_XWLeNmKEKgmK6dVIIu1c2NkQFZYiSfH4mk940bm_25Qlvyp_uiSjGbDoUebTBvXwaFaKubuQToS2MjdTSdVnD0H169vAQ4oneOIzRatfn7zidChFA9gpDjW4yGv0sqLmCd5HtAqiJIvZj9uiefeHkiClvVzfpkHobwCSUrR7nkGtvUNK3X3ntsRjuyhX5EjuNqTP8JdkZRucQYK9wLcpWV667uD5vDOAsuLR7JxBDnbWEAdLE7jrPO_fSaSsxJdd63BjLYbJx-XlXNNz2zDNcxajeFlOkuEozp56a6w_Rvpk0FV3psfVJ-M8zSoj3fyD1RF9FMFZ0epFkm5Isj_JO7cZCHaOmIS4_hD0408C0LNcc_V-DJwvUPn4kQ9EiCPz0SIR8cx0N1cUj2AT-G9qnnJx5hNZxFa8DOyRAoQHDqe0_8rg_6BUkQKec8WIAxqa_pcjW_QLGTb_Qrdn57ZcYOEOXF6dgpqU6mjuPwnGRs5T5ToSZpqFSdwjvV_R_D5N_AuqCDg0iDWTdi2UheZv23cw2Bxm50m5z8AvXS6f-SZw_6zs5gJpEY5qJIpwODBE9g8MExjcDWZ3XcIxJU-2YZdn9QLTIz15DrImmhoYI-bEK2LZMhmmrBZA1C72R0g77Tl-9o-V3-pLPepl52g-QzbZ-iF-0kyCelDAM5iN_WVEyvp56KsORR3QKQlHw1E-e5KeGDAvsutlHjlB4zdFcg08oXqBzlSA8H1--Gqp5C9V5PBHQtdEVEk4wrinXGym3u-8uvsmSHzNJ2Bmas5yQgD7b9ovq_45T5_XjjKucRZ_T7MzL7GGEWGyosgS3BPQM7HXQVMmugpZakHKEdAVQAzK7xrR6EkaY-dQizgdbQsrauFmTgKSGwkTwr25pX1D4Zq8Uf4a7oBdAOGGsOmNKnIWeY-spY9kDhXW5FJkzRn11ryFc6X4igHLcTpk-K0Pq8noeFUmRFFkKRrnerSL1CbrfSEDR_sOZUnqsdQMqf44kBBfZus73CGFL1ADktxRstcwHyNM9SerCHSekI7q79vKjUIZmS_HCkjm9q7hg85rdyUoWSAEiUtZTXII9VMxyGLQt7OPkLxKntNHVf1gNd_bX8YqCGsEHIP5gwcgUAws-WjVyIrAqIgKQwBxegWagTupAE3QEuA9omaMEEcK68m-UCJbZNybVCOps0Iwh_GyTW0A91P1WKSr5FyHEn9smel1bjruhdA2Lhar4GjrNE01KxJDEBQwgwLJPKzzASRXZ79TToWgMDYy_eAkAoOL4tLhiJFbjSUd61tQtgf98oQg9d3vM81iumJhUjGC94AFoKHwUnIXY7ymss5HFqXNZ8GL5XEOz0a36Ewa769lju6kJ3JypgiejufRgKx7_VuCEaT4U6fJyGuvq6XpiV8LRCtsCH6NMTlio0kybj9Zrrhyme_-LQNRuVSaN89fG5HlKwJ8mZ5n_aDZRrhV436xkl8HdPoFmHYtGz5T9wPQVoLt2XwbG26zMX41cUdktzTeC9PlzAFz8Jl2YhXvmsF8oUqLS1C6v9sn6C4HSK6cvYrPBo_nxlnT7FJHfmd_YgVLYhMHP3cbRS34pPqspjuuFmez3IXMqA9mzAWGXnATw_3MiT4pWp9_BNysNaMMpokpttVCiPeacX9heVIXsPW9F8Qtq5dexQuG4zv8BFJRAHWlQmxuez-LOBpySstDQkuYQUXUAL5L_srdMN4JJ3BM9rIGpSzx_kPOEkelyH-Mh3htdnKYukNirHyXk12V4J08UmS0ZhmGNmvNVV0sjU2n2LhnORd_H5EKRKHQ_GQJjVeqLzS98eL26RFIpa0WPJx4ZA9Wj3pGzzg2_ENr6BdMy40yHguiq_L5z3ZrUheTGsUZwREDigx5dn_2GSPrPVq9IWf6442W26DKAbU7d51CdHhXQ1L3P624IVO9Ev4HgssPuk2xVjGTVTudd3FM-LW0LwfDqu-VHpFV9mT8PSLQ8idfIt0kzF1XjJeDDg0R0XgD36NBWMkbwxaeWgc4bR8BXleWaRsw3s91JfsySsElth88gcrGsTXuYESK72RmYY9R7EuF7a7gwKXcTJg6gQKpkFQiDIAdDV5RlMp4v6nfd0FJJRiveUgzOJWNn5hCBCXHmCHNaWy61b5L0MgJ8QgXr8AxqA9_Nq5du5kjYX4LxbVAWFc_DBRAHDz0bOdQ8gsHvDaqaC6GjHv8c8lYqG-OCnBg3KtFHpJp8NO-bImfqPa9CIib2OF-rS3q6D9VXZxPOxJSJwxgdDwm_6MAZ5bKHZPwc6wMEHTmVPTDu7YZYY4t8GcsnYR5xum-K9C89cUdjV-fCcz40L0-8T7ufS6pCK0AzmoDnRW2b2JpcWXURlWrxckq9CKDtjj6nZuUukWw1okBFe8Z0RmDei8TCzWyT9mEIhjY6ncK6iOvqrWim09qIfSdNGWcwrSSIrb-a1DtSEIlX5TUyziL7oKHlH2ybe46OYP0jvEt2Eo7rfga32iP3xk59FVPEMOpsKRMR6nJML6OQ_VuhjlYomvPd1Cj_DxdQApO-FofPtIAZy1smeLhg5Sbq8etH1ikROjKyGxPkvvLVat7Bq2nS7yQcilgewdSXRVuEWEu1SnwsbNzsu0em-VldDeXfQVHsOq-5Fed2oo39KSv8rHY0aQZZ_Ls-kvZKhDALLCjvWv8G431pNzPnuqVXwBfLBraU1iVZKM2gswL5Zpt9Asemd3q3b6BhYs7VrZTc-3dKlUyzuSXBEy75yo5ktCxDJIX4rPHjOq3LvpLI_PYOR5OKehWWql7ImIuXBiY7LjRCfuWhhLaMfT8qpbnGumivZCNSmjSPGdTv4Pv_u7g4_4qgbQ5F8wamoxQuFZDQVycL2NEidhj_X4HLHEFc4NKmREKqxOCcdRJxG7ewYqOUxrZB2FMh80P_AsJUrJJZk1m-55Hwa7xStqqZgjA9EnhbMW6p7IXFh1JZjuC06f86J_7xzmIhk1ix2EElsTW7aJ8WVgOmmRUEhoimmPY4LJjA053k9QjYHkK9QUavoqwqNf__5qYrOy7i0UU9Qpw88DCFUgLWv2Kq5bTYNXOjFiFRDZVZ8udhS4mSL9pgdD99BvaWjhzYwhl1BZNopmyqOz95i5UWPweug27IkVEoRyJXt0QUAJtji-FERMDQc1F3YHHMCJ0CS1GXbkkgpJojCWAch0bynMvMNeslRoBLJHkcbwgJdk3k1XAQhKvhS94RdUrUa5OSpYvmc8ACS1xjX67QmOsjeis1OtXKxMVj9DHVXNEoXiA8icGvN04kCeLtVK8sQRQk3VlWNUHUfXqOqotVQcXcU0UuQTzc6PUzwtR5nfQv0B-Dz6LVSJPEWMWf9bzK8sPV-MYlNQw5cgzb24MKtyp50Q5QhPsPCVVoPjGdeyU2fX7IoaLFNcKoXbELkHICURmYU73GreCr_z-DR6MMf9FVkll8lLP-0nyzUJefQw_T_k6Yln8I6wcXHcjn_C4hNSUUbyn31WQuRqWHJnm4kgKI3XpdFf7JOl-DCUtgefJLNDb2tuzDvY3tzWZw==\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Investigating tools configuration**\\n\\nI'm looking into the tools configuration for agents since I didn't find any under agents. I think a schema lookup could help, maybe checking the path \\\"agents.defaults\\\" or using \\\"agents.list\\\". I tried \\\"agents.list\\\" but encountered an error. I should also look up \\\"agents.defaults.toolPolicy\\\" and check \\\"plugins.installs\\\" or \\\"plugins.entries.clawrouter\\\" for more insights. Let's see if those work!\"}]}"},{"type":"text","text":"Estoy inspeccionando los campos exactos antes de parchear config, para no inventar nombres ni romperte el gateway.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b75528f6cc8190b7bb724388726bdc\",\"phase\":\"commentary\"}"},{"type":"toolCall","id":"call_HCm1L0SNQcDGXOBU4yhAmcrT|fc_0776d4d0ce7a6f6b0169b7552a5ae48190a3278ede46fcd902","name":"gateway","arguments":{"action":"config.schema.lookup","path":"plugins.installs"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"plugins.installs\"}"},{"type":"toolCall","id":"call_PbyYmHBTEmlrZBOJk4ewkR7g|fc_0776d4d0ce7a6f6b0169b7552a5af481909cfe3d44517edff8","name":"gateway","arguments":{"action":"config.schema.lookup","path":"plugins.entries"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"plugins.entries\"}"},{"type":"toolCall","id":"call_qyXR7izryKhPtKigsQI4nmnv|fc_0776d4d0ce7a6f6b0169b7552a5afc8190926b9be735c62897","name":"gateway","arguments":{"action":"config.schema.lookup","path":"agents.defaults"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"agents.defaults\"}"},{"type":"toolCall","id":"call_FKFElUlw3O0IcRw94ZsqFcpC|fc_0776d4d0ce7a6f6b0169b7552a5b048190823ceeee3a3c92f8","name":"gateway","arguments":{"action":"config.schema.lookup","path":"agents.list"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"agents.list\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":82249,"output":782,"cacheRead":36608,"cacheWrite":0,"totalTokens":119639,"cost":{"input":0.2056225,"output":0.01173,"cacheRead":0.009152,"cacheWrite":0,"total":0.2265045}},"stopReason":"toolUse","timestamp":1773622550348}} {"type":"message","id":"2dfa4781","parentId":"50cb702f","timestamp":"2026-03-16T00:56:10.739Z","message":{"role":"toolResult","toolCallId":"call_HCm1L0SNQcDGXOBU4yhAmcrT|fc_0776d4d0ce7a6f6b0169b7552a5ae48190a3278ede46fcd902","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"plugins.installs\",\n \"schema\": {\n \"type\": \"object\"\n },\n \"hint\": {\n \"label\": \"Plugin Install Records\",\n \"help\": \"CLI-managed install metadata (used by `openclaw plugins update` to locate install sources).\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.installs\",\n \"children\": [\n {\n \"key\": \"*\",\n \"path\": \"plugins.installs.*\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n }\n ]\n }\n}"}],"details":{"ok":true,"result":{"path":"plugins.installs","schema":{"type":"object"},"hint":{"label":"Plugin Install Records","help":"CLI-managed install metadata (used by `openclaw plugins update` to locate install sources).","tags":["advanced"]},"hintPath":"plugins.installs","children":[{"key":"*","path":"plugins.installs.*","type":"object","required":false,"hasChildren":true}]}},"isError":false,"timestamp":1773622570728}} {"type":"message","id":"42fe8dc0","parentId":"2dfa4781","timestamp":"2026-03-16T00:56:10.843Z","message":{"role":"toolResult","toolCallId":"call_PbyYmHBTEmlrZBOJk4ewkR7g|fc_0776d4d0ce7a6f6b0169b7552a5af481909cfe3d44517edff8","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"plugins.entries\",\n \"schema\": {\n \"type\": \"object\"\n },\n \"hint\": {\n \"label\": \"Plugin Entries\",\n \"help\": \"Per-plugin settings keyed by plugin ID including enablement and plugin-specific runtime configuration payloads. Use this for scoped plugin tuning without changing global loader policy.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries\",\n \"children\": [\n {\n \"key\": \"acpx\",\n \"path\": \"plugins.entries.acpx\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"ACPX Runtime\",\n \"help\": \"ACP runtime backend powered by the acpx CLI. (plugin: acpx)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx\"\n },\n {\n \"key\": \"bluebubbles\",\n \"path\": \"plugins.entries.bluebubbles\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/bluebubbles\",\n \"help\": \"OpenClaw BlueBubbles channel plugin (plugin: bluebubbles)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.bluebubbles\"\n },\n {\n \"key\": \"copilot-proxy\",\n \"path\": \"plugins.entries.copilot-proxy\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/copilot-proxy\",\n \"help\": \"OpenClaw Copilot Proxy provider plugin (plugin: copilot-proxy)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.copilot-proxy\"\n },\n {\n \"key\": \"device-pair\",\n \"path\": \"plugins.entries.device-pair\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Device Pairing\",\n \"help\": \"Generate setup codes and approve device pairing requests. (plugin: device-pair)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.device-pair\"\n },\n {\n \"key\": \"diagnostics-otel\",\n \"path\": \"plugins.entries.diagnostics-otel\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/diagnostics-otel\",\n \"help\": \"OpenClaw diagnostics OpenTelemetry exporter (plugin: diagnostics-otel)\",\n \"tags\": [\n \"observability\"\n ]\n },\n \"hintPath\": \"plugins.entries.diagnostics-otel\"\n },\n {\n \"key\": \"diffs\",\n \"path\": \"plugins.entries.diffs\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Diffs\",\n \"help\": \"Read-only diff viewer and file renderer for agents. (plugin: diffs)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.diffs\"\n },\n {\n \"key\": \"discord\",\n \"path\": \"plugins.entries.discord\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/discord\",\n \"help\": \"OpenClaw Discord channel plugin (plugin: discord)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.discord\"\n },\n {\n \"key\": \"feishu\",\n \"path\": \"plugins.entries.feishu\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/feishu\",\n \"help\": \"OpenClaw Feishu/Lark channel plugin (community maintained by @m1heng) (plugin: feishu)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.feishu\"\n },\n {\n \"key\": \"google-gemini-cli-auth\",\n \"path\": \"plugins.entries.google-gemini-cli-auth\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/google-gemini-cli-auth\",\n \"help\": \"OpenClaw Gemini CLI OAuth provider plugin (plugin: google-gemini-cli-auth)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.google-gemini-cli-auth\"\n },\n {\n \"key\": \"googlechat\",\n \"path\": \"plugins.entries.googlechat\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/googlechat\",\n \"help\": \"OpenClaw Google Chat channel plugin (plugin: googlechat)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.googlechat\"\n },\n {\n \"key\": \"imessage\",\n \"path\": \"plugins.entries.imessage\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/imessage\",\n \"help\": \"OpenClaw iMessage channel plugin (plugin: imessage)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.imessage\"\n },\n {\n \"key\": \"irc\",\n \"path\": \"plugins.entries.irc\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/irc\",\n \"help\": \"OpenClaw IRC channel plugin (plugin: irc)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.irc\"\n },\n {\n \"key\": \"line\",\n \"path\": \"plugins.entries.line\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/line\",\n \"help\": \"OpenClaw LINE channel plugin (plugin: line)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.line\"\n },\n {\n \"key\": \"llm-task\",\n \"path\": \"plugins.entries.llm-task\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"LLM Task\",\n \"help\": \"Generic JSON-only LLM tool for structured tasks callable from workflows. (plugin: llm-task)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.llm-task\"\n },\n {\n \"key\": \"lobster\",\n \"path\": \"plugins.entries.lobster\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Lobster\",\n \"help\": \"Typed workflow tool with resumable approvals. (plugin: lobster)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.lobster\"\n },\n {\n \"key\": \"matrix\",\n \"path\": \"plugins.entries.matrix\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/matrix\",\n \"help\": \"OpenClaw Matrix channel plugin (plugin: matrix)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.matrix\"\n },\n {\n \"key\": \"mattermost\",\n \"path\": \"plugins.entries.mattermost\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/mattermost\",\n \"help\": \"OpenClaw Mattermost channel plugin (plugin: mattermost)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.mattermost\"\n },\n {\n \"key\": \"memory-core\",\n \"path\": \"plugins.entries.memory-core\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Memory (Core)\",\n \"help\": \"File-backed memory search tools and CLI (plugin: memory-core)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.memory-core\"\n },\n {\n \"key\": \"memory-lancedb\",\n \"path\": \"plugins.entries.memory-lancedb\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/memory-lancedb\",\n \"help\": \"OpenClaw LanceDB-backed long-term memory plugin with auto-recall/capture (plugin: memory-lancedb)\",\n \"tags\": [\n \"storage\"\n ]\n },\n \"hintPath\": \"plugins.entries.memory-lancedb\"\n },\n {\n \"key\": \"minimax-portal-auth\",\n \"path\": \"plugins.entries.minimax-portal-auth\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/minimax-portal-auth\",\n \"help\": \"OpenClaw MiniMax Portal OAuth provider plugin (plugin: minimax-portal-auth)\",\n \"tags\": [\n \"performance\"\n ]\n },\n \"hintPath\": \"plugins.entries.minimax-portal-auth\"\n },\n {\n \"key\": \"msteams\",\n \"path\": \"plugins.entries.msteams\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/msteams\",\n \"help\": \"OpenClaw Microsoft Teams channel plugin (plugin: msteams)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.msteams\"\n },\n {\n \"key\": \"nextcloud-talk\",\n \"path\": \"plugins.entries.nextcloud-talk\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/nextcloud-talk\",\n \"help\": \"OpenClaw Nextcloud Talk channel plugin (plugin: nextcloud-talk)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.nextcloud-talk\"\n },\n {\n \"key\": \"nostr\",\n \"path\": \"plugins.entries.nostr\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/nostr\",\n \"help\": \"OpenClaw Nostr channel plugin for NIP-04 encrypted DMs (plugin: nostr)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.nostr\"\n },\n {\n \"key\": \"ollama\",\n \"path\": \"plugins.entries.ollama\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/ollama-provider\",\n \"help\": \"OpenClaw Ollama provider plugin (plugin: ollama)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.ollama\"\n },\n {\n \"key\": \"open-prose\",\n \"path\": \"plugins.entries.open-prose\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"OpenProse\",\n \"help\": \"OpenProse VM skill pack with a /prose slash command. (plugin: open-prose)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.open-prose\"\n },\n {\n \"key\": \"phone-control\",\n \"path\": \"plugins.entries.phone-control\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Phone Control\",\n \"help\": \"Arm/disarm high-risk phone node commands (camera/screen/writes) with an optional auto-expiry. (plugin: phone-control)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.phone-control\"\n },\n {\n \"key\": \"qwen-portal-auth\",\n \"path\": \"plugins.entries.qwen-portal-auth\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"qwen-portal-auth\",\n \"help\": \"Plugin entry for qwen-portal-auth.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.qwen-portal-auth\"\n },\n {\n \"key\": \"sglang\",\n \"path\": \"plugins.entries.sglang\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/sglang-provider\",\n \"help\": \"OpenClaw SGLang provider plugin (plugin: sglang)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.sglang\"\n },\n {\n \"key\": \"signal\",\n \"path\": \"plugins.entries.signal\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/signal\",\n \"help\": \"OpenClaw Signal channel plugin (plugin: signal)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.signal\"\n },\n {\n \"key\": \"slack\",\n \"path\": \"plugins.entries.slack\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/slack\",\n \"help\": \"OpenClaw Slack channel plugin (plugin: slack)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.slack\"\n },\n {\n \"key\": \"synology-chat\",\n \"path\": \"plugins.entries.synology-chat\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/synology-chat\",\n \"help\": \"Synology Chat channel plugin for OpenClaw (plugin: synology-chat)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.synology-chat\"\n },\n {\n \"key\": \"talk-voice\",\n \"path\": \"plugins.entries.talk-voice\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Talk Voice\",\n \"help\": \"Manage Talk voice selection (list/set). (plugin: talk-voice)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.talk-voice\"\n },\n {\n \"key\": \"telegram\",\n \"path\": \"plugins.entries.telegram\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Telegram\",\n \"help\": \"Telegram channel plugin (plugin: telegram)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.telegram\"\n },\n {\n \"key\": \"thread-ownership\",\n \"path\": \"plugins.entries.thread-ownership\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Thread Ownership\",\n \"help\": \"Prevents multiple agents from responding in the same Slack thread. Uses HTTP calls to the slack-forwarder ownership API. (plugin: thread-ownership)\",\n \"tags\": [\n \"access\"\n ]\n },\n \"hintPath\": \"plugins.entries.thread-ownership\"\n },\n {\n \"key\": \"tlon\",\n \"path\": \"plugins.entries.tlon\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/tlon\",\n \"help\": \"OpenClaw Tlon/Urbit channel plugin (plugin: tlon)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.tlon\"\n },\n {\n \"key\": \"twitch\",\n \"path\": \"plugins.entries.twitch\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/twitch\",\n \"help\": \"OpenClaw Twitch channel plugin (plugin: twitch)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.twitch\"\n },\n {\n \"key\": \"vllm\",\n \"path\": \"plugins.entries.vllm\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/vllm-provider\",\n \"help\": \"OpenClaw vLLM provider plugin (plugin: vllm)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.vllm\"\n },\n {\n \"key\": \"voice-call\",\n \"path\": \"plugins.entries.voice-call\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/voice-call\",\n \"help\": \"OpenClaw voice-call plugin (plugin: voice-call)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.voice-call\"\n },\n {\n \"key\": \"whatsapp\",\n \"path\": \"plugins.entries.whatsapp\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/whatsapp\",\n \"help\": \"OpenClaw WhatsApp channel plugin (plugin: whatsapp)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.whatsapp\"\n },\n {\n \"key\": \"zalo\",\n \"path\": \"plugins.entries.zalo\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/zalo\",\n \"help\": \"OpenClaw Zalo channel plugin (plugin: zalo)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.zalo\"\n },\n {\n \"key\": \"zalouser\",\n \"path\": \"plugins.entries.zalouser\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"@openclaw/zalouser\",\n \"help\": \"OpenClaw Zalo Personal Account plugin via native zca-js integration (plugin: zalouser)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.zalouser\"\n },\n {\n \"key\": \"clawrouter\",\n \"path\": \"plugins.entries.clawrouter\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"ClawRouter\",\n \"help\": \"Smart LLM router — 30+ models, x402 micropayments, 78% cost savings (plugin: clawrouter)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.clawrouter\"\n },\n {\n \"key\": \"*\",\n \"path\": \"plugins.entries.*\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n }\n ]\n }\n}"}],"details":{"ok":true,"result":{"path":"plugins.entries","schema":{"type":"object"},"hint":{"label":"Plugin Entries","help":"Per-plugin settings keyed by plugin ID including enablement and plugin-specific runtime configuration payloads. Use this for scoped plugin tuning without changing global loader policy.","tags":["advanced"]},"hintPath":"plugins.entries","children":[{"key":"acpx","path":"plugins.entries.acpx","type":"object","required":false,"hasChildren":true,"hint":{"label":"ACPX Runtime","help":"ACP runtime backend powered by the acpx CLI. (plugin: acpx)","tags":["advanced"]},"hintPath":"plugins.entries.acpx"},{"key":"bluebubbles","path":"plugins.entries.bluebubbles","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/bluebubbles","help":"OpenClaw BlueBubbles channel plugin (plugin: bluebubbles)","tags":["advanced"]},"hintPath":"plugins.entries.bluebubbles"},{"key":"copilot-proxy","path":"plugins.entries.copilot-proxy","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/copilot-proxy","help":"OpenClaw Copilot Proxy provider plugin (plugin: copilot-proxy)","tags":["advanced"]},"hintPath":"plugins.entries.copilot-proxy"},{"key":"device-pair","path":"plugins.entries.device-pair","type":"object","required":false,"hasChildren":true,"hint":{"label":"Device Pairing","help":"Generate setup codes and approve device pairing requests. (plugin: device-pair)","tags":["advanced"]},"hintPath":"plugins.entries.device-pair"},{"key":"diagnostics-otel","path":"plugins.entries.diagnostics-otel","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/diagnostics-otel","help":"OpenClaw diagnostics OpenTelemetry exporter (plugin: diagnostics-otel)","tags":["observability"]},"hintPath":"plugins.entries.diagnostics-otel"},{"key":"diffs","path":"plugins.entries.diffs","type":"object","required":false,"hasChildren":true,"hint":{"label":"Diffs","help":"Read-only diff viewer and file renderer for agents. (plugin: diffs)","tags":["advanced"]},"hintPath":"plugins.entries.diffs"},{"key":"discord","path":"plugins.entries.discord","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/discord","help":"OpenClaw Discord channel plugin (plugin: discord)","tags":["advanced"]},"hintPath":"plugins.entries.discord"},{"key":"feishu","path":"plugins.entries.feishu","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/feishu","help":"OpenClaw Feishu/Lark channel plugin (community maintained by @m1heng) (plugin: feishu)","tags":["advanced"]},"hintPath":"plugins.entries.feishu"},{"key":"google-gemini-cli-auth","path":"plugins.entries.google-gemini-cli-auth","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/google-gemini-cli-auth","help":"OpenClaw Gemini CLI OAuth provider plugin (plugin: google-gemini-cli-auth)","tags":["advanced"]},"hintPath":"plugins.entries.google-gemini-cli-auth"},{"key":"googlechat","path":"plugins.entries.googlechat","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/googlechat","help":"OpenClaw Google Chat channel plugin (plugin: googlechat)","tags":["advanced"]},"hintPath":"plugins.entries.googlechat"},{"key":"imessage","path":"plugins.entries.imessage","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/imessage","help":"OpenClaw iMessage channel plugin (plugin: imessage)","tags":["advanced"]},"hintPath":"plugins.entries.imessage"},{"key":"irc","path":"plugins.entries.irc","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/irc","help":"OpenClaw IRC channel plugin (plugin: irc)","tags":["advanced"]},"hintPath":"plugins.entries.irc"},{"key":"line","path":"plugins.entries.line","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/line","help":"OpenClaw LINE channel plugin (plugin: line)","tags":["advanced"]},"hintPath":"plugins.entries.line"},{"key":"llm-task","path":"plugins.entries.llm-task","type":"object","required":false,"hasChildren":true,"hint":{"label":"LLM Task","help":"Generic JSON-only LLM tool for structured tasks callable from workflows. (plugin: llm-task)","tags":["advanced"]},"hintPath":"plugins.entries.llm-task"},{"key":"lobster","path":"plugins.entries.lobster","type":"object","required":false,"hasChildren":true,"hint":{"label":"Lobster","help":"Typed workflow tool with resumable approvals. (plugin: lobster)","tags":["advanced"]},"hintPath":"plugins.entries.lobster"},{"key":"matrix","path":"plugins.entries.matrix","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/matrix","help":"OpenClaw Matrix channel plugin (plugin: matrix)","tags":["advanced"]},"hintPath":"plugins.entries.matrix"},{"key":"mattermost","path":"plugins.entries.mattermost","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/mattermost","help":"OpenClaw Mattermost channel plugin (plugin: mattermost)","tags":["advanced"]},"hintPath":"plugins.entries.mattermost"},{"key":"memory-core","path":"plugins.entries.memory-core","type":"object","required":false,"hasChildren":true,"hint":{"label":"Memory (Core)","help":"File-backed memory search tools and CLI (plugin: memory-core)","tags":["advanced"]},"hintPath":"plugins.entries.memory-core"},{"key":"memory-lancedb","path":"plugins.entries.memory-lancedb","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/memory-lancedb","help":"OpenClaw LanceDB-backed long-term memory plugin with auto-recall/capture (plugin: memory-lancedb)","tags":["storage"]},"hintPath":"plugins.entries.memory-lancedb"},{"key":"minimax-portal-auth","path":"plugins.entries.minimax-portal-auth","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/minimax-portal-auth","help":"OpenClaw MiniMax Portal OAuth provider plugin (plugin: minimax-portal-auth)","tags":["performance"]},"hintPath":"plugins.entries.minimax-portal-auth"},{"key":"msteams","path":"plugins.entries.msteams","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/msteams","help":"OpenClaw Microsoft Teams channel plugin (plugin: msteams)","tags":["advanced"]},"hintPath":"plugins.entries.msteams"},{"key":"nextcloud-talk","path":"plugins.entries.nextcloud-talk","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/nextcloud-talk","help":"OpenClaw Nextcloud Talk channel plugin (plugin: nextcloud-talk)","tags":["advanced"]},"hintPath":"plugins.entries.nextcloud-talk"},{"key":"nostr","path":"plugins.entries.nostr","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/nostr","help":"OpenClaw Nostr channel plugin for NIP-04 encrypted DMs (plugin: nostr)","tags":["advanced"]},"hintPath":"plugins.entries.nostr"},{"key":"ollama","path":"plugins.entries.ollama","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/ollama-provider","help":"OpenClaw Ollama provider plugin (plugin: ollama)","tags":["advanced"]},"hintPath":"plugins.entries.ollama"},{"key":"open-prose","path":"plugins.entries.open-prose","type":"object","required":false,"hasChildren":true,"hint":{"label":"OpenProse","help":"OpenProse VM skill pack with a /prose slash command. (plugin: open-prose)","tags":["advanced"]},"hintPath":"plugins.entries.open-prose"},{"key":"phone-control","path":"plugins.entries.phone-control","type":"object","required":false,"hasChildren":true,"hint":{"label":"Phone Control","help":"Arm/disarm high-risk phone node commands (camera/screen/writes) with an optional auto-expiry. (plugin: phone-control)","tags":["advanced"]},"hintPath":"plugins.entries.phone-control"},{"key":"qwen-portal-auth","path":"plugins.entries.qwen-portal-auth","type":"object","required":false,"hasChildren":true,"hint":{"label":"qwen-portal-auth","help":"Plugin entry for qwen-portal-auth.","tags":["advanced"]},"hintPath":"plugins.entries.qwen-portal-auth"},{"key":"sglang","path":"plugins.entries.sglang","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/sglang-provider","help":"OpenClaw SGLang provider plugin (plugin: sglang)","tags":["advanced"]},"hintPath":"plugins.entries.sglang"},{"key":"signal","path":"plugins.entries.signal","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/signal","help":"OpenClaw Signal channel plugin (plugin: signal)","tags":["advanced"]},"hintPath":"plugins.entries.signal"},{"key":"slack","path":"plugins.entries.slack","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/slack","help":"OpenClaw Slack channel plugin (plugin: slack)","tags":["advanced"]},"hintPath":"plugins.entries.slack"},{"key":"synology-chat","path":"plugins.entries.synology-chat","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/synology-chat","help":"Synology Chat channel plugin for OpenClaw (plugin: synology-chat)","tags":["advanced"]},"hintPath":"plugins.entries.synology-chat"},{"key":"talk-voice","path":"plugins.entries.talk-voice","type":"object","required":false,"hasChildren":true,"hint":{"label":"Talk Voice","help":"Manage Talk voice selection (list/set). (plugin: talk-voice)","tags":["advanced"]},"hintPath":"plugins.entries.talk-voice"},{"key":"telegram","path":"plugins.entries.telegram","type":"object","required":false,"hasChildren":true,"hint":{"label":"Telegram","help":"Telegram channel plugin (plugin: telegram)","tags":["advanced"]},"hintPath":"plugins.entries.telegram"},{"key":"thread-ownership","path":"plugins.entries.thread-ownership","type":"object","required":false,"hasChildren":true,"hint":{"label":"Thread Ownership","help":"Prevents multiple agents from responding in the same Slack thread. Uses HTTP calls to the slack-forwarder ownership API. (plugin: thread-ownership)","tags":["access"]},"hintPath":"plugins.entries.thread-ownership"},{"key":"tlon","path":"plugins.entries.tlon","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/tlon","help":"OpenClaw Tlon/Urbit channel plugin (plugin: tlon)","tags":["advanced"]},"hintPath":"plugins.entries.tlon"},{"key":"twitch","path":"plugins.entries.twitch","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/twitch","help":"OpenClaw Twitch channel plugin (plugin: twitch)","tags":["advanced"]},"hintPath":"plugins.entries.twitch"},{"key":"vllm","path":"plugins.entries.vllm","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/vllm-provider","help":"OpenClaw vLLM provider plugin (plugin: vllm)","tags":["advanced"]},"hintPath":"plugins.entries.vllm"},{"key":"voice-call","path":"plugins.entries.voice-call","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/voice-call","help":"OpenClaw voice-call plugin (plugin: voice-call)","tags":["advanced"]},"hintPath":"plugins.entries.voice-call"},{"key":"whatsapp","path":"plugins.entries.whatsapp","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/whatsapp","help":"OpenClaw WhatsApp channel plugin (plugin: whatsapp)","tags":["advanced"]},"hintPath":"plugins.entries.whatsapp"},{"key":"zalo","path":"plugins.entries.zalo","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/zalo","help":"OpenClaw Zalo channel plugin (plugin: zalo)","tags":["advanced"]},"hintPath":"plugins.entries.zalo"},{"key":"zalouser","path":"plugins.entries.zalouser","type":"object","required":false,"hasChildren":true,"hint":{"label":"@openclaw/zalouser","help":"OpenClaw Zalo Personal Account plugin via native zca-js integration (plugin: zalouser)","tags":["advanced"]},"hintPath":"plugins.entries.zalouser"},{"key":"clawrouter","path":"plugins.entries.clawrouter","type":"object","required":false,"hasChildren":true,"hint":{"label":"ClawRouter","help":"Smart LLM router — 30+ models, x402 micropayments, 78% cost savings (plugin: clawrouter)","tags":["advanced"]},"hintPath":"plugins.entries.clawrouter"},{"key":"*","path":"plugins.entries.*","type":"object","required":false,"hasChildren":true}]}},"isError":false,"timestamp":1773622570832}} {"type":"message","id":"9502a46b","parentId":"42fe8dc0","timestamp":"2026-03-16T00:56:10.939Z","message":{"role":"toolResult","toolCallId":"call_qyXR7izryKhPtKigsQI4nmnv|fc_0776d4d0ce7a6f6b0169b7552a5afc8190926b9be735c62897","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"agents.defaults\",\n \"schema\": {\n \"type\": \"object\",\n \"additionalProperties\": false\n },\n \"hint\": {\n \"label\": \"Agent Defaults\",\n \"help\": \"Shared default settings inherited by agents unless overridden per entry in agents.list. Use defaults to enforce consistent baseline behavior and reduce duplicated per-agent configuration.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"agents.defaults\",\n \"children\": [\n {\n \"key\": \"model\",\n \"path\": \"agents.defaults.model\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"imageModel\",\n \"path\": \"agents.defaults.imageModel\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"pdfModel\",\n \"path\": \"agents.defaults.pdfModel\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"pdfMaxBytesMb\",\n \"path\": \"agents.defaults.pdfMaxBytesMb\",\n \"type\": \"number\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"PDF Max Size (MB)\",\n \"help\": \"Maximum PDF file size in megabytes for the PDF tool (default: 10).\",\n \"tags\": [\n \"performance\"\n ]\n },\n \"hintPath\": \"agents.defaults.pdfMaxBytesMb\"\n },\n {\n \"key\": \"pdfMaxPages\",\n \"path\": \"agents.defaults.pdfMaxPages\",\n \"type\": \"integer\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"PDF Max Pages\",\n \"help\": \"Maximum number of PDF pages to process for the PDF tool (default: 20).\",\n \"tags\": [\n \"performance\"\n ]\n },\n \"hintPath\": \"agents.defaults.pdfMaxPages\"\n },\n {\n \"key\": \"models\",\n \"path\": \"agents.defaults.models\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Models\",\n \"help\": \"Configured model catalog (keys are full provider/model IDs).\",\n \"tags\": [\n \"models\"\n ]\n },\n \"hintPath\": \"agents.defaults.models\"\n },\n {\n \"key\": \"workspace\",\n \"path\": \"agents.defaults.workspace\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Workspace\",\n \"help\": \"Default workspace path exposed to agent runtime tools for filesystem context and repo-aware behavior. Set this explicitly when running from wrappers so path resolution stays deterministic.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"agents.defaults.workspace\"\n },\n {\n \"key\": \"repoRoot\",\n \"path\": \"agents.defaults.repoRoot\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Repo Root\",\n \"help\": \"Optional repository root shown in the system prompt runtime line (overrides auto-detect).\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"agents.defaults.repoRoot\"\n },\n {\n \"key\": \"skipBootstrap\",\n \"path\": \"agents.defaults.skipBootstrap\",\n \"type\": \"boolean\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"bootstrapMaxChars\",\n \"path\": \"agents.defaults.bootstrapMaxChars\",\n \"type\": \"integer\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Bootstrap Max Chars\",\n \"help\": \"Max characters of each workspace bootstrap file injected into the system prompt before truncation (default: 20000).\",\n \"tags\": [\n \"performance\"\n ]\n },\n \"hintPath\": \"agents.defaults.bootstrapMaxChars\"\n },\n {\n \"key\": \"bootstrapTotalMaxChars\",\n \"path\": \"agents.defaults.bootstrapTotalMaxChars\",\n \"type\": \"integer\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Bootstrap Total Max Chars\",\n \"help\": \"Max total characters across all injected workspace bootstrap files (default: 150000).\",\n \"tags\": [\n \"performance\"\n ]\n },\n \"hintPath\": \"agents.defaults.bootstrapTotalMaxChars\"\n },\n {\n \"key\": \"bootstrapPromptTruncationWarning\",\n \"path\": \"agents.defaults.bootstrapPromptTruncationWarning\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Bootstrap Prompt Truncation Warning\",\n \"help\": \"Inject agent-visible warning text when bootstrap files are truncated: \\\"off\\\", \\\"once\\\" (default), or \\\"always\\\".\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"agents.defaults.bootstrapPromptTruncationWarning\"\n },\n {\n \"key\": \"userTimezone\",\n \"path\": \"agents.defaults.userTimezone\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"timeFormat\",\n \"path\": \"agents.defaults.timeFormat\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"envelopeTimezone\",\n \"path\": \"agents.defaults.envelopeTimezone\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Envelope Timezone\",\n \"help\": \"Timezone for message envelopes (\\\"utc\\\", \\\"local\\\", \\\"user\\\", or an IANA timezone string).\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"agents.defaults.envelopeTimezone\"\n },\n {\n \"key\": \"envelopeTimestamp\",\n \"path\": \"agents.defaults.envelopeTimestamp\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Envelope Timestamp\",\n \"help\": \"Include absolute timestamps in message envelopes (\\\"on\\\" or \\\"off\\\").\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"agents.defaults.envelopeTimestamp\"\n },\n {\n \"key\": \"envelopeElapsed\",\n \"path\": \"agents.defaults.envelopeElapsed\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Envelope Elapsed\",\n \"help\": \"Include elapsed time in message envelopes (\\\"on\\\" or \\\"off\\\").\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"agents.defaults.envelopeElapsed\"\n },\n {\n \"key\": \"contextTokens\",\n \"path\": \"agents.defaults.contextTokens\",\n \"type\": \"integer\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"cliBackends\",\n \"path\": \"agents.defaults.cliBackends\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"CLI Backends\",\n \"help\": \"Optional CLI backends for text-only fallback (claude-cli, etc.).\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"agents.defaults.cliBackends\"\n },\n {\n \"key\": \"memorySearch\",\n \"path\": \"agents.defaults.memorySearch\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Memory Search\",\n \"help\": \"Vector search over MEMORY.md and memory/*.md (per-agent overrides supported).\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"agents.defaults.memorySearch\"\n },\n {\n \"key\": \"contextPruning\",\n \"path\": \"agents.defaults.contextPruning\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"compaction\",\n \"path\": \"agents.defaults.compaction\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Compaction\",\n \"help\": \"Compaction tuning for when context nears token limits, including history share, reserve headroom, and pre-compaction memory flush behavior. Use this when long-running sessions need stable continuity under tight context windows.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"agents.defaults.compaction\"\n },\n {\n \"key\": \"embeddedPi\",\n \"path\": \"agents.defaults.embeddedPi\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Embedded Pi\",\n \"help\": \"Embedded Pi runner hardening controls for how workspace-local Pi settings are trusted and applied in OpenClaw sessions.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"agents.defaults.embeddedPi\"\n },\n {\n \"key\": \"thinkingDefault\",\n \"path\": \"agents.defaults.thinkingDefault\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"verboseDefault\",\n \"path\": \"agents.defaults.verboseDefault\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"elevatedDefault\",\n \"path\": \"agents.defaults.elevatedDefault\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"blockStreamingDefault\",\n \"path\": \"agents.defaults.blockStreamingDefault\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"blockStreamingBreak\",\n \"path\": \"agents.defaults.blockStreamingBreak\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"blockStreamingChunk\",\n \"path\": \"agents.defaults.blockStreamingChunk\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"blockStreamingCoalesce\",\n \"path\": \"agents.defaults.blockStreamingCoalesce\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"humanDelay\",\n \"path\": \"agents.defaults.humanDelay\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"timeoutSeconds\",\n \"path\": \"agents.defaults.timeoutSeconds\",\n \"type\": \"integer\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"mediaMaxMb\",\n \"path\": \"agents.defaults.mediaMaxMb\",\n \"type\": \"number\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"imageMaxDimensionPx\",\n \"path\": \"agents.defaults.imageMaxDimensionPx\",\n \"type\": \"integer\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Image Max Dimension (px)\",\n \"help\": \"Max image side length in pixels when sanitizing transcript/tool-result image payloads (default: 1200).\",\n \"tags\": [\n \"performance\",\n \"media\"\n ]\n },\n \"hintPath\": \"agents.defaults.imageMaxDimensionPx\"\n },\n {\n \"key\": \"typingIntervalSeconds\",\n \"path\": \"agents.defaults.typingIntervalSeconds\",\n \"type\": \"integer\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"typingMode\",\n \"path\": \"agents.defaults.typingMode\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"heartbeat\",\n \"path\": \"agents.defaults.heartbeat\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"maxConcurrent\",\n \"path\": \"agents.defaults.maxConcurrent\",\n \"type\": \"integer\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"subagents\",\n \"path\": \"agents.defaults.subagents\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"sandbox\",\n \"path\": \"agents.defaults.sandbox\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n }\n ]\n }\n}"}],"details":{"ok":true,"result":{"path":"agents.defaults","schema":{"type":"object","additionalProperties":false},"hint":{"label":"Agent Defaults","help":"Shared default settings inherited by agents unless overridden per entry in agents.list. Use defaults to enforce consistent baseline behavior and reduce duplicated per-agent configuration.","tags":["advanced"]},"hintPath":"agents.defaults","children":[{"key":"model","path":"agents.defaults.model","required":false,"hasChildren":false},{"key":"imageModel","path":"agents.defaults.imageModel","required":false,"hasChildren":false},{"key":"pdfModel","path":"agents.defaults.pdfModel","required":false,"hasChildren":false},{"key":"pdfMaxBytesMb","path":"agents.defaults.pdfMaxBytesMb","type":"number","required":false,"hasChildren":false,"hint":{"label":"PDF Max Size (MB)","help":"Maximum PDF file size in megabytes for the PDF tool (default: 10).","tags":["performance"]},"hintPath":"agents.defaults.pdfMaxBytesMb"},{"key":"pdfMaxPages","path":"agents.defaults.pdfMaxPages","type":"integer","required":false,"hasChildren":false,"hint":{"label":"PDF Max Pages","help":"Maximum number of PDF pages to process for the PDF tool (default: 20).","tags":["performance"]},"hintPath":"agents.defaults.pdfMaxPages"},{"key":"models","path":"agents.defaults.models","type":"object","required":false,"hasChildren":true,"hint":{"label":"Models","help":"Configured model catalog (keys are full provider/model IDs).","tags":["models"]},"hintPath":"agents.defaults.models"},{"key":"workspace","path":"agents.defaults.workspace","type":"string","required":false,"hasChildren":false,"hint":{"label":"Workspace","help":"Default workspace path exposed to agent runtime tools for filesystem context and repo-aware behavior. Set this explicitly when running from wrappers so path resolution stays deterministic.","tags":["advanced"]},"hintPath":"agents.defaults.workspace"},{"key":"repoRoot","path":"agents.defaults.repoRoot","type":"string","required":false,"hasChildren":false,"hint":{"label":"Repo Root","help":"Optional repository root shown in the system prompt runtime line (overrides auto-detect).","tags":["advanced"]},"hintPath":"agents.defaults.repoRoot"},{"key":"skipBootstrap","path":"agents.defaults.skipBootstrap","type":"boolean","required":false,"hasChildren":false},{"key":"bootstrapMaxChars","path":"agents.defaults.bootstrapMaxChars","type":"integer","required":false,"hasChildren":false,"hint":{"label":"Bootstrap Max Chars","help":"Max characters of each workspace bootstrap file injected into the system prompt before truncation (default: 20000).","tags":["performance"]},"hintPath":"agents.defaults.bootstrapMaxChars"},{"key":"bootstrapTotalMaxChars","path":"agents.defaults.bootstrapTotalMaxChars","type":"integer","required":false,"hasChildren":false,"hint":{"label":"Bootstrap Total Max Chars","help":"Max total characters across all injected workspace bootstrap files (default: 150000).","tags":["performance"]},"hintPath":"agents.defaults.bootstrapTotalMaxChars"},{"key":"bootstrapPromptTruncationWarning","path":"agents.defaults.bootstrapPromptTruncationWarning","required":false,"hasChildren":false,"hint":{"label":"Bootstrap Prompt Truncation Warning","help":"Inject agent-visible warning text when bootstrap files are truncated: \"off\", \"once\" (default), or \"always\".","tags":["advanced"]},"hintPath":"agents.defaults.bootstrapPromptTruncationWarning"},{"key":"userTimezone","path":"agents.defaults.userTimezone","type":"string","required":false,"hasChildren":false},{"key":"timeFormat","path":"agents.defaults.timeFormat","required":false,"hasChildren":false},{"key":"envelopeTimezone","path":"agents.defaults.envelopeTimezone","type":"string","required":false,"hasChildren":false,"hint":{"label":"Envelope Timezone","help":"Timezone for message envelopes (\"utc\", \"local\", \"user\", or an IANA timezone string).","tags":["advanced"]},"hintPath":"agents.defaults.envelopeTimezone"},{"key":"envelopeTimestamp","path":"agents.defaults.envelopeTimestamp","required":false,"hasChildren":false,"hint":{"label":"Envelope Timestamp","help":"Include absolute timestamps in message envelopes (\"on\" or \"off\").","tags":["advanced"]},"hintPath":"agents.defaults.envelopeTimestamp"},{"key":"envelopeElapsed","path":"agents.defaults.envelopeElapsed","required":false,"hasChildren":false,"hint":{"label":"Envelope Elapsed","help":"Include elapsed time in message envelopes (\"on\" or \"off\").","tags":["advanced"]},"hintPath":"agents.defaults.envelopeElapsed"},{"key":"contextTokens","path":"agents.defaults.contextTokens","type":"integer","required":false,"hasChildren":false},{"key":"cliBackends","path":"agents.defaults.cliBackends","type":"object","required":false,"hasChildren":true,"hint":{"label":"CLI Backends","help":"Optional CLI backends for text-only fallback (claude-cli, etc.).","tags":["advanced"]},"hintPath":"agents.defaults.cliBackends"},{"key":"memorySearch","path":"agents.defaults.memorySearch","type":"object","required":false,"hasChildren":true,"hint":{"label":"Memory Search","help":"Vector search over MEMORY.md and memory/*.md (per-agent overrides supported).","tags":["advanced"]},"hintPath":"agents.defaults.memorySearch"},{"key":"contextPruning","path":"agents.defaults.contextPruning","type":"object","required":false,"hasChildren":true},{"key":"compaction","path":"agents.defaults.compaction","type":"object","required":false,"hasChildren":true,"hint":{"label":"Compaction","help":"Compaction tuning for when context nears token limits, including history share, reserve headroom, and pre-compaction memory flush behavior. Use this when long-running sessions need stable continuity under tight context windows.","tags":["advanced"]},"hintPath":"agents.defaults.compaction"},{"key":"embeddedPi","path":"agents.defaults.embeddedPi","type":"object","required":false,"hasChildren":true,"hint":{"label":"Embedded Pi","help":"Embedded Pi runner hardening controls for how workspace-local Pi settings are trusted and applied in OpenClaw sessions.","tags":["advanced"]},"hintPath":"agents.defaults.embeddedPi"},{"key":"thinkingDefault","path":"agents.defaults.thinkingDefault","required":false,"hasChildren":false},{"key":"verboseDefault","path":"agents.defaults.verboseDefault","required":false,"hasChildren":false},{"key":"elevatedDefault","path":"agents.defaults.elevatedDefault","required":false,"hasChildren":false},{"key":"blockStreamingDefault","path":"agents.defaults.blockStreamingDefault","required":false,"hasChildren":false},{"key":"blockStreamingBreak","path":"agents.defaults.blockStreamingBreak","required":false,"hasChildren":false},{"key":"blockStreamingChunk","path":"agents.defaults.blockStreamingChunk","type":"object","required":false,"hasChildren":true},{"key":"blockStreamingCoalesce","path":"agents.defaults.blockStreamingCoalesce","type":"object","required":false,"hasChildren":true},{"key":"humanDelay","path":"agents.defaults.humanDelay","type":"object","required":false,"hasChildren":true},{"key":"timeoutSeconds","path":"agents.defaults.timeoutSeconds","type":"integer","required":false,"hasChildren":false},{"key":"mediaMaxMb","path":"agents.defaults.mediaMaxMb","type":"number","required":false,"hasChildren":false},{"key":"imageMaxDimensionPx","path":"agents.defaults.imageMaxDimensionPx","type":"integer","required":false,"hasChildren":false,"hint":{"label":"Image Max Dimension (px)","help":"Max image side length in pixels when sanitizing transcript/tool-result image payloads (default: 1200).","tags":["performance","media"]},"hintPath":"agents.defaults.imageMaxDimensionPx"},{"key":"typingIntervalSeconds","path":"agents.defaults.typingIntervalSeconds","type":"integer","required":false,"hasChildren":false},{"key":"typingMode","path":"agents.defaults.typingMode","required":false,"hasChildren":false},{"key":"heartbeat","path":"agents.defaults.heartbeat","type":"object","required":false,"hasChildren":true},{"key":"maxConcurrent","path":"agents.defaults.maxConcurrent","type":"integer","required":false,"hasChildren":false},{"key":"subagents","path":"agents.defaults.subagents","type":"object","required":false,"hasChildren":true},{"key":"sandbox","path":"agents.defaults.sandbox","type":"object","required":false,"hasChildren":true}]}},"isError":false,"timestamp":1773622570928}} {"type":"message","id":"c0ec5c10","parentId":"9502a46b","timestamp":"2026-03-16T00:56:10.962Z","message":{"role":"toolResult","toolCallId":"call_FKFElUlw3O0IcRw94ZsqFcpC|fc_0776d4d0ce7a6f6b0169b7552a5b048190823ceeee3a3c92f8","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"agents.list\",\n \"schema\": {\n \"type\": \"array\"\n },\n \"hint\": {\n \"label\": \"Agent List\",\n \"help\": \"Explicit list of configured agents with IDs and optional overrides for model, tools, identity, and workspace. Keep IDs stable over time so bindings, approvals, and session routing remain deterministic.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"agents.list\",\n \"children\": [\n {\n \"key\": \"*\",\n \"path\": \"agents.list.*\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n }\n ]\n }\n}"}],"details":{"ok":true,"result":{"path":"agents.list","schema":{"type":"array"},"hint":{"label":"Agent List","help":"Explicit list of configured agents with IDs and optional overrides for model, tools, identity, and workspace. Keep IDs stable over time so bindings, approvals, and session routing remain deterministic.","tags":["advanced"]},"hintPath":"agents.list","children":[{"key":"*","path":"agents.list.*","type":"object","required":false,"hasChildren":true}]}},"isError":false,"timestamp":1773622570951}} {"type":"message","id":"f20fe2dd","parentId":"c0ec5c10","timestamp":"2026-03-16T00:56:16.753Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7552eee908190aaef6138d70828de\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1UwxnL3shdp5luI0vrmSkCDwnq_a5zZdS82z_argxhIDqHaLkf9ZqX2z_yAz1fgKvWcUW5ANFnSvXDUnbrUExZawMlIznAo0r75SNRhXwEuxoMow7Vsa0-448NAMer_9zmmsO-EjLgLzn1GtWBLLu15NKvPg-JkloN8-0gIqMie3YDU5k5ncLXhdP72KrWiPJfIiqVGGdvTl4pRMxctSZ-fY6btGfsln_PyVjk-2KrBh6pdQGboHMiQe79B1sXF22XJOz7MVbF-Ys_M9gByYh1eaDXagpjG4FqzNXZYL2-oKvyCL7Agn-XqaOzW-7JHK5kiomWPmf4kXEcNndJwvBHtYjjnzxcqrce-u5IxkMUhi5oSGbqvtAndf1l8ZJYmCwtsqGCVCN9-ru9SpSnHe5shtuqOrcFblGDZYfX6iJZti9NQIJJqJ1xwAotW1jmPY0B3sb0wEd-KaVqoNsMnjzVlQdrUz1cza76u3_Z0M8d7n4-f1E7zF4jxY0iqaUz-5Hi75mkqW6AqDS72Fe_un70Jhtkt_5_DcBQ6UpSxWIx3BDM7Raicpfzv6eKo-YFt4U-lz0oPZ4fO-R42oIQ19k3YW64Emrm6yRxVxvyuBjfeylk8XacZZItmiI_XMpPUeCDjowqf3uB-6G3CDmaQ_L8r8rpp7FZRpU0wk8506N3LDRgSi-h1mE2nxpWl-k3LSfE95brtHWE4nzo26qt6Q12OVl5MLoIPhzhUB6cjw0yYrbvRG3DSTUI-mQjGsz7AeYmAEXpK6klsis1YcxWByRSjveyiIViQsDmlnP2TCVqLclU-rhEe7tWrKGMr-l3rYk0T3MiTlqUrQNz-BBYaqqR9x3BC97mAS80u_UWRjKF6ureahIl1pEJ_5A-BFzeBTCv-i6UttJBYSy0OzotGfT-8CaxzZZC4lk7pTIXZRmpFf1z7JAoPeGE_w2xXLqO6cHJeR8SC2ubjswtlMaJ52zToS8x-dW9tO-E0XIgmddMNOFn8sHDYW4V7esTvtOQfc4pB\",\"summary\":[]}"},{"type":"toolCall","id":"call_2bUMQ3QEstD1Hv9Ux6fQjJEZ|fc_0776d4d0ce7a6f6b0169b7553091a48190831b6588c8b3190e","name":"gateway","arguments":{"action":"config.schema.lookup","path":"agents.list.*"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"agents.list.*\"}"},{"type":"toolCall","id":"call_uPcr2eQeEXcjza9Aixnnwp3Z|fc_0776d4d0ce7a6f6b0169b7553091b88190a7f417c217bf5cc7","name":"gateway","arguments":{"action":"config.schema.lookup","path":"agents.defaults.sandbox"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"agents.defaults.sandbox\"}"},{"type":"toolCall","id":"call_TsVmFoCxhNGtNhVG27ervO8o|fc_0776d4d0ce7a6f6b0169b7553091c0819082abd45f3778376d","name":"gateway","arguments":{"action":"config.schema.lookup","path":"tools"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"tools\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":96324,"output":121,"cacheRead":19456,"cacheWrite":0,"totalTokens":115901,"cost":{"input":0.24081000000000002,"output":0.001815,"cacheRead":0.004863999999999999,"cacheWrite":0,"total":0.24748900000000004}},"stopReason":"toolUse","timestamp":1773622570968}} {"type":"message","id":"4bc6a579","parentId":"f20fe2dd","timestamp":"2026-03-16T00:56:16.907Z","message":{"role":"toolResult","toolCallId":"call_2bUMQ3QEstD1Hv9Ux6fQjJEZ|fc_0776d4d0ce7a6f6b0169b7553091a48190831b6588c8b3190e","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"agents.list.*\",\n \"schema\": {\n \"type\": \"object\",\n \"additionalProperties\": false\n },\n \"children\": [\n {\n \"key\": \"id\",\n \"path\": \"agents.list.*.id\",\n \"type\": \"string\",\n \"required\": true,\n \"hasChildren\": false\n },\n {\n \"key\": \"default\",\n \"path\": \"agents.list.*.default\",\n \"type\": \"boolean\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"name\",\n \"path\": \"agents.list.*.name\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"workspace\",\n \"path\": \"agents.list.*.workspace\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"agentDir\",\n \"path\": \"agents.list.*.agentDir\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"model\",\n \"path\": \"agents.list.*.model\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"skills\",\n \"path\": \"agents.list.*.skills\",\n \"type\": \"array\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Agent Skill Filter\",\n \"help\": \"Optional allowlist of skills for this agent (omit = all skills; empty = no skills).\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"agents.list.*.skills\"\n },\n {\n \"key\": \"memorySearch\",\n \"path\": \"agents.list.*.memorySearch\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"humanDelay\",\n \"path\": \"agents.list.*.humanDelay\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"heartbeat\",\n \"path\": \"agents.list.*.heartbeat\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"identity\",\n \"path\": \"agents.list.*.identity\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"groupChat\",\n \"path\": \"agents.list.*.groupChat\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"subagents\",\n \"path\": \"agents.list.*.subagents\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"sandbox\",\n \"path\": \"agents.list.*.sandbox\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"params\",\n \"path\": \"agents.list.*.params\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"tools\",\n \"path\": \"agents.list.*.tools\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"runtime\",\n \"path\": \"agents.list.*.runtime\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Agent Runtime\",\n \"help\": \"Optional runtime descriptor for this agent. Use embedded for default OpenClaw execution or acp for external ACP harness defaults.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"agents.list[].runtime\"\n }\n ]\n }\n}"}],"details":{"ok":true,"result":{"path":"agents.list.*","schema":{"type":"object","additionalProperties":false},"children":[{"key":"id","path":"agents.list.*.id","type":"string","required":true,"hasChildren":false},{"key":"default","path":"agents.list.*.default","type":"boolean","required":false,"hasChildren":false},{"key":"name","path":"agents.list.*.name","type":"string","required":false,"hasChildren":false},{"key":"workspace","path":"agents.list.*.workspace","type":"string","required":false,"hasChildren":false},{"key":"agentDir","path":"agents.list.*.agentDir","type":"string","required":false,"hasChildren":false},{"key":"model","path":"agents.list.*.model","required":false,"hasChildren":false},{"key":"skills","path":"agents.list.*.skills","type":"array","required":false,"hasChildren":true,"hint":{"label":"Agent Skill Filter","help":"Optional allowlist of skills for this agent (omit = all skills; empty = no skills).","tags":["advanced"]},"hintPath":"agents.list.*.skills"},{"key":"memorySearch","path":"agents.list.*.memorySearch","type":"object","required":false,"hasChildren":true},{"key":"humanDelay","path":"agents.list.*.humanDelay","type":"object","required":false,"hasChildren":true},{"key":"heartbeat","path":"agents.list.*.heartbeat","type":"object","required":false,"hasChildren":true},{"key":"identity","path":"agents.list.*.identity","type":"object","required":false,"hasChildren":true},{"key":"groupChat","path":"agents.list.*.groupChat","type":"object","required":false,"hasChildren":true},{"key":"subagents","path":"agents.list.*.subagents","type":"object","required":false,"hasChildren":true},{"key":"sandbox","path":"agents.list.*.sandbox","type":"object","required":false,"hasChildren":true},{"key":"params","path":"agents.list.*.params","type":"object","required":false,"hasChildren":true},{"key":"tools","path":"agents.list.*.tools","type":"object","required":false,"hasChildren":true},{"key":"runtime","path":"agents.list.*.runtime","required":false,"hasChildren":false,"hint":{"label":"Agent Runtime","help":"Optional runtime descriptor for this agent. Use embedded for default OpenClaw execution or acp for external ACP harness defaults.","tags":["advanced"]},"hintPath":"agents.list[].runtime"}]}},"isError":false,"timestamp":1773622576896}} {"type":"message","id":"095bc9ec","parentId":"4bc6a579","timestamp":"2026-03-16T00:56:16.939Z","message":{"role":"toolResult","toolCallId":"call_uPcr2eQeEXcjza9Aixnnwp3Z|fc_0776d4d0ce7a6f6b0169b7553091b88190a7f417c217bf5cc7","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"agents.defaults.sandbox\",\n \"schema\": {\n \"type\": \"object\",\n \"additionalProperties\": false\n },\n \"children\": [\n {\n \"key\": \"mode\",\n \"path\": \"agents.defaults.sandbox.mode\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"workspaceAccess\",\n \"path\": \"agents.defaults.sandbox.workspaceAccess\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"sessionToolsVisibility\",\n \"path\": \"agents.defaults.sandbox.sessionToolsVisibility\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"scope\",\n \"path\": \"agents.defaults.sandbox.scope\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"perSession\",\n \"path\": \"agents.defaults.sandbox.perSession\",\n \"type\": \"boolean\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"workspaceRoot\",\n \"path\": \"agents.defaults.sandbox.workspaceRoot\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"docker\",\n \"path\": \"agents.defaults.sandbox.docker\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"browser\",\n \"path\": \"agents.defaults.sandbox.browser\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"prune\",\n \"path\": \"agents.defaults.sandbox.prune\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n }\n ]\n }\n}"}],"details":{"ok":true,"result":{"path":"agents.defaults.sandbox","schema":{"type":"object","additionalProperties":false},"children":[{"key":"mode","path":"agents.defaults.sandbox.mode","required":false,"hasChildren":false},{"key":"workspaceAccess","path":"agents.defaults.sandbox.workspaceAccess","required":false,"hasChildren":false},{"key":"sessionToolsVisibility","path":"agents.defaults.sandbox.sessionToolsVisibility","required":false,"hasChildren":false},{"key":"scope","path":"agents.defaults.sandbox.scope","required":false,"hasChildren":false},{"key":"perSession","path":"agents.defaults.sandbox.perSession","type":"boolean","required":false,"hasChildren":false},{"key":"workspaceRoot","path":"agents.defaults.sandbox.workspaceRoot","type":"string","required":false,"hasChildren":false},{"key":"docker","path":"agents.defaults.sandbox.docker","type":"object","required":false,"hasChildren":true},{"key":"browser","path":"agents.defaults.sandbox.browser","type":"object","required":false,"hasChildren":true},{"key":"prune","path":"agents.defaults.sandbox.prune","type":"object","required":false,"hasChildren":true}]}},"isError":false,"timestamp":1773622576928}} {"type":"message","id":"0d6dc5f6","parentId":"095bc9ec","timestamp":"2026-03-16T00:56:16.986Z","message":{"role":"toolResult","toolCallId":"call_TsVmFoCxhNGtNhVG27ervO8o|fc_0776d4d0ce7a6f6b0169b7553091c0819082abd45f3778376d","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"tools\",\n \"schema\": {\n \"type\": \"object\",\n \"additionalProperties\": false\n },\n \"hint\": {\n \"label\": \"Tools\",\n \"group\": \"Tools\",\n \"order\": 50,\n \"help\": \"Global tool access policy and capability configuration across web, exec, media, messaging, and elevated surfaces. Use this section to constrain risky capabilities before broad rollout.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"tools\",\n \"children\": [\n {\n \"key\": \"profile\",\n \"path\": \"tools.profile\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Tool Profile\",\n \"help\": \"Global tool profile name used to select a predefined tool policy baseline before applying allow/deny overrides. Use this for consistent environment posture across agents and keep profile names stable.\",\n \"tags\": [\n \"storage\",\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.profile\"\n },\n {\n \"key\": \"allow\",\n \"path\": \"tools.allow\",\n \"type\": \"array\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Tool Allowlist\",\n \"help\": \"Absolute tool allowlist that replaces profile-derived defaults for strict environments. Use this only when you intentionally run a tightly curated subset of tool capabilities.\",\n \"tags\": [\n \"access\",\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.allow\"\n },\n {\n \"key\": \"alsoAllow\",\n \"path\": \"tools.alsoAllow\",\n \"type\": \"array\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Tool Allowlist Additions\",\n \"help\": \"Extra tool allowlist entries merged on top of the selected tool profile and default policy. Keep this list small and explicit so audits can quickly identify intentional policy exceptions.\",\n \"tags\": [\n \"access\",\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.alsoAllow\"\n },\n {\n \"key\": \"deny\",\n \"path\": \"tools.deny\",\n \"type\": \"array\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Tool Denylist\",\n \"help\": \"Global tool denylist that blocks listed tools even when profile or provider rules would allow them. Use deny rules for emergency lockouts and long-term defense-in-depth.\",\n \"tags\": [\n \"access\",\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.deny\"\n },\n {\n \"key\": \"byProvider\",\n \"path\": \"tools.byProvider\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Tool Policy by Provider\",\n \"help\": \"Per-provider tool allow/deny overrides keyed by channel/provider ID to tailor capabilities by surface. Use this when one provider needs stricter controls than global tool policy.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.byProvider\"\n },\n {\n \"key\": \"web\",\n \"path\": \"tools.web\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Web Tools\",\n \"help\": \"Web-tool policy grouping for search/fetch providers, limits, and fallback behavior tuning. Keep enabled settings aligned with API key availability and outbound networking policy.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.web\"\n },\n {\n \"key\": \"media\",\n \"path\": \"tools.media\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"links\",\n \"path\": \"tools.links\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"sessions\",\n \"path\": \"tools.sessions\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"loopDetection\",\n \"path\": \"tools.loopDetection\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"message\",\n \"path\": \"tools.message\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"agentToAgent\",\n \"path\": \"tools.agentToAgent\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Agent-to-Agent Tool Access\",\n \"help\": \"Policy for allowing agent-to-agent tool calls and constraining which target agents can be reached. Keep disabled or tightly scoped unless cross-agent orchestration is intentionally enabled.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.agentToAgent\"\n },\n {\n \"key\": \"elevated\",\n \"path\": \"tools.elevated\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Elevated Tool Access\",\n \"help\": \"Elevated tool access controls for privileged command surfaces that should only be reachable from trusted senders. Keep disabled unless operator workflows explicitly require elevated actions.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.elevated\"\n },\n {\n \"key\": \"exec\",\n \"path\": \"tools.exec\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Exec Tool\",\n \"help\": \"Exec-tool policy grouping for shell execution host, security mode, approval behavior, and runtime bindings. Keep conservative defaults in production and tighten elevated execution paths.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.exec\"\n },\n {\n \"key\": \"fs\",\n \"path\": \"tools.fs\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"subagents\",\n \"path\": \"tools.subagents\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Subagent Tool Policy\",\n \"help\": \"Tool policy wrapper for spawned subagents to restrict or expand tool availability compared to parent defaults. Use this to keep delegated agent capabilities scoped to task intent.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.subagents\"\n },\n {\n \"key\": \"sandbox\",\n \"path\": \"tools.sandbox\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Sandbox Tool Policy\",\n \"help\": \"Tool policy wrapper for sandboxed agent executions so sandbox runs can have distinct capability boundaries. Use this to enforce stronger safety in sandbox contexts.\",\n \"tags\": [\n \"storage\",\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.sandbox\"\n },\n {\n \"key\": \"sessions_spawn\",\n \"path\": \"tools.sessions_spawn\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n }\n ]\n }\n}"}],"details":{"ok":true,"result":{"path":"tools","schema":{"type":"object","additionalProperties":false},"hint":{"label":"Tools","group":"Tools","order":50,"help":"Global tool access policy and capability configuration across web, exec, media, messaging, and elevated surfaces. Use this section to constrain risky capabilities before broad rollout.","tags":["advanced"]},"hintPath":"tools","children":[{"key":"profile","path":"tools.profile","required":false,"hasChildren":false,"hint":{"label":"Tool Profile","help":"Global tool profile name used to select a predefined tool policy baseline before applying allow/deny overrides. Use this for consistent environment posture across agents and keep profile names stable.","tags":["storage","tools"]},"hintPath":"tools.profile"},{"key":"allow","path":"tools.allow","type":"array","required":false,"hasChildren":true,"hint":{"label":"Tool Allowlist","help":"Absolute tool allowlist that replaces profile-derived defaults for strict environments. Use this only when you intentionally run a tightly curated subset of tool capabilities.","tags":["access","tools"]},"hintPath":"tools.allow"},{"key":"alsoAllow","path":"tools.alsoAllow","type":"array","required":false,"hasChildren":true,"hint":{"label":"Tool Allowlist Additions","help":"Extra tool allowlist entries merged on top of the selected tool profile and default policy. Keep this list small and explicit so audits can quickly identify intentional policy exceptions.","tags":["access","tools"]},"hintPath":"tools.alsoAllow"},{"key":"deny","path":"tools.deny","type":"array","required":false,"hasChildren":true,"hint":{"label":"Tool Denylist","help":"Global tool denylist that blocks listed tools even when profile or provider rules would allow them. Use deny rules for emergency lockouts and long-term defense-in-depth.","tags":["access","tools"]},"hintPath":"tools.deny"},{"key":"byProvider","path":"tools.byProvider","type":"object","required":false,"hasChildren":true,"hint":{"label":"Tool Policy by Provider","help":"Per-provider tool allow/deny overrides keyed by channel/provider ID to tailor capabilities by surface. Use this when one provider needs stricter controls than global tool policy.","tags":["tools"]},"hintPath":"tools.byProvider"},{"key":"web","path":"tools.web","type":"object","required":false,"hasChildren":true,"hint":{"label":"Web Tools","help":"Web-tool policy grouping for search/fetch providers, limits, and fallback behavior tuning. Keep enabled settings aligned with API key availability and outbound networking policy.","tags":["tools"]},"hintPath":"tools.web"},{"key":"media","path":"tools.media","type":"object","required":false,"hasChildren":true},{"key":"links","path":"tools.links","type":"object","required":false,"hasChildren":true},{"key":"sessions","path":"tools.sessions","type":"object","required":false,"hasChildren":true},{"key":"loopDetection","path":"tools.loopDetection","type":"object","required":false,"hasChildren":true},{"key":"message","path":"tools.message","type":"object","required":false,"hasChildren":true},{"key":"agentToAgent","path":"tools.agentToAgent","type":"object","required":false,"hasChildren":true,"hint":{"label":"Agent-to-Agent Tool Access","help":"Policy for allowing agent-to-agent tool calls and constraining which target agents can be reached. Keep disabled or tightly scoped unless cross-agent orchestration is intentionally enabled.","tags":["tools"]},"hintPath":"tools.agentToAgent"},{"key":"elevated","path":"tools.elevated","type":"object","required":false,"hasChildren":true,"hint":{"label":"Elevated Tool Access","help":"Elevated tool access controls for privileged command surfaces that should only be reachable from trusted senders. Keep disabled unless operator workflows explicitly require elevated actions.","tags":["tools"]},"hintPath":"tools.elevated"},{"key":"exec","path":"tools.exec","type":"object","required":false,"hasChildren":true,"hint":{"label":"Exec Tool","help":"Exec-tool policy grouping for shell execution host, security mode, approval behavior, and runtime bindings. Keep conservative defaults in production and tighten elevated execution paths.","tags":["tools"]},"hintPath":"tools.exec"},{"key":"fs","path":"tools.fs","type":"object","required":false,"hasChildren":true},{"key":"subagents","path":"tools.subagents","type":"object","required":false,"hasChildren":true,"hint":{"label":"Subagent Tool Policy","help":"Tool policy wrapper for spawned subagents to restrict or expand tool availability compared to parent defaults. Use this to keep delegated agent capabilities scoped to task intent.","tags":["tools"]},"hintPath":"tools.subagents"},{"key":"sandbox","path":"tools.sandbox","type":"object","required":false,"hasChildren":true,"hint":{"label":"Sandbox Tool Policy","help":"Tool policy wrapper for sandboxed agent executions so sandbox runs can have distinct capability boundaries. Use this to enforce stronger safety in sandbox contexts.","tags":["storage","tools"]},"hintPath":"tools.sandbox"},{"key":"sessions_spawn","path":"tools.sessions_spawn","type":"object","required":false,"hasChildren":true}]}},"isError":false,"timestamp":1773622576975}} {"type":"message","id":"516d1f04","parentId":"0d6dc5f6","timestamp":"2026-03-16T00:56:22.746Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b75534868881908c4f8aa880fef3d7\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1U29M7EPWisNzUa5pjBg0L-VFy9a91F5gojIdVjDYRIx8vyHvko7hoJLU-U1wS3wT8Y8Bt3uL9tP9BMLrV2csjYMMGfPsDyI0WgOfEtLooPMrhF1vc2XQjfyN3wi7_RHpG6LkAkNHt511Gd4LO-h4mNwdBFh5C89PRkrGZ38KBfnO0eW4yC-WXFCXujDslY9W4ojPgmjJF2VXa6YUM6ImY3ewuop0Nb-QWaXMvXn0QGZRD4wq33MJWjiqg66yC7pBrFRAIB-eDFnHQpS-JOGXNlJXQ1DkKT1Wv0hfi7iHZ4Y3jt64ubzmsJj7iyfzsu6AnZxF96hWxU0XJoKqp5jpF7wFtMtPDvz_BaqdE2v2LUKmsK8Mu9n_lF7T-HJA1SlmzAmrP-R1xv5q9hjWzykeL-8sOtSWg-UlQ2lxZ2-ANyom7ayMF4YFPXMrBYYN-nPJrs_r5YCQRKMVYcoHZgr0yetlXyhKpaF5j2FsMEiQo63M_9s99ft3t_0wGVa2sQS9Q0ZGxajeprYMDSFoAOYL2LaDWk3kilichoAx6gKzBAx3mwMcaZSA63viGLYNXm5NtWkziwbh3PjPybC8QKFIVhx3AtC0MRA1W2VDj1efxTJdG31XMfvQ9PSFQ-SfcLBjNkZujOofU20xun-xHVLhZWSvKKGsx4oNF1A-rPoShiu1DKs91MQ8cN1fNZN2xAT71NxKsVbaScvVbo-c_JEmXZosdBhLwvUTC-JiM2Bs4_IqoSh3BlCKtrV30N_6ygpEc7p4gHIcfQUnjkb_VRE8Zmk6pOE9Z2veS7JzPBXnpr2XAnq9E7jTEecPftqWuBrC3qeJCPQ2sirPojvRdBn6RflQr8xd0VaFKYVCpCWuH2jxkbnm3ej9d0M3aCuTJBOOR8QcxcBsw8jWw-wfhw5jkKoQytMRsVqgGHwCvQ7UQY8un0dY5Og62Q7ZvtZgo617LdzE7d9p-JjJKZcsoZqv6IsLpWnuBA2pZOitOOWO0oQOA=\",\"summary\":[]}"},{"type":"toolCall","id":"call_lzm52rdErlTVynulF4uyBAp7|fc_0776d4d0ce7a6f6b0169b7553694e88190adb514a8e8a1e35a","name":"gateway","arguments":{"action":"config.schema.lookup","path":"tools.profile"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"tools.profile\"}"},{"type":"toolCall","id":"call_5lE7TiXqKVgFf65BGAnNIB4N|fc_0776d4d0ce7a6f6b0169b7553694f4819096dddaa573baa5a0","name":"gateway","arguments":{"action":"config.schema.lookup","path":"tools.exec"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"tools.exec\"}"},{"type":"toolCall","id":"call_vUgh3gnDvQ9B6WeRt7kOGJI0|fc_0776d4d0ce7a6f6b0169b7553694fc819085aa89897fad9df0","name":"gateway","arguments":{"action":"config.schema.lookup","path":"agents.list.*.tools"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"agents.list.*.tools\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":96687,"output":112,"cacheRead":19456,"cacheWrite":0,"totalTokens":116255,"cost":{"input":0.24171750000000003,"output":0.00168,"cacheRead":0.004863999999999999,"cacheWrite":0,"total":0.24826150000000002}},"stopReason":"toolUse","timestamp":1773622576990}} {"type":"message","id":"c8625683","parentId":"516d1f04","timestamp":"2026-03-16T00:56:22.867Z","message":{"role":"toolResult","toolCallId":"call_lzm52rdErlTVynulF4uyBAp7|fc_0776d4d0ce7a6f6b0169b7553694e88190adb514a8e8a1e35a","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"tools.profile\",\n \"schema\": {},\n \"hint\": {\n \"label\": \"Tool Profile\",\n \"help\": \"Global tool profile name used to select a predefined tool policy baseline before applying allow/deny overrides. Use this for consistent environment posture across agents and keep profile names stable.\",\n \"tags\": [\n \"storage\",\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.profile\",\n \"children\": []\n }\n}"}],"details":{"ok":true,"result":{"path":"tools.profile","schema":{},"hint":{"label":"Tool Profile","help":"Global tool profile name used to select a predefined tool policy baseline before applying allow/deny overrides. Use this for consistent environment posture across agents and keep profile names stable.","tags":["storage","tools"]},"hintPath":"tools.profile","children":[]}},"isError":false,"timestamp":1773622582856}} {"type":"message","id":"aff77622","parentId":"c8625683","timestamp":"2026-03-16T00:56:22.911Z","message":{"role":"toolResult","toolCallId":"call_5lE7TiXqKVgFf65BGAnNIB4N|fc_0776d4d0ce7a6f6b0169b7553694f4819096dddaa573baa5a0","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"tools.exec\",\n \"schema\": {\n \"type\": \"object\",\n \"additionalProperties\": false\n },\n \"hint\": {\n \"label\": \"Exec Tool\",\n \"help\": \"Exec-tool policy grouping for shell execution host, security mode, approval behavior, and runtime bindings. Keep conservative defaults in production and tighten elevated execution paths.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.exec\",\n \"children\": [\n {\n \"key\": \"host\",\n \"path\": \"tools.exec.host\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Exec Host\",\n \"help\": \"Selects execution host strategy for shell commands, typically controlling local vs delegated execution environment. Use the safest host mode that still satisfies your automation requirements.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.exec.host\"\n },\n {\n \"key\": \"security\",\n \"path\": \"tools.exec.security\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Exec Security\",\n \"help\": \"Execution security posture selector controlling sandbox/approval expectations for command execution. Keep strict security mode for untrusted prompts and relax only for trusted operator workflows.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.exec.security\"\n },\n {\n \"key\": \"ask\",\n \"path\": \"tools.exec.ask\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Exec Ask\",\n \"help\": \"Approval strategy for when exec commands require human confirmation before running. Use stricter ask behavior in shared channels and lower-friction settings in private operator contexts.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.exec.ask\"\n },\n {\n \"key\": \"node\",\n \"path\": \"tools.exec.node\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Exec Node Binding\",\n \"help\": \"Node binding configuration for exec tooling when command execution is delegated through connected nodes. Use explicit node binding only when multi-node routing is required.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.exec.node\"\n },\n {\n \"key\": \"pathPrepend\",\n \"path\": \"tools.exec.pathPrepend\",\n \"type\": \"array\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Exec PATH Prepend\",\n \"help\": \"Directories to prepend to PATH for exec runs (gateway/sandbox).\",\n \"tags\": [\n \"storage\",\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.exec.pathPrepend\"\n },\n {\n \"key\": \"safeBins\",\n \"path\": \"tools.exec.safeBins\",\n \"type\": \"array\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Exec Safe Bins\",\n \"help\": \"Allow stdin-only safe binaries to run without explicit allowlist entries.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.exec.safeBins\"\n },\n {\n \"key\": \"safeBinTrustedDirs\",\n \"path\": \"tools.exec.safeBinTrustedDirs\",\n \"type\": \"array\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Exec Safe Bin Trusted Dirs\",\n \"help\": \"Additional explicit directories trusted for safe-bin path checks (PATH entries are never auto-trusted).\",\n \"tags\": [\n \"storage\",\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.exec.safeBinTrustedDirs\"\n },\n {\n \"key\": \"safeBinProfiles\",\n \"path\": \"tools.exec.safeBinProfiles\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Exec Safe Bin Profiles\",\n \"help\": \"Optional per-binary safe-bin profiles (positional limits + allowed/denied flags).\",\n \"tags\": [\n \"storage\",\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.exec.safeBinProfiles\"\n },\n {\n \"key\": \"backgroundMs\",\n \"path\": \"tools.exec.backgroundMs\",\n \"type\": \"integer\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"timeoutSec\",\n \"path\": \"tools.exec.timeoutSec\",\n \"type\": \"integer\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"cleanupMs\",\n \"path\": \"tools.exec.cleanupMs\",\n \"type\": \"integer\",\n \"required\": false,\n \"hasChildren\": false\n },\n {\n \"key\": \"notifyOnExit\",\n \"path\": \"tools.exec.notifyOnExit\",\n \"type\": \"boolean\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Exec Notify On Exit\",\n \"help\": \"When true (default), backgrounded exec sessions on exit and node exec lifecycle events enqueue a system event and request a heartbeat.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.exec.notifyOnExit\"\n },\n {\n \"key\": \"notifyOnExitEmptySuccess\",\n \"path\": \"tools.exec.notifyOnExitEmptySuccess\",\n \"type\": \"boolean\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Exec Notify On Empty Success\",\n \"help\": \"When true, successful backgrounded exec exits with empty output still enqueue a completion system event (default: false).\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.exec.notifyOnExitEmptySuccess\"\n },\n {\n \"key\": \"applyPatch\",\n \"path\": \"tools.exec.applyPatch\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n }\n ]\n }\n}"}],"details":{"ok":true,"result":{"path":"tools.exec","schema":{"type":"object","additionalProperties":false},"hint":{"label":"Exec Tool","help":"Exec-tool policy grouping for shell execution host, security mode, approval behavior, and runtime bindings. Keep conservative defaults in production and tighten elevated execution paths.","tags":["tools"]},"hintPath":"tools.exec","children":[{"key":"host","path":"tools.exec.host","type":"string","required":false,"hasChildren":false,"hint":{"label":"Exec Host","help":"Selects execution host strategy for shell commands, typically controlling local vs delegated execution environment. Use the safest host mode that still satisfies your automation requirements.","tags":["tools"]},"hintPath":"tools.exec.host"},{"key":"security","path":"tools.exec.security","type":"string","required":false,"hasChildren":false,"hint":{"label":"Exec Security","help":"Execution security posture selector controlling sandbox/approval expectations for command execution. Keep strict security mode for untrusted prompts and relax only for trusted operator workflows.","tags":["tools"]},"hintPath":"tools.exec.security"},{"key":"ask","path":"tools.exec.ask","type":"string","required":false,"hasChildren":false,"hint":{"label":"Exec Ask","help":"Approval strategy for when exec commands require human confirmation before running. Use stricter ask behavior in shared channels and lower-friction settings in private operator contexts.","tags":["tools"]},"hintPath":"tools.exec.ask"},{"key":"node","path":"tools.exec.node","type":"string","required":false,"hasChildren":false,"hint":{"label":"Exec Node Binding","help":"Node binding configuration for exec tooling when command execution is delegated through connected nodes. Use explicit node binding only when multi-node routing is required.","tags":["tools"]},"hintPath":"tools.exec.node"},{"key":"pathPrepend","path":"tools.exec.pathPrepend","type":"array","required":false,"hasChildren":true,"hint":{"label":"Exec PATH Prepend","help":"Directories to prepend to PATH for exec runs (gateway/sandbox).","tags":["storage","tools"]},"hintPath":"tools.exec.pathPrepend"},{"key":"safeBins","path":"tools.exec.safeBins","type":"array","required":false,"hasChildren":true,"hint":{"label":"Exec Safe Bins","help":"Allow stdin-only safe binaries to run without explicit allowlist entries.","tags":["tools"]},"hintPath":"tools.exec.safeBins"},{"key":"safeBinTrustedDirs","path":"tools.exec.safeBinTrustedDirs","type":"array","required":false,"hasChildren":true,"hint":{"label":"Exec Safe Bin Trusted Dirs","help":"Additional explicit directories trusted for safe-bin path checks (PATH entries are never auto-trusted).","tags":["storage","tools"]},"hintPath":"tools.exec.safeBinTrustedDirs"},{"key":"safeBinProfiles","path":"tools.exec.safeBinProfiles","type":"object","required":false,"hasChildren":true,"hint":{"label":"Exec Safe Bin Profiles","help":"Optional per-binary safe-bin profiles (positional limits + allowed/denied flags).","tags":["storage","tools"]},"hintPath":"tools.exec.safeBinProfiles"},{"key":"backgroundMs","path":"tools.exec.backgroundMs","type":"integer","required":false,"hasChildren":false},{"key":"timeoutSec","path":"tools.exec.timeoutSec","type":"integer","required":false,"hasChildren":false},{"key":"cleanupMs","path":"tools.exec.cleanupMs","type":"integer","required":false,"hasChildren":false},{"key":"notifyOnExit","path":"tools.exec.notifyOnExit","type":"boolean","required":false,"hasChildren":false,"hint":{"label":"Exec Notify On Exit","help":"When true (default), backgrounded exec sessions on exit and node exec lifecycle events enqueue a system event and request a heartbeat.","tags":["tools"]},"hintPath":"tools.exec.notifyOnExit"},{"key":"notifyOnExitEmptySuccess","path":"tools.exec.notifyOnExitEmptySuccess","type":"boolean","required":false,"hasChildren":false,"hint":{"label":"Exec Notify On Empty Success","help":"When true, successful backgrounded exec exits with empty output still enqueue a completion system event (default: false).","tags":["tools"]},"hintPath":"tools.exec.notifyOnExitEmptySuccess"},{"key":"applyPatch","path":"tools.exec.applyPatch","type":"object","required":false,"hasChildren":true}]}},"isError":false,"timestamp":1773622582900}} {"type":"message","id":"f357bf57","parentId":"aff77622","timestamp":"2026-03-16T00:56:22.945Z","message":{"role":"toolResult","toolCallId":"call_vUgh3gnDvQ9B6WeRt7kOGJI0|fc_0776d4d0ce7a6f6b0169b7553694fc819085aa89897fad9df0","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"agents.list.*.tools\",\n \"schema\": {\n \"type\": \"object\",\n \"additionalProperties\": false\n },\n \"children\": [\n {\n \"key\": \"profile\",\n \"path\": \"agents.list.*.tools.profile\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Agent Tool Profile\",\n \"help\": \"Per-agent override for tool profile selection when one agent needs a different capability baseline. Use this sparingly so policy differences across agents stay intentional and reviewable.\",\n \"tags\": [\n \"storage\"\n ]\n },\n \"hintPath\": \"agents.list[].tools.profile\"\n },\n {\n \"key\": \"allow\",\n \"path\": \"agents.list.*.tools.allow\",\n \"type\": \"array\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"alsoAllow\",\n \"path\": \"agents.list.*.tools.alsoAllow\",\n \"type\": \"array\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Agent Tool Allowlist Additions\",\n \"help\": \"Per-agent additive allowlist for tools on top of global and profile policy. Keep narrow to avoid accidental privilege expansion on specialized agents.\",\n \"tags\": [\n \"access\"\n ]\n },\n \"hintPath\": \"agents.list[].tools.alsoAllow\"\n },\n {\n \"key\": \"deny\",\n \"path\": \"agents.list.*.tools.deny\",\n \"type\": \"array\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"byProvider\",\n \"path\": \"agents.list.*.tools.byProvider\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Agent Tool Policy by Provider\",\n \"help\": \"Per-agent provider-specific tool policy overrides for channel-scoped capability control. Use this when a single agent needs tighter restrictions on one provider than others.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"agents.list[].tools.byProvider\"\n },\n {\n \"key\": \"elevated\",\n \"path\": \"agents.list.*.tools.elevated\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"exec\",\n \"path\": \"agents.list.*.tools.exec\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"fs\",\n \"path\": \"agents.list.*.tools.fs\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"loopDetection\",\n \"path\": \"agents.list.*.tools.loopDetection\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n },\n {\n \"key\": \"sandbox\",\n \"path\": \"agents.list.*.tools.sandbox\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true\n }\n ]\n }\n}"}],"details":{"ok":true,"result":{"path":"agents.list.*.tools","schema":{"type":"object","additionalProperties":false},"children":[{"key":"profile","path":"agents.list.*.tools.profile","required":false,"hasChildren":false,"hint":{"label":"Agent Tool Profile","help":"Per-agent override for tool profile selection when one agent needs a different capability baseline. Use this sparingly so policy differences across agents stay intentional and reviewable.","tags":["storage"]},"hintPath":"agents.list[].tools.profile"},{"key":"allow","path":"agents.list.*.tools.allow","type":"array","required":false,"hasChildren":true},{"key":"alsoAllow","path":"agents.list.*.tools.alsoAllow","type":"array","required":false,"hasChildren":true,"hint":{"label":"Agent Tool Allowlist Additions","help":"Per-agent additive allowlist for tools on top of global and profile policy. Keep narrow to avoid accidental privilege expansion on specialized agents.","tags":["access"]},"hintPath":"agents.list[].tools.alsoAllow"},{"key":"deny","path":"agents.list.*.tools.deny","type":"array","required":false,"hasChildren":true},{"key":"byProvider","path":"agents.list.*.tools.byProvider","type":"object","required":false,"hasChildren":true,"hint":{"label":"Agent Tool Policy by Provider","help":"Per-agent provider-specific tool policy overrides for channel-scoped capability control. Use this when a single agent needs tighter restrictions on one provider than others.","tags":["advanced"]},"hintPath":"agents.list[].tools.byProvider"},{"key":"elevated","path":"agents.list.*.tools.elevated","type":"object","required":false,"hasChildren":true},{"key":"exec","path":"agents.list.*.tools.exec","type":"object","required":false,"hasChildren":true},{"key":"fs","path":"agents.list.*.tools.fs","type":"object","required":false,"hasChildren":true},{"key":"loopDetection","path":"agents.list.*.tools.loopDetection","type":"object","required":false,"hasChildren":true},{"key":"sandbox","path":"agents.list.*.tools.sandbox","type":"object","required":false,"hasChildren":true}]}},"isError":false,"timestamp":1773622582933}} {"type":"message","id":"8e989c74","parentId":"f357bf57","timestamp":"2026-03-16T00:56:33.569Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7553a4e1c81908cbbe87c75693511\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1VAxleLHq6op3m5OV5Bt7ZJm92AmatPujqak4Ylnf3gxl66MSyvyf2_yKcgUExfERdrxhyL04WQEtV2vbTKbRDuUUryRQPQBWAKcwa7xWxUlMyE1kAXDBSJOGTiRwd2HZN-5cwTDGD-wxnAMBlmlbcwO4AIidjJpFnIskeUNrfB47e8rLRobvzNhjUc8DSGVBF2wZzt2pLzD5bIfX7YKiI3B7WyMlI2TeVMz7NiGgd-LPfjJS3aPqmxil7SJ0nvsjbMtgdjUT1BlywMnMfxL_F5M4Wo2FIRWgAihSX00H0jxMhwBrD-VIMa56Yp43doVeaEc_7VshDwwikcGjHOxClq2j1ICyZ3pZ4XzGZ7Z7iDT3liM0pQZeJ2PVUYEZ5O2vK3IQ4154VRxhcBwbEMCDssLdSlWP-EVtFei8g6Dmuy9zRQli1k5tV3707VSFchXES_5IaGFQaWmWy5Woi3p8PheE7RBvodeHmUkQtwAAVKXLzjGl66v_fnOAXV5HMbkY0TJ4tz9f1RUo30-DhmNw0yAluEoGLT71yrJmv2y8qBXEHaJ_GR4kM0HDQtocGPUDYrlRZCSSFLa5X94c2QahQ-EtymUb5UNWOLGX7nY1VSGhA8_TcqjYq1l1yd-OhKX3KyK0vkUNPfU1KdAvzCfdjhwrwBJ1qbpNzn-eWe646Ykg1a3wa5mfe6OjVtSoU_gfZR6yxq2jng5GHI-_8P_xs43tJK4oeFHzyqHgIYvaKxV8YHMyUU_j0robSy2Qq8USJaK4l8O0ka-fjuJ0G6GPwSjODy9cFaOZ3mzrWiqqgTsgsbiNtlHg0mWnIY-ERA-_YoxFtctidq9Pf5KrDHq5n_JfeQ42KbEf-42YDbCRmSLX_yFbrujGFeriBW0oAQM0gFd78xJLiQmYuivNU-wQFZnmvkClKqicIyl7eVInzYR3aGLbLbosU_HcZu0CJ_r_XOwn5ZA_GQpYj_jYcp6_J3tZ3Ky56EzOoVtoAP68KRJrLe5NuEj5ok59Q35wazl8q2mMBkBEu5uvgjKReY_Cmy6CCbypjHmKOkQrwZQGG6uE6R2Gdms66raxU--TT6Jx-1ASPQ50C4BVCCS4BZLlqtxgNb2jNPXJJNWBX_Xxc4nOjQ2ivYG9eVL7sT6O_Cae7CoHcmg02CiZdxmMpwHZWrbSTeC-z2mwDPC4k57ZzWj99ly9Lf73lM0-zFOq25wAvv9ob5Vn6lDVTVeqwz2zz49ocOCBudUij5a54jqswUpAjrGVxeR2cUTskUX6kfmMpx-B_CxgiLQ-s3oTK57K1DAcl6T-XjdnRds2oxMH6TjTHkFZ4OUuCcER5v7gor96ppvsS6EKrjnL2RCzPRxMexb5fOIbWEd0RKbEkCyn_wtUwLLfNGyPAfVlwF4_4RlJKTFCC8SWv-yst9jlNCn9hWS9R-CWksitlRu0HMzXLE-ZfLTmtyULs0A9fC3HLmQatrrw5vqiwiQEoyx8u-Xkp6zpeev_5qmSqRrUlEdqBwnhU5ow1ABc_S_XjRwYJH_kDfD3xNFEy9gh8_yDWKjRkUpVRCtHFvilcp7DAJdjGhxP4a4m5YRWEW6Nr_vUjVOC-5i5fEEw02dLQ73vQQD5iMswF8kPWo7tVUeDTdl03NiCs9jkZhDf3h2L6KJAeLRRxDykhHAeqv9MKYH6p0KeHaEtmknO70642Z3HBEtYDbSq3Bvq9HYcRDB_J8LLf6T3sv5DQud4CfOAcWp_e1VXA8KTnTVhQJgSFiEk_jxNbudM2Ne1IZwgWcXjexvs7BigGEY3J_zS1nOrgQylyJjvDms0K6zWwFr_fO96saZyazFjVJy-Gd_9wmm48BJsbh7IXdYq6E4cbwya15AXamNny1iKbqIrPGqJUR-zzhqoUV815-t1FA0MemUUG5GgFBA1vKSn9Co7CX9w9mGw7NxkzD8bVFKkanG_c9FRj4VdC64001aZUeiBk2u2EjpCAVSljwGlJMyWEsd2BahdwWl8DMb13rd7JYP7V5I2J8s58zHwRkEWnWGZ4kzgDHKHhsbvVrPWl-zqYTxyr57sm-Rf_gmOWL9m0zrpPRw91rzxDPpGnyExlWXcBuBocOkXkuLyo2ixeBRyUAv23k_eeSbFcevJIYiNC1DtkSNEYCrOd7IS9qJmiAE1b1xb95K-SxRzd2eUBi2NAr88SL5LMzBg5XiIvH20h0URyqxBbuGphamdC4VXz0LhT7wl_FGZpiywlvStwjS6FPv1uUl5NpjXYFmE1FJ_cdm883uKp8UxvPFFEe1fLDHA82Hvc63HYukguGvZ_jaIcZv_BiXnZ1hc9cvh8kLSRXofpYlvDcfPT_mgNY71GfAv7-Lh-q0nhsSqem7Xl_Ktn7H8XFJsJoBV55UxTBdZBkRF2--BeqV_HgXU9jEKTz495lWPJclu-v7JltnlqmhRxRUrNuzNmRkDlXt6GPiJ8rxKRc8jeQWOTOlElXR6S545US4edxjCxabNzFlbm0lCpuJUpY_zLeWBpzAxRaRPRRRxZoxTi6XQywgJBTkAxxVTRQaNSg7yLg375WFqabtLNya6TdfFAozZeLl4cffcQ9xg_AzYLUQ0fg3hw3uGOjwfqayC9EpaE0TwbZUhRFZkeD-O_0O0bqfcuJGBsp6-1YYHceu6xa9kLiZ-K9orzED3G4BUfoh8W0BvwC9vdSBJohOwwHFYKND2YCLPi1jU4BfqfYhSBQ5VwnLe_It0iJj-0nae4Nk255_WYKXD5CLkVYzoNM6NMrXj4AB2xHX10Hvp9MPeDcOoN63a-ooYo68_hIRh5VRvMvMaMV9GejM2VjycJnD5JjtnsUetek2IlSDA6vz0uhoXgairUondbgLRfju1Ar8M09obdayQJ9YhlsshkXtoMfg3i9RLKBLQJrGqjKOqNzOWJw8NXzfBCUkxbwcygiCJsjpLdnMya_-y3hnMNGe3CeB-J4R_lvoox5mE8nXxq239OCIafGqyk2nHzn04WZ6XLrBX7YTCIPZ0dzUDcHp430bQbcOQ==\",\"summary\":[]}"},{"type":"text","text":"Voy a pedirle al propio OpenClaw el detalle estructurado de esos hallazgos, así el parche queda preciso y no “a ojo”.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b7554045048190936f212885da7449\",\"phase\":\"commentary\"}"},{"type":"toolCall","id":"call_Sxnuqf97OihJrCZvusu8CAl6|fc_0776d4d0ce7a6f6b0169b75540c2d48190b768c7f0c594ceeb","name":"exec","arguments":{"command":"openclaw security audit --deep --json","workdir":"/home/ubuntu/.openclaw/workspace","yieldMs":10000,"timeout":60},"partialJson":"{\"command\":\"openclaw security audit --deep --json\",\"workdir\":\"/home/ubuntu/.openclaw/workspace\",\"yieldMs\":10000,\"timeout\":60}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":114076,"output":432,"cacheRead":0,"cacheWrite":0,"totalTokens":114508,"cost":{"input":0.28519,"output":0.0064800000000000005,"cacheRead":0,"cacheWrite":0,"total":0.29167}},"stopReason":"toolUse","timestamp":1773622582949}} {"type":"message","id":"7262f524","parentId":"8e989c74","timestamp":"2026-03-16T00:56:33.656Z","message":{"role":"toolResult","toolCallId":"call_Sxnuqf97OihJrCZvusu8CAl6|fc_0776d4d0ce7a6f6b0169b75540c2d48190b768c7f0c594ceeb","toolName":"exec","content":[{"type":"text","text":"{\n \"status\": \"error\",\n \"tool\": \"exec\",\n \"error\": \"exec denied: allowlist miss\"\n}"}],"details":{"status":"error","tool":"exec","error":"exec denied: allowlist miss"},"isError":false,"timestamp":1773622593641}} {"type":"message","id":"7d9a65df","parentId":"7262f524","timestamp":"2026-03-16T00:56:45.472Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b755492464819097cdecace6f90b15\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1VNzD1UoPCI8EIQ_wQwzEA_wqncZpsWaMaF8Ytnyh_D4mk3-Y6jCKgoUJXhfJiOAcBx16QbK7KMTQHA0uWsxulAMREVOXK6jhtnDzs28wP7bA22pJF-o26PR778NNrPPsAYactbYDbR3D-dY_VJW7kqEOBSYipZqaH3nTBdLyR7ekrGKrsVWBDWeynY7BVvGNMBAN4gBZNOzK72eis-0tKUZRLUlCbFfgvJRJZe9ER0NvRX2TEHsI70DC9R5_HNHBZc80Pt77_87xo2WznHPbXT1mFtrvgnGzeqNHNtqE7zIYnsCYk-HNr5kcNty9vF_Cn3q4U_H3U1xDmcQloZRD0HEPPuAzmtJxqnV5CARsY_1I_yDnrsQ4PDGEltYCJrZaOqGnzENSrNQu3kGpgqNN6I8Cy5Ym4HtlEUV78-c56aMRMbny5-6aqlm3YOPvdfyBL9Aw8IBG1L9a07kte8KSL_ZDMr3zRNvCYJ6gUQfCRBj8fOoJBeI-3MIX2RZRwf1p_rkUWnE_NzrBsP67jll_bqVrTNwS2OLZHYrkvqm3uMmY3QRvdnrAOYTAew53BD_bFNsUdyFPdNYxNTw7i6jd6PL2im_6dKYkXsRq4BIlRO7e9JzY3Ma3EfSYhoWFKqst3CA1Jybzqgn_nYpN32PY6DQjn9pa3QISUx4MSLKLcY1p02IyUIUvKJhiIlTmIISBUZxX2JXF4nDAhm2dlZA1lDIin0ccRsSu9tyWYF8ufCmzsnBTZbFwoaKSObU5MoVhcuQ95yfe4mVD4HclPTizGGEqOL5vJ8O7mZmZZhEwsWhf4T9dN5MNzl_7Lw7kwWl9l8cxRahlDXsDGy8aiYQeIxIJ9vE6FMfji_MJVST9nLkGoKI6t0ALUwz9TXwm1nMNB3_4FCeJt5iUokRZgj4d8j1yjRlByM9OPZu7Xj4Zz7X8XE9RFs_bWJNZQh1wQGu7zPvy3LGHjf0PRNWyLptMsEb9CoIV0030Jho30mWMlKrm2Va_Y1McO1X-jKVED86MXsvGc-lP6HfguXS2j2rarAJ2lWUygFNdrA1qEMCdzNsQ6MP1OzNaoaO1YxXxbVwPHMkC5mwZNYNzBFNR2WWTFcH3U72LgJeaHMdQDFHpT4ffNYZmZe2qBJhIHev7oIMH2pkz69EGjZUnIzWF_ZJe1jiCIjd0c9u3rIkdWC6LOe6J4gR6S9T7sD1vEKfhgbBcpyZIIQT3JQEFAidR-lpDZNAsUrDtO9OPXvpgr5tjjeq9LwsODtieYtQYaBtLvOCYV48mp3quKYTP0XaVHAqge0FiMBSm8e7Lp_74GJgy4wkRrO8xW1RTxabGLipfuhJ24DcQStQq6HZPp7Dj_TyqU75uMUmUNJQptfp1jVVC_g_I5BuFWToEXPdigRv0PHMG_Y\",\"summary\":[]}"},{"type":"toolCall","id":"call_MrYmRgX7WknFcCCkfYmC2CEz|fc_0776d4d0ce7a6f6b0169b7554d4b5481909bdc2f55fd4e2237","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/SKILL.md"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/SKILL.md\"}"},{"type":"toolCall","id":"call_KWZcFBfu2Al1xGFcG4csbGt5|fc_0776d4d0ce7a6f6b0169b7554d4b688190a822e91b5e4d633b","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs","offset":1,"limit":250},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs\",\"offset\":1,\"limit\":250}"},{"type":"toolCall","id":"call_iqloUWa0iIeO8YSjdy0nzCGj|fc_0776d4d0ce7a6f6b0169b7554d4b708190a3d9f6db9755f1a7","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs","offset":1,"limit":250},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs\",\"offset\":1,\"limit\":250}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":114546,"output":214,"cacheRead":0,"cacheWrite":0,"totalTokens":114760,"cost":{"input":0.28636500000000004,"output":0.00321,"cacheRead":0,"cacheWrite":0,"total":0.289575}},"stopReason":"toolUse","timestamp":1773622593661}} {"type":"message","id":"504927c1","parentId":"7d9a65df","timestamp":"2026-03-16T00:56:45.529Z","message":{"role":"toolResult","toolCallId":"call_MrYmRgX7WknFcCCkfYmC2CEz|fc_0776d4d0ce7a6f6b0169b7554d4b5481909bdc2f55fd4e2237","toolName":"read","content":[{"type":"text","text":"---\nname: asana\ndescription: \"Integrate Asana with Clawdbot via the Asana REST API. Use when you need to list/search/create/update Asana tasks/projects/workspaces, or to set up Asana OAuth (authorization code grant) for a personal local-only integration (OOB/manual code paste).\"\n---\n\n# Asana (Clawdbot skill)\n\nThis skill is designed for a **personal local-only** Asana integration using **OAuth** with an **out-of-band/manual code paste** flow.\n\n## What this skill provides\n- A small Node CLI to:\n - generate the Asana authorize URL\n - exchange an authorization code for access/refresh tokens\n - auto-refresh the access token\n - make basic API calls (e.g. `/users/me`, `/workspaces`, tasks)\n\n## Setup (OAuth, OOB/manual code)\n\n### 0) Create an Asana app\nIn Asana Developer Console (My apps):\n- Create app\n- Enable scopes you will need (typical: `tasks:read`, `tasks:write`, `projects:read`)\n- Set redirect URI to the OOB value (manual code):\n - `urn:ietf:wg:oauth:2.0:oob`\n\n### 1) Provide credentials (two options)\n\n**Option A (recommended for Clawdbot):** save to a local credentials file:\n```bash\nnode scripts/configure.mjs --client-id \"...\" --client-secret \"...\"\n```\nThis writes `~/.clawdbot/asana/credentials.json`.\n\n**Option B:** set environment variables (shell/session):\n- `ASANA_CLIENT_ID`\n- `ASANA_CLIENT_SECRET`\n\n### 2) Run OAuth\nFrom the repo root:\n\n1) Print the authorize URL:\n```bash\nnode scripts/oauth_oob.mjs authorize\n```\n2) Open the printed URL, click **Allow**, copy the code.\n3) Exchange code and save tokens locally:\n```bash\nnode scripts/oauth_oob.mjs token --code \"PASTE_CODE_HERE\"\n```\n\nTokens are stored at:\n- `~/.clawdbot/asana/token.json`\n\n## Chat usage (support both explicit + natural language)\n\nYou can use either:\n- **Explicit commands**: start the message with `/asana ...`\n- **Natural language**: e.g. “list tasks assigned to me”\n\nFor Clawdbot, implement the mapping by translating the user request into the appropriate `asana_api.mjs` command.\n\nExamples:\n- `/asana tasks-assigned` → `tasks-assigned --assignee me`\n- “list tasks assigned to me” → `tasks-assigned --assignee me`\n- “list all tasks in ” → resolve `` to a project gid, then `tasks-in-project --project `\n- “list tasks due date from 2026-01-01 to 2026-01-15” → `search-tasks --assignee me --due_on.after 2026-01-01 --due_on.before 2026-01-15`\n\n(Optional helper) `scripts/asana_chat.mjs` can map common phrases to a command skeleton.\n\n## Using the API helper\n\nSanity check (who am I):\n```bash\nnode scripts/asana_api.mjs me\n```\n\nList workspaces:\n```bash\nnode scripts/asana_api.mjs workspaces\n```\n\nSet a default workspace (optional):\n```bash\nnode scripts/asana_api.mjs set-default-workspace --workspace \n```\nAfter that, you can omit `--workspace` for commands that support it.\n\nList projects in a workspace (explicit):\n```bash\nnode scripts/asana_api.mjs projects --workspace \n```\nList projects using the default workspace:\n```bash\nnode scripts/asana_api.mjs projects\n```\n\nList tasks in a project:\n```bash\nnode scripts/asana_api.mjs tasks-in-project --project \n```\n\nList tasks assigned to me (workspace required by Asana):\n```bash\nnode scripts/asana_api.mjs tasks-assigned --workspace --assignee me\n```\nOr using the default workspace:\n```bash\nnode scripts/asana_api.mjs tasks-assigned --assignee me\n```\n\nSearch tasks (advanced search):\n```bash\nnode scripts/asana_api.mjs search-tasks --workspace --text \"release\" --assignee me\n# also supports convenience: --project \n```\n\nView a task:\n```bash\nnode scripts/asana_api.mjs task \n```\n\nMark a task complete:\n```bash\nnode scripts/asana_api.mjs complete-task \n```\n\nUpdate a task:\n```bash\nnode scripts/asana_api.mjs update-task --name \"New title\" --due_on 2026-02-01\n```\n\nComment on a task:\n```bash\nnode scripts/asana_api.mjs comment --text \"Update: shipped\"\n```\n\nCreate a task:\n```bash\nnode scripts/asana_api.mjs create-task --workspace --name \"Test task\" --notes \"from clawdbot\" --projects \n```\n\n## Notes / gotchas\n- OAuth access tokens expire; refresh tokens are used to obtain new access tokens.\n- If you later want multi-user support, replace OOB with a real redirect/callback.\n- Don’t log tokens.\n"}],"isError":false,"timestamp":1773622605518}} {"type":"message","id":"045cdea1","parentId":"504927c1","timestamp":"2026-03-16T00:56:45.540Z","message":{"role":"toolResult","toolCallId":"call_KWZcFBfu2Al1xGFcG4csbGt5|fc_0776d4d0ce7a6f6b0169b7554d4b688190a822e91b5e4d633b","toolName":"read","content":[{"type":"text","text":"#!/usr/bin/env node\n/**\n * Minimal Asana API CLI with OAuth refresh.\n *\n * Reads token from ~/.clawdbot/asana/token.json\n * Requires ASANA_CLIENT_ID + ASANA_CLIENT_SECRET for refresh.\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst API_BASE = 'https://app.asana.com/api/1.0';\nconst TOKEN_URL = 'https://app.asana.com/-/oauth_token';\n\nfunction die(msg) {\n console.error(msg);\n process.exit(1);\n}\n\nfunction tokenPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'token.json');\n}\n\nfunction configPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'config.json');\n}\n\nfunction loadConfig() {\n const p = configPath();\n if (!fs.existsSync(p)) return {};\n try {\n return JSON.parse(fs.readFileSync(p, 'utf-8')) || {};\n } catch {\n return {};\n }\n}\n\nfunction loadToken() {\n const p = tokenPath();\n if (!fs.existsSync(p)) die(`Token file not found: ${p}. Run oauth_oob.mjs token first.`);\n return JSON.parse(fs.readFileSync(p, 'utf-8'));\n}\n\nfunction saveToken(tok) {\n const p = tokenPath();\n fs.mkdirSync(path.dirname(p), { recursive: true });\n fs.writeFileSync(p, JSON.stringify(tok, null, 2));\n}\n\nfunction urlEncode(params) {\n const u = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) continue;\n u.set(k, String(v));\n }\n return u.toString();\n}\n\nasync function postForm(url, params) {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: urlEncode(params),\n });\n const text = await res.text();\n let data;\n try {\n data = JSON.parse(text);\n } catch {\n throw new Error(`Non-JSON response (${res.status}): ${text.slice(0, 300)}`);\n }\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${JSON.stringify(data)}`);\n return data;\n}\n\nasync function ensureAccessToken(token) {\n const now = Date.now();\n const expiresAt = token.expires_at_ms;\n if (typeof token.access_token !== 'string') die('Token missing access_token');\n\n // Refresh if expiring within 2 minutes\n if (expiresAt && now < expiresAt - 120_000) return token;\n\n if (!token.refresh_token) {\n // Some flows may not return refresh_token; in that case user must re-auth.\n return token;\n }\n\n let clientId = process.env.ASANA_CLIENT_ID;\n let clientSecret = process.env.ASANA_CLIENT_SECRET;\n if (!clientId || !clientSecret) {\n // Fallback to ~/.clawdbot/asana/credentials.json\n try {\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n clientId = clientId || creds.client_id;\n clientSecret = clientSecret || creds.client_secret;\n } catch {\n // ignore\n }\n }\n if (!clientId || !clientSecret) {\n die(\n 'Token needs refresh but ASANA_CLIENT_ID/ASANA_CLIENT_SECRET are not set, and ~/.clawdbot/asana/credentials.json is missing. Run: node skills/asana/scripts/configure.mjs --client-id ... --client-secret ...',\n );\n }\n\n const data = await postForm(TOKEN_URL, {\n grant_type: 'refresh_token',\n client_id: clientId,\n client_secret: clientSecret,\n refresh_token: token.refresh_token,\n });\n\n const refreshed = {\n ...token,\n ...data,\n obtained_at_ms: now,\n expires_at_ms: typeof data.expires_in === 'number' ? now + data.expires_in * 1000 : null,\n };\n\n saveToken(refreshed);\n return refreshed;\n}\n\nasync function asanaGet(pathname, token, query) {\n const url = new URL(API_BASE + pathname);\n if (query) {\n for (const [k, v] of Object.entries(query)) url.searchParams.set(k, String(v));\n }\n const res = await fetch(url, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n const text = await res.text();\n let data;\n try {\n data = JSON.parse(text);\n } catch {\n throw new Error(`Non-JSON response (${res.status}): ${text.slice(0, 300)}`);\n }\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${JSON.stringify(data)}`);\n return data;\n}\n\nasync function asanaJson(method, pathname, token, body) {\n const url = API_BASE + pathname;\n const res = await fetch(url, {\n method,\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n body: body === undefined ? undefined : JSON.stringify(body),\n });\n const text = await res.text();\n let data;\n try {\n data = JSON.parse(text);\n } catch {\n throw new Error(`Non-JSON response (${res.status}): ${text.slice(0, 300)}`);\n }\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${JSON.stringify(data)}`);\n return data;\n}\n\nconst asanaPost = (pathname, token, body) => asanaJson('POST', pathname, token, body);\nconst asanaPut = (pathname, token, body) => asanaJson('PUT', pathname, token, body);\n\nfunction parseArgs(argv) {\n const [cmd, ...rest] = argv;\n const flags = {};\n const positionals = [];\n for (let i = 0; i < rest.length; i++) {\n const a = rest[i];\n if (a.startsWith('--')) {\n const k = a.slice(2);\n const v = rest[i + 1] && !rest[i + 1].startsWith('--') ? rest[++i] : true;\n flags[k] = v;\n } else {\n positionals.push(a);\n }\n }\n return { cmd, flags, positionals };\n}\n\nfunction csvList(v) {\n if (!v) return [];\n return String(v)\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n}\n\nasync function resolveMeGid(accessToken) {\n const me = await asanaGet('/users/me', accessToken);\n const gid = me?.data?.gid;\n if (!gid) throw new Error('Could not resolve /users/me gid');\n return String(gid);\n}\n\nfunction printJson(x) {\n console.log(JSON.stringify(x, null, 2));\n}\n\nasync function main() {\n const { cmd, flags, positionals } = parseArgs(process.argv.slice(2));\n if (!cmd) {\n die(\n 'Command required: me | workspaces | list-workspaces | set-default-workspace | projects | tasks-in-project | tasks-assigned | search-tasks | task | update-task | complete-task | comment | create-task',\n );\n }\n\n let tok = loadToken();\n tok = await ensureAccessToken(tok);\n const accessToken = tok.access_token;\n const cfg = loadConfig();\n\n const getWorkspaceOrDefault = () => {\n const w = flags.workspace || cfg.default_workspace_gid;\n return w ? String(w) : null;\n };\n\n if (cmd === 'me') {\n printJson(await asanaGet('/users/me', accessToken));\n return;\n }\n\n if (cmd === 'workspaces' || cmd === 'list-workspaces') {\n printJson(await asanaGet('/workspaces', accessToken));\n return;\n }\n\n if (cmd === 'set-default-workspace') {\n const workspace = flags.workspace || positionals[0];\n if (!workspace) die('Usage: set-default-workspace --workspace ');\n\n const outPath = configPath();\n const next = { ...cfg, default_workspace_gid: String(workspace) };\n fs.mkdirSync(path.dirname(outPath), { recursive: true });\n fs.writeFileSync(outPath, JSON.stringify(next, null, 2));\n console.log(`Saved default workspace to: ${outPath}`);\n console.log(`default_workspace_gid = ${next.default_workspace_gid}`);\n return;\n }\n\n if (cmd === 'projects') {\n const workspace = getWorkspaceOrDefault();\n\n[140 more lines in file. Use offset=251 to continue.]"}],"isError":false,"timestamp":1773622605530}} {"type":"message","id":"44012b83","parentId":"045cdea1","timestamp":"2026-03-16T00:56:45.554Z","message":{"role":"toolResult","toolCallId":"call_iqloUWa0iIeO8YSjdy0nzCGj|fc_0776d4d0ce7a6f6b0169b7554d4b708190a3d9f6db9755f1a7","toolName":"read","content":[{"type":"text","text":"#!/usr/bin/env node\n/**\n * Asana OAuth (OOB/manual code paste) helper.\n *\n * Usage:\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs authorize\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs token --code \"...\"\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst AUTH_URL = 'https://app.asana.com/-/oauth_authorize';\nconst TOKEN_URL = 'https://app.asana.com/-/oauth_token';\nconst REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob';\n\nfunction die(msg) {\n console.error(msg);\n process.exit(1);\n}\n\nfunction parseArgs(argv) {\n const [cmd, ...rest] = argv;\n const flags = {};\n for (let i = 0; i < rest.length; i++) {\n const a = rest[i];\n if (a.startsWith('--')) {\n const k = a.slice(2);\n const v = rest[i + 1] && !rest[i + 1].startsWith('--') ? rest[++i] : true;\n flags[k] = v;\n }\n }\n return { cmd, flags };\n}\n\nfunction tokenPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'token.json');\n}\n\nfunction ensureDir(p) {\n fs.mkdirSync(path.dirname(p), { recursive: true });\n}\n\nfunction saveToken(json) {\n const p = tokenPath();\n ensureDir(p);\n fs.writeFileSync(p, JSON.stringify(json, null, 2));\n console.log(`Saved token to: ${p}`);\n}\n\nfunction urlEncode(params) {\n const u = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) continue;\n u.set(k, String(v));\n }\n return u.toString();\n}\n\nasync function postForm(url, params) {\n const res = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: urlEncode(params),\n });\n const text = await res.text();\n let data;\n try {\n data = JSON.parse(text);\n } catch {\n throw new Error(`Non-JSON response (${res.status}): ${text.slice(0, 300)}`);\n }\n if (!res.ok) {\n throw new Error(`HTTP ${res.status}: ${JSON.stringify(data)}`);\n }\n return data;\n}\n\nasync function main() {\n const { cmd, flags } = parseArgs(process.argv.slice(2));\n let clientId = process.env.ASANA_CLIENT_ID;\n let clientSecret = process.env.ASANA_CLIENT_SECRET;\n\n // Optional fallback to ~/.clawdbot/asana/credentials.json\n try {\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n clientId = clientId || creds.client_id;\n clientSecret = clientSecret || creds.client_secret;\n } catch {\n // ignore\n }\n\n if (!cmd) die('Command required: authorize | token');\n if (!clientId) die('Missing ASANA_CLIENT_ID (or ~/.clawdbot/asana/credentials.json)');\n\n if (cmd === 'authorize') {\n const scope = flags.scope || 'default';\n const state = flags.state || crypto.randomUUID();\n // Asana supports code challenge / PKCE; OOB is typically used for simple flows.\n const url = `${AUTH_URL}?${urlEncode({\n client_id: clientId,\n redirect_uri: REDIRECT_URI,\n response_type: 'code',\n state,\n // If you want explicit scopes, pass --scope \"tasks:read tasks:write\"\n ...(scope !== 'default' ? { scope } : {}),\n })}`;\n console.log('Open this URL in your browser, click Allow, then copy the code:');\n console.log(url);\n console.log('\\nThen run:');\n console.log(`node asana/scripts/oauth_oob.mjs token --code \"PASTE_CODE\"`);\n return;\n }\n\n if (cmd === 'token') {\n if (!clientSecret) die('Missing ASANA_CLIENT_SECRET');\n const code = flags.code;\n if (!code || typeof code !== 'string') die('Missing --code');\n\n const data = await postForm(TOKEN_URL, {\n grant_type: 'authorization_code',\n client_id: clientId,\n client_secret: clientSecret,\n redirect_uri: REDIRECT_URI,\n code,\n });\n\n // Normalize with a timestamp; Asana returns expires_in (seconds)\n const now = Date.now();\n const token = {\n ...data,\n obtained_at_ms: now,\n expires_at_ms: typeof data.expires_in === 'number' ? now + data.expires_in * 1000 : null,\n };\n\n saveToken(token);\n return;\n }\n\n die(`Unknown command: ${cmd}`);\n}\n\nmain().catch((e) => die(String(e?.stack || e)));\n"}],"isError":false,"timestamp":1773622605541}} {"type":"message","id":"7e94565a","parentId":"44012b83","timestamp":"2026-03-16T00:57:04.124Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Evaluating Asana skill risks**\n\nThe Asana skill seems legitimate and not malicious, but I suspect the audit warning might be a false positive due to how credentials are read from environment files. Disabling it because it's user-authored but potentially inactive may be wise. Although the user prefers Asana, it’s unclear if there's current integration. I should quarantine the skill until further review, pin down the clawrouter version, and tighten execution controls. I’ll need to gather more details and explore documentation for a safer solution.\n\n**Analyzing plugin tool security**\n\nThe warning seems related to plugin tools that are accessible under permissive policies rather than just execution. Tightening execution settings from off to on-miss makes sense. I might also consider setting `tools.profile` to \"minimal\" or \"default-safe,\" but I need to verify actual profile names first. Inspecting local documentation would help. I could use `openclaw help` to check tool profiles, but I’m not sure that will yield results. Alternatively, maybe a thorough security audit could provide insights. I also wonder if an elevated mode could allow bypassing the stricter allowlist.\n\n**Exploring tool approval settings**\n\nThe tool indicates that elevated requests for execution run on the host, but approvals might still be necessary. I think setting `elevated=true` might work, though it's unclear if it requires approval. I’ll try running the command from earlier, `openclaw security audit --deep`, since the openclaw binary may be permitted in elevated mode. I should check if approval is needed and whether I can use the host as node/gateway. I’ll attempt executing with elevated set to true and an ask on-miss.","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7555077348190a15a6ccf3983c7ab\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1Vf4gglLy60pj4Kj-xL1il3nZkLuCwca3KjHasHMLnwlqRxjs3Pyt9pP-tPT0UAKNYnRgJTfL0XIxlBnyhHN1kWWYz8oHcRhDaQxSYBhId3eZUBN1u5Qga990eTKm0dcDgerM3yNU0pJWr2Fv3gtYCEdBTgw5ZYqVng21nlRc1csq1ya4M_85MMMd1FOTa_fqewR_-fIi2zRKEHni7JtPRLPTV-yyWvzTMctju-9KdA3_1WPedUj-r9LguMc8kSMjHLe1xrMLVhjb7YK-cVdrhuydH10biUXqAa3G2PULlQVl6esNSyJcuyx75IwrZ97I6nqL4hfx8PpLVgCW27xuJzBstN6bepn8tX4MMrGNZyV7kxaTP_Y_MnK8w8Zjn8Wrthjb5G_SwOlkh_yPUWxodS_8B-GFrbOUVO9FzfyUMBgxlEyEsiUB90pIFLvHeR0Cqch9Z93idZWZGSuWT6F3KYPyT7ZzfooY4be-gE4NF106gjQnEYFYkeIeULvGaeEj9HvPUTdg5UPqjVgtPucYTSq7kDTReifN7c1LMhpN7iCAdPXcyDz9uulGvtAG0FtD--W_j_FQ3BQwAtEF00MWQNigi-HzSf-chPYJm9TlB6RG0GWsAm8Xu9K8p11fJZjKsIikjSixydx-Lq0UasAnVLJR2zEZ_X7BstJ8yI_hvJSKzXcBFDqu2rYF1-3bHfxH27pXAKx7ehJoHk6E5EBh6zq_UyQcdphR0Cm-YxrYa7zeV70aAhknzRBnD5kuwTnAKcmodVjpx9UjGJeG99c7KGDr_MkFSJi0Qq8loyvTfXxwxuetz1EZGlxY_NxxgvQxRqX95evgW7rgQiH8iIMhSxCSDvhUyrGT1ocISNpusmW8lhU8hKGauUa7M1lDDDCF06Sii6FYMwRNAZXWbCy-ZNV64FnYbh7Jhx2LSPRkn3LQi-9VngyNdKNily3tTFXFpHDJ7MZW9g9xjNPyqeLYl-hxh-hk1YIvOAHcUkvu2m0pczCriRoKrQpSfP527fmURAqdY881wa2-8B-S41BHKlHe_LA6WZZiV6mv_Dsm9mH0hIWpVYLEz3ib1nE4R-EUnNXPZJj13vpof5jWDac5ehxLyXxqS32SlbvdHUGKgXTz6LtFlyXPO8HIIInutiuF-_YI4oaJPJ5gfsprtsaXxUMLxmBgZwNkKIov4R9XRDmW3Z1QxMHqdfLHtO8uuYkjlcliUtJi3Vnr4tc2kd33JzfIcH7ejiCfesqGCEMIgxlGu9IOfflp3uji8Hjs7pYjGS-bQoCU34vGcAkz6pmFE41iIt-5UNd2AtTeCSzPmkCAwPd3Mg3i9n8TRzw8UK9FMfGMcCDqtJYhiWn-ibcTpjyzigOI-rvgJP6hBaPG76MDmKiUc21_Wrh8xVfhiWHavl3n4POuNUU8szBKnXDbiPEBswqJwCpVzwsR5SbrHoqhqoRRfYy0DJZlqvxFrlHnpTypmJjxUtcYoK1HHyJihY_yBZKAgCkxEOvLebb9sM9ALVUr--Xfen_H7dWWTJZq7vFa0UoFSu10DwrlzzA9pMsBmKZZ179xgcYtKioFjNyEm6LH97-OLxLM-PU2Z_6LT8k1PaSl1zmfjgGog5scyf9DrbBquZzZTROELWHvWwWeHEIsltG0p7I5xYBex8YoBxL8qcMNusIJxJOl5J0za2voDgiYefOn8BlPnYVE1x7h27k6RlamHEZr9kw1xWrpU3JtdmxXNJlVYxVK6m5ZweNebLQjH6p_mYZEp-8bB_ktmU4Xw9wqDTvg54b4v8uefF0yuIDsQNi2cbTR23OTIE5H8JI3nwBvBahTYuc78vb5CKqBKWXVGujXSxterGLiupwQCvQOssmVUHyc4hFd98CAPwz11VhQtdl6O8wKpkNkOmKs-6hL0tKB-zFSP5fjxv9Eysa2YpVuFQBdEy0uI8wjaDQUO1nLB2qC7vM-laz1sDiDwH4th8jHCEE4sAAYimZ2Q5z3rMS5t-OatGyiKyHofjOuxg9XjYqLoVDp8gilaz7iXsj7NavL-gisCIPRJbGJ7HMFRnU6G1iB_ORw8e7DFfe8PQWeGC2HNTxPbCdPsLBpoSZC2WGxktaIFabIq2uEurK9vp9JCEf1yPIJ-tghAR66Y-98Hx_oPlCHRw3DxJC-Ltovus4eXBKWF2pcI6jI0XJEOoTuTsQ03P06yI00mw6gX111MFpw6xX21QWkXjsqieiEAitCUAsOCZdJtfOg5UB-3mHYJQoMC8Sl5xs_WAWcpGTTpYuccgsR4vihz8r_v1W60oHt5gihOLYA5sC0uz9FC81ptpYPRk7IVy4YnUOqSTwhrpzM7-p6aOqIUPjVkdOAEzSO5jr4g7yiXEFTlWHE-l2DKl3RrnEjs4cTcxXaMCrL3gNVPzexA5akBqcJYCoDVOAnIRSEuW54SsihJJl626b7URZ7Z09Dc_ahg0N625BDTHJrqlXzHT-Q-My25sCOW6Hjk1bimU9IFrKjwGvvy1yWchaoSzjkczvKXu4BqVQXGEKElMeoi3Ar1Ga7UNH_CMObf8gzSZXom4N4VvqZR0sImb9E4AkKN5o9_dv9HZnasPC1Xa6VBWN9Dv-Pbj1IkDpFLJ6kwypF-zR0fswdPx49-ZIF6qP0d02P2-vF-9a9GNVBdGnRM9jEVAyMWOXNVJf45VSnpT00rQ-sDaLQMMctmQrw_yc7MG0iekxfSuj6F8OUujkJJGjn_l6UkPrw9eXLMGNM76bgKLIKIdzSYtqDmSYddX76JKdltMcLi4HHlTfDNTFNFKObx1ProwdRYeMU5umj3STw6DPOZTMm8GJVx2yypvnJcV1_WY3GEXCFlxci6SRUvzLa4DJsSEdkZrxJpUarQs5Yz7gC_XlvewNOWJ7i6cmG9zAhK5p-Ogjr3Gc1sUaDCIldFx9XSL5WIWFGpIkzX_Pg_AlKw4-nLRicLkz5m2ilh9sZLhDjWw1qGIppz0lT8IyRmKGfREGzKMFBd3I-6HD_hYrnTwn-MSSJGl5x3TNrwgLI6l-zcJFZsNp_3JVhIu3g75tp-wT9jxg8p57szVheWcvMxSc0xhOJaNHzadQ3aW482h630m3FbOwX1dqUbjIh5VlgwicQpVETKxyTNMVaW3R0WBd3ox6_XH2I1PBbiUIoydnhfMKnaYCiPsNMDPDIfuKmbVsBJGkAaMcYnu07OzVdrLNQ-jGDWGWVIzWqb_NUgeYoPRYNp0spP_IFHLZSWqFkls5Ga6E07QK0dGf2t4abw3IDhGkbDvjfiE7xhxTPDBsD-R4CcS6KVZzvxA35yPhs6kth8c2GWVMzmArry44RuXPM53RGTyZccJ2zVFJ2xq1cmo-nMCjEN84uVxCbv_1_SH-pe_lMdwNq7M-v-mNTvH7ieNTtjpBPZJLUpujoeRNIoHuevSazYpKR6gAJjuPj1smEZVLGPpIjiJemr7Qk7ZnF2_8cbQABFzq_ZP4ONUKlWR57bk1U2e5HgPyEq0r86L29ibkR2Uu0ucnf6lKhD4NDPx9l6KPJ5fJ2bbH7x4c0I99EXBYonEWUMkbCWVC9wrd7L2rd1eENqzI0MWhQRanMxQMEfBdTQejuBPkB_-pAgFke9im5RYST2MRT3k7j3IbfKQC1ElPrM8FJKqXN_5stot9kOqx5zXdP-dka5LKKLxgI42z0Y6WqAS1yAzdHhYvUvot5q519YnhGbCcSdFuJdrWfWJux4kQZfCGpTWZLqlF0L1lXcVncmbch_sqIoRj_t9NIoIYygWL2nFFtTjr4G1JqGcWlDKxHzFEeujjn-NeBhSIecRwRApoAUGLzPaHUgt0JwAJvqmVrF7e23Godrfe5jbyhAekb6St7LMFddrfSRDYfL8LQWcvzJaADsDCdakIfDUR37-2lecEQDc5s_PJ3aw3MwGD5Eok0tT78-E3F8DHhvhYtaWjW2jgSgcFhidIuDNIi6gT_e9Yuk_9nCDGv7vVSt8y8guHFn4qa1UTYRzURO4iwwnjHI=\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Evaluating Asana skill risks**\\n\\nThe Asana skill seems legitimate and not malicious, but I suspect the audit warning might be a false positive due to how credentials are read from environment files. Disabling it because it's user-authored but potentially inactive may be wise. Although the user prefers Asana, it’s unclear if there's current integration. I should quarantine the skill until further review, pin down the clawrouter version, and tighten execution controls. I’ll need to gather more details and explore documentation for a safer solution.\"},{\"type\":\"summary_text\",\"text\":\"**Analyzing plugin tool security**\\n\\nThe warning seems related to plugin tools that are accessible under permissive policies rather than just execution. Tightening execution settings from off to on-miss makes sense. I might also consider setting `tools.profile` to \\\"minimal\\\" or \\\"default-safe,\\\" but I need to verify actual profile names first. Inspecting local documentation would help. I could use `openclaw help` to check tool profiles, but I’m not sure that will yield results. Alternatively, maybe a thorough security audit could provide insights. I also wonder if an elevated mode could allow bypassing the stricter allowlist.\"},{\"type\":\"summary_text\",\"text\":\"**Exploring tool approval settings**\\n\\nThe tool indicates that elevated requests for execution run on the host, but approvals might still be necessary. I think setting `elevated=true` might work, though it's unclear if it requires approval. I’ll try running the command from earlier, `openclaw security audit --deep`, since the openclaw binary may be permitted in elevated mode. I should check if approval is needed and whether I can use the host as node/gateway. I’ll attempt executing with elevated set to true and an ask on-miss.\"}]}"},{"type":"text","text":"Quiero sacar el detalle exacto del auditor para no pasarme de rosca con el endurecimiento. Si el host pide aprobación, te paso el comando exacto para aprobarlo.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b7555fcc508190817c7b8b2f7790e1\",\"phase\":\"commentary\"}"},{"type":"toolCall","id":"call_QuYxGG53kUMRjjHoOHhyLOap|fc_0776d4d0ce7a6f6b0169b7555fd8e8819090e3fab042418ce3","name":"exec","arguments":{"command":"openclaw security audit --deep","workdir":"/home/ubuntu/.openclaw/workspace","yieldMs":1000,"timeout":60,"elevated":true,"ask":"on-miss"},"partialJson":"{\"command\":\"openclaw security audit --deep\",\"workdir\":\"/home/ubuntu/.openclaw/workspace\",\"yieldMs\":1000,\"timeout\":60,\"elevated\":true,\"ask\":\"on-miss\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":79970,"output":588,"cacheRead":23040,"cacheWrite":0,"totalTokens":103598,"cost":{"input":0.19992500000000002,"output":0.00882,"cacheRead":0.0057599999999999995,"cacheWrite":0,"total":0.214505}},"stopReason":"toolUse","timestamp":1773622605559}} {"type":"message","id":"a8d0a182","parentId":"7e94565a","timestamp":"2026-03-16T00:57:04.248Z","message":{"role":"toolResult","toolCallId":"call_QuYxGG53kUMRjjHoOHhyLOap|fc_0776d4d0ce7a6f6b0169b7555fd8e8819090e3fab042418ce3","toolName":"exec","content":[{"type":"text","text":"Exec approval is required, but chat exec approvals are not enabled on Telegram.\n\nApprove it from the Web UI or terminal UI, or from Discord or Telegram if those approval clients are enabled."}],"details":{"status":"approval-unavailable","reason":"initiating-platform-disabled","channelLabel":"Telegram","sentApproverDms":false,"host":"gateway","command":"openclaw security audit --deep","cwd":"/home/ubuntu/.openclaw/workspace","warningText":""},"isError":false,"timestamp":1773622624239}} {"type":"message","id":"431cff14","parentId":"a8d0a182","timestamp":"2026-03-16T00:57:15.398Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b75566ee248190afd7aea3b0bad73e\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1Vq5SvEguV5nStpLDDOfOieH0nzLZfJxvecV6rMNDBlHkxLNDtPY_Zdtk_pdcojAncEsqESLw8N02jZDwCeF8mBkwwFSQ0q5X_MTWxpfVEnJu4ZSsKHSGSSHXqTcvMJetJtG4yYjNg7s9nwV1kS3LuahJqKhAStfcFicAWOhskr3w9cson0OIqjtQhlqqEnOhk7HO6cJaYAKOIbprJZNfAkchtvNJcMUt7W2ib9GeDfuXyc5eKgaRbAfoq2JPLf5SbsZB2DpOxIY_iewRhfpSUXER1vwJbeHcCENju7HjCMYZFGrn9PkzbJFxJMFxZfQUKfOGn1MR-BqNRuQUU7QaUn2aLE6vG_yzQVWnUl6Yj535veM0rjwReGUGYlaNBtBP9YRO4JC8FpPuDWY8eEeRDycgBwTZDpAjscEgYF9kxfAYzWTyZeb4VL-PF9x1j7SMO6Oaxs5yPwQd2nGNWsDFDDuBK83JLcAgZcmqD9U_TGtzDRMIhnOv6LDSjts8U8-wC6K3k7syzG8QjHMGqZygJeqj-Eu_bFZsT0hVMM0bSCho7t_B15SM6MHbFRVEDUTvS2xUBfeCqMTbooNflrE7RgPFeju9Dc6_9URNgmQsOwEWqQWV8LsWkfwY7RvmFa8k9brTdztZqsxB4fpN-eSdqSvcwxAzjCAwgYDabf4gruTSNmpwgwin2JpkvGxEtJE3woUrkniFnHF62WdOlaBdpvxBQFZ9iIVuUhbbIBlc21wTe3Zsx-NjtP70k3kTZs-DRJvh9OrIagaQ0BGPBr2UP5pPW1zfPNAYQoEW86TGSrOX70WsQ0z5Qx6ZLgfET0P1wdA_8C3XfgaIvc38oA4q-_A_s_zJsIfZM1L1RUqsG3miamQRxDDUtd9jtUvz4EexF7IYnhfZoPIcIhg0LOPEpI30w-W8CfcwMwVUvaqkV3rjo2xFDKsT2Z4ZKzUet84_2rNWizoi_9UmWYE-hTGNm1zEFJnkcLTt-C1V9NF4ZSjrz0lxMumEcly6AGg8UEjEa-5BfvDO_iRCxzW-fjf_fF3zv0bx6Ja0gi0jW90lxRkECeD3lLbdrm40pLASM9RfdGr2HZ36LY9DHvQgNpy9VHboD68xHyfa49H6C3uS1S9icGRpd-jAZ_gFa7HbaFIxYUIbLcgnf9k6gcTZ9IGoiojvCrx2Ez9cfkSykot0SHSB_7KOBbn8y5bhroOin3ukvrX27EMp_OOc7Q8jHaEemA69yQ63Q4065Z_6VaqK_uxEiirn5XuuvBDxtDUv7boovKW8vshrb_61gcFOiZwt46jbhsgST4giijAgjTMTE3DsUS-4bm2i_flEKgWktG9vZ4Ahn4ycrbNmESNMV75PH9w0Z5jYKbksapha4Gag-JnaeUjOAUtf7yj1ljbv9F_O_X\",\"summary\":[]}"},{"type":"toolCall","id":"call_YDUYqQ4w25RDkUoUdYGFNcGo|fc_0776d4d0ce7a6f6b0169b7556ae7bc81908157cdcad8e66982","name":"gateway","arguments":{"action":"config.schema.lookup","path":"plugins.entries.acpx"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"plugins.entries.acpx\"}"},{"type":"toolCall","id":"call_ce39DX0egowtyBdqCVFE4Rm4|fc_0776d4d0ce7a6f6b0169b7556ae7d08190b2cefe4e4a54f04a","name":"gateway","arguments":{"action":"config.schema.lookup","path":"plugins.entries.acpx.config"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"plugins.entries.acpx.config\"}"},{"type":"toolCall","id":"call_rCZ8mV2QXfHChE3LcMrmC72D|fc_0776d4d0ce7a6f6b0169b7556ae7d8819084b34d9e304037db","name":"gateway","arguments":{"action":"config.schema.lookup","path":"plugins.entries.acpx.config.permissionMode"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"plugins.entries.acpx.config.permissionMode\"}"},{"type":"toolCall","id":"call_MiuapqqiINfeNR9Yu9KWWbLs|fc_0776d4d0ce7a6f6b0169b7556ae7dc819090991275ed5605ce","name":"gateway","arguments":{"action":"config.schema.lookup","path":"tools.elevated"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"tools.elevated\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":103645,"output":200,"cacheRead":0,"cacheWrite":0,"totalTokens":103845,"cost":{"input":0.2591125,"output":0.003,"cacheRead":0,"cacheWrite":0,"total":0.2621125}},"stopReason":"toolUse","timestamp":1773622624253}} {"type":"message","id":"529794cb","parentId":"431cff14","timestamp":"2026-03-16T00:57:15.570Z","message":{"role":"toolResult","toolCallId":"call_YDUYqQ4w25RDkUoUdYGFNcGo|fc_0776d4d0ce7a6f6b0169b7556ae7bc81908157cdcad8e66982","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"plugins.entries.acpx\",\n \"schema\": {\n \"type\": \"object\",\n \"additionalProperties\": false\n },\n \"hint\": {\n \"label\": \"ACPX Runtime\",\n \"help\": \"ACP runtime backend powered by the acpx CLI. (plugin: acpx)\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx\",\n \"children\": [\n {\n \"key\": \"enabled\",\n \"path\": \"plugins.entries.acpx.enabled\",\n \"type\": \"boolean\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Enable ACPX Runtime\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx.enabled\"\n },\n {\n \"key\": \"hooks\",\n \"path\": \"plugins.entries.acpx.hooks\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Plugin Hook Policy\",\n \"help\": \"Per-plugin typed hook policy controls for core-enforced safety gates. Use this to constrain high-impact hook categories without disabling the entire plugin.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.*.hooks\"\n },\n {\n \"key\": \"config\",\n \"path\": \"plugins.entries.acpx.config\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"ACPX Runtime Config\",\n \"help\": \"Plugin-defined config payload for acpx.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx.config\"\n }\n ]\n }\n}"}],"details":{"ok":true,"result":{"path":"plugins.entries.acpx","schema":{"type":"object","additionalProperties":false},"hint":{"label":"ACPX Runtime","help":"ACP runtime backend powered by the acpx CLI. (plugin: acpx)","tags":["advanced"]},"hintPath":"plugins.entries.acpx","children":[{"key":"enabled","path":"plugins.entries.acpx.enabled","type":"boolean","required":false,"hasChildren":false,"hint":{"label":"Enable ACPX Runtime","tags":["advanced"]},"hintPath":"plugins.entries.acpx.enabled"},{"key":"hooks","path":"plugins.entries.acpx.hooks","type":"object","required":false,"hasChildren":true,"hint":{"label":"Plugin Hook Policy","help":"Per-plugin typed hook policy controls for core-enforced safety gates. Use this to constrain high-impact hook categories without disabling the entire plugin.","tags":["advanced"]},"hintPath":"plugins.entries.*.hooks"},{"key":"config","path":"plugins.entries.acpx.config","type":"object","required":false,"hasChildren":true,"hint":{"label":"ACPX Runtime Config","help":"Plugin-defined config payload for acpx.","tags":["advanced"]},"hintPath":"plugins.entries.acpx.config"}]}},"isError":false,"timestamp":1773622635559}} {"type":"message","id":"c5717472","parentId":"529794cb","timestamp":"2026-03-16T00:57:15.608Z","message":{"role":"toolResult","toolCallId":"call_ce39DX0egowtyBdqCVFE4Rm4|fc_0776d4d0ce7a6f6b0169b7556ae7d08190b2cefe4e4a54f04a","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"plugins.entries.acpx.config\",\n \"schema\": {\n \"type\": \"object\",\n \"additionalProperties\": false\n },\n \"hint\": {\n \"label\": \"ACPX Runtime Config\",\n \"help\": \"Plugin-defined config payload for acpx.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx.config\",\n \"children\": [\n {\n \"key\": \"command\",\n \"path\": \"plugins.entries.acpx.config.command\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"acpx Command\",\n \"help\": \"Optional path/command override for acpx (for example /home/user/repos/acpx/dist/cli.js). Leave unset to use plugin-local bundled acpx.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx.config.command\"\n },\n {\n \"key\": \"expectedVersion\",\n \"path\": \"plugins.entries.acpx.config.expectedVersion\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Expected acpx Version\",\n \"help\": \"Exact version to enforce (for example 0.1.16) or \\\"any\\\" to skip strict version matching.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx.config.expectedVersion\"\n },\n {\n \"key\": \"cwd\",\n \"path\": \"plugins.entries.acpx.config.cwd\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Default Working Directory\",\n \"help\": \"Default cwd for ACP session operations when not set per session.\",\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx.config.cwd\"\n },\n {\n \"key\": \"permissionMode\",\n \"path\": \"plugins.entries.acpx.config.permissionMode\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Permission Mode\",\n \"help\": \"Default acpx permission policy for runtime prompts.\",\n \"tags\": [\n \"access\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx.config.permissionMode\"\n },\n {\n \"key\": \"nonInteractivePermissions\",\n \"path\": \"plugins.entries.acpx.config.nonInteractivePermissions\",\n \"type\": \"string\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Non-Interactive Permission Policy\",\n \"help\": \"acpx policy when interactive permission prompts are unavailable.\",\n \"tags\": [\n \"access\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx.config.nonInteractivePermissions\"\n },\n {\n \"key\": \"strictWindowsCmdWrapper\",\n \"path\": \"plugins.entries.acpx.config.strictWindowsCmdWrapper\",\n \"type\": \"boolean\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Strict Windows cmd Wrapper\",\n \"help\": \"Enabled by default. On Windows, reject unresolved .cmd/.bat wrappers instead of shell fallback. Disable only for compatibility with non-standard wrappers.\",\n \"advanced\": true,\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx.config.strictWindowsCmdWrapper\"\n },\n {\n \"key\": \"timeoutSeconds\",\n \"path\": \"plugins.entries.acpx.config.timeoutSeconds\",\n \"type\": \"number\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Prompt Timeout Seconds\",\n \"help\": \"Optional acpx timeout for each runtime turn.\",\n \"advanced\": true,\n \"tags\": [\n \"performance\",\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx.config.timeoutSeconds\"\n },\n {\n \"key\": \"queueOwnerTtlSeconds\",\n \"path\": \"plugins.entries.acpx.config.queueOwnerTtlSeconds\",\n \"type\": \"number\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Queue Owner TTL Seconds\",\n \"help\": \"Idle queue-owner TTL for acpx prompt turns. Keep this short in OpenClaw to avoid delayed completion after each turn.\",\n \"advanced\": true,\n \"tags\": [\n \"access\",\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx.config.queueOwnerTtlSeconds\"\n },\n {\n \"key\": \"mcpServers\",\n \"path\": \"plugins.entries.acpx.config.mcpServers\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"MCP Servers\",\n \"help\": \"Named MCP server definitions to inject into ACPX-backed session bootstrap. Each entry needs a command and can include args and env.\",\n \"advanced\": true,\n \"tags\": [\n \"advanced\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx.config.mcpServers\"\n }\n ]\n }\n}"}],"details":{"ok":true,"result":{"path":"plugins.entries.acpx.config","schema":{"type":"object","additionalProperties":false},"hint":{"label":"ACPX Runtime Config","help":"Plugin-defined config payload for acpx.","tags":["advanced"]},"hintPath":"plugins.entries.acpx.config","children":[{"key":"command","path":"plugins.entries.acpx.config.command","type":"string","required":false,"hasChildren":false,"hint":{"label":"acpx Command","help":"Optional path/command override for acpx (for example /home/user/repos/acpx/dist/cli.js). Leave unset to use plugin-local bundled acpx.","tags":["advanced"]},"hintPath":"plugins.entries.acpx.config.command"},{"key":"expectedVersion","path":"plugins.entries.acpx.config.expectedVersion","type":"string","required":false,"hasChildren":false,"hint":{"label":"Expected acpx Version","help":"Exact version to enforce (for example 0.1.16) or \"any\" to skip strict version matching.","tags":["advanced"]},"hintPath":"plugins.entries.acpx.config.expectedVersion"},{"key":"cwd","path":"plugins.entries.acpx.config.cwd","type":"string","required":false,"hasChildren":false,"hint":{"label":"Default Working Directory","help":"Default cwd for ACP session operations when not set per session.","tags":["advanced"]},"hintPath":"plugins.entries.acpx.config.cwd"},{"key":"permissionMode","path":"plugins.entries.acpx.config.permissionMode","type":"string","required":false,"hasChildren":false,"hint":{"label":"Permission Mode","help":"Default acpx permission policy for runtime prompts.","tags":["access"]},"hintPath":"plugins.entries.acpx.config.permissionMode"},{"key":"nonInteractivePermissions","path":"plugins.entries.acpx.config.nonInteractivePermissions","type":"string","required":false,"hasChildren":false,"hint":{"label":"Non-Interactive Permission Policy","help":"acpx policy when interactive permission prompts are unavailable.","tags":["access"]},"hintPath":"plugins.entries.acpx.config.nonInteractivePermissions"},{"key":"strictWindowsCmdWrapper","path":"plugins.entries.acpx.config.strictWindowsCmdWrapper","type":"boolean","required":false,"hasChildren":false,"hint":{"label":"Strict Windows cmd Wrapper","help":"Enabled by default. On Windows, reject unresolved .cmd/.bat wrappers instead of shell fallback. Disable only for compatibility with non-standard wrappers.","advanced":true,"tags":["advanced"]},"hintPath":"plugins.entries.acpx.config.strictWindowsCmdWrapper"},{"key":"timeoutSeconds","path":"plugins.entries.acpx.config.timeoutSeconds","type":"number","required":false,"hasChildren":false,"hint":{"label":"Prompt Timeout Seconds","help":"Optional acpx timeout for each runtime turn.","advanced":true,"tags":["performance","advanced"]},"hintPath":"plugins.entries.acpx.config.timeoutSeconds"},{"key":"queueOwnerTtlSeconds","path":"plugins.entries.acpx.config.queueOwnerTtlSeconds","type":"number","required":false,"hasChildren":false,"hint":{"label":"Queue Owner TTL Seconds","help":"Idle queue-owner TTL for acpx prompt turns. Keep this short in OpenClaw to avoid delayed completion after each turn.","advanced":true,"tags":["access","advanced"]},"hintPath":"plugins.entries.acpx.config.queueOwnerTtlSeconds"},{"key":"mcpServers","path":"plugins.entries.acpx.config.mcpServers","type":"object","required":false,"hasChildren":true,"hint":{"label":"MCP Servers","help":"Named MCP server definitions to inject into ACPX-backed session bootstrap. Each entry needs a command and can include args and env.","advanced":true,"tags":["advanced"]},"hintPath":"plugins.entries.acpx.config.mcpServers"}]}},"isError":false,"timestamp":1773622635596}} {"type":"message","id":"added878","parentId":"c5717472","timestamp":"2026-03-16T00:57:15.626Z","message":{"role":"toolResult","toolCallId":"call_rCZ8mV2QXfHChE3LcMrmC72D|fc_0776d4d0ce7a6f6b0169b7556ae7d8819084b34d9e304037db","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"plugins.entries.acpx.config.permissionMode\",\n \"schema\": {\n \"type\": \"string\",\n \"enum\": [\n \"approve-all\",\n \"approve-reads\",\n \"deny-all\"\n ]\n },\n \"hint\": {\n \"label\": \"Permission Mode\",\n \"help\": \"Default acpx permission policy for runtime prompts.\",\n \"tags\": [\n \"access\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx.config.permissionMode\",\n \"children\": []\n }\n}"}],"details":{"ok":true,"result":{"path":"plugins.entries.acpx.config.permissionMode","schema":{"type":"string","enum":["approve-all","approve-reads","deny-all"]},"hint":{"label":"Permission Mode","help":"Default acpx permission policy for runtime prompts.","tags":["access"]},"hintPath":"plugins.entries.acpx.config.permissionMode","children":[]}},"isError":false,"timestamp":1773622635615}} {"type":"message","id":"ab9bf663","parentId":"added878","timestamp":"2026-03-16T00:57:15.650Z","message":{"role":"toolResult","toolCallId":"call_MiuapqqiINfeNR9Yu9KWWbLs|fc_0776d4d0ce7a6f6b0169b7556ae7dc819090991275ed5605ce","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"tools.elevated\",\n \"schema\": {\n \"type\": \"object\",\n \"additionalProperties\": false\n },\n \"hint\": {\n \"label\": \"Elevated Tool Access\",\n \"help\": \"Elevated tool access controls for privileged command surfaces that should only be reachable from trusted senders. Keep disabled unless operator workflows explicitly require elevated actions.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.elevated\",\n \"children\": [\n {\n \"key\": \"enabled\",\n \"path\": \"tools.elevated.enabled\",\n \"type\": \"boolean\",\n \"required\": false,\n \"hasChildren\": false,\n \"hint\": {\n \"label\": \"Enable Elevated Tool Access\",\n \"help\": \"Enables elevated tool execution path when sender and policy checks pass. Keep disabled in public/shared channels and enable only for trusted owner-operated contexts.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.elevated.enabled\"\n },\n {\n \"key\": \"allowFrom\",\n \"path\": \"tools.elevated.allowFrom\",\n \"type\": \"object\",\n \"required\": false,\n \"hasChildren\": true,\n \"hint\": {\n \"label\": \"Elevated Tool Allow Rules\",\n \"help\": \"Sender allow rules for elevated tools, usually keyed by channel/provider identity formats. Use narrow, explicit identities so elevated commands cannot be triggered by unintended users.\",\n \"tags\": [\n \"access\",\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.elevated.allowFrom\"\n }\n ]\n }\n}"}],"details":{"ok":true,"result":{"path":"tools.elevated","schema":{"type":"object","additionalProperties":false},"hint":{"label":"Elevated Tool Access","help":"Elevated tool access controls for privileged command surfaces that should only be reachable from trusted senders. Keep disabled unless operator workflows explicitly require elevated actions.","tags":["tools"]},"hintPath":"tools.elevated","children":[{"key":"enabled","path":"tools.elevated.enabled","type":"boolean","required":false,"hasChildren":false,"hint":{"label":"Enable Elevated Tool Access","help":"Enables elevated tool execution path when sender and policy checks pass. Keep disabled in public/shared channels and enable only for trusted owner-operated contexts.","tags":["tools"]},"hintPath":"tools.elevated.enabled"},{"key":"allowFrom","path":"tools.elevated.allowFrom","type":"object","required":false,"hasChildren":true,"hint":{"label":"Elevated Tool Allow Rules","help":"Sender allow rules for elevated tools, usually keyed by channel/provider identity formats. Use narrow, explicit identities so elevated commands cannot be triggered by unintended users.","tags":["access","tools"]},"hintPath":"tools.elevated.allowFrom"}]}},"isError":false,"timestamp":1773622635638}} {"type":"message","id":"9eef7112","parentId":"ab9bf663","timestamp":"2026-03-16T00:57:29.734Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7557042bc81908a26064c77c924aa\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1V5xnyoPP7-4BksY4U9wY0m2_gcW97pofjePtYoXmTF9B91twbnMdUY2oTCSnhn4dvAjAFNNASDtIV7U2Yv7Shv4k_QR68h4OTZvnoYuFbPNeliuGzUfaBlwPwzyNoeRcT5jNBeHxE839CHFqPugcmT5DI70Ly4AlxDi-r0n5o-tuLSc_W2tpQChk5CTj1zztgGBW_APihyDgKfzwl07LxMulBo0fo9Pap5tWDRkTvRybIGm1qfNRd36S9VAix_PQ-0ElEbQgXxa2Ul_adQbeWrwN1MtZ7ssS-ODIR5xT2YBvPW5Iy-hxO4JF3KbpsxEt0BtqdxGscPaxE33tIaaq9W1HSBdpMD1EHxmk83GNAHBOjl2W9imoALPCj6XylrozXr2nhECZw1vcUZZFwhmEdrWNs4uXwwh-5Bizw6Yl-ejAsSxqSb-1cj6onj3u64JlNFHFJ0-A15hQyRt-ozj3NK-cK9X2eL7ghKqnrqDQMWAe-R65xmRndj3GmHtTs1ZI7jNrL8o5N0beHKJsVh09VHUdbBKqPEfouMmuCI7uX--ZOqBSiwrSdkEM46T2R5fmskUZhuLZMpQtO-UkfFZUYWWn_WZlsHq6Ssmhex25FcWH5rcM3jsoHYsvCfGI-I5XOk0zpK4C6wugazInYfJpOHqAHMytbVQm6hxdcv7HiyPeojjH57fwdqhOLmfhEPLBTGcvgLewa-RO_Hs-c30FDX1Rt8FDRgFg8VJ7YRfiu7GufuyFaRJaEsXUpEGi3luUBkJphpOs3c0p9Ouc_F2Vki5QA_7-IaO1GdfGuvApwxhmD-uVYkB3GDps6tl_KjwPTqYdbFnhkVTAwELEw559FprVGyZlqTsWlEhRZC_tz1HO172xR2dlrCpWQe-1g6jOAs_irriL1ZAL_HpU2fqBXtnBdvvha-SmKuxHhD6u-cUl8EiXlOjOl4R9f9_cZGzlIVkeyC9oZHocvVnV2J9xYoiD5FwhFKSwOLYBSc9JoASmTDevwsXpGATLMl55r7AfLkeYib2WWThrK9QqK8nBFnlDROA-_1xugjMzlcuCX7RuLI15Bd_PGJiq31VB7YtpyY-URbLIxWNJnJ8ZQ48DfYcOE81bPobr2w5qmbAjYNBLwzBxwmYwSULDccuvrR4MTzScxZDQTRajsU7rzplZUK7M3vSKVOAH0dNXT0Lt0UJyJJ2Jn9vH8-YcmDkolMRHy28jWrlvYZoZ5DYCo_AuiZV99PupI5_EtW1GLF3WC-v9cU633GEUnvbFADf41rKMSJJaAjvoZg4kXiNsDbUkn6ioCQHqQoShykSQW3ulEjF_UyNEkvZxQJnhUoDu7D0u6mrTwtaSySJozlwsd7tFwc065DSFkBnriSZVk0KjctM19xvGrBC08bvrcJVxJ4qmQdhtghYBB_8y_sMUOtUG_vDzOwIWr5J0YPU5F3YjXdTYCC_eZTX2gx8vauY-ZkmS-_s8svtkxAbH1eE7OB30oPHatwEo7HYvnZdmy3WkYUuH1NrR9U4IcMfcaz68VNQeE56hsQt6vlKImjuiLk8DpfeQq8F4vjOUs9wqdgjO9imWQumV9jb57nCYsSfF6aPB9BPMOaNchu5Mm5TwNMhk-KXd3gAi9lfx8Bz3ZG6V54VS3OTiJZoZxkLaXH7FQibOH493AWAkb_2vnlK4_-dC44Po9bVCc9zchOJoOnX1RFUwqOyUoeeTC56BR28hI_BibRUDpB9n4IB9MJ7yL1RkdHeJgqofe9xeDDBQ0nkwdziwO0RUh_lonrF84U9Z2q-ZYLSlwgSOdKdqOgawPR46JuoUuRbRYctwenNQU1AKEZXocRc6QY6QfT21z7VCnec8bdL_AtFER1PY6dsxnrUj42rXkWIUIOsJm2vCmX2YMcLqXK25w_pk9vIvW0LGDq61BPZv-pfH7lBaLTApTxiirOlWdPblQUzth57urbdP8jJJWjtdgvU33aW_4cBbmsbwHOmQQgXNxxqhTl7ocI7dDAP4M5OVM_XpqdKfC_n4DZGQg4yeq_OnosdN7tpEELDEdbsFm4L_zRPRGxEgATR2eJyMWIUFkbZjsHd2KTn9CTCXlUaZhBLg744OUksIpXZHKsFmiNbUOxrqbVLmc1JMzXlbY_WJg5qyBu-TFVmViwVYRsr9xquRe1ATIchwXG4s10KFSl31jnqUG-1zzLcjL6lRtXyMv6HvnKhST8hjGFtW3hh06slEX0sxqkpX8nbtr42Fcghi6-8umPWEE7C2UMuKkESE895nvazTIDW9MnDE6ntWyDUu_LL1LZi8eOwjai78K58lGBmRBMpouo7pvymaKAmFszywwlJMmrOgYRxvvEzUZhF_HZYYyiwJ0i1Iyf2L59bmlB6Ln8f-GcxYSwLy3ui5soDVzS6OYEKiwm6BFnxOZ_7NW0AYUVSa5iBNT-JvJQEW8FRuU0_pwEII6zKemhMoKftca2UH_0b4DwOyqjjwwVIM50mP__i7G02zc9tvynGs9Lccxymfpbk0XMjBc18BB3SSXSYBAkRRvljruNj4dqzQin4h9hdm4Lhv9p9PuP6-F8oIJJPcQcgY0ziAnagoQd11pIf-TPRMOfhNsvf7Wohmt2WWadbUN4jP9klT3YImafer36kGVXhtrgf5ytb8zcofIZLcXtzJ_7QwPPuQKjLm-nSsM6kxEIPV1wdPvuOQBJDYFTdG3R4U04EBGrhFefDXrICQCMhiTwt4dq9Qc3E8ATt71fD5SIaEcOhUAzQofz7unh0PSk9yCUkq-wBeyS7ec1VzibfB8yzv5hNmBdQ1cjjP1p7P6T1TttnH4F4BoFX2kcXwZOX2NDBatfgK67xLvYV8_Yh1HSNKROsU-wllYBaVV5aB98RGLZOmDAmOoCly9dlqnSKwQqrrlnSRMnHXSVxNa5NXAR0BY4SkQDxOPgGC4a4qaZOr8nUArkQMKe_UJeRM9LhYzqCDs5VIp8A3faINa00S0mOqYSvgN_XOTnUMMMu7ex5fH-pqIe-vyRrq-QowTE0hY148VUheXV0qu5OaqjUEwgXqzV7veGkoJv46Ys6JdxPgXFAcI3ASl7BiNQSNaLUorGlDue8AUpTo4kGyusAf2ekQ8NdHqT2RfNNNijLm80VsViVvL4v6UzOb0TZjKj6KDc6Nf0_bWFF3g17vgBgtvUtp-fXX7GEei00DNt5ggu7Z8s9iYSa8ZImw20Ty_NFAAU3JGtJ3Ym-aPVMwzM7NwU5LGl9ZO1ue3Z6Ef6yBO-mAXYDwUq2YlhM67toNcNWPwummRQmjYa27DvS4YWBGaCfQuCmqcoha8_2Z_vc5LTRPstL1r4TorL-K5p9OXv_naRCECbSR86HP9xS3pNHAuJp9mncbqFIXtKAX7tHRdJvYN_ZFdH_54-2MytlY5fzbwZ53pUKnHm7uic6YT4ih9FUBiMk_PgYDeUk7EtsomzS39J\",\"summary\":[]}"},{"type":"toolCall","id":"call_VeTSfN33juLGViyLWDIe4OyF|fc_0776d4d0ce7a6f6b0169b7557938188190be2e0d426d6864d4","name":"gateway","arguments":{"action":"config.schema.lookup","path":"plugins.entries.acpx.config.nonInteractivePermissions"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"plugins.entries.acpx.config.nonInteractivePermissions\"}"},{"type":"toolCall","id":"call_0hxI93zch9sx6opchjGWo7J4|fc_0776d4d0ce7a6f6b0169b75579382c8190828d77ac5401fc00","name":"read","arguments":{"file_path":"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/acpx/package.json"},"partialJson":"{\"file_path\":\"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/acpx/package.json\"}"},{"type":"toolCall","id":"call_amHQ5uxpGr9DyKlwPaABpK7f|fc_0776d4d0ce7a6f6b0169b75579383c81909e76acc11bd21559","name":"read","arguments":{"file_path":"/home/ubuntu/.openclaw/extensions/clawrouter/package.json"},"partialJson":"{\"file_path\":\"/home/ubuntu/.openclaw/extensions/clawrouter/package.json\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":2243,"output":495,"cacheRead":103680,"cacheWrite":0,"totalTokens":106418,"cost":{"input":0.0056075000000000005,"output":0.007425,"cacheRead":0.02592,"cacheWrite":0,"total":0.0389525}},"stopReason":"toolUse","timestamp":1773622635655}} {"type":"message","id":"532f0487","parentId":"9eef7112","timestamp":"2026-03-16T00:57:29.874Z","message":{"role":"toolResult","toolCallId":"call_VeTSfN33juLGViyLWDIe4OyF|fc_0776d4d0ce7a6f6b0169b7557938188190be2e0d426d6864d4","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"plugins.entries.acpx.config.nonInteractivePermissions\",\n \"schema\": {\n \"type\": \"string\",\n \"enum\": [\n \"deny\",\n \"fail\"\n ]\n },\n \"hint\": {\n \"label\": \"Non-Interactive Permission Policy\",\n \"help\": \"acpx policy when interactive permission prompts are unavailable.\",\n \"tags\": [\n \"access\"\n ]\n },\n \"hintPath\": \"plugins.entries.acpx.config.nonInteractivePermissions\",\n \"children\": []\n }\n}"}],"details":{"ok":true,"result":{"path":"plugins.entries.acpx.config.nonInteractivePermissions","schema":{"type":"string","enum":["deny","fail"]},"hint":{"label":"Non-Interactive Permission Policy","help":"acpx policy when interactive permission prompts are unavailable.","tags":["access"]},"hintPath":"plugins.entries.acpx.config.nonInteractivePermissions","children":[]}},"isError":false,"timestamp":1773622649863}} {"type":"message","id":"6a253e47","parentId":"532f0487","timestamp":"2026-03-16T00:57:29.886Z","message":{"role":"toolResult","toolCallId":"call_0hxI93zch9sx6opchjGWo7J4|fc_0776d4d0ce7a6f6b0169b75579382c8190828d77ac5401fc00","toolName":"read","content":[{"type":"text","text":"{\n \"name\": \"acpx\",\n \"version\": \"0.1.15\",\n \"description\": \"Headless CLI client for the Agent Client Protocol (ACP) — talk to coding agents from the command line\",\n \"type\": \"module\",\n \"files\": [\n \"dist\",\n \"skills\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"bin\": {\n \"acpx\": \"dist/cli.js\"\n },\n \"scripts\": {\n \"build\": \"tsup src/cli.ts --format esm --dts --clean\",\n \"build:test\": \"node -e \\\"require('node:fs').rmSync('dist-test',{recursive:true,force:true})\\\" && tsc -p tsconfig.test.json\",\n \"test\": \"npm run build:test && node --test dist-test/test/*.test.js\",\n \"prepare\": \"husky\",\n \"precommit\": \"npm exec -- lint-staged && npm run -s build\",\n \"prepack\": \"npm run build\",\n \"dev\": \"tsx src/cli.ts\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint src --max-warnings=0 && npm run lint:persisted-key-casing\",\n \"format\": \"prettier --write .\",\n \"format:check\": \"prettier --check .\",\n \"release\": \"release-it\",\n \"release:ci\": \"release-it --ci\",\n \"lint:persisted-key-casing\": \"tsx scripts/lint-persisted-key-casing.ts\"\n },\n \"keywords\": [\n \"acp\",\n \"agent-client-protocol\",\n \"cli\",\n \"codex\",\n \"claude-code\",\n \"coding-agent\",\n \"ai\"\n ],\n \"author\": \"OpenClaw Team \",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/openclaw/acpx\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"dependencies\": {\n \"@agentclientprotocol/sdk\": \"^0.14.1\",\n \"commander\": \"^13.0.0\",\n \"skillflag\": \"^0.1.4\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@types/node\": \"^22.0.0\",\n \"eslint\": \"^10.0.0\",\n \"globals\": \"^17.3.0\",\n \"husky\": \"^9.1.7\",\n \"lint-staged\": \"^16.2.7\",\n \"prettier\": \"^3.8.1\",\n \"release-it\": \"^19.2.4\",\n \"tsup\": \"^8.0.0\",\n \"tsx\": \"^4.0.0\",\n \"typescript\": \"^5.7.0\",\n \"typescript-eslint\": \"^8.56.0\"\n },\n \"lint-staged\": {\n \"*.{js,ts}\": [\n \"prettier --write --ignore-unknown\",\n \"eslint --fix\"\n ],\n \"*.{json,md}\": [\n \"prettier --write --ignore-unknown\"\n ]\n }\n}\n"}],"isError":false,"timestamp":1773622649874}} {"type":"message","id":"fb4e8851","parentId":"6a253e47","timestamp":"2026-03-16T00:57:29.904Z","message":{"role":"toolResult","toolCallId":"call_amHQ5uxpGr9DyKlwPaABpK7f|fc_0776d4d0ce7a6f6b0169b75579383c81909e76acc11bd21559","toolName":"read","content":[{"type":"text","text":"{\n \"name\": \"@blockrun/clawrouter\",\n \"version\": \"0.12.43\",\n \"description\": \"Smart LLM router — save 92% on inference costs. 41+ models, one wallet, x402 micropayments.\",\n \"type\": \"module\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"clawrouter\": \"./dist/cli.js\"\n },\n \"openclaw\": {\n \"extensions\": [\n \"./dist/index.js\"\n ]\n },\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\"\n }\n },\n \"files\": [\n \"dist\",\n \"scripts\",\n \"skills\",\n \"openclaw.plugin.json\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint src/\",\n \"format\": \"prettier --write .\",\n \"format:check\": \"prettier --check .\",\n \"test:resilience:errors\": \"tsx test/resilience-errors.ts\",\n \"test:resilience:stability\": \"DURATION_MINUTES=5 tsx test/resilience-stability.ts\",\n \"test:resilience:stability:full\": \"DURATION_MINUTES=240 tsx test/resilience-stability.ts\",\n \"test:resilience:lifecycle\": \"tsx test/resilience-lifecycle.ts\",\n \"test:resilience:quick\": \"npm run test:resilience:errors && npm run test:resilience:lifecycle\",\n \"test:resilience:full\": \"npm run test:resilience:errors && npm run test:resilience:lifecycle && npm run test:resilience:stability:full\",\n \"test:e2e:tool-ids\": \"npm run build && tsx test/e2e-tool-id-sanitization.ts\",\n \"test:docker:install\": \"bash test/run-docker-test.sh\",\n \"test:docker:edge-cases\": \"bash test/docker/run-edge-cases.sh\",\n \"test:docker:integration\": \"docker compose -f test/integration/docker-compose.yml up --build --abort-on-container-exit --exit-code-from integration\"\n },\n \"keywords\": [\n \"llm\",\n \"router\",\n \"smart-routing\",\n \"ai\",\n \"openclaw\",\n \"blockrun\",\n \"x402\",\n \"usdc\",\n \"cost-optimization\",\n \"openai\",\n \"anthropic\",\n \"gemini\",\n \"deepseek\",\n \"usdc-hackathon-winner\",\n \"agentic-commerce\"\n ],\n \"author\": \"BlockRun \",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/BlockRunAI/ClawRouter.git\"\n },\n \"dependencies\": {\n \"@scure/bip32\": \"^1.6.0\",\n \"@scure/bip39\": \"^1.5.0\",\n \"@solana/kit\": \"^5.0.0\",\n \"@x402/evm\": \"^2.4.0\",\n \"@x402/fetch\": \"^2.4.0\",\n \"@x402/svm\": \"^2.4.0\",\n \"ethers\": \"^6.16.0\",\n \"viem\": \"^2.39.3\"\n },\n \"peerDependencies\": {\n \"openclaw\": \">=2025.1.0\"\n },\n \"peerDependenciesMeta\": {\n \"openclaw\": {\n \"optional\": true\n }\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"eslint\": \"^10.0.2\",\n \"openclaw\": \"latest\",\n \"prettier\": \"^3.8.1\",\n \"tsup\": \"^8.0.0\",\n \"tsx\": \"^4.21.0\",\n \"typescript\": \"^5.7.0\",\n \"typescript-eslint\": \"^8.54.0\",\n \"vitest\": \"^4.0.18\"\n },\n \"engines\": {\n \"node\": \">=20\"\n }\n}\n"}],"isError":false,"timestamp":1773622649886}} {"type":"message","id":"83a56c77","parentId":"fb4e8851","timestamp":"2026-03-16T00:57:53.195Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Considering stability measures**\n\nI’m thinking about pinning acpx expectedVersion to 0.1.15 to enhance stability and hardening, even though it hasn’t been found by audit. I should inspect the agent tool profile, possibly setting it per pipo instead of all agents. The audit warning mentions permissive contexts. Setting global tools.exec.ask on-miss could maybe work, but it might need approval. After the restart, I need to consider Telegram access too. There’s a warning regarding `gateway.probe_failed`, suggesting we might need auth scope for future audits. However, since things are functioning well, immediate changes might not be necessary.\n\n**Evaluating gateway actions**\n\nI might decide to leave some items non-actionable since the local token-based gateway mode doesn’t support operator.read, and the status seems healthy. I could note that nothing changed due to a false positive. However, the user asked to \"correct what you found,\" so I could focus on actionable corrections and explain why some issues remain informational and not worth breaking access. \n\nI need to look into updating model tiers for the Claude agents. Changing CLI wrapper entries to recommended API models could be costly, but the audit suggests old model tiers are a concern. Alternatively, I could adjust model aliases, but it looks like the Claude alias is already up-to-date.\n\n**Reviewing model tier issues**\n\nIt seems these aren’t necessarily old model tiers, maybe just naming issues. The audit might have flagged a false positive because the CLI backend ID isn’t mapped. Changing the agents to API could significantly alter their economics and behavior, so I’d prefer not to do this without explicit approval. Although the user asked to fix everything, I have to be cautious since it impacts the worker backend. Maybe I could set the model for those agents to point to the `claude` and `claude-opus` aliases instead.\n\n**Considering documentation options**\n\nI'm thinking about checking the README for acpx or looking at the documentation for openclaw to see if I can find something helpful. I might also read through the plugin skill documentation. It seems like there are a few avenues to explore here, and I'm curious which would be the most effective for finding the information I need. Let's see which documents have what I’m looking for!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7557bdd4881908cf171cacf0b95f8\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1WQgOUzPm28WxROs1ThdtJYc-ut5sHKZoR3MqnWuc_nESkos1NODHek9k7NsQOuBpKa8qarComLJnG_iw4tozoAVZTSKLjX-46va0uFaVpF4CzdenaT2MO9WpgV4yjrElvVjVkNV84iaTA7CkQ0VJp2x6ZITw4_rEkM0_TonQN7G-yo_OHdPm1KfZ6nmbv_7zaZD9mbZvco5V3RNud6pE3ByW9L3G7RNNW8zQwqJI0gOy9azTSIeV35F9kdDsePXskzNRiJsHoOBeHWPE6FBIRErg-1_aJi3C8KDkA9zvCcxmdBywISbe5KAQ7eu_kR9p5g8jam-HIGl2PdHkcfG2b4ryoepd3FQ5M24iAxyBZ6X47rhUWx8UM4VHympQ2iGk6y0RDyf560zY34lu-l-4Wv5Fhnw8U5N1pD7Vb7FxcwigGBraP_4TOKB7yqmEOX1-RFH18nI5DbfS0FnR6Twm0VEM4LfoCqRhD8BLua4PnKwmdtFgHDgnaMmD2RyF5rlEZyFBTGLIl6jEdPySjym0g4tdigsIoSDt2HxU6gYParaJo5lRBr8MlNBPhL214sa_DV6lrEgLXMjswi3zOAmwb93XEdz2lJZFv1PsubY7UZuE4Ja_Gjz0B5Tfeo7D_yf5e9ADACPWVvh2XQ1YwYqQWkmRoH-T0b5Q2cY-GKHfrm8FTMl3IUQXrHDBizMIxViuBewg1LQgQiS7vapLNm_bWcc7TjIa13bhQJuemEVYrA_gVu3CMaWI6h11EmUDxjn1IH5XP2st4a92DMaj2bU5Xk_hqMMg-O-qFyUrwAVEPlU4wvR6nVckoRZH1s_waQkSfMmnzCDamqTFXrjcfSsF3zA_BBYBiVX1vuB4yqnk4yCR9M-aqVVwXp7aghUtoHFDaUoHoyvsvyO5w1s7bc31TDrhzeUFO9bwUkfQ3slLWrXQpAp9nnXk-PeS2-jCsQR85omk-KZ_xHnnzfnHkWXVx_WLRTyE16qzrPl6-0leEY7Dyz7s3Cgb6UClWoDrYEQduwlDyLBE50Vb3TUorJpV1mBuZDlDV51iSM166bNnlATkeVU3leLkOTLE9UZ60BQC91TYc3mRHQ9Ig15ovZy5oDsDjdiftdWSLXWYhK7wHHiWLNSqTQr5o1bdRtHyQAay51vVoDH6I_uO7Cuz8e2jJybs1BbDxdjaE4dg3P8bd6pOX5xplr81xkn9SvFTl3SInp4XgUs2gnmDHrxBPUMJTaj5xrUZQW8fHjgH0XKfMqtzYjDjzad1zf09rOXe8RzJdYNmhpL-lsqJgEsUPWOXD1ZysxCVaC7BK-LKmO-gh9P3TLFaF_IQQyUhruRym_9l23aCxSEWsKlV_vsA6vJThRfPf_r602hutg2FRojhMsC5X8bfzaq_V08ruuZ2lDEjZMFKd6QvCqJINq4BefkcjhMc0Y1Ixd9_FGoJVAUHvjnEC-xlM0GqkBsx-yTdg968a3_yqALWl12PpPhiWR-vYSXNYgUkB4OMfg0-UolWx3GXvsfLxqBImIsyc3CJChYd27qta6lj2tZjiRq5msajo9cmujPpLA4b3QLi2Ny3wDkVLsoMRSVrQI6F3tLqESxuYZkrg1dwwPKgXEZY9muCkGmk4EZkaMDzOP9hNYS2xwqVvpFAr-tI8yVDRXVFT5w2S_yaqy0WB7BcblqdyCnBg5zSWqY8g5sVkk-QYU3PIYipzmAODTl4-nboOMzNpLmsJ29o1x72npH8Q1rkwj9or1qijc0qWgnq1keqaeYP95XaCHF3UQFoYwyMK1QXN3RGCQQXQzd0su3sPtdBj-PQ-trp4Uuq2U_TmbKCLRn4rb2d97E2Zl3aozoh_nSiYm7adnjDmF-B49P7tFOFh-K52k6op97nByfeK09KcmGEnubG5Cu38j0MFzfUIOBiiM_LV2VSc57S4AeqE0gMECIXhhNv1yb5W7Z8qTQHGbuPUXJ3iVPvD-GGPZbER7KYGS3KfUvHNdrBN9McxTpj62wOvLgKiLvualaw0p3trStew_HjqF7PFyZ1vpne-cGg0uGxVtR1ejkRfM5Kpq_8VZpmwa7ffR7frLIfmLYEDq1u7Itu3RZSVEsqVLtDk4Q94JrdZq6pkjzoBCCQH5cVLvVu9BNgIC5rbhUQCpoyXcsWmzAgq46petUSUlCnyJVt0bwbur8FDgNfaxKA9Nlpl0NfEuyje1a0AcK8vy_qQzcdmEc0TfEO3kXg-HZ88nvrIy_pZWqxqvSkLHvLknpJaHRimYj2nEUFJEeV312Hgstk_bK0dyfnNe-DMNIX-hBNZVn3EqY_F0kf7RzGQH8jo60F6qqmNtXwHP0RvxqZ2EsQKOkuMvVjjg-nxPdFG4-lAh_cs9dDfF-JruzrrZQQtxLdBCrb3rcn_pCvKNALxhVnngHdpZOifiwl0-N6lUbwm-a-CHH6X7SL8OEiK8E9NuQU0IDpuLs4pkLQHk6HPM0Yvq78vgZdFd1j0S7YVpeuHYAOZtJG7aZ-KFh2pmz9fr_IxeH6UV-EAqrBPKweDY8MBVWtlFqGME_ffFT9AMTpqf9laJL7sYPh7HkPdfRcDWlpjw2DZ1Lu3Kr4r5isnJJl7oKQx68Zz0qyqg-TX98TVE9NBdkKD7RP76-gq0hpe8_C_lD8dSKaD0joL1pSsI9Odxq_5OJVstR2jDqt2XRYHBhs5V9OdHaGgBrJ23FLZ-czStwANiox2-Ia0ssN6S9mohfJUYSUx4QHydq-Z2QPcPcZ5DfzilLYARTR6ZFYaSWRwawfLhGUzm1dIfsZ2e54TH99A2Bx4tJTRPcd5dXBQl7vNRb545NCnHf5q1Qa_sBHdVk2meCYHCLnom2WCjCf83iiWZkU-pUkW0TyURnVqxNg_0uorpahaB1DpNK5Fp73UWuf3kpmL3wVfoS_xD4_8Qn7sIjI6rMjo3bc_Wo0jyYRL2xhAKXLV4w8gsXVmiqRsT8GWS1D8XUhE_2VOT5oP5qOyECTRuPfSYtLjpArb4CNB-LJoYWkB8U6rgIMx0Vaiwce-rls1npKw7xLkwq37LVgEf3AJtoRGqnYJYCLos2Ve6w7XKIzC6Yr4T2ZVu4RnqkFZR_ELuTjS9pKKTHktceubII7vysXQUo2odebwYBJRgwMbAGUpD_q98mjcNPWRySwMwp9K05uSVaVQL2Kp1reK8UnvPbYrZuqzH8lvBqn4XqmtGqEdxEj0xYMU_mUV24J8vQHtWTm_er7R5GEbHw1lWG1iu91Gnb6ag7wKUBmekJImcbMoRygR-ieVpdzFS--ti5DN6Rxo71RmvMM12aAPJBrKMV-qlUWI573M9fcuepREJaATpQk-RtxPJCd1UHtwDC3ZU259BOzpRKIRAmVcWrljlIDtHufxtsNU_dCVp3M-WFGto6ct75YKxXTToxPTdYFwPyKDGe0gys6N_Xs5Fa7PKMJusoCSiLn7u5jWogWmhgEYi4lePwa81Yd-LnVsNxeM_4Tno687k7A2X-ICJTxi_QkbT5diD_Gn45Ka1Bq_yAFMLTMqxWEd2NCVc6lkkQNY0SveUiGlSGVkJRJC9qK4GbMlIrf3rXeyWzTPE9EAGkDIGx9KJ0VOlZ-EyV-crb3YkfNS9jPryyTOuix0iiFiI7-pIcgDGiye9WGg-MhXHSpDZV61upfAlAw-1tY2KGIel3VvG4wlr4WrdVZZ_OS2ZUg8frMe8bk-fvPRWthV2go5D-4eVAGXiUpgvOq0bgV33eSPtEajXWqo3vgoAPf5k2Vsfcaw03g42Iq1NSNJqcByDxfW68e8-WBTYxzEb7UDGJllCqry7NEU22ycPD0SHYQx9USQJAw-nPvCQoUGHTKYsC2yK5KKBo9dXOUBjqYF04seDSw-pKuPSDWDgXr1mJl_dDGw-yhiaaAXyB1dNkt9cDY6usN_HNeIvyNZqv_JJInNFTsaS9J5cJnUgvYOxAWM1P4k54r9_ETDTIwa8NoGJhPDcG7Bt5YspekL4Vbb_TKQ-NKAXU-ZhPJAEnH8wyht5pHLm0wQkAp5dqUhZ-aRtCyw5SbITzPegfY3id_ujRlrqFVJbP1PZx77YCKyGt7hJgt6hGTxBBwgGgwv1oRpLoymQQP2bmjh6pbQ0esF06viCIiNmZ_LJrx2uSQxKO70rjaHUixjzpsoaYBZMqM-E2LYrPXp2jl7FwhjUXfhZtalwdgToJwPTPwOz50LAp4R7d201sTPiVfOmhaAmqKl7NH6dOA3Ztpri5_fxBsMAU4wuXh-M8_fIIoNbz-hqmRFeicgU1Zdv5Urjs3ZAinW0ro-Wsih52QUS8EjV4Wx-YxyBP2pVSEKZ2O8ycn1piHAxuMdJx4RScxaCkq4TniYrwQOllXxApl2-emfvoeeCZl_d-_trGcMwTTBcOKHpD-UlDlzTHDL4HF_z921kpqq_cJpaNOiihnDeNTC4_Zevht4HnN0YjUpUYhsdUHX7BO4QMgt6IPZs_azLUxK-pyGqwAmxEKrfP3eJ51qjGDjs86efEd7yTk2p0Obkcqt9zSPPrfoP5V_iwMzeGjyWA3cRbG4cxj84Qzmxt7bmHHL8_9vFw06oWx8s81ZQ9cm6k6jvuyebITTpVa1amvpcmeI1rpePcU3EadIIT9dEQLaDw2fhQBO7DPpchhGgj2gW9eU3tTT7-5iehtv9sx4d1iZE5jDvWFZgdl7GI4s9pJKfTRToU-b_YaAGRmleHRWU-Cbj6e3LotLxFE5_w4ESyKpNWU9VnvAgLpHQTuGd4k7gYMqPzlsg9TXFKTMPquK4XdS6SAjbIvV6eDJjzdgMx9wz_xu0Ah005hd1YzIIVOSJCFwj251E04Hdzua8krgMsVzkhM1hu_3iSzz2m6u4XPDoPeV0VBc82j4T6x7mCqV3jsU_9D05KbsA1MQb_kFCe9RTt32TAsowyyfxIjDn3ZNOXKnhUe9JAkgBsvhr70FViiXN7Alcw7UE9K0FPPUWKDIquGtKMx1L8YWrbswfvENGtavtQR9J_AztOhBM6yoe9o9jsWTWV9N74z_3NN1nPljz-fV-QrWAeNNffIH1pEdXJ42MAFZVoYQiguEESHewUfflpkYlq1Jo5HZcDCYhM-SA6xH2nvJq9YI8HLlfWv05wWF79H90VZs0p-B5Hb3LdJAuWw_Db0Ogovj-hkrMfvKIt6fEDte6atYV5-toTMgPyYglR_8PprAv8miuKDcl1egTZKC96cN4QaHi7mdsxzwZvk2BlrJ2bdS6bTK8UkksPwAGNIhD1x9iAKSGTp8MClUZlZTdl5oYCNym3KQJGdSXPjzwOnJfHDYLlRavkBlNwKjWdd18Lk2eFeyZHNLbWU4zO2O5YORj77VUwERpkqw8Gz4p0q--atsmCu5VSrA7N48XactbM1iK368POhO07sTUyreVEpqiqKaPdSMroktaKpdiYDZiOPeoniu9rJR9qyXzusvvxXrgXnB8L8EDbHELpRjyfc81-X4nD_H0B-ipVRHtfDoPL2jpRTYKFewrP6eA3S8K2v-eyZ1-88FXkOZFrjBPR9C5NC217MxE284kSfoYHB-KDwR4EjahhmQvhipao3AE-HfakgM_VRE_8RtP-N0bMykg7ELs6ke9-W6SbTCGDylbpevvKhhYzysjf0ngtHFU74FGquZePSPObehIkcDazVLQo23QvtbvHAckRSf0w86swYiOpWrNI8D7_6vS916U1X6CCaQPQKAvEbAY8vgx2WxY7wfz11c5-fuj4wB0UR4irg7fT3FDZphDWFQ634M-iRu8L1RSRz2UD9ZDJg3nZeZy-XwXgq54o_sOS6NhAiRXhAzwZsA8efQoX290oD40VDlZ7pWPzfPGXosiLBopi56MiEQFqS4Fq8mCyfbO3hAYHVfi3PLxI15gzBA61QIROoNOxGW1UD2DDVQzdiQhZYJS6Y4oti8OlBNR-Wbu3_RGEdq0Fg1jhPkeaoRjNd414OEDcYMnBetQ2hG_U4WjFmjhdNRIdODZ44837hWY27hOWn8oQvg4O3sSPM0v1BgwiYQonDTRjsGq80qYmLQgzzvA9smlCD491p7vBiiNkKeLaXn1l1d9Z_rg-m1Km8IqXM3B0Fm1o_mzsn6gC99Y7MFjZNsY2s-E6eo_yCQ97Ulp6Qo3Lu4utnsDhRVz2oX8zrhtpUBqPLFdjWD50cDTqte87KXMYWrBcFBXgTQaWRj-RPHQ4HNupeSrujhzMrBubnX0-78cKw5-I684kjQxNHn4zEece-Wo9AEkCvWTJLj0hhg1jOf46JhPpgVxmutYyl3HStKieUEWTGRy1P0-rAvu6kw2AHvqYiby0DdowxXbuuHcLRG1r2ZQl2Nc1WSdlAaokbYo8q8PR5hzAC1dhyeDT2TLYHJBMzYgclvJfdbIpNoewKzTo6E9maZKtmMel8b3ju_5KuADwoQs-jhnGQ0rmPo7DqW0hH6ChSJK_hiJ1Y1B5xqBG11nZPhZFvyByG8SgGF-1ZuhiVBAB_e2V3AkVE_I0qexUBBvLzTxWDI05S5QEydtbo6jSjSu52qJOiiPcxHphT3s4Qzj3Ro7svCC3-0Iqu26qK7Vd_R9ED8-akjRP00yYIpXM59bpLvJMBzbvkHkiz6x-AECd8d03-09qHLpO97f5NAT_R0dpvFHRw6o7VIehxhCpVIh-M2_HiHIpp-_jag-cZUe5brpc6u6B-XEXyY2fMfujft0Yq2uE87e991x9brIBQIUvVabdlM-z-XiXqWbpQOdughb4XdGU2S-P-jZBWQ9Ex9-8CqL2PL2KhSw8dLI2jQZf7qVSXFwKnJkZpCDdT1KjELvG5wMVS9kptcd1r3IrLrrB1A65puu6zFiidSEpk3V3_nPSkhjnWxvMCyZmwxMPDxCynlVlBOh5I96KTdrM5kM-zFgcBMTf8mTmQqN4_WGZKZQn3jFHkQFqeZaSyAZf0KGwe1uuxFxWmN43Th0Kkmq-5ZLOdFs1UQ4JVtsdQKo-Op77UmQUXq3djxD2hJgnSpcdinFeeQNdzHz11cM7t_ufVc_X05RIwD_tkKY3HfMlUGnoYNpUr6yFtdZcQgOvx-72v-bScKyzHbFwdzhArGIJEWq12UcdEklkwAK8RUS0tvDYfHqIUEPDh5t1c86vmGF2at_wcb0P5WCoc0NQME-7bjwDLNqfS76pSqRcmQNPu5VAJVC759rLDQmb9FSBAw9_77locMlKI5PWzyOdEpnMJeqcUNRgNAMNsKhXNWm5HFxsE6myRr3Ueao2XIUF5i9I9BmA_-1rf-7aJ_5P74SVBoNekp-ydTt2NMtewnrspr-gKyR0czHRc6RMsuwKj6ag4r8T3jp_BnIfsIMCrYKDPbl3reZP13dy4S7jK2YcBLMSHpMUzQZctwanGj8q9e9XYtcNGMkU5JfOALpKoja0RvtQC2yD1dfVdlH4nX-iU28FFTPHliyilTmvHq26iaWocn7Xy_gwvlK40ySV84m-6B57MCuZG5y8wUmYQl64fdSXt1HxUe8t5YfndR1oD3nlu_CqcqwUDCE_o10BCjFndF_m3aO8jjyggSzfL1iQOLyUUFo6yzBZog63onkz6dgl1DSMOc=\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Considering stability measures**\\n\\nI’m thinking about pinning acpx expectedVersion to 0.1.15 to enhance stability and hardening, even though it hasn’t been found by audit. I should inspect the agent tool profile, possibly setting it per pipo instead of all agents. The audit warning mentions permissive contexts. Setting global tools.exec.ask on-miss could maybe work, but it might need approval. After the restart, I need to consider Telegram access too. There’s a warning regarding `gateway.probe_failed`, suggesting we might need auth scope for future audits. However, since things are functioning well, immediate changes might not be necessary.\"},{\"type\":\"summary_text\",\"text\":\"**Evaluating gateway actions**\\n\\nI might decide to leave some items non-actionable since the local token-based gateway mode doesn’t support operator.read, and the status seems healthy. I could note that nothing changed due to a false positive. However, the user asked to \\\"correct what you found,\\\" so I could focus on actionable corrections and explain why some issues remain informational and not worth breaking access. \\n\\nI need to look into updating model tiers for the Claude agents. Changing CLI wrapper entries to recommended API models could be costly, but the audit suggests old model tiers are a concern. Alternatively, I could adjust model aliases, but it looks like the Claude alias is already up-to-date.\"},{\"type\":\"summary_text\",\"text\":\"**Reviewing model tier issues**\\n\\nIt seems these aren’t necessarily old model tiers, maybe just naming issues. The audit might have flagged a false positive because the CLI backend ID isn’t mapped. Changing the agents to API could significantly alter their economics and behavior, so I’d prefer not to do this without explicit approval. Although the user asked to fix everything, I have to be cautious since it impacts the worker backend. Maybe I could set the model for those agents to point to the `claude` and `claude-opus` aliases instead.\"},{\"type\":\"summary_text\",\"text\":\"**Considering documentation options**\\n\\nI'm thinking about checking the README for acpx or looking at the documentation for openclaw to see if I can find something helpful. I might also read through the plugin skill documentation. It seems like there are a few avenues to explore here, and I'm curious which would be the most effective for finding the information I need. Let's see which documents have what I’m looking for!\"}]}"},{"type":"toolCall","id":"call_XZiwSbxYY2fJ3QPbTC6fskiG|fc_0776d4d0ce7a6f6b0169b75590d41c8190bb3ff189f992afae","name":"read","arguments":{"file_path":"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/acpx/README.md"},"partialJson":"{\"file_path\":\"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/acpx/README.md\"}"},{"type":"toolCall","id":"call_x4TjowUx6BZXO9eHPMsJxhlf|fc_0776d4d0ce7a6f6b0169b75590d43081908147da18efdb7fec","name":"read","arguments":{"file_path":"/usr/lib/node_modules/openclaw/docs/configuration.md"},"partialJson":"{\"file_path\":\"/usr/lib/node_modules/openclaw/docs/configuration.md\"}"},{"type":"toolCall","id":"call_CDzMIrkfgTtU3NaQH7RiDwe8|fc_0776d4d0ce7a6f6b0169b75590d4388190b94955d3e1216d2b","name":"read","arguments":{"file_path":"/usr/lib/node_modules/openclaw/docs/CONFIG.md"},"partialJson":"{\"file_path\":\"/usr/lib/node_modules/openclaw/docs/CONFIG.md\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":1994,"output":1139,"cacheRead":106240,"cacheWrite":0,"totalTokens":109373,"cost":{"input":0.004985000000000001,"output":0.017085,"cacheRead":0.02656,"cacheWrite":0,"total":0.04863}},"stopReason":"toolUse","timestamp":1773622649902}} {"type":"message","id":"3af9c11a","parentId":"83a56c77","timestamp":"2026-03-16T00:57:53.308Z","message":{"role":"toolResult","toolCallId":"call_XZiwSbxYY2fJ3QPbTC6fskiG|fc_0776d4d0ce7a6f6b0169b75590d41c8190bb3ff189f992afae","toolName":"read","content":[{"type":"text","text":"

\n \"acpx\n

\n\n# acpx\n\n[![npm version](https://img.shields.io/npm/v/acpx.svg)](https://www.npmjs.com/package/acpx)\n[![npm downloads](https://img.shields.io/npm/dm/acpx.svg)](https://www.npmjs.com/package/acpx)\n[![CI](https://github.com/openclaw/acpx/actions/workflows/ci.yml/badge.svg)](https://github.com/openclaw/acpx/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node.js](https://img.shields.io/node/v/acpx.svg)](https://nodejs.org)\n\n> ⚠️ `acpx` is in alpha and the CLI/runtime interfaces are likely to change. Anything you build downstream of this might break until it stabilizes.\n\n> ACP coverage status: see [ACP Spec Coverage Roadmap](docs/2026-02-19-acp-coverage-roadmap.md).\n\nYour agents love acpx! 🤖❤️ They hate having to scrape characters from a PTY session 😤\n\n`acpx` is a headless CLI client for the [Agent Client Protocol (ACP)](https://agentclientprotocol.com), so AI agents and orchestrators can talk to coding agents over a structured protocol instead of PTY scraping.\n\nOne command surface for Codex, Claude, Gemini, OpenCode, Pi, or custom ACP servers. Built for agent-to-agent communication over the command line.\n\n- **Persistent sessions**: multi-turn conversations that survive across invocations, scoped per repo\n- **Named sessions**: run parallel workstreams in the same repo (`-s backend`, `-s frontend`)\n- **Prompt queueing**: submit prompts while one is already running, they execute in order\n- **Cooperative cancel command**: `cancel` sends ACP `session/cancel` via queue IPC without tearing down session state\n- **Soft-close lifecycle**: close sessions without deleting history from disk\n- **Queue owner TTL**: keep queue owners alive briefly for follow-up prompts (`--ttl`)\n- **Fire-and-forget**: `--no-wait` queues a prompt and returns immediately\n- **Graceful cancel**: `Ctrl+C` sends ACP `session/cancel` before force-kill fallback\n- **Session controls**: `set-mode` and `set ` for `session/set_mode` and `session/set_config_option`\n- **Crash reconnect**: dead agent processes are detected and sessions are reloaded automatically\n- **Prompt from file/stdin**: `--file ` or piped stdin for prompt content\n- **Config files**: global + project JSON config with `acpx config show|init`\n- **Session inspect/history**: `sessions show` and `sessions history --limit `\n- **Local status checks**: `status` reports running/dead/no-session, pid, uptime, last prompt\n- **Client methods**: stable `fs/*` and `terminal/*` handlers with permission controls and cwd sandboxing\n- **Auth handshake**: stable `authenticate` support via env/config credentials\n- **Structured output**: typed ACP messages (thinking, tool calls, diffs) instead of ANSI scraping\n- **Any ACP agent**: built-in registry + `--agent` escape hatch for custom servers\n- **One-shot mode**: `exec` for stateless fire-and-forget tasks\n\n```bash\n$ acpx codex sessions new\n$ acpx codex \"find the flaky test and fix it\"\n\n[thinking] Investigating test suite for flaky failures\n\n[tool] Run npm test -- --reporter=verbose (running)\n[tool] Run npm test -- --reporter=verbose (completed)\n output:\n ✓ auth.login (0.8s)\n ✗ checkout.submit (timed out after 5000ms)\n ✓ cart.add (0.3s)\n\n[thinking] Found it — checkout.submit has a race condition in the async setup\n\n[tool] Edit src/checkout.test.ts (completed)\n output:\n Success. Updated 1 file.\n\n[tool] Run npm test -- checkout.submit (completed)\n output:\n ✓ checkout.submit (0.4s)\n\nFixed: added `await` to the setup hook in checkout.submit. The test was\nreading stale state from the previous run.\n\n[done] end_turn\n```\n\n## Quick setup — tell your agent about acpx\n\nCopy the block below and paste it into your OpenClaw, Pi, Claude Code, or similar agent harness. It will install acpx, read the skill reference, and know how to use ACP for all future coding agent tasks.\n\n```text\nI want you to use acpx to run coding agents over the Agent Client Protocol\n(ACP) instead of scraping PTY sessions. Please do the following:\n\n1. Install acpx globally (recommended) or use npx:\n npm install -g acpx@latest\n\n Or without installing:\n npx acpx@latest\n\n2. Install the acpx skill so you have the full reference available:\n npx acpx@latest --skill install acpx\n\n3. Read the acpx skill reference so you know every command, flag, and\n workflow pattern:\n https://raw.githubusercontent.com/openclaw/acpx/main/skills/acpx/SKILL.md\n\n4. If you need the full CLI reference with all options and examples:\n https://raw.githubusercontent.com/openclaw/acpx/main/docs/CLI.md\n\nFrom now on, when you need to delegate work to a coding agent, use acpx\ninstead of spawning raw terminal sessions. For example:\n npx acpx@latest codex \"fix the failing tests\"\n npx acpx@latest claude \"refactor the auth module\"\n npx acpx@latest codex exec \"one-shot: summarize this repo\"\n```\n\n## Install\n\n```bash\nnpm install -g acpx@latest\n```\n\nOr run without installing:\n\n```bash\nnpx acpx@latest codex \"fix the tests\"\n```\n\nSession state lives in `~/.acpx/` either way. Global install is a little faster, but `npx acpx@latest` works fine.\n\n## Agent prerequisites\n\n`acpx` auto-downloads ACP adapters with `npx` on first use. You do not need to install adapter packages manually.\n\nThe only prerequisite is the underlying coding agent you want to use:\n\n- `acpx codex` -> Codex CLI: https://codex.openai.com\n- `acpx claude` -> Claude Code: https://claude.ai/code\n- `acpx gemini` -> Gemini CLI: https://github.com/google/gemini-cli\n- `acpx opencode` -> OpenCode: https://opencode.ai\n- `acpx pi` -> Pi Coding Agent: https://github.com/mariozechner/pi\n\n## Usage examples\n\n```bash\nacpx codex sessions new # create a session (explicit) for this project dir\nacpx codex 'fix the tests' # implicit prompt (routes via directory-walk)\nacpx codex prompt 'fix the tests' # explicit prompt subcommand\necho 'fix flaky tests' | acpx codex # prompt from stdin\nacpx codex --file prompt.md # prompt from file\nacpx codex --file - \"extra context\" # explicit stdin + appended args\nacpx codex --no-wait 'draft test migration plan' # enqueue without waiting if session is busy\nacpx codex cancel # cooperative cancel of in-flight prompt\nacpx codex set-mode plan # session/set_mode\nacpx codex set approval_policy conservative # session/set_config_option\nacpx exec 'summarize this repo' # default agent shortcut (codex)\nacpx codex exec 'what does this repo do?' # one-shot, no saved session\n\nacpx codex sessions new --name api # create named session\nacpx codex -s api 'implement cursor pagination' # prompt in named session\nacpx codex sessions new --name docs # create another named session\nacpx codex -s docs 'rewrite API docs' # parallel work in another named session\n\nacpx codex sessions # list sessions for codex command\nacpx codex sessions list # explicit list\nacpx codex sessions show # inspect cwd session metadata\nacpx codex sessions history # show recent turn history\nacpx codex sessions new # create fresh cwd-scoped default session\nacpx codex sessions new --name api # create fresh named session\nacpx codex sessions ensure # return existing scoped session or create one\nacpx codex sessions ensure --name api # ensure named scoped session\nacpx codex sessions close # close cwd-scoped default session\nacpx codex sessions close api # close cwd-scoped named session\nacpx codex status # local process status for current session\n\nacpx config show # show resolved config (global + project)\nacpx config init # create ~/.acpx/config.json template\n\nacpx claude 'refactor auth middleware' # built-in claude agent\nacpx gemini 'add startup logging' # built-in gemini agent\n\nacpx my-agent 'review this patch' # unknown name -> raw command\nacpx --agent './bin/dev-acp --profile ci' 'run checks' # --agent escape hatch\n```\n\n## Practical scenarios\n\n```bash\n# Review a PR in a dedicated session and auto-approve permissions\nacpx --cwd ~/repos/shop --approve-all codex -s pr-842 \\\n 'Review PR #842 for regressions and propose a minimal fix'\n\n# Keep parallel streams for the same repo\nacpx codex -s bugfix 'isolate flaky checkout test'\nacpx codex -s release 'draft release notes from recent commits'\n```\n\n## Global options in practice\n\n```bash\nacpx --approve-all codex 'apply the patch and run tests'\nacpx --approve-reads codex 'inspect repo structure and suggest plan' # default mode\nacpx --deny-all codex 'explain what you can do without tool access'\nacpx --non-interactive-permissions fail codex 'fail instead of deny in non-TTY'\n\nacpx --cwd ~/repos/backend codex 'review recent auth changes'\nacpx --format text codex 'summarize your findings'\nacpx --format json codex exec 'review changed files'\nacpx --format json --json-strict codex exec 'machine-safe JSON only'\nacpx --format quiet codex 'final recommendation only'\n\nacpx --timeout 90 codex 'investigate intermittent test timeout'\nacpx --ttl 30 codex 'keep queue owner alive for quick follow-ups'\nacpx --verbose codex 'debug why adapter startup is failing'\n```\n\n## Configuration files\n\n`acpx` reads config in this order (later wins):\n\n1. global: `~/.acpx/config.json`\n2. project: `/.acpxrc.json`\n\nCLI flags always win over config values.\n\nSupported keys:\n\n```json\n{\n \"defaultAgent\": \"codex\",\n \"defaultPermissions\": \"approve-all\",\n \"nonInteractivePermissions\": \"deny\",\n \"authPolicy\": \"skip\",\n \"ttl\": 300,\n \"timeout\": null,\n \"format\": \"text\",\n \"agents\": {\n \"my-custom\": { \"command\": \"./bin/my-acp-server\" }\n },\n \"auth\": {\n \"my_auth_method_id\": \"credential-value\"\n }\n}\n```\n\nUse `acpx config show` to inspect the resolved result and `acpx config init` to create the global template.\n\n## Output formats\n\n```bash\n# text (default): human-readable stream with tool updates\nacpx codex 'review this PR'\n\n# json: NDJSON events, useful for automation\nacpx --format json codex exec 'review this PR' \\\n | jq -r 'select(.type==\"tool_call\") | [.status, .title] | @tsv'\n\n# json-strict: suppresses non-JSON stderr output (requires --format json)\nacpx --format json --json-strict codex exec 'review this PR'\n\n# quiet: final assistant text only\nacpx --format quiet codex 'give me a 3-line summary'\n```\n\nJSON events include a stable envelope for correlation:\n\n```json\n{\n \"eventVersion\": 1,\n \"sessionId\": \"abc123\",\n \"requestId\": \"req-42\",\n \"seq\": 7,\n \"stream\": \"prompt\",\n \"type\": \"tool_call\"\n}\n```\n\nSession-control JSON payloads (`sessions new|ensure`, `status`) may also include\n`runtimeSessionId` when the adapter exposes a provider-native session ID.\n\n## Built-in agents and custom servers\n\nBuilt-ins:\n\n| Agent | Adapter | Wraps |\n| ---------- | ---------------------------------------------------------------------- | ----------------------------------------------------- |\n| `codex` | [codex-acp](https://github.com/zed-industries/codex-acp) | [Codex CLI](https://codex.openai.com) |\n| `claude` | [claude-agent-acp](https://github.com/zed-industries/claude-agent-acp) | [Claude Code](https://claude.ai/code) |\n| `gemini` | native | [Gemini CLI](https://github.com/google/gemini-cli) |\n| `opencode` | native | [OpenCode](https://opencode.ai) |\n| `pi` | [pi-acp](https://github.com/svkozak/pi-acp) | [Pi Coding Agent](https://github.com/mariozechner/pi) |\n\nUse `--agent` as an escape hatch for custom ACP servers:\n\n```bash\nacpx --agent ./my-custom-acp-server 'do something'\n```\n\n## Session behavior\n\n- Prompt commands require an existing saved session record (created via `sessions new` or `sessions ensure`).\n- Prompts route by walking up from `cwd` (or `--cwd`) to the nearest git root (inclusive) and selecting the nearest active session matching `(agent command, dir, optional name)`.\n- If no git root is found, prompts only match an exact `cwd` session (no parent-directory walk).\n- `-s ` selects a parallel named session during that directory walk.\n- `sessions new [--name ]` creates a fresh session for that scope and soft-closes the prior one.\n- `sessions ensure [--name ]` is idempotent: it returns an existing scoped session or creates one when missing.\n- `sessions close [name]` soft-closes the session: queue owner/processes are terminated, record is kept with `closed: true`.\n- Auto-resume for cwd scope skips sessions marked closed.\n- Prompt submissions are queue-aware per session. If a prompt is already running, new prompts are queued and drained by the running `acpx` process.\n- Queue owners use an idle TTL (default 300s). `--ttl ` overrides it; `--ttl 0` keeps owners alive indefinitely.\n- `--no-wait` submits to that queue and returns immediately.\n- `cancel` sends cooperative `session/cancel` to the running queue owner process and returns success when no prompt is running (`nothing to cancel`).\n- `set-mode` and `set` route through queue-owner IPC when active, otherwise they reconnect directly to apply `session/set_mode` and `session/set_config_option`.\n- `exec` is always one-shot and does not reuse saved sessions.\n- Session metadata is stored under `~/.acpx/sessions/`.\n- Each successful prompt appends lightweight turn history previews (`role`, `timestamp`, `textPreview`) to session metadata.\n- `Ctrl+C` during a running turn sends ACP `session/cancel` and waits briefly for `stopReason=cancelled` before force-killing if needed.\n- If a saved session pid is dead on the next prompt, `acpx` respawns the agent, attempts `session/load`, and transparently falls back to `session/new` if loading fails.\n\n## Full CLI reference\n\nSee `docs/CLI.md`.\n\n## License\n\nMIT\n"}],"isError":false,"timestamp":1773622673296}} {"type":"message","id":"6cd37a9a","parentId":"3af9c11a","timestamp":"2026-03-16T00:57:53.319Z","message":{"role":"toolResult","toolCallId":"call_x4TjowUx6BZXO9eHPMsJxhlf|fc_0776d4d0ce7a6f6b0169b75590d43081908147da18efdb7fec","toolName":"read","content":[{"type":"text","text":"{\n \"status\": \"error\",\n \"tool\": \"read\",\n \"error\": \"ENOENT: no such file or directory, access '/usr/lib/node_modules/openclaw/docs/configuration.md'\"\n}"}],"details":{"status":"error","tool":"read","error":"ENOENT: no such file or directory, access '/usr/lib/node_modules/openclaw/docs/configuration.md'"},"isError":false,"timestamp":1773622673307}} {"type":"message","id":"f9328eb5","parentId":"6cd37a9a","timestamp":"2026-03-16T00:57:53.338Z","message":{"role":"toolResult","toolCallId":"call_CDzMIrkfgTtU3NaQH7RiDwe8|fc_0776d4d0ce7a6f6b0169b75590d4388190b94955d3e1216d2b","toolName":"read","content":[{"type":"text","text":"{\n \"status\": \"error\",\n \"tool\": \"read\",\n \"error\": \"ENOENT: no such file or directory, access '/usr/lib/node_modules/openclaw/docs/CONFIG.md'\"\n}"}],"details":{"status":"error","tool":"read","error":"ENOENT: no such file or directory, access '/usr/lib/node_modules/openclaw/docs/CONFIG.md'"},"isError":false,"timestamp":1773622673318}} {"type":"message","id":"7dbf9aee","parentId":"f9328eb5","timestamp":"2026-03-16T00:58:06.782Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Evaluating permission settings**\n\nThe README clarifies that `approve-all` auto-approves everything, while `approve-reads` is the default. Patching to `approve-reads` seems reasonable but may introduce some risks since non-interactive modes fail if no approvals are granted. Since Telegram doesn’t allow for interactive approvals, I’m concerned that tasks will fail if permissions are tightened. Many users rely on coding sessions via Telegram. We need to consider usability while also weighing the audit warning. Should I set `nonInteractivePermissions` to deny?\n\n**Analyzing execution permissions**\n\nI’m considering whether it’s wise to change the acpx settings. Leaving it unchanged might be better, but I could set `tools.exec.ask` to on-miss instead. However, that’s for our assistant exec. I should check the `tools.exec.security` enum to see what the defaults are, like whether it’s allowlist, deny, or full. If I set it to allowlist, it could break many direct exec commands. Our own workflows rely on exec occasionally, so I need to think this through. Should I inspect the schema?","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b755934ecc8190a33e943493ae2d04\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1We_V5ZPzbO93gQMDqi0Na4hcrg8V3Mi4_QiUVPur-rH1IKAdvyiUjUb9PHQS7Pb9hSdzvqpPGZHnUKVa3iwHiMX4O3f6gIZVxwD9iHJN_ELx6G2hyAA6-WnRh1Mcshob7JFM9UCR5EY8HT-XoUba5JEHiwUevsWYKvqVmXwzpAQQzuLggcvUltWliWnRw-ck2_93qWOX3xLVxCuhoHoDdphIqf07R5uMqyd4nU0_5D60_cLmnN4p-jDmobMZfnpvS7PacN99QUHC4L23DCZjvZP4a8XrWXdcq9uNacsfBUl6-nz35_fXKhF9-u3JozeAo7duO5b-GdtGPbce5OoeDogU0Ok9C4AWMDnVTHDKA5ySm9PLA4AgqXWLhd4w0V7tHg-MUl4x2mKtGtOYYZ4jQZGAnmJXAseUUWi7cWtw6FRHfdFOx1LSVg7GXXaJxVM_P2pAykgK7DI165k1Vw5S-rHslwcN8FH2F9Vaz0gnalwJc5Tar-I2Bu1oY4MiD1qdkfoi4FLP2oN28r5WyHxx1aP_IPqanDdC-jb9u7MehdfIO4n1vMafSxCUfN843Cj6OchBHUmczwWzaDvM9KxPOQjw0PuV51Fm1M2qAzWgfq-jCNJOHHJuh9FXtwR_PzT3oJb8_n31YPX2Y8DhXtZ5l6xj_LNYL00WPBWLXPF2nBKAoi_uKBaYkUTHh5YhxcJGUDfTZm1FZDJXAsGT3hfxic0Xu2iEWJMK-x1itkgCFYdWBWGGr6CJ83WcNwlbrH4lf12c4Hkz8aROQ8z9g_kKNVgewD8iEOgq5_bEM3mhBvJVNC136cSmueTL5kssbIuBeBi_A5BwkfOfmx_CTgPXKXQ4l5pc0MXoWEl07uU1pEGiMVrexlSKmcKFrMvoBt9bC5kfoK62vmk9duVon-d_PuGzlK-a5abI24XPRYqUeITwNTDYa_e5NlCv2L98Sl7bZhs6p8Asy-4gu4lqGInZiqvf6d-4RjhPweK8c2Rmlf1Aw64UA-5HJe0We3HNDo6KVgYYlOe7BK8RBux9VRB9t7KdfOJ399SjheGzynhZbI0cCxjCh9tcnQiZXCjSmWYf1yeLCxr_gmPkeGsNG13cZHDlnwZrnrC4c1hWnCDBLCa8HhaoTulh7pR0Juny0oeenmijXnYyE89V0Pz4uPkJyIprEjrLbO9JnFYe32zrflyGzhfzU5duKRFD-83fSAyuRnEOUkS6qenLBkq18PzA9dl916n3hUyOZtEhYdxqQALHxitQTxGWik52BwIERroXvLpdar3VbCkP-9oCpmiXKEdDLy-3UGFpZVmlW-bmtRjFjgfmDHgD7MR5Ha0lZCYChdaxbZv1vrUjt8lqXo61fehZCO2GhQqXj0w8FFISe8LCR4HSf__iBxaWvutdqNWbRO-FrpFZ2SKPi7B2bjaMCaGZa4ZV8pRoaCLG3qElIWM0k9TKdqyRpR_MtcewPFwrKwd3CKe6K61JcAasruSP8iYGNY202zHg4oiozDab7kMM8tPwixQbUM60USOuQzgFwcrj156mszLvxQKM1qBLCcWR07kTEcVnWLfTByunj41m3W6vU5SPpvbAsrCWYRQ9L10AKFVutfABk4dcgrN0MpWerhtP4tPUMwpZWOBNCHuJcx-rF0BiLJTQ8aVbQPgKDaJ0ZzxjJeFkVpSrBbwKDcKbMoA8wLWQEKh0E6ypnu2hoPXmLu2EdAP1OoX3EdubnnuYn3GI7XFbRRl93VhyomlcIS8OkIOOAtoy8ELCtFi9xlMp-wKuYi0Bb1v-By2Uaw_bw5nHUcECi_whks4JdI2prGyiyM68H_exwuRsVovTzxIqmKaWX-sncVbYjq_fAchhhwz_APRudEu-lLmqrfcBU5pzj6YQRqSvS-PpuZEro8jQNXfXPnjjvBamTPwCzIRB3SG7js8QgGyXEtSiH8aWpXvz6Bc7eaw76JCvuKqH_Tc-xJ3kcppPuc6kL2uSreHsxXp5qQhKlI4WEsgg_d6V65Lf7nk_5dkVbnEiq8FCW1BdRK8pdznjg5kvPsJOQaoPCP4dx-tpPhmFRM8fS6fIgwRC0o6AUZhmt3XIfGyVym9ZC8f0VXLUaTQeYHWL-U0QYh4XxIr_F8HKfb4pbs6GaGZdRfC9w6SNG1HbizCxwfI7hfg-nxLk71sOJPeBFSPKwBoWf5-VcgHOLKGT6bNBBNroblfvVVBffdpfRGgjHC8hOVIkmxr4Tp76T1iYpYFuvIdDJKsudtkk_HymOwmtWQBB_Z_ssnHtWCi09TTuTp9cdZuBjk26PJgLz2o4Qm-rTUC2CQ67kHIMHgIS1ITa2HMtLQaJ1aoZp5JNNlsw-zhOk5pib8v9xXiMyD-eY6ij95Dww_VlCnCi-XuRbRK5JSZaAkSWdZRgsfI40gLFePA0vox5OsrMqGLpK36ETxonwoew_SEINlXfyIOe7wjcW75Hbyr4NgY4cQm0IS36LOaBQKTOig1jGIP5cBgi2FSnmmetYbf3CdFZo2NsKUTZE8NzN_dOLp7dD-ZV9mKx7bshnNOO76qSOo83_k9Gw0LDQ73NaEK25prDoqUbduXKDAUxvLMygAsconuEZPGt6dwmNhrVk7WFqJSmnR3pu4EXoKIQ697M4ybnWDWMACnYcb8sHcycWXH11wgNc70sShqM4b26yFz5UrUXjGBv3429t6hwEFk71JT2qo73fLz326_vy9G_BTGUVTd7pv-Y8kkhQcDtA4ZR1z5lKfq5zs8qH4K9E52S2Sv-sEtw7s3vTeYCzEHZUTlQeEnKYg3JnM3Yzu1TQLg1tZJmBL-MQd6TOVqyd7Y07YyXH9wHfA_YDMn8rAxUeG5YFkJeKEUiOge3i8w6wjHWlvwsoqXKoCNi_nkt7DVR3xg-B0bghlAWOTfj3_mY2ONkMdS4T-KhYRrUEwZOAH32NwmRTLizf8cyFntyE0xm4QXbOTFKmhHIUbxM1smmsiqd2SOjyffaPF5s8fBZx6BoVJEUFjSk_LIEu11gkxi_KoI7MLMUrlAg==\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Evaluating permission settings**\\n\\nThe README clarifies that `approve-all` auto-approves everything, while `approve-reads` is the default. Patching to `approve-reads` seems reasonable but may introduce some risks since non-interactive modes fail if no approvals are granted. Since Telegram doesn’t allow for interactive approvals, I’m concerned that tasks will fail if permissions are tightened. Many users rely on coding sessions via Telegram. We need to consider usability while also weighing the audit warning. Should I set `nonInteractivePermissions` to deny?\"},{\"type\":\"summary_text\",\"text\":\"**Analyzing execution permissions**\\n\\nI’m considering whether it’s wise to change the acpx settings. Leaving it unchanged might be better, but I could set `tools.exec.ask` to on-miss instead. However, that’s for our assistant exec. I should check the `tools.exec.security` enum to see what the defaults are, like whether it’s allowlist, deny, or full. If I set it to allowlist, it could break many direct exec commands. Our own workflows rely on exec occasionally, so I need to think this through. Should I inspect the schema?\"}]}"},{"type":"toolCall","id":"call_OeyDBw1fMlsoXIf3EhJKmabH|fc_0776d4d0ce7a6f6b0169b7559e7f148190a3936be97a25d914","name":"gateway","arguments":{"action":"config.schema.lookup","path":"tools.exec.security"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"tools.exec.security\"}"},{"type":"toolCall","id":"call_feLJIrwFwKz0AB06wUIWSSjy|fc_0776d4d0ce7a6f6b0169b7559e7f288190a3f9446c0a0c9dc8","name":"gateway","arguments":{"action":"config.schema.lookup","path":"tools.exec.ask"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"tools.exec.ask\"}"},{"type":"toolCall","id":"call_8H0xaqnWjjAd9LB57vXGLy09|fc_0776d4d0ce7a6f6b0169b7559e7f308190a23db5423c757be2","name":"gateway","arguments":{"action":"config.schema.lookup","path":"tools.profile"},"partialJson":"{\"action\":\"config.schema.lookup\",\"path\":\"tools.profile\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":3800,"output":425,"cacheRead":109184,"cacheWrite":0,"totalTokens":113409,"cost":{"input":0.009500000000000001,"output":0.0063750000000000005,"cacheRead":0.027295999999999997,"cacheWrite":0,"total":0.043171}},"stopReason":"toolUse","timestamp":1773622673336}} {"type":"message","id":"a1ba4520","parentId":"7dbf9aee","timestamp":"2026-03-16T00:58:07.021Z","message":{"role":"toolResult","toolCallId":"call_OeyDBw1fMlsoXIf3EhJKmabH|fc_0776d4d0ce7a6f6b0169b7559e7f148190a3936be97a25d914","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"tools.exec.security\",\n \"schema\": {\n \"type\": \"string\",\n \"enum\": [\n \"deny\",\n \"allowlist\",\n \"full\"\n ]\n },\n \"hint\": {\n \"label\": \"Exec Security\",\n \"help\": \"Execution security posture selector controlling sandbox/approval expectations for command execution. Keep strict security mode for untrusted prompts and relax only for trusted operator workflows.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.exec.security\",\n \"children\": []\n }\n}"}],"details":{"ok":true,"result":{"path":"tools.exec.security","schema":{"type":"string","enum":["deny","allowlist","full"]},"hint":{"label":"Exec Security","help":"Execution security posture selector controlling sandbox/approval expectations for command execution. Keep strict security mode for untrusted prompts and relax only for trusted operator workflows.","tags":["tools"]},"hintPath":"tools.exec.security","children":[]}},"isError":false,"timestamp":1773622686992}} {"type":"message","id":"d18e7c4f","parentId":"a1ba4520","timestamp":"2026-03-16T00:58:07.055Z","message":{"role":"toolResult","toolCallId":"call_feLJIrwFwKz0AB06wUIWSSjy|fc_0776d4d0ce7a6f6b0169b7559e7f288190a3f9446c0a0c9dc8","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"tools.exec.ask\",\n \"schema\": {\n \"type\": \"string\",\n \"enum\": [\n \"off\",\n \"on-miss\",\n \"always\"\n ]\n },\n \"hint\": {\n \"label\": \"Exec Ask\",\n \"help\": \"Approval strategy for when exec commands require human confirmation before running. Use stricter ask behavior in shared channels and lower-friction settings in private operator contexts.\",\n \"tags\": [\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.exec.ask\",\n \"children\": []\n }\n}"}],"details":{"ok":true,"result":{"path":"tools.exec.ask","schema":{"type":"string","enum":["off","on-miss","always"]},"hint":{"label":"Exec Ask","help":"Approval strategy for when exec commands require human confirmation before running. Use stricter ask behavior in shared channels and lower-friction settings in private operator contexts.","tags":["tools"]},"hintPath":"tools.exec.ask","children":[]}},"isError":false,"timestamp":1773622687035}} {"type":"message","id":"f29f969d","parentId":"d18e7c4f","timestamp":"2026-03-16T00:58:07.098Z","message":{"role":"toolResult","toolCallId":"call_8H0xaqnWjjAd9LB57vXGLy09|fc_0776d4d0ce7a6f6b0169b7559e7f308190a23db5423c757be2","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"tools.profile\",\n \"schema\": {},\n \"hint\": {\n \"label\": \"Tool Profile\",\n \"help\": \"Global tool profile name used to select a predefined tool policy baseline before applying allow/deny overrides. Use this for consistent environment posture across agents and keep profile names stable.\",\n \"tags\": [\n \"storage\",\n \"tools\"\n ]\n },\n \"hintPath\": \"tools.profile\",\n \"children\": []\n }\n}"}],"details":{"ok":true,"result":{"path":"tools.profile","schema":{},"hint":{"label":"Tool Profile","help":"Global tool profile name used to select a predefined tool policy baseline before applying allow/deny overrides. Use this for consistent environment posture across agents and keep profile names stable.","tags":["storage","tools"]},"hintPath":"tools.profile","children":[]}},"isError":false,"timestamp":1773622687087}} {"type":"message","id":"31a6e242","parentId":"f29f969d","timestamp":"2026-03-16T00:58:28.690Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Evaluating credential configurations**\n\nI'm thinking about how to improve our settings by loading environment variables through a minimal config helper. It might not be ideal to rely on `process.env`. Instead, I could suggest only using a credentials file without an environment fallback. This approach seems safer and might please auditors since it addresses potential risks associated with accessing environment variables. I also need to ensure we patch both scripts to rely solely on `credentials.json` for OAuth token updates. I'll check if `configure.mjs` exists to see if it handles writing this credentials file.","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b755a0cc7881908497f1db9e391461\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1W0KgSRVqq3irFsAdEX3B_lDNy1kLXjMm6wwarAV8P5G3tmn3K6fXcniF6s2a6VaELX3feK5ZO0s16lrDKq0o87-UBx9L7nWRkb0g6teE_pauTwKjSHV27mzhzsZ1rO4qz48fXr7FIWe0r-6RoB_MyWO3DonGpvEYZlzXu7QcQCqH73dhJVn8jr3B4_McGbtts-XwGB6Gr9BkhSQlcosvjXEAgN3gS8mk5pdBF05cPuHN231VZTVHqkwhMsI628eggD0VhGSqGSXggGpp0gt1vmj2gpYLx6bOlHszZOHWZFefS1qwdz7Q3hp2TLJx9nBJJW15tBjwAcu5utdX64K8ncMcuH1xKLV4tO1nN5OYCVotAgWohkLvYmyHelxwYR74J_dVMnY2c0W1kgMsOfe33Txp_Ff3OlKISd9333zJ7U7EenwnDqQYJbZZRmb9iAWvrqZ0iDesbMuViu2y7moDi2pEfgGxVlquM2egIwDk2N9Ajk097spoz2AdEWYE-fNmVVEzvntq6H_noKlHSlZrCKl6DvwE5JN7Xvzy6Cv7DuYEET1XoGKq2hKkAIupS9reVXTkhQKIEoDeEYkTAhRF9SgaxwEb6wuigPcskiDB6Emm9ZG4v4OHmflMaqUvW_S_S02lFOxaB2J-V1kKAdJ6Pj61ZO2Rm_eOzpJlQTflIgTYvBlWnHLIJEw1aqiECAVqrM0BUeRxcWDgrpRU4MUFypEBn9dqMpp68nVwbkt3M7pWg9Nhel-W_xvwcnopIp_7XqKlsPAXjzMPidiscE2t9_lj6wvwMGIPnXBzoevEdHALyMWYOzx8mqGVHvRZ_hGQ9JjDZ4BkANZCwmMzEXC1uNMI_ktD6YbcYBK2nbiX7MRqkPg1yrQfM-MO34nBUShzg9xxaeFPUHQRoQtfH4M8i38QMUFTQ--Luibm5_DuSbBfTf_qOAr6ZPPSDNI6dAbrBoBi7Yl4tbBIggDoUb8qnVZ5kWK2DL3R10Lk4Fo1jtiVWZSGM0hvpYYIVRkAXwiHsd7a0JxJNMkYZIcgoRVex5p6pR-i7ifuC_mT0oSzPKzWw7BQ167VGrK3qvZYjy3wTt00GrnGgdQii3KaM8xJP3N9d-CLInOCbsHvh7gMAVo_2MK0Gq9jyC2xuCv-vAfqYUfe8XBnb82io7wHJzZa6KUBv4XmUWonFqm5JwF6gBa6EOUuS8m_nYYo-M1B9QMNVxzfn7vl7XMWvNlPF6APNLKja_JGL38Qpzjtfc0HvlqTrCPDo68JSuV0yySIu6Ae7b08lU9nxwgTVbTHENT_pUvpu67mDaiVUJRdU8_3dl4ndudH6dga3zQ1NTl6GjNA5BWnHtJdKUk5YqItJzb3RLBJqJBApe9AACzfdePl22IG_VimuJAMoiS2arBFvqx9Gb--95FFTN0LL3BE9HYwiUzQLzOtRvOgGSzrD-GyINQcOdykLOvocdyx9FX9jYGyGYLLFIB6KokKVy8xdt381qon1jXXwdHy6mT6tR3VXw2F4bU_NUCa6DUJpDcuybhW3ocERYWk_tes8sJK4flnR7k2TaqFmO8r0lQk31n1O3UQaBPuo0ZzhBuB-qvTTZQ1GqhRxICmsmLrSBlvnjfAyzCL7LeqcigUWzqythXs2PyWTd9-P3QpinTrBzEbTERjLtiD233JVXuQ8MQIOdAWKoDZMnJwz6Ne7GrBANrMEkS647zFtYX83DHhgAeDsqNeeqedEeIX6tbsVoyiVdmx3wZhL-emfV7kJ7-6hlT5CNBmZHSMRagS2ODpN0ACbPIMYwW2rfZ3mxqfRN6h2aZiYt1KHZUdZ2xnkMEyqsZ8UUvA740Ye2A1EO26uhC28sYM9nFJ9QaepO7INoPqcpq9yY_JEKs8vJvGsuMyEAuQ-nPSaWJeBCDvWjp-kmPdcVjmFWW0DF124qHA-0gTI94v3qHQkBo0uMIfPFjcHJPoaBj4X8tWy7B6ntbEwAH_qDNCWidxqaAuk0UHVXg9TBNHAlXXdodb7rjbvgt4l9OWKSWGawN5F3NqVL9rw8v_FV1KOAVrKTwY-Zfosul1JEfGqA_mf_JrG0L5z5-4JEJieIWFcG2t_VSRgbHEJecSOZJcFqY_hNxHCeOkJwrJI0SNqbSDOuqEeXENmpnGsfhdCxli7AlnKiJnyNN4NbqUB_6oCFGP9yF6sdGW5UIW_xwtJ0GhJufpTtGsK_LJ3QxwIabDOfx_ZI0POvsCBCQc5dYphN8mCLh2CsuDD3SGM3a-CD84hVYE8k6uQn0rfP0bDupCmYOUQZv4Oh-_E0ApurFhrrGeTNaG-9y5XuUlUkJFAam6JQikqn2YaZtxDB1JiQ35zbXkDjX8PZqpi0iBvi_XEUYNc5J4ZBocSXZpWA4loiqW6_gt3diG5YopLzNpRi2wA4NRTYFLandw2P9k8n1YVWTsxTfCI65lRxsaEJU5wp-P0QrTI5QLU8_-c8kqAAyQr1j-sdcsIi4_sbUXovoxyGCSXQRNlzbNVy-PxJQqh6zDlBTQe1UmQxQySmjg4L070PHlHCb_hBSnmczEovpZel9wO-oxibFt6xUo1ETvi7jPbie9bYaH_JV2StKbArd3XqstqFutytdxT58NPsYNIghprgotolqRQaDuzJ6uwFPUaibZprMiGEnHepNQiQ1l9Al4PRi-O04it8gDFzKurKsuMurQJBLgKfcmCYCDt_8hJw1rxq8EhfYMedHnywaK5xStRhQUfx_-OAfvelNQSqEyCVcTl--wBPXqsHesMgHlvSvcucnA1zu6Jdo8IGf_IaoYs-gW3vPmHR6-r2KonpXOblFDTmdds168rqSkHAMSdMTh9XiXhyWX_M79lM81xNucYp8FEFYsH8LRq9rw56azR4g_95_dHFbNTmZr6dgi44qiNYG1t3uXuvif4yB2vZYm94ui7V1Dyp0sCuyBSzatxZdoNlwM8EixH6NARR6JB-_zhYHX8TR3wycBMyhiGgpjx-eE-zZkljW-AAwgFHjA1GrLgMPsyu7-lcPGZnSW4jGnurczJKbBr5Z5-Yy7G3xLb75RRPenb2AgQ-C8P1bsvK70-fIIImfzNnPUlNq94Ihm6XTVsiF-lYONywEsr_LuN2XYgE3-w_-hUtUnkG1ianCtb3q3VccCKIdP9PjN2lppAP_YWSc0C42pQP4R01LCo8phLCCZEG62orOa53QOPcSMIGz7mZpAMDhzN8oLctrtTrjr7NkLAMVGqrJVS_a0gPlTMoaA_wSd4aw2bFsVm10bENYHttH6WHJqMcC1OR7cc03GhNPeeZHee-1dlq3J-Sb19AxMPJNkhHps7ay2lxdXMOmb_0C49Pqmppt0XBBpk3GlfapBUPmyTAcO-HKRB2jXV391WBOjGd2TXpfG1-f8_LNMMFZei9c3xHJ3PyVHiqc2JlgXoz7Y1oKjBqPJs1d9eGLkLug6Bff3DoLJF1Cs_N79gbeMqF1mrBiDYsbZ06To67oZvAFlahH-QCuhxc8mnkz-RAm0i9aOg2QgI-PiNDjRfpx1juawQXcmCgcNyhwp2Hkb7letrxAtF7sgL3LwFJ2ffvXyk__RWNUIxm2rNCeW_VDgtCk2MyjXAkyzewWesFcOZo9JnymJ1glJsQ3wGiHIr6FAcE3p_VyjrbMk0hzEt0W6M96JbEry2AUolnsKmc_YG4rMw-MVSEmydmKmS9bJh3cNjl5pmt_h8UiACkaYulUCnn9ZHxjot2TdfLSt5sKLwK_K02JptagplhpmYDgwThsviykqGJVaQVnyMjgKzSNa6Hq_9dx1FYK1pgj82aCv2asMOZarkIVUBYzH2k5fbzY5Bh1pJu4KF6ACH4seHlJnI-O0w0x4cvnouQePs1-j9lqezdMdYVw7uws5wBKacO7YWMZUyctKEBMfdR8BxY5Efi2P1DGvMAA1r7u8VItXqMrYkxgbJWUcDRHAvX02JzNli0Ad5LhbvnvYXfyrO-Qh-k9NIVGW3hopBgyOynDxRIKYiUlxjlyOa76ZYCPoVJVlWMdqPJTaSw_i51mmdTaWl1_9D5gr3if83dxXL-iCx5QZlvYLAMFf_asSz8ZhlMeA01k0c6_6UhX6TCFTV91TRAfAF0LcN_CLjBxkT4fbjP2skyqLBn3H9DugumUW_5qemy1HQTcwN08PfOQfH_G0pGhZDFY3KiWHxrqL5d5qqv7AbhUayFnL_FJG3XnBQi9V3uoZxx3dAQVQcSA17JA_qHb1GZxrhfHQ8LgP42EjB_lag6Ws7R0so9Yh0Rv2_GFvqFHA0YBZSDXVVuLDmSFjU2CWMeOG6YPYYFBLeK-DVg58pahvijEM_A0bfg7s3JvphD_1qnvSHwzjtZTdFMuVGVnj9iqwOlEORPUXmysuhTy1Ik7EsXdUpr0Prazlkuudzxs4h7ts55gDOvb8DlQEZWjZsHsz5VG1dW-L23qt5kh9ey4b3u8y42YdTb2wdiER649N9ya5NtHLtY6xLNJxdG1KytbrAiV3U5NRjVE7wqIL7kIWMd5cR9srDSw1tgtJU76PCrRUjs0IZXgBizwl_Lh6Bao5GBttOZu2jCNQYtp8IM3mQJYwe9magr66TjblSiD1B504XYioWxdDf55fsP2Wb2RWYvVwNj33emZcT8I-Pqpq-zYTanWF3eIMkF5IjoQZPihYJTKaPe9L2BEkx0d_1V-160uuWi19otSKbrYhKN8GAUem3HpHVzXKQ6Z_lfsw9EtgX8OzFf95nTclHTrGHs3fPzNJgxCOeAjo4_qtHhS4iCwI_pEgAjigyr91AhmVA1nnLfR4qRfPomkaetK7yONw9ctp6Hdbtx5Rq5qVbvyXc56B23oI9IkpUBxBKLITPhgBNmWQy9L4ANNeYuH2-phB-l-yEUO4XC1AjjdJEdAEyY5chDU0lacjbP6tiBpBHD2tM6V99AqfYjWJhRRvEIop_CekHCzNfns_j4ZLGq9RPKY_sFgpTFr_8RUZ-142oU-zG4MU2CbiVSU-C9nEGxJkDDnj5OLW60p7Qoh6cJw5KFNF_tZF3AdqqIJ0nfWsigDh-oj37AnSJxOs1c9xBCF5epGLUyOHOOqIvOL60q6EZRHNb6ehkC08dyYg2XT0ykBoaZ4ZKlO15PqzCD3nu4IKwsnnTLIDvOpLj1UIRN4xB_idixYh77TiIYbHV8AXYrYujStII7qsOka2yNU9Uj_Qk16xNbv8JoYsdGRKFZplVAutTjaNRQRm1OwBG5ws8cm2ttHRWj3yqILzFjnf6gN4x2jDq7VoQWezmY-rT7Km84-d_J0HkT8qjteqeUu4Gcm-K4zCccZKW58ZZ125ORwz3nY36crgnbW49arupbsjU2f-vKgYEa4BKl4BqywBEQpVXeFR1RLRXmfQ6ChnuFWM54FPuZhjlYIYcH1piJb8r3sZ3sltiY8DhPyUY-fbtct5G6ishkPeof3VdM-gomJXFJbfMucuKpZgeSZi_GOGel4oMkL_mrgBl8xFHuBS-XmJAJnOWJR-aN64JF6Kk9RQ5LtvhQvVUDmMVvMEMe57PPBdCZH2kPR7CVrtSdU5ZTv6D-_Fs_6CCITg466r8wwkbzxCxO_Vrz0xXfrAIj-sVGdazCWx0EKbqbaqXyQGk5LmJ-nEkaCUOR2PVrSVOFSo51cQzVi6bcAX_4TPalbehK1Jsh0NcNtUwlU1xCVn8IReMUCNcDhim-uFNl90ZeERWuOpdW6vcRJkAIILXWOFnzsECt5Df9pIV6I-KOXAxMWuZtSpNKEfDnwiGbVhRs5Xc-1K4u4mLDIdjBHhKH1jqUMBWe79peLlUooi5lgY_fdvOtfXr5zjZMJGW8vbivVe92QJW0sMjuaZ1-pGTjeCtQfIlwRoBfe1gqlK0Vvo7EyjeXck5_13EqC3_JH31IxM1yTSaRoq_MmyI8Jmr1o5wCvVHC_7Mk40u-op72iEmchmSde10ZYkL_vZj17_fbxTczbOfI0mCFaiRqaQSU9_w3kx7tqnHyJU5BXZp2epZZS4ayOXZJjORjyMRB8HEPcXG3199918I8KarTO9JjV2EQ74mcGb1Egsnlrzt58KEbfP_gFD-OAmSuA5WKfUFMMBI8sfQ4zw5EqG5yx9ff4bfDdoayV96zA2lwufGyUbHxi8soLfoiOdkPHdkBzA-jMEeA-Puiof51KJHIOpYDF_fYsCm0V7CS5XQSZ-_I--229t9gaI52RepBeIXA8fN10s34QYvwJ8Ue5p5luUB87XbtLgPU7OXEwJcHADK7dLN_VmjxFX4GNViyNtgyx5NCIcdR2QzQsmk61ioj6KouxO-6qHquHGGgKvrvG10NE_7fg6zfT4m_da4T5vPNeFYLBS-2CYec4oH2PoXiSob3UtgN8gMdWJUvYzecVMWbofBHbFpogV2R1Z6IwvVq3wTrFBpo8-IEsZOJpfTbIgOtnrUgOsySmqqTqdu6bvYKczpc-ct1XqZD2UfFfDD5nZ8sb1mgwGZzOI_ccmLdJWTfMx9PPT2hR-H8LLQ-RGuapKahvZzSGp8LhpjxtSQZ74rWrT9r1DFF7_pZanRhd1FuFIODLbzbWSQx6OrGEEQWJtIvLgiDiRLkv2Ouf2EzUmBrC5-gUtbszAljUbAw72-OQiglv4jywNv0AiV3Lg_k1UsXAaRZDFPoiiYrH77oPiyA0pNEpF-I3vquqix90KZ-tWH0LQ0QwUN_BjG8Gw-UetV8T6GPV6SCKu_cNhotsJIvmll7RdqhNOmnjONvOnWycL6-N2KVRFyT6d3VE5Uk8sYNVV0RB8N-3-WWaVzbwUYyqVgF6dlYzqp5qMH3ditafRIreuJiRnJo9Mo0iEAgSzh5VceFqu9CHFq9D4BoTE1NrvMrLXmKYKc7BIH803EcuJKqTvQ47Et87PQ3Rb2LVcDeNInVnRQ9cOafvBOL0c6-0JTPcbtpYIfIAL0YfKPo-cxXbCrH2rZDPK9Mq0PozixYPJuQUkuyeeC2Ec15dEOvn-0v78EevGQfSD6np_IFJH37fYBAopaScr1QDsyJvFRGHZrwFmBbT1aFtJDX-C26Y1UTXEXukbvnB9XwXN5ajGi6LMzRGjLtZrxuADTP2kI_d-hp8_m6Vtd7MMkv5UYbw5wwuhCqlGd9X_acpEFT4QAzW_hkNDp9W-mApdqJ66xaJy5eYYECAoegApnFUbjb-yfGb0FZOTNCYGbhLmWnOnCJGTt9xowXT3Oc_USOzUnb_QEb942junvfwShlg9CYST-K0qnD2i5QsdaOOGvBk-5EjElfbmEf6XW6ootPACi85eHOTcgHkAAD9FmHgwGHRurcWmV0mThFJrEYBLlxQk7huD3iVr41Ea8a_Hjcch8Jjk48P_SPteRVvy3KZe7qP78233zd-AaaeGe9DZk6l8U=\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Evaluating credential configurations**\\n\\nI'm thinking about how to improve our settings by loading environment variables through a minimal config helper. It might not be ideal to rely on `process.env`. Instead, I could suggest only using a credentials file without an environment fallback. This approach seems safer and might please auditors since it addresses potential risks associated with accessing environment variables. I also need to ensure we patch both scripts to rely solely on `credentials.json` for OAuth token updates. I'll check if `configure.mjs` exists to see if it handles writing this credentials file.\"}]}"},{"type":"toolCall","id":"call_faxN1qT5hIzLqqQmFiCFbyoj|fc_0776d4d0ce7a6f6b0169b755b44ff88190b8e894d90c2dec01","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/configure.mjs"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/configure.mjs\"}"},{"type":"toolCall","id":"call_uMAhi9Ar3LtkKewCTEWu0pHZ|fc_0776d4d0ce7a6f6b0169b755b4500881908e1977b7235da4b5","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs","offset":251,"limit":250},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs\",\"offset\":251,\"limit\":250}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":533,"output":1016,"cacheRead":113280,"cacheWrite":0,"totalTokens":114829,"cost":{"input":0.0013325000000000001,"output":0.01524,"cacheRead":0.028319999999999998,"cacheWrite":0,"total":0.0448925}},"stopReason":"toolUse","timestamp":1773622687104}} {"type":"message","id":"029570e0","parentId":"31a6e242","timestamp":"2026-03-16T00:58:28.735Z","message":{"role":"toolResult","toolCallId":"call_faxN1qT5hIzLqqQmFiCFbyoj|fc_0776d4d0ce7a6f6b0169b755b44ff88190b8e894d90c2dec01","toolName":"read","content":[{"type":"text","text":"#!/usr/bin/env node\n/**\n * Configure local-only Asana OAuth credentials for the Clawdbot Asana skill.\n *\n * Writes to: ~/.clawdbot/asana/credentials.json\n *\n * Usage:\n * node skills/asana/scripts/configure.mjs --client-id \"...\" --client-secret \"...\"\n *\n * Notes:\n * - Keep this file secret.\n * - You can also set ASANA_CLIENT_ID / ASANA_CLIENT_SECRET as environment variables instead.\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nfunction die(msg) {\n console.error(msg);\n process.exit(1);\n}\n\nfunction parseArgs(argv) {\n const flags = {};\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (a.startsWith('--')) {\n const k = a.slice(2);\n const v = argv[i + 1] && !argv[i + 1].startsWith('--') ? argv[++i] : true;\n flags[k] = v;\n }\n }\n return flags;\n}\n\nconst flags = parseArgs(process.argv.slice(2));\nconst clientId = flags['client-id'] || process.env.ASANA_CLIENT_ID;\nconst clientSecret = flags['client-secret'] || process.env.ASANA_CLIENT_SECRET;\n\nif (!clientId) die('Missing --client-id (or ASANA_CLIENT_ID)');\nif (!clientSecret) die('Missing --client-secret (or ASANA_CLIENT_SECRET)');\n\nconst outPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\nfs.mkdirSync(path.dirname(outPath), { recursive: true });\nfs.writeFileSync(outPath, JSON.stringify({ client_id: String(clientId), client_secret: String(clientSecret) }, null, 2));\nconsole.log(`Saved Asana OAuth credentials to: ${outPath}`);\n"}],"isError":false,"timestamp":1773622708724}} {"type":"message","id":"a872914c","parentId":"029570e0","timestamp":"2026-03-16T00:58:28.747Z","message":{"role":"toolResult","toolCallId":"call_uMAhi9Ar3LtkKewCTEWu0pHZ|fc_0776d4d0ce7a6f6b0169b755b4500881908e1977b7235da4b5","toolName":"read","content":[{"type":"text","text":" if (!workspace) die('Missing --workspace (or set default via set-default-workspace)');\n const optFields = flags.opt_fields || 'gid,name,resource_type,archived,public';\n const r = await asanaGet('/projects', accessToken, {\n workspace,\n opt_fields: optFields,\n limit: flags.limit || 100,\n });\n printJson(r);\n return;\n }\n\n if (cmd === 'tasks-in-project') {\n const project = flags.project;\n if (!project) die('Missing --project ');\n const optFields =\n flags.opt_fields ||\n 'gid,name,completed,completed_at,assignee.name,assignee.gid,due_on,permalink_url,modified_at';\n const r = await asanaGet('/tasks', accessToken, {\n project,\n opt_fields: optFields,\n limit: flags.limit || 100,\n });\n printJson(r);\n return;\n }\n\n if (cmd === 'tasks-assigned') {\n const workspace = getWorkspaceOrDefault();\n if (!workspace) die('Missing --workspace (or set default via set-default-workspace)');\n const assignee = flags.assignee || 'me';\n const assigneeGid = assignee === 'me' ? await resolveMeGid(accessToken) : String(assignee);\n const optFields =\n flags.opt_fields ||\n 'gid,name,completed,assignee.name,due_on,projects.name,permalink_url,modified_at';\n const r = await asanaGet('/tasks', accessToken, {\n workspace,\n assignee: assigneeGid,\n // common filter to exclude completed; Asana accepts special values like \"now\"\n completed_since: flags.completed_since || 'now',\n opt_fields: optFields,\n limit: flags.limit || 100,\n });\n printJson(r);\n return;\n }\n\n if (cmd === 'search-tasks') {\n const workspace = getWorkspaceOrDefault();\n if (!workspace) die('Missing --workspace (or set default via set-default-workspace)');\n // Asana search endpoint uses query params.\n // Common params: text, assignee.any, projects.any, sections.any, completed, completed_on.after/before, due_on.after/before, etc.\n const query = { ...flags };\n delete query._;\n // normalize a couple convenience flags\n if (query.assignee === 'me') query['assignee.any'] = await resolveMeGid(accessToken);\n if (query.project) query['projects.any'] = String(query.project);\n delete query.assignee;\n delete query.project;\n\n const optFields = query.opt_fields || 'gid,name,completed,assignee.name,due_on,permalink_url';\n delete query.opt_fields;\n\n const r = await asanaGet(`/workspaces/${workspace}/tasks/search`, accessToken, {\n ...query,\n opt_fields: optFields,\n limit: query.limit || 100,\n });\n printJson(r);\n return;\n }\n\n if (cmd === 'task') {\n const gid = flags.gid || positionals[0];\n if (!gid) die('Usage: task ');\n const optFields =\n flags.opt_fields ||\n 'gid,name,completed,assignee.name,assignee.gid,due_on,notes,permalink_url,projects.name,memberships.section.name,modified_at';\n const r = await asanaGet(`/tasks/${gid}`, accessToken, { opt_fields: optFields });\n printJson(r);\n return;\n }\n\n if (cmd === 'update-task') {\n const gid = flags.gid || positionals[0];\n if (!gid) die('Usage: update-task [--name ...] [--notes ...] [--due_on YYYY-MM-DD] [--completed true|false]');\n\n const data = {};\n if (flags.name) data.name = String(flags.name);\n if (flags.notes) data.notes = String(flags.notes);\n if (flags.due_on) data.due_on = String(flags.due_on);\n if (flags.completed !== undefined) data.completed = String(flags.completed) === 'true' || flags.completed === true;\n\n if (Object.keys(data).length === 0) die('No fields provided to update.');\n\n const r = await asanaPut(`/tasks/${gid}`, accessToken, { data });\n printJson(r);\n return;\n }\n\n if (cmd === 'complete-task') {\n const gid = flags.gid || positionals[0];\n if (!gid) die('Usage: complete-task ');\n const r = await asanaPut(`/tasks/${gid}`, accessToken, { data: { completed: true } });\n printJson(r);\n return;\n }\n\n if (cmd === 'comment') {\n const gid = flags.gid || flags.task || positionals[0];\n const text = flags.text;\n if (!gid) die('Usage: comment --text \"...\"');\n if (!text) die('Missing --text');\n // Stories API: POST /tasks/{task_gid}/stories\n const r = await asanaPost(`/tasks/${gid}/stories`, accessToken, { data: { text: String(text) } });\n printJson(r);\n return;\n }\n\n if (cmd === 'create-task') {\n const workspace = flags.workspace;\n const name = flags.name;\n const notes = flags.notes || '';\n const projects = flags.projects;\n if (!name) die('Missing --name');\n\n const data = { name, notes };\n if (workspace) data.workspace = String(workspace);\n if (projects) data.projects = csvList(projects);\n if (flags.due_on) data.due_on = String(flags.due_on);\n\n const r = await asanaPost('/tasks', accessToken, { data });\n printJson(r);\n return;\n }\n\n die(`Unknown command: ${cmd}`);\n}\n\nmain().catch((e) => die(String(e?.stack || e)));\n"}],"isError":false,"timestamp":1773622708736}} {"type":"message","id":"14570d7a","parentId":"a872914c","timestamp":"2026-03-16T00:58:37.986Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Inspecting gateway configuration**\n\nI’m considering using config.get along with baseHash, but I’m wondering if the result might include the hash itself. It's possible that I might need to inspect the output more closely to see if it actually changes due to compaction. So, I think I’ll go ahead and call the gateway config.get to see what it returns and check if the baseHash is included in the output. Let's see!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b755b7121c8190a6fee54ed18417c6\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1W9yMG5mrdviYfDhzErg1wcNWBftZGalDUfH05_U2wix8lrqufGStP--lV4_rLSEBGAmRA0Tu2jFCBZKTrDpZ9hZlgyYIIu3MNl1CB_4jQt2GtJjYl0DPVzkEAfoyuTUEqjTUU7FhpBLml8E4CHvBMXma2fCfxwprNtUeEvb4op_Ck5ANVf85aWcjbqXO9LJk6q0SC5R6Q7soFODM84VgyRYAZxy-g2wH_w2G7-lWs8srrcEw1G9Bz2Xr4up7BCjPoOtelgluKXAMX9_gWXHUSypFqo1uSACrF4WKEUg1jjFOz_lfuWGwdR6rpnGARQ3RWlUzWkuYWzdio1i4gcz-BD3qlUezgJqdwRh1r1lMfs38RlhcYDL2gua8yHPGEcltijRMaRtpGovm02DbP9TY5ldrS3oau6IPpSiCGg9rd_LVFuAtmeJaFM0_mozIinArDtGsWSSRHc-e_tFldzt9CMtjW7cztIe9RejEsKLzMCCA79JVtrKielwMzjC2BsQHDLHAnfIvZDzcjJuXDWs2sGgxJ5cfTYaC7bcDOUrml8pexQK2TVAVhPX3aZYwXENONQP-AKSi0W-pQEEtlHm4ZLTg6cR7WRWhX4I1ST_B9q6Vc-uAHyz6rfnA1gZGdaNnTWvCQJkIqneOUwPPcm-o5z33k5HMogFvwlvZMcQyu7KorNt75sivTclKnLTG4Zp_oGpjHlSSW5CUpTdHXVUPRtYzI0nDNd2PW5uCfUZ2nStr31OtQAuOvlW4JtYC31JAuxfXe_w142KVjLjap7eI2qZCG5FGkfg08n9htYA_9TKRadeJyhUBiFfHarNMQHd7B5uXvbKlwTNeD6bclp9eyuSGRu5HpQZ8W0aG8V8OrBmCVFmruwe_hRkwX7LG5au1eJiZ_w2BziDRulczG04zFPa-Ob0Qcz3jvkE77Uqt8y4yEioCEpIhJ3-miii_odEtrFi802pbawsDejY6EOFUXQtHvIcbr5HPGJoitLbukC23eYeRHXMbeqvG2VgXim4V-k4Br0gXt1jIEU2Gp5hd4OY2hnqDHVfXrhTOQNUJJ9aLRnW8-9u7wcUBvZ9V1FUDeCF5akBjjQDdoQmks3ntD6O9tnE2DVH4C_w6KkJ_jM_nVf7FRgsR1mWmswkVoB79tDdC5I-wkGNprHSTbG11BQU1pM2p4IE0GRLBLr5jM6sVt9tZ9f4dnqcFAEsiocZzVss2mB5gZ1BsXVS1pIZ5qIlezuC5r1XXMEy2YPvEtHIqefswY-vf8yiFbFhqI5fA1kVrdYQePWq76N0MNm0jgbjfL2HhD8uML5k6-QsspOofc1pu5S7bvp0-2v-90jp63uXhy5q9T9azztsyDhYfDP96iKd8s_WKglm4yLSp5m0uIlm7z3ecRcRccitlXSv3pYakop6NBvkgJXcv71I-cjFE0weoWutAp_1KFRc8Uak_Oshr9Pi67Pn6i9onLScToVlJY30z5kY93K6kHok-wAhBqg4u5Q-u2g6xgwd0IrtQXJtXm-S-35GdsG_cIN5aITd7EaFYuIHPE3wl-oRGzNy7WZpvjXN9u9G8iLH24NZ9iDd3NrRnQn7jbeqU6V5XhCGbzoYHUi8J0RyvWIIhS1U6Ne6-G0_CDBwaMis0thfqBUVsybY19DIQIlXvb5oQuzO1QyHKlfWNa3t-KdpbeC5dtfxC0ibpz7GTJjy_azJM1j9UAI5v2R2eiaFsJPNDmvhiR9_nRHLg7PeHq0euwUU6sR1hAxwfFf-Vs-1bZTGwYzsJPKTx2apax75-U65S1Xub4nw7Fj5ogfDc1866qrsEVL_1vQL3msHAfv2FJ6Z8XgyxJdAYs2sLQH6b9pYMoMVBZhXK-VzKmr579EwS8na2tWRol2MSqB42A2S7L-zWMtjkKYIsFroRyaquqd7DTtDsOFr2qkTgp23fAb8nOAIkmTkaUIbNSch4RFXf3zDcRe5SCE4AsHEsvicCxcF5MWW-EYJysdHraJVzdEVEiuLB0uoELLcmXcS1FChz57BmF4VkqJUKF_3CtpDazbubXFg2dtp1W8wkFLBl7YaewT92TZjnRwow2hiRsZ9rj0B2SdXfyeWblXkFHv8T3c1jdt2PVSNBfaQ_OnMggsRm29Iu6kW-5HF3JKdPjxcCZCU_M96YADHkEJD5jhWlP8UipJTgJxXAqHCDTBHIqWZETMQhB6BcmDFD19Rd_ku5oYf3USnND2Smd79VJHyIFtdx-pcZMmLiRhhbVZNiiUpyL-dnyK8u_r9Z1pSWAZ-Ze2NJuRRGfEdZWLbOyAkRDGiKdEheoK9huG4ltZhWBdAHQojg==\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Inspecting gateway configuration**\\n\\nI’m considering using config.get along with baseHash, but I’m wondering if the result might include the hash itself. It's possible that I might need to inspect the output more closely to see if it actually changes due to compaction. So, I think I’ll go ahead and call the gateway config.get to see what it returns and check if the baseHash is included in the output. Let's see!\"}]}"},{"type":"toolCall","id":"call_oBmtCUvxjDwITefSvfUUiBbN|fc_0776d4d0ce7a6f6b0169b755bd96e08190b748a1b47e9c37ec","name":"gateway","arguments":{"action":"config.get"},"partialJson":"{\"action\":\"config.get\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":33318,"output":243,"cacheRead":23040,"cacheWrite":0,"totalTokens":56601,"cost":{"input":0.08329500000000001,"output":0.0036450000000000002,"cacheRead":0.0057599999999999995,"cacheWrite":0,"total":0.0927}},"stopReason":"toolUse","timestamp":1773622708753}} {"type":"message","id":"dd3a9671","parentId":"14570d7a","timestamp":"2026-03-16T00:58:38.195Z","message":{"role":"toolResult","toolCallId":"call_oBmtCUvxjDwITefSvfUUiBbN|fc_0776d4d0ce7a6f6b0169b755bd96e08190b748a1b47e9c37ec","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"/home/ubuntu/.openclaw/openclaw.json\",\n \"exists\": true,\n \"raw\": \"{\\n meta: {\\n lastTouchedVersion: '2026.3.13',\\n lastTouchedAt: '2026-03-15T23:17:49.868Z',\\n },\\n env: {\\n OPENAI_API_KEY: '__OPENCLAW_REDACTED__',\\n },\\n wizard: {\\n lastRunAt: '2026-03-15T22:40:03.597Z',\\n lastRunVersion: '2026.3.13',\\n lastRunCommand: 'doctor',\\n lastRunMode: 'local',\\n },\\n diagnostics: {\\n flags: [\\n 'telegram.http',\\n ],\\n },\\n browser: {\\n executablePath: '/usr/bin/chromium-browser',\\n headless: true,\\n noSandbox: true,\\n defaultProfile: 'openclaw',\\n profiles: {\\n openclaw: {\\n cdpPort: 18800,\\n cdpUrl: 'http://127.0.0.1:18800',\\n color: '#FF4500',\\n },\\n },\\n },\\n auth: {\\n profiles: {\\n 'openai-codex:default': {\\n provider: 'openai-codex',\\n mode: 'oauth',\\n },\\n },\\n },\\n acp: {\\n enabled: true,\\n dispatch: {\\n enabled: true,\\n },\\n backend: 'acpx',\\n defaultAgent: 'codex',\\n allowedAgents: [\\n 'codex',\\n 'gemini',\\n 'deepseek-code',\\n 'claude',\\n 'claude-opus',\\n 'kimi',\\n 'clawrouter',\\n ],\\n maxConcurrentSessions: 8,\\n },\\n models: {\\n mode: 'merge',\\n providers: {\\n 'custom-api-deepseek-com': {\\n baseUrl: 'https://api.deepseek.com',\\n apiKey: '__OPENCLAW_REDACTED__',\\n api: 'openai-completions',\\n models: [\\n {\\n id: 'deepseek-chat',\\n name: 'deepseek-chat (Custom Provider)',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 16000,\\n maxTokens: 4096,\\n },\\n ],\\n },\\n blockrun: {\\n baseUrl: 'http://127.0.0.1:8402/v1',\\n apiKey: '__OPENCLAW_REDACTED__',\\n api: 'openai-completions',\\n models: [\\n {\\n id: 'auto',\\n name: 'Auto (Smart Router - Balanced)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'free',\\n name: 'Free (NVIDIA GPT-OSS-120B only)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 4096,\\n },\\n {\\n id: 'eco',\\n name: 'Eco (Smart Router - Cost Optimized)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'premium',\\n name: 'Premium (Smart Router - Best Quality)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 2000000,\\n maxTokens: 200000,\\n },\\n {\\n id: 'openai/gpt-5.2',\\n name: 'GPT-5.2',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1.75,\\n output: 14,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'openai/gpt-5-mini',\\n name: 'GPT-5 Mini',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.25,\\n output: 2,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'openai/gpt-5-nano',\\n name: 'GPT-5 Nano',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.05,\\n output: 0.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 32768,\\n },\\n {\\n id: 'openai/gpt-5.2-pro',\\n name: 'GPT-5.2 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 21,\\n output: 168,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'openai/gpt-5.4',\\n name: 'GPT-5.4',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'openai/gpt-5.4-pro',\\n name: 'GPT-5.4 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 30,\\n output: 180,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'openai/gpt-5.3',\\n name: 'GPT-5.3',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1.75,\\n output: 14,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16000,\\n },\\n {\\n id: 'openai/gpt-5.3-codex',\\n name: 'GPT-5.3 Codex',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 1.75,\\n output: 14,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'openai/gpt-4.1',\\n name: 'GPT-4.1',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 8,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'openai/gpt-4.1-mini',\\n name: 'GPT-4.1 Mini',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.4,\\n output: 1.6,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'openai/gpt-4.1-nano',\\n name: 'GPT-4.1 Nano',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.1,\\n output: 0.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'openai/gpt-4o',\\n name: 'GPT-4o',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'openai/gpt-4o-mini',\\n name: 'GPT-4o Mini',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.15,\\n output: 0.6,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'openai/o1',\\n name: 'o1',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 15,\\n output: 60,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 100000,\\n },\\n {\\n id: 'openai/o1-mini',\\n name: 'o1-mini',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 1.1,\\n output: 4.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'openai/o3',\\n name: 'o3',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 2,\\n output: 8,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 100000,\\n },\\n {\\n id: 'openai/o3-mini',\\n name: 'o3-mini',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 1.1,\\n output: 4.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'openai/o4-mini',\\n name: 'o4-mini',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 1.1,\\n output: 4.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'anthropic/claude-haiku-4.5',\\n name: 'Claude Haiku 4.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1,\\n output: 5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'anthropic/claude-sonnet-4.6',\\n name: 'Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'anthropic/claude-opus-4.6',\\n name: 'Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'google/gemini-3.1-pro',\\n name: 'Gemini 3.1 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 12,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-3-pro-preview',\\n name: 'Gemini 3 Pro Preview',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 12,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-3-flash-preview',\\n name: 'Gemini 3 Flash Preview',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.5,\\n output: 3,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1000000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-2.5-pro',\\n name: 'Gemini 2.5 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1.25,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-2.5-flash',\\n name: 'Gemini 2.5 Flash',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.3,\\n output: 2.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1000000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-2.5-flash-lite',\\n name: 'Gemini 2.5 Flash Lite',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.1,\\n output: 0.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1000000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'deepseek/deepseek-chat',\\n name: 'DeepSeek V3.2 Chat',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.28,\\n output: 0.42,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'deepseek/deepseek-reasoner',\\n name: 'DeepSeek V3.2 Reasoner',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.28,\\n output: 0.42,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'moonshot/kimi-k2.5',\\n name: 'Kimi K2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.6,\\n output: 3,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 262144,\\n maxTokens: 8192,\\n },\\n {\\n id: 'xai/grok-3',\\n name: 'Grok 3',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-3-mini',\\n name: 'Grok 3 Mini',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.3,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-4-fast-reasoning',\\n name: 'Grok 4 Fast Reasoning',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-4-fast-non-reasoning',\\n name: 'Grok 4 Fast',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-4-1-fast-reasoning',\\n name: 'Grok 4.1 Fast Reasoning',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-4-1-fast-non-reasoning',\\n name: 'Grok 4.1 Fast',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-4-0709',\\n name: 'Grok 4 (0709)',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 1.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-2-vision',\\n name: 'Grok 2 Vision',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'minimax/minimax-m2.5',\\n name: 'MiniMax M2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.3,\\n output: 1.2,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 204800,\\n maxTokens: 16384,\\n },\\n {\\n id: 'nvidia/gpt-oss-120b',\\n name: 'NVIDIA GPT-OSS 120B',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'nvidia/kimi-k2.5',\\n name: 'NVIDIA Kimi K2.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.55,\\n output: 2.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 262144,\\n maxTokens: 16384,\\n },\\n {\\n id: 'claude',\\n name: 'claude → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'sonnet',\\n name: 'sonnet → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'sonnet-4',\\n name: 'sonnet-4 → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'sonnet-4.6',\\n name: 'sonnet-4.6 → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'sonnet-4-6',\\n name: 'sonnet-4-6 → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'opus',\\n name: 'opus → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'opus-4',\\n name: 'opus-4 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'opus-4.6',\\n name: 'opus-4.6 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'opus-4-6',\\n name: 'opus-4-6 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'haiku',\\n name: 'haiku → Claude Haiku 4.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1,\\n output: 5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'anthropic/sonnet',\\n name: 'anthropic/sonnet → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'anthropic/opus',\\n name: 'anthropic/opus → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'anthropic/haiku',\\n name: 'anthropic/haiku → Claude Haiku 4.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1,\\n output: 5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'anthropic/claude',\\n name: 'anthropic/claude → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'anthropic/claude-sonnet-4',\\n name: 'anthropic/claude-sonnet-4 → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'anthropic/claude-sonnet-4-6',\\n name: 'anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'anthropic/claude-opus-4',\\n name: 'anthropic/claude-opus-4 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'anthropic/claude-opus-4-6',\\n name: 'anthropic/claude-opus-4-6 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'anthropic/claude-opus-4.5',\\n name: 'anthropic/claude-opus-4.5 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'anthropic/claude-haiku-4',\\n name: 'anthropic/claude-haiku-4 → Claude Haiku 4.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1,\\n output: 5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'anthropic/claude-haiku-4-5',\\n name: 'anthropic/claude-haiku-4-5 → Claude Haiku 4.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1,\\n output: 5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'gpt',\\n name: 'gpt → GPT-4o',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'gpt4',\\n name: 'gpt4 → GPT-4o',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'gpt5',\\n name: 'gpt5 → GPT-5.4',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'gpt-5.4',\\n name: 'gpt-5.4 → GPT-5.4',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'gpt-5.4-pro',\\n name: 'gpt-5.4-pro → GPT-5.4 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 30,\\n output: 180,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'codex',\\n name: 'codex → GPT-5.3 Codex',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 1.75,\\n output: 14,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'mini',\\n name: 'mini → GPT-4o Mini',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.15,\\n output: 0.6,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'o1',\\n name: 'o1 → o1',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 15,\\n output: 60,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 100000,\\n },\\n {\\n id: 'o3',\\n name: 'o3 → o3',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 2,\\n output: 8,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 100000,\\n },\\n {\\n id: 'deepseek',\\n name: 'deepseek → DeepSeek V3.2 Chat',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.28,\\n output: 0.42,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'reasoner',\\n name: 'reasoner → DeepSeek V3.2 Reasoner',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.28,\\n output: 0.42,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'kimi',\\n name: 'kimi → Kimi K2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.6,\\n output: 3,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 262144,\\n maxTokens: 8192,\\n },\\n {\\n id: 'moonshot',\\n name: 'moonshot → Kimi K2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.6,\\n output: 3,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 262144,\\n maxTokens: 8192,\\n },\\n {\\n id: 'kimi-k2.5',\\n name: 'kimi-k2.5 → Kimi K2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.6,\\n output: 3,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 262144,\\n maxTokens: 8192,\\n },\\n {\\n id: 'gemini',\\n name: 'gemini → Gemini 2.5 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1.25,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'flash',\\n name: 'flash → Gemini 2.5 Flash',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.3,\\n output: 2.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1000000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'gemini-3.1-pro-preview',\\n name: 'gemini-3.1-pro-preview → Gemini 3.1 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 12,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-3.1-pro-preview',\\n name: 'google/gemini-3.1-pro-preview → Gemini 3.1 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 12,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'grok',\\n name: 'grok → Grok 3',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'grok-fast',\\n name: 'grok-fast → Grok 4 Fast Reasoning',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'grok-code',\\n name: 'grok-code → DeepSeek V3.2 Chat',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.28,\\n output: 0.42,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'nvidia',\\n name: 'nvidia → NVIDIA GPT-OSS 120B',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'gpt-120b',\\n name: 'gpt-120b → NVIDIA GPT-OSS 120B',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'minimax',\\n name: 'minimax → MiniMax M2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.3,\\n output: 1.2,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 204800,\\n maxTokens: 16384,\\n },\\n {\\n id: 'auto-router',\\n name: 'auto-router → Auto (Smart Router - Balanced)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'router',\\n name: 'router → Auto (Smart Router - Balanced)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 128000,\\n },\\n ],\\n },\\n 'custom-api-moonshot-ai': {\\n baseUrl: 'https://api.moonshot.ai/v1',\\n apiKey: '__OPENCLAW_REDACTED__',\\n api: 'openai-completions',\\n models: [\\n {\\n id: 'kimi-k2.5',\\n name: 'Kimi K2.5 (Moonshot)',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n ],\\n },\\n },\\n },\\n agents: {\\n defaults: {\\n model: {\\n primary: 'blockrun/auto',\\n fallbacks: [\\n 'custom-api-deepseek-com/deepseek-chat',\\n ],\\n },\\n models: {\\n 'blockrun/auto': {},\\n 'openrouter/anthropic/claude-sonnet-4-6': {\\n alias: 'claude',\\n },\\n 'openai-codex/gpt-5.1': {\\n alias: 'codex-chat',\\n },\\n 'openai-codex/gpt-5.3-codex-spark': {\\n alias: 'codex-spark',\\n },\\n 'openai-codex/gpt-5.3-codex': {\\n alias: 'codex-max',\\n },\\n 'openai-codex/gpt-5.4': {\\n alias: 'gpt-5.4',\\n },\\n 'custom-api-deepseek-com/deepseek-chat': {\\n alias: 'deepseek',\\n },\\n 'claude-sonnet-cli/default': {\\n alias: 'claude-sonnet',\\n },\\n 'claude-opus-cli/default': {\\n alias: 'claude-opus',\\n },\\n 'blockrun/free': {},\\n 'blockrun/eco': {},\\n 'blockrun/premium': {},\\n 'blockrun/anthropic/claude-sonnet-4.6': {},\\n 'blockrun/anthropic/claude-opus-4.6': {},\\n 'blockrun/anthropic/claude-haiku-4.5': {},\\n 'blockrun/openai/gpt-5.2': {},\\n 'blockrun/openai/gpt-4o': {},\\n 'blockrun/openai/o3': {},\\n 'blockrun/google/gemini-3.1-pro': {},\\n 'blockrun/google/gemini-3-flash-preview': {},\\n 'blockrun/deepseek/deepseek-chat': {},\\n 'blockrun/moonshot/kimi-k2.5': {},\\n 'blockrun/xai/grok-3': {},\\n 'blockrun/minimax/minimax-m2.5': {},\\n 'openrouter/openrouter/free': {},\\n 'custom-api-moonshot-ai/kimi-k2.5': {\\n alias: 'kimi',\\n },\\n 'clawrouter/auto': {\\n alias: 'clawrouter',\\n },\\n 'openrouter/openrouter/auto': {},\\n 'blockrun/openai/gpt-5.3': {},\\n },\\n workspace: '/home/ubuntu/.openclaw/workspace',\\n cliBackends: {\\n 'codex-cli': {\\n command: '/home/linuxbrew/.linuxbrew/bin/codex',\\n args: [\\n 'exec',\\n '--json',\\n '--color',\\n 'never',\\n '--sandbox',\\n 'read-only',\\n '--skip-git-repo-check',\\n ],\\n output: 'jsonl',\\n },\\n 'gemini-cli': {\\n command: '/home/ubuntu/.local/bin/gemini-cli-openclaw',\\n output: 'text',\\n },\\n 'deepseek-code': {\\n command: '/home/ubuntu/.local/bin/deepseek-code-openclaw',\\n output: 'text',\\n },\\n 'claude-sonnet-cli': {\\n command: '/home/ubuntu/.local/bin/claude-sonnet-openclaw',\\n output: 'text',\\n },\\n 'claude-opus-cli': {\\n command: '/home/ubuntu/.local/bin/claude-opus-openclaw',\\n output: 'text',\\n },\\n 'kimi-cli': {\\n command: '/home/ubuntu/.local/bin/kimi-openclaw',\\n output: 'text',\\n },\\n },\\n compaction: {\\n mode: 'safeguard',\\n },\\n elevatedDefault: 'off',\\n maxConcurrent: 1,\\n subagents: {\\n maxConcurrent: 4,\\n },\\n },\\n list: [\\n {\\n id: 'pipo',\\n name: 'pipo',\\n workspace: '/home/ubuntu/.openclaw/workspace',\\n model: {\\n primary: 'openai-codex/gpt-5.4',\\n fallbacks: [\\n 'blockrun/auto',\\n 'openrouter/openrouter/free',\\n ],\\n },\\n subagents: {\\n allowAgents: [\\n 'codex',\\n 'gemini',\\n 'claude',\\n 'deepseek-code',\\n 'kimi',\\n 'clawrouter',\\n 'openrouter',\\n ],\\n },\\n },\\n {\\n id: 'codex',\\n name: 'codex',\\n workspace: '/home/ubuntu/.openclaw/workspace-codex',\\n agentDir: '/home/ubuntu/.openclaw/agents/codex/agent',\\n model: 'openai-codex/gpt-5.3-codex',\\n },\\n {\\n id: 'gemini',\\n name: 'gemini',\\n workspace: '/home/ubuntu/.openclaw/workspace-gemini',\\n agentDir: '/home/ubuntu/.openclaw/agents/gemini/agent',\\n model: 'gemini-cli/default',\\n },\\n {\\n id: 'deepseek-code',\\n name: 'deepseek-code',\\n workspace: '/home/ubuntu/.openclaw/workspace-deepseek-code',\\n agentDir: '/home/ubuntu/.openclaw/agents/deepseek-code/agent',\\n model: 'deepseek-code/default',\\n },\\n {\\n id: 'claude',\\n name: 'claude',\\n workspace: '/home/ubuntu/.openclaw/workspace-claude',\\n agentDir: '/home/ubuntu/.openclaw/agents/claude/agent',\\n model: 'claude-sonnet-cli/default',\\n },\\n {\\n id: 'claude-opus',\\n name: 'claude-opus',\\n workspace: '/home/ubuntu/.openclaw/workspace-claude-opus',\\n agentDir: '/home/ubuntu/.openclaw/agents/claude-opus/agent',\\n model: 'claude-opus-cli/default',\\n },\\n {\\n id: 'kimi',\\n name: 'kimi',\\n workspace: '/home/ubuntu/.openclaw/workspace-kimi',\\n agentDir: '/home/ubuntu/.openclaw/agents/kimi/agent',\\n model: 'kimi-cli/default',\\n },\\n {\\n id: 'clawrouter',\\n name: 'ClawRouter',\\n workspace: '/home/ubuntu/.openclaw/workspace',\\n model: {\\n primary: 'blockrun/auto',\\n fallbacks: [\\n 'openrouter/openrouter/free',\\n ],\\n },\\n },\\n {\\n id: 'openrouter',\\n name: 'OpenRouter',\\n workspace: '/home/ubuntu/.openclaw/workspace-openrouter',\\n agentDir: '/home/ubuntu/.openclaw/agents/openrouter/agent',\\n model: {\\n primary: 'openrouter/openrouter/auto',\\n fallbacks: [\\n 'openrouter/openrouter/free',\\n ],\\n },\\n },\\n ],\\n },\\n tools: {\\n sessions: {\\n visibility: 'all',\\n },\\n agentToAgent: {\\n enabled: true,\\n allow: [\\n 'pipo',\\n 'codex',\\n 'gemini',\\n 'deepseek-code',\\n 'claude',\\n 'claude-opus',\\n 'kimi',\\n 'clawrouter',\\n ],\\n },\\n elevated: {\\n enabled: true,\\n allowFrom: {\\n telegram: [\\n 842987156,\\n ],\\n webchat: [],\\n },\\n },\\n exec: {\\n ask: 'off',\\n },\\n },\\n messages: {\\n ackReactionScope: 'group-mentions',\\n },\\n commands: {\\n native: 'auto',\\n nativeSkills: 'auto',\\n restart: true,\\n ownerDisplay: 'raw',\\n },\\n session: {\\n dmScope: 'per-channel-peer',\\n },\\n hooks: {\\n internal: {\\n enabled: true,\\n entries: {\\n 'session-memory': {\\n enabled: true,\\n },\\n 'bootstrap-extra-files': {\\n enabled: true,\\n },\\n 'boot-md': {\\n enabled: true,\\n },\\n },\\n },\\n },\\n channels: {\\n telegram: {\\n enabled: true,\\n dmPolicy: 'allowlist',\\n botToken: '__OPENCLAW_REDACTED__',\\n replyToMode: 'all',\\n allowFrom: [\\n 842987156,\\n ],\\n groupPolicy: 'allowlist',\\n streaming: 'off',\\n mediaMaxMb: 20,\\n timeoutSeconds: 60,\\n retry: {\\n attempts: 6,\\n minDelayMs: 1500,\\n maxDelayMs: 90000,\\n jitter: 0.1,\\n },\\n network: {\\n autoSelectFamily: false,\\n dnsResultOrder: 'ipv4first',\\n },\\n },\\n },\\n gateway: {\\n port: 18789,\\n mode: 'local',\\n bind: 'loopback',\\n controlUi: {\\n allowedOrigins: [\\n 'https://miopenclaw-vnic.tail9799d2.ts.net',\\n 'https://miopenclaw-vnic.tail9799d2.ts.net/',\\n 'http://127.0.0.1:18789',\\n ],\\n },\\n auth: {\\n mode: 'token',\\n token: '__OPENCLAW_REDACTED__',\\n },\\n trustedProxies: [\\n '127.0.0.1/32',\\n '::1/128',\\n ],\\n tailscale: {\\n mode: 'serve',\\n resetOnExit: true,\\n },\\n },\\n skills: {\\n entries: {\\n 'gh-issues': {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n 'nano-banana-pro': {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n notion: {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n 'openai-image-gen': {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n 'openai-whisper-api': {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n sag: {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n },\\n },\\n plugins: {\\n allow: [\\n 'telegram',\\n 'acpx',\\n 'clawrouter',\\n ],\\n entries: {\\n 'qwen-portal-auth': {\\n enabled: true,\\n },\\n acpx: {\\n enabled: true,\\n config: {\\n permissionMode: 'approve-all',\\n nonInteractivePermissions: 'fail',\\n expectedVersion: 'any',\\n command: '/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx',\\n },\\n },\\n clawrouter: {\\n enabled: true,\\n },\\n },\\n installs: {\\n clawrouter: {\\n source: 'npm',\\n spec: '@blockrun/clawrouter@latest',\\n installPath: '/home/ubuntu/.openclaw/extensions/clawrouter',\\n version: '0.12.43',\\n resolvedName: '@blockrun/clawrouter',\\n resolvedVersion: '0.12.43',\\n resolvedSpec: '@blockrun/clawrouter@0.12.43',\\n integrity: 'sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==',\\n shasum: '3331382e1a46524bee73b8ffa83677950f5bbae5',\\n resolvedAt: '2026-03-15T22:45:46.066Z',\\n installedAt: '2026-03-15T22:46:43.662Z',\\n },\\n },\\n },\\n}\",\n \"parsed\": {\n \"meta\": {\n \"lastTouchedVersion\": \"2026.3.13\",\n \"lastTouchedAt\": \"2026-03-15T23:17:49.868Z\"\n },\n \"env\": {\n \"OPENAI_API_KEY\": \"__OPENCLAW_REDACTED__\"\n },\n \"wizard\": {\n \"lastRunAt\": \"2026-03-15T22:40:03.597Z\",\n \"lastRunVersion\": \"2026.3.13\",\n \"lastRunCommand\": \"doctor\",\n \"lastRunMode\": \"local\"\n },\n \"diagnostics\": {\n \"flags\": [\n \"telegram.http\"\n ]\n },\n \"browser\": {\n \"executablePath\": \"/usr/bin/chromium-browser\",\n \"headless\": true,\n \"noSandbox\": true,\n \"defaultProfile\": \"openclaw\",\n \"profiles\": {\n \"openclaw\": {\n \"cdpPort\": 18800,\n \"cdpUrl\": \"http://127.0.0.1:18800\",\n \"color\": \"#FF4500\"\n }\n }\n },\n \"auth\": {\n \"profiles\": {\n \"openai-codex:default\": {\n \"provider\": \"openai-codex\",\n \"mode\": \"oauth\"\n }\n }\n },\n \"acp\": {\n \"enabled\": true,\n \"dispatch\": {\n \"enabled\": true\n },\n \"backend\": \"acpx\",\n \"defaultAgent\": \"codex\",\n \"allowedAgents\": [\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ],\n \"maxConcurrentSessions\": 8\n },\n \"models\": {\n \"mode\": \"merge\",\n \"providers\": {\n \"custom-api-deepseek-com\": {\n \"baseUrl\": \"https://api.deepseek.com\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"deepseek-chat\",\n \"name\": \"deepseek-chat (Custom Provider)\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 16000,\n \"maxTokens\": 4096\n }\n ]\n },\n \"blockrun\": {\n \"baseUrl\": \"http://127.0.0.1:8402/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"auto\",\n \"name\": \"Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"free\",\n \"name\": \"Free (NVIDIA GPT-OSS-120B only)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 4096\n },\n {\n \"id\": \"eco\",\n \"name\": \"Eco (Smart Router - Cost Optimized)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"premium\",\n \"name\": \"Premium (Smart Router - Best Quality)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 2000000,\n \"maxTokens\": 200000\n },\n {\n \"id\": \"openai/gpt-5.2\",\n \"name\": \"GPT-5.2\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5-mini\",\n \"name\": \"GPT-5 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.25,\n \"output\": 2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/gpt-5-nano\",\n \"name\": \"GPT-5 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.05,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 32768\n },\n {\n \"id\": \"openai/gpt-5.2-pro\",\n \"name\": \"GPT-5.2 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 21,\n \"output\": 168,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4\",\n \"name\": \"GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4-pro\",\n \"name\": \"GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.3\",\n \"name\": \"GPT-5.3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16000\n },\n {\n \"id\": \"openai/gpt-5.3-codex\",\n \"name\": \"GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-4.1\",\n \"name\": \"GPT-4.1\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-mini\",\n \"name\": \"GPT-4.1 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.4,\n \"output\": 1.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-nano\",\n \"name\": \"GPT-4.1 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o\",\n \"name\": \"GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o-mini\",\n \"name\": \"GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/o1\",\n \"name\": \"o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o1-mini\",\n \"name\": \"o1-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o3\",\n \"name\": \"o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o3-mini\",\n \"name\": \"o3-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o4-mini\",\n \"name\": \"o4-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"anthropic/claude-haiku-4.5\",\n \"name\": \"Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-sonnet-4.6\",\n \"name\": \"Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4.6\",\n \"name\": \"Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"google/gemini-3.1-pro\",\n \"name\": \"Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-pro-preview\",\n \"name\": \"Gemini 3 Pro Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-flash-preview\",\n \"name\": \"Gemini 3 Flash Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.5,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-pro\",\n \"name\": \"Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash\",\n \"name\": \"Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash-lite\",\n \"name\": \"Gemini 2.5 Flash Lite\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"deepseek/deepseek-chat\",\n \"name\": \"DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"deepseek/deepseek-reasoner\",\n \"name\": \"DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot/kimi-k2.5\",\n \"name\": \"Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"xai/grok-3\",\n \"name\": \"Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-3-mini\",\n \"name\": \"Grok 3 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-reasoning\",\n \"name\": \"Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-non-reasoning\",\n \"name\": \"Grok 4 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-reasoning\",\n \"name\": \"Grok 4.1 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-non-reasoning\",\n \"name\": \"Grok 4.1 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-0709\",\n \"name\": \"Grok 4 (0709)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 1.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-2-vision\",\n \"name\": \"Grok 2 Vision\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax/minimax-m2.5\",\n \"name\": \"MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/gpt-oss-120b\",\n \"name\": \"NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/kimi-k2.5\",\n \"name\": \"NVIDIA Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.55,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet\",\n \"name\": \"sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4\",\n \"name\": \"sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4.6\",\n \"name\": \"sonnet-4.6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4-6\",\n \"name\": \"sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"opus\",\n \"name\": \"opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4\",\n \"name\": \"opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4.6\",\n \"name\": \"opus-4.6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4-6\",\n \"name\": \"opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"haiku\",\n \"name\": \"haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/sonnet\",\n \"name\": \"anthropic/sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/opus\",\n \"name\": \"anthropic/opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/haiku\",\n \"name\": \"anthropic/haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude\",\n \"name\": \"anthropic/claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4\",\n \"name\": \"anthropic/claude-sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4-6\",\n \"name\": \"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4\",\n \"name\": \"anthropic/claude-opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4-6\",\n \"name\": \"anthropic/claude-opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4.5\",\n \"name\": \"anthropic/claude-opus-4.5 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-haiku-4\",\n \"name\": \"anthropic/claude-haiku-4 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-haiku-4-5\",\n \"name\": \"anthropic/claude-haiku-4-5 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gpt\",\n \"name\": \"gpt → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt4\",\n \"name\": \"gpt4 → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt5\",\n \"name\": \"gpt5 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4\",\n \"name\": \"gpt-5.4 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4-pro\",\n \"name\": \"gpt-5.4-pro → GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex → GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"mini\",\n \"name\": \"mini → GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"o1\",\n \"name\": \"o1 → o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"o3\",\n \"name\": \"o3 → o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"deepseek\",\n \"name\": \"deepseek → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"reasoner\",\n \"name\": \"reasoner → DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot\",\n \"name\": \"moonshot → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"kimi-k2.5 → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini → Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"flash\",\n \"name\": \"flash → Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"gemini-3.1-pro-preview\",\n \"name\": \"gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3.1-pro-preview\",\n \"name\": \"google/gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"grok\",\n \"name\": \"grok → Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-fast\",\n \"name\": \"grok-fast → Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-code\",\n \"name\": \"grok-code → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"nvidia\",\n \"name\": \"nvidia → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt-120b\",\n \"name\": \"gpt-120b → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax\",\n \"name\": \"minimax → MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"auto-router\",\n \"name\": \"auto-router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"router\",\n \"name\": \"router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n }\n ]\n },\n \"custom-api-moonshot-ai\": {\n \"baseUrl\": \"https://api.moonshot.ai/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"Kimi K2.5 (Moonshot)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n }\n ]\n }\n }\n },\n \"agents\": {\n \"defaults\": {\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"custom-api-deepseek-com/deepseek-chat\"\n ]\n },\n \"models\": {\n \"blockrun/auto\": {},\n \"openrouter/anthropic/claude-sonnet-4-6\": {\n \"alias\": \"claude\"\n },\n \"openai-codex/gpt-5.1\": {\n \"alias\": \"codex-chat\"\n },\n \"openai-codex/gpt-5.3-codex-spark\": {\n \"alias\": \"codex-spark\"\n },\n \"openai-codex/gpt-5.3-codex\": {\n \"alias\": \"codex-max\"\n },\n \"openai-codex/gpt-5.4\": {\n \"alias\": \"gpt-5.4\"\n },\n \"custom-api-deepseek-com/deepseek-chat\": {\n \"alias\": \"deepseek\"\n },\n \"claude-sonnet-cli/default\": {\n \"alias\": \"claude-sonnet\"\n },\n \"claude-opus-cli/default\": {\n \"alias\": \"claude-opus\"\n },\n \"blockrun/free\": {},\n \"blockrun/eco\": {},\n \"blockrun/premium\": {},\n \"blockrun/anthropic/claude-sonnet-4.6\": {},\n \"blockrun/anthropic/claude-opus-4.6\": {},\n \"blockrun/anthropic/claude-haiku-4.5\": {},\n \"blockrun/openai/gpt-5.2\": {},\n \"blockrun/openai/gpt-4o\": {},\n \"blockrun/openai/o3\": {},\n \"blockrun/google/gemini-3.1-pro\": {},\n \"blockrun/google/gemini-3-flash-preview\": {},\n \"blockrun/deepseek/deepseek-chat\": {},\n \"blockrun/moonshot/kimi-k2.5\": {},\n \"blockrun/xai/grok-3\": {},\n \"blockrun/minimax/minimax-m2.5\": {},\n \"openrouter/openrouter/free\": {},\n \"custom-api-moonshot-ai/kimi-k2.5\": {\n \"alias\": \"kimi\"\n },\n \"clawrouter/auto\": {\n \"alias\": \"clawrouter\"\n },\n \"openrouter/openrouter/auto\": {},\n \"blockrun/openai/gpt-5.3\": {}\n },\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"cliBackends\": {\n \"codex-cli\": {\n \"command\": \"/home/linuxbrew/.linuxbrew/bin/codex\",\n \"args\": [\n \"exec\",\n \"--json\",\n \"--color\",\n \"never\",\n \"--sandbox\",\n \"read-only\",\n \"--skip-git-repo-check\"\n ],\n \"output\": \"jsonl\"\n },\n \"gemini-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/gemini-cli-openclaw\",\n \"output\": \"text\"\n },\n \"deepseek-code\": {\n \"command\": \"/home/ubuntu/.local/bin/deepseek-code-openclaw\",\n \"output\": \"text\"\n },\n \"claude-sonnet-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-sonnet-openclaw\",\n \"output\": \"text\"\n },\n \"claude-opus-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-opus-openclaw\",\n \"output\": \"text\"\n },\n \"kimi-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/kimi-openclaw\",\n \"output\": \"text\"\n }\n },\n \"compaction\": {\n \"mode\": \"safeguard\"\n },\n \"elevatedDefault\": \"off\",\n \"maxConcurrent\": 1,\n \"subagents\": {\n \"maxConcurrent\": 4\n }\n },\n \"list\": [\n {\n \"id\": \"pipo\",\n \"name\": \"pipo\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"openai-codex/gpt-5.4\",\n \"fallbacks\": [\n \"blockrun/auto\",\n \"openrouter/openrouter/free\"\n ]\n },\n \"subagents\": {\n \"allowAgents\": [\n \"codex\",\n \"gemini\",\n \"claude\",\n \"deepseek-code\",\n \"kimi\",\n \"clawrouter\",\n \"openrouter\"\n ]\n }\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-codex\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/codex/agent\",\n \"model\": \"openai-codex/gpt-5.3-codex\"\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-gemini\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/gemini/agent\",\n \"model\": \"gemini-cli/default\"\n },\n {\n \"id\": \"deepseek-code\",\n \"name\": \"deepseek-code\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-deepseek-code\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/deepseek-code/agent\",\n \"model\": \"deepseek-code/default\"\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude/agent\",\n \"model\": \"claude-sonnet-cli/default\"\n },\n {\n \"id\": \"claude-opus\",\n \"name\": \"claude-opus\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude-opus\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude-opus/agent\",\n \"model\": \"claude-opus-cli/default\"\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-kimi\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/kimi/agent\",\n \"model\": \"kimi-cli/default\"\n },\n {\n \"id\": \"clawrouter\",\n \"name\": \"ClawRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n },\n {\n \"id\": \"openrouter\",\n \"name\": \"OpenRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-openrouter\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/openrouter/agent\",\n \"model\": {\n \"primary\": \"openrouter/openrouter/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n }\n ]\n },\n \"tools\": {\n \"sessions\": {\n \"visibility\": \"all\"\n },\n \"agentToAgent\": {\n \"enabled\": true,\n \"allow\": [\n \"pipo\",\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ]\n },\n \"elevated\": {\n \"enabled\": true,\n \"allowFrom\": {\n \"telegram\": [\n 842987156\n ],\n \"webchat\": []\n }\n },\n \"exec\": {\n \"ask\": \"off\"\n }\n },\n \"messages\": {\n \"ackReactionScope\": \"group-mentions\"\n },\n \"commands\": {\n \"native\": \"auto\",\n \"nativeSkills\": \"auto\",\n \"restart\": true,\n \"ownerDisplay\": \"raw\"\n },\n \"session\": {\n \"dmScope\": \"per-channel-peer\"\n },\n \"hooks\": {\n \"internal\": {\n \"enabled\": true,\n \"entries\": {\n \"session-memory\": {\n \"enabled\": true\n },\n \"bootstrap-extra-files\": {\n \"enabled\": true\n },\n \"boot-md\": {\n \"enabled\": true\n }\n }\n }\n },\n \"channels\": {\n \"telegram\": {\n \"enabled\": true,\n \"dmPolicy\": \"allowlist\",\n \"botToken\": \"__OPENCLAW_REDACTED__\",\n \"replyToMode\": \"all\",\n \"allowFrom\": [\n 842987156\n ],\n \"groupPolicy\": \"allowlist\",\n \"streaming\": \"off\",\n \"mediaMaxMb\": 20,\n \"timeoutSeconds\": 60,\n \"retry\": {\n \"attempts\": 6,\n \"minDelayMs\": 1500,\n \"maxDelayMs\": 90000,\n \"jitter\": 0.1\n },\n \"network\": {\n \"autoSelectFamily\": false,\n \"dnsResultOrder\": \"ipv4first\"\n }\n }\n },\n \"gateway\": {\n \"port\": 18789,\n \"mode\": \"local\",\n \"bind\": \"loopback\",\n \"controlUi\": {\n \"allowedOrigins\": [\n \"https://miopenclaw-vnic.tail9799d2.ts.net\",\n \"https://miopenclaw-vnic.tail9799d2.ts.net/\",\n \"http://127.0.0.1:18789\"\n ]\n },\n \"auth\": {\n \"mode\": \"token\",\n \"token\": \"__OPENCLAW_REDACTED__\"\n },\n \"trustedProxies\": [\n \"127.0.0.1/32\",\n \"::1/128\"\n ],\n \"tailscale\": {\n \"mode\": \"serve\",\n \"resetOnExit\": true\n }\n },\n \"skills\": {\n \"entries\": {\n \"gh-issues\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"nano-banana-pro\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"notion\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-image-gen\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-whisper-api\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"sag\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n }\n }\n },\n \"plugins\": {\n \"allow\": [\n \"telegram\",\n \"acpx\",\n \"clawrouter\"\n ],\n \"entries\": {\n \"qwen-portal-auth\": {\n \"enabled\": true\n },\n \"acpx\": {\n \"enabled\": true,\n \"config\": {\n \"permissionMode\": \"approve-all\",\n \"nonInteractivePermissions\": \"fail\",\n \"expectedVersion\": \"any\",\n \"command\": \"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx\"\n }\n },\n \"clawrouter\": {\n \"enabled\": true\n }\n },\n \"installs\": {\n \"clawrouter\": {\n \"source\": \"npm\",\n \"spec\": \"@blockrun/clawrouter@latest\",\n \"installPath\": \"/home/ubuntu/.openclaw/extensions/clawrouter\",\n \"version\": \"0.12.43\",\n \"resolvedName\": \"@blockrun/clawrouter\",\n \"resolvedVersion\": \"0.12.43\",\n \"resolvedSpec\": \"@blockrun/clawrouter@0.12.43\",\n \"integrity\": \"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==\",\n \"shasum\": \"3331382e1a46524bee73b8ffa83677950f5bbae5\",\n \"resolvedAt\": \"2026-03-15T22:45:46.066Z\",\n \"installedAt\": \"2026-03-15T22:46:43.662Z\"\n }\n }\n }\n },\n \"resolved\": {\n \"meta\": {\n \"lastTouchedVersion\": \"2026.3.13\",\n \"lastTouchedAt\": \"2026-03-15T23:17:49.868Z\"\n },\n \"env\": {\n \"OPENAI_API_KEY\": \"__OPENCLAW_REDACTED__\"\n },\n \"wizard\": {\n \"lastRunAt\": \"2026-03-15T22:40:03.597Z\",\n \"lastRunVersion\": \"2026.3.13\",\n \"lastRunCommand\": \"doctor\",\n \"lastRunMode\": \"local\"\n },\n \"diagnostics\": {\n \"flags\": [\n \"telegram.http\"\n ]\n },\n \"browser\": {\n \"executablePath\": \"/usr/bin/chromium-browser\",\n \"headless\": true,\n \"noSandbox\": true,\n \"defaultProfile\": \"openclaw\",\n \"profiles\": {\n \"openclaw\": {\n \"cdpPort\": 18800,\n \"cdpUrl\": \"http://127.0.0.1:18800\",\n \"color\": \"#FF4500\"\n }\n }\n },\n \"auth\": {\n \"profiles\": {\n \"openai-codex:default\": {\n \"provider\": \"openai-codex\",\n \"mode\": \"oauth\"\n }\n }\n },\n \"acp\": {\n \"enabled\": true,\n \"dispatch\": {\n \"enabled\": true\n },\n \"backend\": \"acpx\",\n \"defaultAgent\": \"codex\",\n \"allowedAgents\": [\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ],\n \"maxConcurrentSessions\": 8\n },\n \"models\": {\n \"mode\": \"merge\",\n \"providers\": {\n \"custom-api-deepseek-com\": {\n \"baseUrl\": \"https://api.deepseek.com\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"deepseek-chat\",\n \"name\": \"deepseek-chat (Custom Provider)\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 16000,\n \"maxTokens\": 4096\n }\n ]\n },\n \"blockrun\": {\n \"baseUrl\": \"http://127.0.0.1:8402/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"auto\",\n \"name\": \"Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"free\",\n \"name\": \"Free (NVIDIA GPT-OSS-120B only)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 4096\n },\n {\n \"id\": \"eco\",\n \"name\": \"Eco (Smart Router - Cost Optimized)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"premium\",\n \"name\": \"Premium (Smart Router - Best Quality)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 2000000,\n \"maxTokens\": 200000\n },\n {\n \"id\": \"openai/gpt-5.2\",\n \"name\": \"GPT-5.2\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5-mini\",\n \"name\": \"GPT-5 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.25,\n \"output\": 2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/gpt-5-nano\",\n \"name\": \"GPT-5 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.05,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 32768\n },\n {\n \"id\": \"openai/gpt-5.2-pro\",\n \"name\": \"GPT-5.2 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 21,\n \"output\": 168,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4\",\n \"name\": \"GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4-pro\",\n \"name\": \"GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.3\",\n \"name\": \"GPT-5.3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16000\n },\n {\n \"id\": \"openai/gpt-5.3-codex\",\n \"name\": \"GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-4.1\",\n \"name\": \"GPT-4.1\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-mini\",\n \"name\": \"GPT-4.1 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.4,\n \"output\": 1.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-nano\",\n \"name\": \"GPT-4.1 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o\",\n \"name\": \"GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o-mini\",\n \"name\": \"GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/o1\",\n \"name\": \"o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o1-mini\",\n \"name\": \"o1-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o3\",\n \"name\": \"o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o3-mini\",\n \"name\": \"o3-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o4-mini\",\n \"name\": \"o4-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"anthropic/claude-haiku-4.5\",\n \"name\": \"Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-sonnet-4.6\",\n \"name\": \"Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4.6\",\n \"name\": \"Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"google/gemini-3.1-pro\",\n \"name\": \"Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-pro-preview\",\n \"name\": \"Gemini 3 Pro Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-flash-preview\",\n \"name\": \"Gemini 3 Flash Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.5,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-pro\",\n \"name\": \"Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash\",\n \"name\": \"Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash-lite\",\n \"name\": \"Gemini 2.5 Flash Lite\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"deepseek/deepseek-chat\",\n \"name\": \"DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"deepseek/deepseek-reasoner\",\n \"name\": \"DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot/kimi-k2.5\",\n \"name\": \"Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"xai/grok-3\",\n \"name\": \"Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-3-mini\",\n \"name\": \"Grok 3 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-reasoning\",\n \"name\": \"Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-non-reasoning\",\n \"name\": \"Grok 4 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-reasoning\",\n \"name\": \"Grok 4.1 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-non-reasoning\",\n \"name\": \"Grok 4.1 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-0709\",\n \"name\": \"Grok 4 (0709)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 1.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-2-vision\",\n \"name\": \"Grok 2 Vision\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax/minimax-m2.5\",\n \"name\": \"MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/gpt-oss-120b\",\n \"name\": \"NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/kimi-k2.5\",\n \"name\": \"NVIDIA Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.55,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet\",\n \"name\": \"sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4\",\n \"name\": \"sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4.6\",\n \"name\": \"sonnet-4.6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4-6\",\n \"name\": \"sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"opus\",\n \"name\": \"opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4\",\n \"name\": \"opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4.6\",\n \"name\": \"opus-4.6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4-6\",\n \"name\": \"opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"haiku\",\n \"name\": \"haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/sonnet\",\n \"name\": \"anthropic/sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/opus\",\n \"name\": \"anthropic/opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/haiku\",\n \"name\": \"anthropic/haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude\",\n \"name\": \"anthropic/claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4\",\n \"name\": \"anthropic/claude-sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4-6\",\n \"name\": \"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4\",\n \"name\": \"anthropic/claude-opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4-6\",\n \"name\": \"anthropic/claude-opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4.5\",\n \"name\": \"anthropic/claude-opus-4.5 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-haiku-4\",\n \"name\": \"anthropic/claude-haiku-4 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-haiku-4-5\",\n \"name\": \"anthropic/claude-haiku-4-5 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gpt\",\n \"name\": \"gpt → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt4\",\n \"name\": \"gpt4 → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt5\",\n \"name\": \"gpt5 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4\",\n \"name\": \"gpt-5.4 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4-pro\",\n \"name\": \"gpt-5.4-pro → GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex → GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"mini\",\n \"name\": \"mini → GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"o1\",\n \"name\": \"o1 → o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"o3\",\n \"name\": \"o3 → o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"deepseek\",\n \"name\": \"deepseek → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"reasoner\",\n \"name\": \"reasoner → DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot\",\n \"name\": \"moonshot → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"kimi-k2.5 → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini → Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"flash\",\n \"name\": \"flash → Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"gemini-3.1-pro-preview\",\n \"name\": \"gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3.1-pro-preview\",\n \"name\": \"google/gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"grok\",\n \"name\": \"grok → Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-fast\",\n \"name\": \"grok-fast → Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-code\",\n \"name\": \"grok-code → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"nvidia\",\n \"name\": \"nvidia → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt-120b\",\n \"name\": \"gpt-120b → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax\",\n \"name\": \"minimax → MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"auto-router\",\n \"name\": \"auto-router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"router\",\n \"name\": \"router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n }\n ]\n },\n \"custom-api-moonshot-ai\": {\n \"baseUrl\": \"https://api.moonshot.ai/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"Kimi K2.5 (Moonshot)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n }\n ]\n }\n }\n },\n \"agents\": {\n \"defaults\": {\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"custom-api-deepseek-com/deepseek-chat\"\n ]\n },\n \"models\": {\n \"blockrun/auto\": {},\n \"openrouter/anthropic/claude-sonnet-4-6\": {\n \"alias\": \"claude\"\n },\n \"openai-codex/gpt-5.1\": {\n \"alias\": \"codex-chat\"\n },\n \"openai-codex/gpt-5.3-codex-spark\": {\n \"alias\": \"codex-spark\"\n },\n \"openai-codex/gpt-5.3-codex\": {\n \"alias\": \"codex-max\"\n },\n \"openai-codex/gpt-5.4\": {\n \"alias\": \"gpt-5.4\"\n },\n \"custom-api-deepseek-com/deepseek-chat\": {\n \"alias\": \"deepseek\"\n },\n \"claude-sonnet-cli/default\": {\n \"alias\": \"claude-sonnet\"\n },\n \"claude-opus-cli/default\": {\n \"alias\": \"claude-opus\"\n },\n \"blockrun/free\": {},\n \"blockrun/eco\": {},\n \"blockrun/premium\": {},\n \"blockrun/anthropic/claude-sonnet-4.6\": {},\n \"blockrun/anthropic/claude-opus-4.6\": {},\n \"blockrun/anthropic/claude-haiku-4.5\": {},\n \"blockrun/openai/gpt-5.2\": {},\n \"blockrun/openai/gpt-4o\": {},\n \"blockrun/openai/o3\": {},\n \"blockrun/google/gemini-3.1-pro\": {},\n \"blockrun/google/gemini-3-flash-preview\": {},\n \"blockrun/deepseek/deepseek-chat\": {},\n \"blockrun/moonshot/kimi-k2.5\": {},\n \"blockrun/xai/grok-3\": {},\n \"blockrun/minimax/minimax-m2.5\": {},\n \"openrouter/openrouter/free\": {},\n \"custom-api-moonshot-ai/kimi-k2.5\": {\n \"alias\": \"kimi\"\n },\n \"clawrouter/auto\": {\n \"alias\": \"clawrouter\"\n },\n \"openrouter/openrouter/auto\": {},\n \"blockrun/openai/gpt-5.3\": {}\n },\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"cliBackends\": {\n \"codex-cli\": {\n \"command\": \"/home/linuxbrew/.linuxbrew/bin/codex\",\n \"args\": [\n \"exec\",\n \"--json\",\n \"--color\",\n \"never\",\n \"--sandbox\",\n \"read-only\",\n \"--skip-git-repo-check\"\n ],\n \"output\": \"jsonl\"\n },\n \"gemini-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/gemini-cli-openclaw\",\n \"output\": \"text\"\n },\n \"deepseek-code\": {\n \"command\": \"/home/ubuntu/.local/bin/deepseek-code-openclaw\",\n \"output\": \"text\"\n },\n \"claude-sonnet-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-sonnet-openclaw\",\n \"output\": \"text\"\n },\n \"claude-opus-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-opus-openclaw\",\n \"output\": \"text\"\n },\n \"kimi-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/kimi-openclaw\",\n \"output\": \"text\"\n }\n },\n \"compaction\": {\n \"mode\": \"safeguard\"\n },\n \"elevatedDefault\": \"off\",\n \"maxConcurrent\": 1,\n \"subagents\": {\n \"maxConcurrent\": 4\n }\n },\n \"list\": [\n {\n \"id\": \"pipo\",\n \"name\": \"pipo\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"openai-codex/gpt-5.4\",\n \"fallbacks\": [\n \"blockrun/auto\",\n \"openrouter/openrouter/free\"\n ]\n },\n \"subagents\": {\n \"allowAgents\": [\n \"codex\",\n \"gemini\",\n \"claude\",\n \"deepseek-code\",\n \"kimi\",\n \"clawrouter\",\n \"openrouter\"\n ]\n }\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-codex\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/codex/agent\",\n \"model\": \"openai-codex/gpt-5.3-codex\"\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-gemini\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/gemini/agent\",\n \"model\": \"gemini-cli/default\"\n },\n {\n \"id\": \"deepseek-code\",\n \"name\": \"deepseek-code\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-deepseek-code\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/deepseek-code/agent\",\n \"model\": \"deepseek-code/default\"\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude/agent\",\n \"model\": \"claude-sonnet-cli/default\"\n },\n {\n \"id\": \"claude-opus\",\n \"name\": \"claude-opus\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude-opus\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude-opus/agent\",\n \"model\": \"claude-opus-cli/default\"\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-kimi\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/kimi/agent\",\n \"model\": \"kimi-cli/default\"\n },\n {\n \"id\": \"clawrouter\",\n \"name\": \"ClawRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n },\n {\n \"id\": \"openrouter\",\n \"name\": \"OpenRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-openrouter\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/openrouter/agent\",\n \"model\": {\n \"primary\": \"openrouter/openrouter/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n }\n ]\n },\n \"tools\": {\n \"sessions\": {\n \"visibility\": \"all\"\n },\n \"agentToAgent\": {\n \"enabled\": true,\n \"allow\": [\n \"pipo\",\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ]\n },\n \"elevated\": {\n \"enabled\": true,\n \"allowFrom\": {\n \"telegram\": [\n 842987156\n ],\n \"webchat\": []\n }\n },\n \"exec\": {\n \"ask\": \"off\"\n }\n },\n \"messages\": {\n \"ackReactionScope\": \"group-mentions\"\n },\n \"commands\": {\n \"native\": \"auto\",\n \"nativeSkills\": \"auto\",\n \"restart\": true,\n \"ownerDisplay\": \"raw\"\n },\n \"session\": {\n \"dmScope\": \"per-channel-peer\"\n },\n \"hooks\": {\n \"internal\": {\n \"enabled\": true,\n \"entries\": {\n \"session-memory\": {\n \"enabled\": true\n },\n \"bootstrap-extra-files\": {\n \"enabled\": true\n },\n \"boot-md\": {\n \"enabled\": true\n }\n }\n }\n },\n \"channels\": {\n \"telegram\": {\n \"enabled\": true,\n \"dmPolicy\": \"allowlist\",\n \"botToken\": \"__OPENCLAW_REDACTED__\",\n \"replyToMode\": \"all\",\n \"allowFrom\": [\n 842987156\n ],\n \"groupPolicy\": \"allowlist\",\n \"streaming\": \"off\",\n \"mediaMaxMb\": 20,\n \"timeoutSeconds\": 60,\n \"retry\": {\n \"attempts\": 6,\n \"minDelayMs\": 1500,\n \"maxDelayMs\": 90000,\n \"jitter\": 0.1\n },\n \"network\": {\n \"autoSelectFamily\": false,\n \"dnsResultOrder\": \"ipv4first\"\n }\n }\n },\n \"gateway\": {\n \"port\": 18789,\n \"mode\": \"local\",\n \"bind\": \"loopback\",\n \"controlUi\": {\n \"allowedOrigins\": [\n \"https://miopenclaw-vnic.tail9799d2.ts.net\",\n \"https://miopenclaw-vnic.tail9799d2.ts.net/\",\n \"http://127.0.0.1:18789\"\n ]\n },\n \"auth\": {\n \"mode\": \"token\",\n \"token\": \"__OPENCLAW_REDACTED__\"\n },\n \"trustedProxies\": [\n \"127.0.0.1/32\",\n \"::1/128\"\n ],\n \"tailscale\": {\n \"mode\": \"serve\",\n \"resetOnExit\": true\n }\n },\n \"skills\": {\n \"entries\": {\n \"gh-issues\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"nano-banana-pro\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"notion\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-image-gen\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-whisper-api\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"sag\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n }\n }\n },\n \"plugins\": {\n \"allow\": [\n \"telegram\",\n \"acpx\",\n \"clawrouter\"\n ],\n \"entries\": {\n \"qwen-portal-auth\": {\n \"enabled\": true\n },\n \"acpx\": {\n \"enabled\": true,\n \"config\": {\n \"permissionMode\": \"approve-all\",\n \"nonInteractivePermissions\": \"fail\",\n \"expectedVersion\": \"any\",\n \"command\": \"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx\"\n }\n },\n \"clawrouter\": {\n \"enabled\": true\n }\n },\n \"installs\": {\n \"clawrouter\": {\n \"source\": \"npm\",\n \"spec\": \"@blockrun/clawrouter@latest\",\n \"installPath\": \"/home/ubuntu/.openclaw/extensions/clawrouter\",\n \"version\": \"0.12.43\",\n \"resolvedName\": \"@blockrun/clawrouter\",\n \"resolvedVersion\": \"0.12.43\",\n \"resolvedSpec\": \"@blockrun/clawrouter@0.12.43\",\n \"integrity\": \"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==\",\n \"shasum\": \"3331382e1a46524bee73b8ffa83677950f5bbae5\",\n \"resolvedAt\": \"2026-03-15T22:45:46.066Z\",\n \"installedAt\": \"2026-03-15T22:46:43.662Z\"\n }\n }\n }\n },\n \"valid\": true,\n \"config\": {\n \"meta\": {\n \"lastTouchedVersion\": \"2026.3.13\",\n \"lastTouchedAt\": \"2026-03-15T23:17:49.868Z\"\n },\n \"env\": {\n \"OPENAI_API_KEY\": \"__OPENCLAW_REDACTED__\"\n },\n \"wizard\": {\n \"lastRunAt\": \"2026-03-15T22:40:03.597Z\",\n \"lastRunVersion\": \"2026.3.13\",\n \"lastRunCommand\": \"doctor\",\n \"lastRunMode\": \"local\"\n },\n \"diagnostics\": {\n \"flags\": [\n \"telegram.http\"\n ]\n },\n \"browser\": {\n \"executablePath\": \"/usr/bin/chromium-browser\",\n \"headless\": true,\n \"noSandbox\": true,\n \"defaultProfile\": \"openclaw\",\n \"profiles\": {\n \"openclaw\": {\n \"cdpPort\": 18800,\n \"cdpUrl\": \"http://127.0.0.1:18800\",\n \"color\": \"#FF4500\"\n }\n }\n },\n \"auth\": {\n \"profiles\": {\n \"openai-codex:default\": {\n \"provider\": \"openai-codex\",\n \"mode\": \"oauth\"\n }\n }\n },\n \"acp\": {\n \"enabled\": true,\n \"dispatch\": {\n \"enabled\": true\n },\n \"backend\": \"acpx\",\n \"defaultAgent\": \"codex\",\n \"allowedAgents\": [\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ],\n \"maxConcurrentSessions\": 8\n },\n \"models\": {\n \"mode\": \"merge\",\n \"providers\": {\n \"custom-api-deepseek-com\": {\n \"baseUrl\": \"https://api.deepseek.com\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"deepseek-chat\",\n \"name\": \"deepseek-chat (Custom Provider)\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 16000,\n \"maxTokens\": 4096,\n \"api\": \"openai-completions\"\n }\n ]\n },\n \"blockrun\": {\n \"baseUrl\": \"http://127.0.0.1:8402/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"auto\",\n \"name\": \"Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"free\",\n \"name\": \"Free (NVIDIA GPT-OSS-120B only)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 4096\n },\n {\n \"id\": \"eco\",\n \"name\": \"Eco (Smart Router - Cost Optimized)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"premium\",\n \"name\": \"Premium (Smart Router - Best Quality)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 2000000,\n \"maxTokens\": 200000\n },\n {\n \"id\": \"openai/gpt-5.2\",\n \"name\": \"GPT-5.2\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5-mini\",\n \"name\": \"GPT-5 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.25,\n \"output\": 2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/gpt-5-nano\",\n \"name\": \"GPT-5 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.05,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 32768\n },\n {\n \"id\": \"openai/gpt-5.2-pro\",\n \"name\": \"GPT-5.2 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 21,\n \"output\": 168,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4\",\n \"name\": \"GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4-pro\",\n \"name\": \"GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.3\",\n \"name\": \"GPT-5.3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16000\n },\n {\n \"id\": \"openai/gpt-5.3-codex\",\n \"name\": \"GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-4.1\",\n \"name\": \"GPT-4.1\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-mini\",\n \"name\": \"GPT-4.1 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.4,\n \"output\": 1.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-nano\",\n \"name\": \"GPT-4.1 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o\",\n \"name\": \"GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o-mini\",\n \"name\": \"GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/o1\",\n \"name\": \"o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o1-mini\",\n \"name\": \"o1-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o3\",\n \"name\": \"o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o3-mini\",\n \"name\": \"o3-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o4-mini\",\n \"name\": \"o4-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"anthropic/claude-haiku-4.5\",\n \"name\": \"Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-sonnet-4.6\",\n \"name\": \"Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4.6\",\n \"name\": \"Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"google/gemini-3.1-pro\",\n \"name\": \"Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-pro-preview\",\n \"name\": \"Gemini 3 Pro Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-flash-preview\",\n \"name\": \"Gemini 3 Flash Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.5,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-pro\",\n \"name\": \"Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash\",\n \"name\": \"Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash-lite\",\n \"name\": \"Gemini 2.5 Flash Lite\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"deepseek/deepseek-chat\",\n \"name\": \"DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"deepseek/deepseek-reasoner\",\n \"name\": \"DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot/kimi-k2.5\",\n \"name\": \"Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"xai/grok-3\",\n \"name\": \"Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-3-mini\",\n \"name\": \"Grok 3 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-reasoning\",\n \"name\": \"Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-non-reasoning\",\n \"name\": \"Grok 4 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-reasoning\",\n \"name\": \"Grok 4.1 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-non-reasoning\",\n \"name\": \"Grok 4.1 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-0709\",\n \"name\": \"Grok 4 (0709)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 1.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-2-vision\",\n \"name\": \"Grok 2 Vision\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax/minimax-m2.5\",\n \"name\": \"MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/gpt-oss-120b\",\n \"name\": \"NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/kimi-k2.5\",\n \"name\": \"NVIDIA Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.55,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet\",\n \"name\": \"sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4\",\n \"name\": \"sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4.6\",\n \"name\": \"sonnet-4.6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4-6\",\n \"name\": \"sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"opus\",\n \"name\": \"opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4\",\n \"name\": \"opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4.6\",\n \"name\": \"opus-4.6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4-6\",\n \"name\": \"opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"haiku\",\n \"name\": \"haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/sonnet\",\n \"name\": \"anthropic/sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/opus\",\n \"name\": \"anthropic/opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/haiku\",\n \"name\": \"anthropic/haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude\",\n \"name\": \"anthropic/claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4\",\n \"name\": \"anthropic/claude-sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4-6\",\n \"name\": \"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4\",\n \"name\": \"anthropic/claude-opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4-6\",\n \"name\": \"anthropic/claude-opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4.5\",\n \"name\": \"anthropic/claude-opus-4.5 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-haiku-4\",\n \"name\": \"anthropic/claude-haiku-4 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-haiku-4-5\",\n \"name\": \"anthropic/claude-haiku-4-5 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gpt\",\n \"name\": \"gpt → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt4\",\n \"name\": \"gpt4 → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt5\",\n \"name\": \"gpt5 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4\",\n \"name\": \"gpt-5.4 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4-pro\",\n \"name\": \"gpt-5.4-pro → GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex → GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"mini\",\n \"name\": \"mini → GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"o1\",\n \"name\": \"o1 → o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"o3\",\n \"name\": \"o3 → o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"deepseek\",\n \"name\": \"deepseek → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"reasoner\",\n \"name\": \"reasoner → DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot\",\n \"name\": \"moonshot → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"kimi-k2.5 → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini → Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"flash\",\n \"name\": \"flash → Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"gemini-3.1-pro-preview\",\n \"name\": \"gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3.1-pro-preview\",\n \"name\": \"google/gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"grok\",\n \"name\": \"grok → Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-fast\",\n \"name\": \"grok-fast → Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-code\",\n \"name\": \"grok-code → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"nvidia\",\n \"name\": \"nvidia → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt-120b\",\n \"name\": \"gpt-120b → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax\",\n \"name\": \"minimax → MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"auto-router\",\n \"name\": \"auto-router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"router\",\n \"name\": \"router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n }\n ]\n },\n \"custom-api-moonshot-ai\": {\n \"baseUrl\": \"https://api.moonshot.ai/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"Kimi K2.5 (Moonshot)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n }\n ]\n }\n }\n },\n \"agents\": {\n \"defaults\": {\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"custom-api-deepseek-com/deepseek-chat\"\n ]\n },\n \"models\": {\n \"blockrun/auto\": {},\n \"openrouter/anthropic/claude-sonnet-4-6\": {\n \"alias\": \"claude\"\n },\n \"openai-codex/gpt-5.1\": {\n \"alias\": \"codex-chat\"\n },\n \"openai-codex/gpt-5.3-codex-spark\": {\n \"alias\": \"codex-spark\"\n },\n \"openai-codex/gpt-5.3-codex\": {\n \"alias\": \"codex-max\"\n },\n \"openai-codex/gpt-5.4\": {\n \"alias\": \"gpt-5.4\"\n },\n \"custom-api-deepseek-com/deepseek-chat\": {\n \"alias\": \"deepseek\"\n },\n \"claude-sonnet-cli/default\": {\n \"alias\": \"claude-sonnet\"\n },\n \"claude-opus-cli/default\": {\n \"alias\": \"claude-opus\"\n },\n \"blockrun/free\": {},\n \"blockrun/eco\": {},\n \"blockrun/premium\": {},\n \"blockrun/anthropic/claude-sonnet-4.6\": {},\n \"blockrun/anthropic/claude-opus-4.6\": {},\n \"blockrun/anthropic/claude-haiku-4.5\": {},\n \"blockrun/openai/gpt-5.2\": {},\n \"blockrun/openai/gpt-4o\": {},\n \"blockrun/openai/o3\": {},\n \"blockrun/google/gemini-3.1-pro\": {},\n \"blockrun/google/gemini-3-flash-preview\": {},\n \"blockrun/deepseek/deepseek-chat\": {},\n \"blockrun/moonshot/kimi-k2.5\": {},\n \"blockrun/xai/grok-3\": {},\n \"blockrun/minimax/minimax-m2.5\": {},\n \"openrouter/openrouter/free\": {},\n \"custom-api-moonshot-ai/kimi-k2.5\": {\n \"alias\": \"kimi\"\n },\n \"clawrouter/auto\": {\n \"alias\": \"clawrouter\"\n },\n \"openrouter/openrouter/auto\": {},\n \"blockrun/openai/gpt-5.3\": {}\n },\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"cliBackends\": {\n \"codex-cli\": {\n \"command\": \"/home/linuxbrew/.linuxbrew/bin/codex\",\n \"args\": [\n \"exec\",\n \"--json\",\n \"--color\",\n \"never\",\n \"--sandbox\",\n \"read-only\",\n \"--skip-git-repo-check\"\n ],\n \"output\": \"jsonl\"\n },\n \"gemini-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/gemini-cli-openclaw\",\n \"output\": \"text\"\n },\n \"deepseek-code\": {\n \"command\": \"/home/ubuntu/.local/bin/deepseek-code-openclaw\",\n \"output\": \"text\"\n },\n \"claude-sonnet-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-sonnet-openclaw\",\n \"output\": \"text\"\n },\n \"claude-opus-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-opus-openclaw\",\n \"output\": \"text\"\n },\n \"kimi-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/kimi-openclaw\",\n \"output\": \"text\"\n }\n },\n \"compaction\": {\n \"mode\": \"safeguard\"\n },\n \"elevatedDefault\": \"off\",\n \"maxConcurrent\": 1,\n \"subagents\": {\n \"maxConcurrent\": 4\n }\n },\n \"list\": [\n {\n \"id\": \"pipo\",\n \"name\": \"pipo\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"openai-codex/gpt-5.4\",\n \"fallbacks\": [\n \"blockrun/auto\",\n \"openrouter/openrouter/free\"\n ]\n },\n \"subagents\": {\n \"allowAgents\": [\n \"codex\",\n \"gemini\",\n \"claude\",\n \"deepseek-code\",\n \"kimi\",\n \"clawrouter\",\n \"openrouter\"\n ]\n }\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-codex\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/codex/agent\",\n \"model\": \"openai-codex/gpt-5.3-codex\"\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-gemini\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/gemini/agent\",\n \"model\": \"gemini-cli/default\"\n },\n {\n \"id\": \"deepseek-code\",\n \"name\": \"deepseek-code\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-deepseek-code\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/deepseek-code/agent\",\n \"model\": \"deepseek-code/default\"\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude/agent\",\n \"model\": \"claude-sonnet-cli/default\"\n },\n {\n \"id\": \"claude-opus\",\n \"name\": \"claude-opus\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude-opus\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude-opus/agent\",\n \"model\": \"claude-opus-cli/default\"\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-kimi\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/kimi/agent\",\n \"model\": \"kimi-cli/default\"\n },\n {\n \"id\": \"clawrouter\",\n \"name\": \"ClawRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n },\n {\n \"id\": \"openrouter\",\n \"name\": \"OpenRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-openrouter\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/openrouter/agent\",\n \"model\": {\n \"primary\": \"openrouter/openrouter/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n }\n ]\n },\n \"tools\": {\n \"sessions\": {\n \"visibility\": \"all\"\n },\n \"agentToAgent\": {\n \"enabled\": true,\n \"allow\": [\n \"pipo\",\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ]\n },\n \"elevated\": {\n \"enabled\": true,\n \"allowFrom\": {\n \"telegram\": [\n 842987156\n ],\n \"webchat\": []\n }\n },\n \"exec\": {\n \"ask\": \"off\"\n }\n },\n \"messages\": {\n \"ackReactionScope\": \"group-mentions\"\n },\n \"commands\": {\n \"native\": \"auto\",\n \"nativeSkills\": \"auto\",\n \"restart\": true,\n \"ownerDisplay\": \"raw\"\n },\n \"session\": {\n \"dmScope\": \"per-channel-peer\"\n },\n \"hooks\": {\n \"internal\": {\n \"enabled\": true,\n \"entries\": {\n \"session-memory\": {\n \"enabled\": true\n },\n \"bootstrap-extra-files\": {\n \"enabled\": true\n },\n \"boot-md\": {\n \"enabled\": true\n }\n }\n }\n },\n \"channels\": {\n \"telegram\": {\n \"enabled\": true,\n \"dmPolicy\": \"allowlist\",\n \"botToken\": \"__OPENCLAW_REDACTED__\",\n \"replyToMode\": \"all\",\n \"allowFrom\": [\n 842987156\n ],\n \"groupPolicy\": \"allowlist\",\n \"streaming\": \"off\",\n \"mediaMaxMb\": 20,\n \"timeoutSeconds\": 60,\n \"retry\": {\n \"attempts\": 6,\n \"minDelayMs\": 1500,\n \"maxDelayMs\": 90000,\n \"jitter\": 0.1\n },\n \"network\": {\n \"autoSelectFamily\": false,\n \"dnsResultOrder\": \"ipv4first\"\n }\n }\n },\n \"gateway\": {\n \"port\": 18789,\n \"mode\": \"local\",\n \"bind\": \"loopback\",\n \"controlUi\": {\n \"allowedOrigins\": [\n \"https://miopenclaw-vnic.tail9799d2.ts.net\",\n \"https://miopenclaw-vnic.tail9799d2.ts.net/\",\n \"http://127.0.0.1:18789\"\n ]\n },\n \"auth\": {\n \"mode\": \"token\",\n \"token\": \"__OPENCLAW_REDACTED__\"\n },\n \"trustedProxies\": [\n \"127.0.0.1/32\",\n \"::1/128\"\n ],\n \"tailscale\": {\n \"mode\": \"serve\",\n \"resetOnExit\": true\n }\n },\n \"skills\": {\n \"entries\": {\n \"gh-issues\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"nano-banana-pro\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"notion\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-image-gen\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-whisper-api\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"sag\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n }\n }\n },\n \"plugins\": {\n \"allow\": [\n \"telegram\",\n \"acpx\",\n \"clawrouter\"\n ],\n \"entries\": {\n \"qwen-portal-auth\": {\n \"enabled\": true\n },\n \"acpx\": {\n \"enabled\": true,\n \"config\": {\n \"permissionMode\": \"approve-all\",\n \"nonInteractivePermissions\": \"fail\",\n \"expectedVersion\": \"any\",\n \"command\": \"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx\"\n }\n },\n \"clawrouter\": {\n \"enabled\": true\n }\n },\n \"installs\": {\n \"clawrouter\": {\n \"source\": \"npm\",\n \"spec\": \"@blockrun/clawrouter@latest\",\n \"installPath\": \"/home/ubuntu/.openclaw/extensions/clawrouter\",\n \"version\": \"0.12.43\",\n \"resolvedName\": \"@blockrun/clawrouter\",\n \"resolvedVersion\": \"0.12.43\",\n \"resolvedSpec\": \"@blockrun/clawrouter@0.12.43\",\n \"integrity\": \"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==\",\n \"shasum\": \"3331382e1a46524bee73b8ffa83677950f5bbae5\",\n \"resolvedAt\": \"2026-03-15T22:45:46.066Z\",\n \"installedAt\": \"2026-03-15T22:46:43.662Z\"\n }\n }\n },\n \"talk\": {\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"provider\": \"elevenlabs\",\n \"providers\": {\n \"elevenlabs\": {\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n }\n }\n }\n },\n \"hash\": \"31f4e11b98ddb833f53a89ddcd4021b23f92551d22a24ad5d438e6c901140df1\",\n \"issues\": [],\n \"warnings\": [],\n \"legacyIssues\": []\n }\n}"}],"details":{"ok":true,"result":{"path":"/home/ubuntu/.openclaw/openclaw.json","exists":true,"raw":"{\n meta: {\n lastTouchedVersion: '2026.3.13',\n lastTouchedAt: '2026-03-15T23:17:49.868Z',\n },\n env: {\n OPENAI_API_KEY: '__OPENCLAW_REDACTED__',\n },\n wizard: {\n lastRunAt: '2026-03-15T22:40:03.597Z',\n lastRunVersion: '2026.3.13',\n lastRunCommand: 'doctor',\n lastRunMode: 'local',\n },\n diagnostics: {\n flags: [\n 'telegram.http',\n ],\n },\n browser: {\n executablePath: '/usr/bin/chromium-browser',\n headless: true,\n noSandbox: true,\n defaultProfile: 'openclaw',\n profiles: {\n openclaw: {\n cdpPort: 18800,\n cdpUrl: 'http://127.0.0.1:18800',\n color: '#FF4500',\n },\n },\n },\n auth: {\n profiles: {\n 'openai-codex:default': {\n provider: 'openai-codex',\n mode: 'oauth',\n },\n },\n },\n acp: {\n enabled: true,\n dispatch: {\n enabled: true,\n },\n backend: 'acpx',\n defaultAgent: 'codex',\n allowedAgents: [\n 'codex',\n 'gemini',\n 'deepseek-code',\n 'claude',\n 'claude-opus',\n 'kimi',\n 'clawrouter',\n ],\n maxConcurrentSessions: 8,\n },\n models: {\n mode: 'merge',\n providers: {\n 'custom-api-deepseek-com': {\n baseUrl: 'https://api.deepseek.com',\n apiKey: '__OPENCLAW_REDACTED__',\n api: 'openai-completions',\n models: [\n {\n id: 'deepseek-chat',\n name: 'deepseek-chat (Custom Provider)',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 16000,\n maxTokens: 4096,\n },\n ],\n },\n blockrun: {\n baseUrl: 'http://127.0.0.1:8402/v1',\n apiKey: '__OPENCLAW_REDACTED__',\n api: 'openai-completions',\n models: [\n {\n id: 'auto',\n name: 'Auto (Smart Router - Balanced)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 128000,\n },\n {\n id: 'free',\n name: 'Free (NVIDIA GPT-OSS-120B only)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 4096,\n },\n {\n id: 'eco',\n name: 'Eco (Smart Router - Cost Optimized)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 128000,\n },\n {\n id: 'premium',\n name: 'Premium (Smart Router - Best Quality)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 2000000,\n maxTokens: 200000,\n },\n {\n id: 'openai/gpt-5.2',\n name: 'GPT-5.2',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1.75,\n output: 14,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'openai/gpt-5-mini',\n name: 'GPT-5 Mini',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.25,\n output: 2,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 65536,\n },\n {\n id: 'openai/gpt-5-nano',\n name: 'GPT-5 Nano',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.05,\n output: 0.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 32768,\n },\n {\n id: 'openai/gpt-5.2-pro',\n name: 'GPT-5.2 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 21,\n output: 168,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'openai/gpt-5.4',\n name: 'GPT-5.4',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'openai/gpt-5.4-pro',\n name: 'GPT-5.4 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 30,\n output: 180,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'openai/gpt-5.3',\n name: 'GPT-5.3',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1.75,\n output: 14,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16000,\n },\n {\n id: 'openai/gpt-5.3-codex',\n name: 'GPT-5.3 Codex',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 1.75,\n output: 14,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'openai/gpt-4.1',\n name: 'GPT-4.1',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 8,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'openai/gpt-4.1-mini',\n name: 'GPT-4.1 Mini',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.4,\n output: 1.6,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'openai/gpt-4.1-nano',\n name: 'GPT-4.1 Nano',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.1,\n output: 0.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'openai/gpt-4o',\n name: 'GPT-4o',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'openai/gpt-4o-mini',\n name: 'GPT-4o Mini',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.15,\n output: 0.6,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'openai/o1',\n name: 'o1',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 15,\n output: 60,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 100000,\n },\n {\n id: 'openai/o1-mini',\n name: 'o1-mini',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 1.1,\n output: 4.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 65536,\n },\n {\n id: 'openai/o3',\n name: 'o3',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 2,\n output: 8,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 100000,\n },\n {\n id: 'openai/o3-mini',\n name: 'o3-mini',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 1.1,\n output: 4.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 65536,\n },\n {\n id: 'openai/o4-mini',\n name: 'o4-mini',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 1.1,\n output: 4.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 65536,\n },\n {\n id: 'anthropic/claude-haiku-4.5',\n name: 'Claude Haiku 4.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1,\n output: 5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n {\n id: 'anthropic/claude-sonnet-4.6',\n name: 'Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'anthropic/claude-opus-4.6',\n name: 'Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'google/gemini-3.1-pro',\n name: 'Gemini 3.1 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 12,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-3-pro-preview',\n name: 'Gemini 3 Pro Preview',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 12,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-3-flash-preview',\n name: 'Gemini 3 Flash Preview',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.5,\n output: 3,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1000000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-2.5-pro',\n name: 'Gemini 2.5 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1.25,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-2.5-flash',\n name: 'Gemini 2.5 Flash',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.3,\n output: 2.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1000000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-2.5-flash-lite',\n name: 'Gemini 2.5 Flash Lite',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.1,\n output: 0.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1000000,\n maxTokens: 65536,\n },\n {\n id: 'deepseek/deepseek-chat',\n name: 'DeepSeek V3.2 Chat',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.28,\n output: 0.42,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 8192,\n },\n {\n id: 'deepseek/deepseek-reasoner',\n name: 'DeepSeek V3.2 Reasoner',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.28,\n output: 0.42,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 8192,\n },\n {\n id: 'moonshot/kimi-k2.5',\n name: 'Kimi K2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.6,\n output: 3,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 262144,\n maxTokens: 8192,\n },\n {\n id: 'xai/grok-3',\n name: 'Grok 3',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-3-mini',\n name: 'Grok 3 Mini',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.3,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-4-fast-reasoning',\n name: 'Grok 4 Fast Reasoning',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-4-fast-non-reasoning',\n name: 'Grok 4 Fast',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-4-1-fast-reasoning',\n name: 'Grok 4.1 Fast Reasoning',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-4-1-fast-non-reasoning',\n name: 'Grok 4.1 Fast',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-4-0709',\n name: 'Grok 4 (0709)',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 1.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-2-vision',\n name: 'Grok 2 Vision',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'minimax/minimax-m2.5',\n name: 'MiniMax M2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.3,\n output: 1.2,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 204800,\n maxTokens: 16384,\n },\n {\n id: 'nvidia/gpt-oss-120b',\n name: 'NVIDIA GPT-OSS 120B',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'nvidia/kimi-k2.5',\n name: 'NVIDIA Kimi K2.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.55,\n output: 2.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 262144,\n maxTokens: 16384,\n },\n {\n id: 'claude',\n name: 'claude → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'sonnet',\n name: 'sonnet → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'sonnet-4',\n name: 'sonnet-4 → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'sonnet-4.6',\n name: 'sonnet-4.6 → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'sonnet-4-6',\n name: 'sonnet-4-6 → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'opus',\n name: 'opus → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'opus-4',\n name: 'opus-4 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'opus-4.6',\n name: 'opus-4.6 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'opus-4-6',\n name: 'opus-4-6 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'haiku',\n name: 'haiku → Claude Haiku 4.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1,\n output: 5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n {\n id: 'anthropic/sonnet',\n name: 'anthropic/sonnet → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'anthropic/opus',\n name: 'anthropic/opus → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'anthropic/haiku',\n name: 'anthropic/haiku → Claude Haiku 4.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1,\n output: 5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n {\n id: 'anthropic/claude',\n name: 'anthropic/claude → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'anthropic/claude-sonnet-4',\n name: 'anthropic/claude-sonnet-4 → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'anthropic/claude-sonnet-4-6',\n name: 'anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'anthropic/claude-opus-4',\n name: 'anthropic/claude-opus-4 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'anthropic/claude-opus-4-6',\n name: 'anthropic/claude-opus-4-6 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'anthropic/claude-opus-4.5',\n name: 'anthropic/claude-opus-4.5 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'anthropic/claude-haiku-4',\n name: 'anthropic/claude-haiku-4 → Claude Haiku 4.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1,\n output: 5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n {\n id: 'anthropic/claude-haiku-4-5',\n name: 'anthropic/claude-haiku-4-5 → Claude Haiku 4.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1,\n output: 5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n {\n id: 'gpt',\n name: 'gpt → GPT-4o',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'gpt4',\n name: 'gpt4 → GPT-4o',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'gpt5',\n name: 'gpt5 → GPT-5.4',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'gpt-5.4',\n name: 'gpt-5.4 → GPT-5.4',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'gpt-5.4-pro',\n name: 'gpt-5.4-pro → GPT-5.4 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 30,\n output: 180,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'codex',\n name: 'codex → GPT-5.3 Codex',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 1.75,\n output: 14,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'mini',\n name: 'mini → GPT-4o Mini',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.15,\n output: 0.6,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'o1',\n name: 'o1 → o1',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 15,\n output: 60,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 100000,\n },\n {\n id: 'o3',\n name: 'o3 → o3',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 2,\n output: 8,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 100000,\n },\n {\n id: 'deepseek',\n name: 'deepseek → DeepSeek V3.2 Chat',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.28,\n output: 0.42,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 8192,\n },\n {\n id: 'reasoner',\n name: 'reasoner → DeepSeek V3.2 Reasoner',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.28,\n output: 0.42,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 8192,\n },\n {\n id: 'kimi',\n name: 'kimi → Kimi K2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.6,\n output: 3,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 262144,\n maxTokens: 8192,\n },\n {\n id: 'moonshot',\n name: 'moonshot → Kimi K2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.6,\n output: 3,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 262144,\n maxTokens: 8192,\n },\n {\n id: 'kimi-k2.5',\n name: 'kimi-k2.5 → Kimi K2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.6,\n output: 3,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 262144,\n maxTokens: 8192,\n },\n {\n id: 'gemini',\n name: 'gemini → Gemini 2.5 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1.25,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'flash',\n name: 'flash → Gemini 2.5 Flash',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.3,\n output: 2.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1000000,\n maxTokens: 65536,\n },\n {\n id: 'gemini-3.1-pro-preview',\n name: 'gemini-3.1-pro-preview → Gemini 3.1 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 12,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-3.1-pro-preview',\n name: 'google/gemini-3.1-pro-preview → Gemini 3.1 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 12,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'grok',\n name: 'grok → Grok 3',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'grok-fast',\n name: 'grok-fast → Grok 4 Fast Reasoning',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'grok-code',\n name: 'grok-code → DeepSeek V3.2 Chat',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.28,\n output: 0.42,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 8192,\n },\n {\n id: 'nvidia',\n name: 'nvidia → NVIDIA GPT-OSS 120B',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'gpt-120b',\n name: 'gpt-120b → NVIDIA GPT-OSS 120B',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'minimax',\n name: 'minimax → MiniMax M2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.3,\n output: 1.2,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 204800,\n maxTokens: 16384,\n },\n {\n id: 'auto-router',\n name: 'auto-router → Auto (Smart Router - Balanced)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 128000,\n },\n {\n id: 'router',\n name: 'router → Auto (Smart Router - Balanced)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 128000,\n },\n ],\n },\n 'custom-api-moonshot-ai': {\n baseUrl: 'https://api.moonshot.ai/v1',\n apiKey: '__OPENCLAW_REDACTED__',\n api: 'openai-completions',\n models: [\n {\n id: 'kimi-k2.5',\n name: 'Kimi K2.5 (Moonshot)',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n ],\n },\n },\n },\n agents: {\n defaults: {\n model: {\n primary: 'blockrun/auto',\n fallbacks: [\n 'custom-api-deepseek-com/deepseek-chat',\n ],\n },\n models: {\n 'blockrun/auto': {},\n 'openrouter/anthropic/claude-sonnet-4-6': {\n alias: 'claude',\n },\n 'openai-codex/gpt-5.1': {\n alias: 'codex-chat',\n },\n 'openai-codex/gpt-5.3-codex-spark': {\n alias: 'codex-spark',\n },\n 'openai-codex/gpt-5.3-codex': {\n alias: 'codex-max',\n },\n 'openai-codex/gpt-5.4': {\n alias: 'gpt-5.4',\n },\n 'custom-api-deepseek-com/deepseek-chat': {\n alias: 'deepseek',\n },\n 'claude-sonnet-cli/default': {\n alias: 'claude-sonnet',\n },\n 'claude-opus-cli/default': {\n alias: 'claude-opus',\n },\n 'blockrun/free': {},\n 'blockrun/eco': {},\n 'blockrun/premium': {},\n 'blockrun/anthropic/claude-sonnet-4.6': {},\n 'blockrun/anthropic/claude-opus-4.6': {},\n 'blockrun/anthropic/claude-haiku-4.5': {},\n 'blockrun/openai/gpt-5.2': {},\n 'blockrun/openai/gpt-4o': {},\n 'blockrun/openai/o3': {},\n 'blockrun/google/gemini-3.1-pro': {},\n 'blockrun/google/gemini-3-flash-preview': {},\n 'blockrun/deepseek/deepseek-chat': {},\n 'blockrun/moonshot/kimi-k2.5': {},\n 'blockrun/xai/grok-3': {},\n 'blockrun/minimax/minimax-m2.5': {},\n 'openrouter/openrouter/free': {},\n 'custom-api-moonshot-ai/kimi-k2.5': {\n alias: 'kimi',\n },\n 'clawrouter/auto': {\n alias: 'clawrouter',\n },\n 'openrouter/openrouter/auto': {},\n 'blockrun/openai/gpt-5.3': {},\n },\n workspace: '/home/ubuntu/.openclaw/workspace',\n cliBackends: {\n 'codex-cli': {\n command: '/home/linuxbrew/.linuxbrew/bin/codex',\n args: [\n 'exec',\n '--json',\n '--color',\n 'never',\n '--sandbox',\n 'read-only',\n '--skip-git-repo-check',\n ],\n output: 'jsonl',\n },\n 'gemini-cli': {\n command: '/home/ubuntu/.local/bin/gemini-cli-openclaw',\n output: 'text',\n },\n 'deepseek-code': {\n command: '/home/ubuntu/.local/bin/deepseek-code-openclaw',\n output: 'text',\n },\n 'claude-sonnet-cli': {\n command: '/home/ubuntu/.local/bin/claude-sonnet-openclaw',\n output: 'text',\n },\n 'claude-opus-cli': {\n command: '/home/ubuntu/.local/bin/claude-opus-openclaw',\n output: 'text',\n },\n 'kimi-cli': {\n command: '/home/ubuntu/.local/bin/kimi-openclaw',\n output: 'text',\n },\n },\n compaction: {\n mode: 'safeguard',\n },\n elevatedDefault: 'off',\n maxConcurrent: 1,\n subagents: {\n maxConcurrent: 4,\n },\n },\n list: [\n {\n id: 'pipo',\n name: 'pipo',\n workspace: '/home/ubuntu/.openclaw/workspace',\n model: {\n primary: 'openai-codex/gpt-5.4',\n fallbacks: [\n 'blockrun/auto',\n 'openrouter/openrouter/free',\n ],\n },\n subagents: {\n allowAgents: [\n 'codex',\n 'gemini',\n 'claude',\n 'deepseek-code',\n 'kimi',\n 'clawrouter',\n 'openrouter',\n ],\n },\n },\n {\n id: 'codex',\n name: 'codex',\n workspace: '/home/ubuntu/.openclaw/workspace-codex',\n agentDir: '/home/ubuntu/.openclaw/agents/codex/agent',\n model: 'openai-codex/gpt-5.3-codex',\n },\n {\n id: 'gemini',\n name: 'gemini',\n workspace: '/home/ubuntu/.openclaw/workspace-gemini',\n agentDir: '/home/ubuntu/.openclaw/agents/gemini/agent',\n model: 'gemini-cli/default',\n },\n {\n id: 'deepseek-code',\n name: 'deepseek-code',\n workspace: '/home/ubuntu/.openclaw/workspace-deepseek-code',\n agentDir: '/home/ubuntu/.openclaw/agents/deepseek-code/agent',\n model: 'deepseek-code/default',\n },\n {\n id: 'claude',\n name: 'claude',\n workspace: '/home/ubuntu/.openclaw/workspace-claude',\n agentDir: '/home/ubuntu/.openclaw/agents/claude/agent',\n model: 'claude-sonnet-cli/default',\n },\n {\n id: 'claude-opus',\n name: 'claude-opus',\n workspace: '/home/ubuntu/.openclaw/workspace-claude-opus',\n agentDir: '/home/ubuntu/.openclaw/agents/claude-opus/agent',\n model: 'claude-opus-cli/default',\n },\n {\n id: 'kimi',\n name: 'kimi',\n workspace: '/home/ubuntu/.openclaw/workspace-kimi',\n agentDir: '/home/ubuntu/.openclaw/agents/kimi/agent',\n model: 'kimi-cli/default',\n },\n {\n id: 'clawrouter',\n name: 'ClawRouter',\n workspace: '/home/ubuntu/.openclaw/workspace',\n model: {\n primary: 'blockrun/auto',\n fallbacks: [\n 'openrouter/openrouter/free',\n ],\n },\n },\n {\n id: 'openrouter',\n name: 'OpenRouter',\n workspace: '/home/ubuntu/.openclaw/workspace-openrouter',\n agentDir: '/home/ubuntu/.openclaw/agents/openrouter/agent',\n model: {\n primary: 'openrouter/openrouter/auto',\n fallbacks: [\n 'openrouter/openrouter/free',\n ],\n },\n },\n ],\n },\n tools: {\n sessions: {\n visibility: 'all',\n },\n agentToAgent: {\n enabled: true,\n allow: [\n 'pipo',\n 'codex',\n 'gemini',\n 'deepseek-code',\n 'claude',\n 'claude-opus',\n 'kimi',\n 'clawrouter',\n ],\n },\n elevated: {\n enabled: true,\n allowFrom: {\n telegram: [\n 842987156,\n ],\n webchat: [],\n },\n },\n exec: {\n ask: 'off',\n },\n },\n messages: {\n ackReactionScope: 'group-mentions',\n },\n commands: {\n native: 'auto',\n nativeSkills: 'auto',\n restart: true,\n ownerDisplay: 'raw',\n },\n session: {\n dmScope: 'per-channel-peer',\n },\n hooks: {\n internal: {\n enabled: true,\n entries: {\n 'session-memory': {\n enabled: true,\n },\n 'bootstrap-extra-files': {\n enabled: true,\n },\n 'boot-md': {\n enabled: true,\n },\n },\n },\n },\n channels: {\n telegram: {\n enabled: true,\n dmPolicy: 'allowlist',\n botToken: '__OPENCLAW_REDACTED__',\n replyToMode: 'all',\n allowFrom: [\n 842987156,\n ],\n groupPolicy: 'allowlist',\n streaming: 'off',\n mediaMaxMb: 20,\n timeoutSeconds: 60,\n retry: {\n attempts: 6,\n minDelayMs: 1500,\n maxDelayMs: 90000,\n jitter: 0.1,\n },\n network: {\n autoSelectFamily: false,\n dnsResultOrder: 'ipv4first',\n },\n },\n },\n gateway: {\n port: 18789,\n mode: 'local',\n bind: 'loopback',\n controlUi: {\n allowedOrigins: [\n 'https://miopenclaw-vnic.tail9799d2.ts.net',\n 'https://miopenclaw-vnic.tail9799d2.ts.net/',\n 'http://127.0.0.1:18789',\n ],\n },\n auth: {\n mode: 'token',\n token: '__OPENCLAW_REDACTED__',\n },\n trustedProxies: [\n '127.0.0.1/32',\n '::1/128',\n ],\n tailscale: {\n mode: 'serve',\n resetOnExit: true,\n },\n },\n skills: {\n entries: {\n 'gh-issues': {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n 'nano-banana-pro': {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n notion: {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n 'openai-image-gen': {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n 'openai-whisper-api': {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n sag: {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n },\n },\n plugins: {\n allow: [\n 'telegram',\n 'acpx',\n 'clawrouter',\n ],\n entries: {\n 'qwen-portal-auth': {\n enabled: true,\n },\n acpx: {\n enabled: true,\n config: {\n permissionMode: 'approve-all',\n nonInteractivePermissions: 'fail',\n expectedVersion: 'any',\n command: '/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx',\n },\n },\n clawrouter: {\n enabled: true,\n },\n },\n installs: {\n clawrouter: {\n source: 'npm',\n spec: '@blockrun/clawrouter@latest',\n installPath: '/home/ubuntu/.openclaw/extensions/clawrouter',\n version: '0.12.43',\n resolvedName: '@blockrun/clawrouter',\n resolvedVersion: '0.12.43',\n resolvedSpec: '@blockrun/clawrouter@0.12.43',\n integrity: 'sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==',\n shasum: '3331382e1a46524bee73b8ffa83677950f5bbae5',\n resolvedAt: '2026-03-15T22:45:46.066Z',\n installedAt: '2026-03-15T22:46:43.662Z',\n },\n },\n },\n}","parsed":{"meta":{"lastTouchedVersion":"2026.3.13","lastTouchedAt":"2026-03-15T23:17:49.868Z"},"env":{"OPENAI_API_KEY":"__OPENCLAW_REDACTED__"},"wizard":{"lastRunAt":"2026-03-15T22:40:03.597Z","lastRunVersion":"2026.3.13","lastRunCommand":"doctor","lastRunMode":"local"},"diagnostics":{"flags":["telegram.http"]},"browser":{"executablePath":"/usr/bin/chromium-browser","headless":true,"noSandbox":true,"defaultProfile":"openclaw","profiles":{"openclaw":{"cdpPort":18800,"cdpUrl":"http://127.0.0.1:18800","color":"#FF4500"}}},"auth":{"profiles":{"openai-codex:default":{"provider":"openai-codex","mode":"oauth"}}},"acp":{"enabled":true,"dispatch":{"enabled":true},"backend":"acpx","defaultAgent":"codex","allowedAgents":["codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"],"maxConcurrentSessions":8},"models":{"mode":"merge","providers":{"custom-api-deepseek-com":{"baseUrl":"https://api.deepseek.com","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"deepseek-chat","name":"deepseek-chat (Custom Provider)","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":16000,"maxTokens":4096}]},"blockrun":{"baseUrl":"http://127.0.0.1:8402/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"auto","name":"Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"free","name":"Free (NVIDIA GPT-OSS-120B only)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":4096},{"id":"eco","name":"Eco (Smart Router - Cost Optimized)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"premium","name":"Premium (Smart Router - Best Quality)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":2000000,"maxTokens":200000},{"id":"openai/gpt-5.2","name":"GPT-5.2","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.25,"output":2,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":65536},{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.05,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":32768},{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":21,"output":168,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4","name":"GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.3","name":"GPT-5.3","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16000},{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-4.1","name":"GPT-4.1","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":1.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o","name":"GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o-mini","name":"GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/o1","name":"o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o1-mini","name":"o1-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o3","name":"o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o3-mini","name":"o3-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o4-mini","name":"o4-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"google/gemini-3.1-pro","name":"Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-pro-preview","name":"Gemini 3 Pro Preview","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"deepseek/deepseek-chat","name":"DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"deepseek/deepseek-reasoner","name":"DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"moonshot/kimi-k2.5","name":"Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"xai/grok-3","name":"Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-3-mini","name":"Grok 3 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-reasoning","name":"Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-non-reasoning","name":"Grok 4 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-reasoning","name":"Grok 4.1 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-non-reasoning","name":"Grok 4.1 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-0709","name":"Grok 4 (0709)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":1.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-2-vision","name":"Grok 2 Vision","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"nvidia/gpt-oss-120b","name":"NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"nvidia/kimi-k2.5","name":"NVIDIA Kimi K2.5","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.55,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":16384},{"id":"claude","name":"claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet","name":"sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4","name":"sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4.6","name":"sonnet-4.6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4-6","name":"sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"opus","name":"opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4","name":"opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4.6","name":"opus-4.6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4-6","name":"opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"haiku","name":"haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/sonnet","name":"anthropic/sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/opus","name":"anthropic/opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/haiku","name":"anthropic/haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude","name":"anthropic/claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4-6","name":"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4-6","name":"anthropic/claude-opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-haiku-4","name":"anthropic/claude-haiku-4 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-haiku-4-5","name":"anthropic/claude-haiku-4-5 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"gpt","name":"gpt → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt4","name":"gpt4 → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt5","name":"gpt5 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4","name":"gpt-5.4 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4-pro","name":"gpt-5.4-pro → GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"codex","name":"codex → GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"mini","name":"mini → GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"o1","name":"o1 → o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"o3","name":"o3 → o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"deepseek","name":"deepseek → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"reasoner","name":"reasoner → DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"kimi","name":"kimi → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"moonshot","name":"moonshot → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"kimi-k2.5","name":"kimi-k2.5 → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"gemini","name":"gemini → Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"flash","name":"flash → Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"gemini-3.1-pro-preview","name":"gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"grok","name":"grok → Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-fast","name":"grok-fast → Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-code","name":"grok-code → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"nvidia","name":"nvidia → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt-120b","name":"gpt-120b → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"minimax","name":"minimax → MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"auto-router","name":"auto-router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"router","name":"router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000}]},"custom-api-moonshot-ai":{"baseUrl":"https://api.moonshot.ai/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"kimi-k2.5","name":"Kimi K2.5 (Moonshot)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192}]}}},"agents":{"defaults":{"model":{"primary":"blockrun/auto","fallbacks":["custom-api-deepseek-com/deepseek-chat"]},"models":{"blockrun/auto":{},"openrouter/anthropic/claude-sonnet-4-6":{"alias":"claude"},"openai-codex/gpt-5.1":{"alias":"codex-chat"},"openai-codex/gpt-5.3-codex-spark":{"alias":"codex-spark"},"openai-codex/gpt-5.3-codex":{"alias":"codex-max"},"openai-codex/gpt-5.4":{"alias":"gpt-5.4"},"custom-api-deepseek-com/deepseek-chat":{"alias":"deepseek"},"claude-sonnet-cli/default":{"alias":"claude-sonnet"},"claude-opus-cli/default":{"alias":"claude-opus"},"blockrun/free":{},"blockrun/eco":{},"blockrun/premium":{},"blockrun/anthropic/claude-sonnet-4.6":{},"blockrun/anthropic/claude-opus-4.6":{},"blockrun/anthropic/claude-haiku-4.5":{},"blockrun/openai/gpt-5.2":{},"blockrun/openai/gpt-4o":{},"blockrun/openai/o3":{},"blockrun/google/gemini-3.1-pro":{},"blockrun/google/gemini-3-flash-preview":{},"blockrun/deepseek/deepseek-chat":{},"blockrun/moonshot/kimi-k2.5":{},"blockrun/xai/grok-3":{},"blockrun/minimax/minimax-m2.5":{},"openrouter/openrouter/free":{},"custom-api-moonshot-ai/kimi-k2.5":{"alias":"kimi"},"clawrouter/auto":{"alias":"clawrouter"},"openrouter/openrouter/auto":{},"blockrun/openai/gpt-5.3":{}},"workspace":"/home/ubuntu/.openclaw/workspace","cliBackends":{"codex-cli":{"command":"/home/linuxbrew/.linuxbrew/bin/codex","args":["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"],"output":"jsonl"},"gemini-cli":{"command":"/home/ubuntu/.local/bin/gemini-cli-openclaw","output":"text"},"deepseek-code":{"command":"/home/ubuntu/.local/bin/deepseek-code-openclaw","output":"text"},"claude-sonnet-cli":{"command":"/home/ubuntu/.local/bin/claude-sonnet-openclaw","output":"text"},"claude-opus-cli":{"command":"/home/ubuntu/.local/bin/claude-opus-openclaw","output":"text"},"kimi-cli":{"command":"/home/ubuntu/.local/bin/kimi-openclaw","output":"text"}},"compaction":{"mode":"safeguard"},"elevatedDefault":"off","maxConcurrent":1,"subagents":{"maxConcurrent":4}},"list":[{"id":"pipo","name":"pipo","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"openai-codex/gpt-5.4","fallbacks":["blockrun/auto","openrouter/openrouter/free"]},"subagents":{"allowAgents":["codex","gemini","claude","deepseek-code","kimi","clawrouter","openrouter"]}},{"id":"codex","name":"codex","workspace":"/home/ubuntu/.openclaw/workspace-codex","agentDir":"/home/ubuntu/.openclaw/agents/codex/agent","model":"openai-codex/gpt-5.3-codex"},{"id":"gemini","name":"gemini","workspace":"/home/ubuntu/.openclaw/workspace-gemini","agentDir":"/home/ubuntu/.openclaw/agents/gemini/agent","model":"gemini-cli/default"},{"id":"deepseek-code","name":"deepseek-code","workspace":"/home/ubuntu/.openclaw/workspace-deepseek-code","agentDir":"/home/ubuntu/.openclaw/agents/deepseek-code/agent","model":"deepseek-code/default"},{"id":"claude","name":"claude","workspace":"/home/ubuntu/.openclaw/workspace-claude","agentDir":"/home/ubuntu/.openclaw/agents/claude/agent","model":"claude-sonnet-cli/default"},{"id":"claude-opus","name":"claude-opus","workspace":"/home/ubuntu/.openclaw/workspace-claude-opus","agentDir":"/home/ubuntu/.openclaw/agents/claude-opus/agent","model":"claude-opus-cli/default"},{"id":"kimi","name":"kimi","workspace":"/home/ubuntu/.openclaw/workspace-kimi","agentDir":"/home/ubuntu/.openclaw/agents/kimi/agent","model":"kimi-cli/default"},{"id":"clawrouter","name":"ClawRouter","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"blockrun/auto","fallbacks":["openrouter/openrouter/free"]}},{"id":"openrouter","name":"OpenRouter","workspace":"/home/ubuntu/.openclaw/workspace-openrouter","agentDir":"/home/ubuntu/.openclaw/agents/openrouter/agent","model":{"primary":"openrouter/openrouter/auto","fallbacks":["openrouter/openrouter/free"]}}]},"tools":{"sessions":{"visibility":"all"},"agentToAgent":{"enabled":true,"allow":["pipo","codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"]},"elevated":{"enabled":true,"allowFrom":{"telegram":[842987156],"webchat":[]}},"exec":{"ask":"off"}},"messages":{"ackReactionScope":"group-mentions"},"commands":{"native":"auto","nativeSkills":"auto","restart":true,"ownerDisplay":"raw"},"session":{"dmScope":"per-channel-peer"},"hooks":{"internal":{"enabled":true,"entries":{"session-memory":{"enabled":true},"bootstrap-extra-files":{"enabled":true},"boot-md":{"enabled":true}}}},"channels":{"telegram":{"enabled":true,"dmPolicy":"allowlist","botToken":"__OPENCLAW_REDACTED__","replyToMode":"all","allowFrom":[842987156],"groupPolicy":"allowlist","streaming":"off","mediaMaxMb":20,"timeoutSeconds":60,"retry":{"attempts":6,"minDelayMs":1500,"maxDelayMs":90000,"jitter":0.1},"network":{"autoSelectFamily":false,"dnsResultOrder":"ipv4first"}}},"gateway":{"port":18789,"mode":"local","bind":"loopback","controlUi":{"allowedOrigins":["https://miopenclaw-vnic.tail9799d2.ts.net","https://miopenclaw-vnic.tail9799d2.ts.net/","http://127.0.0.1:18789"]},"auth":{"mode":"token","token":"__OPENCLAW_REDACTED__"},"trustedProxies":["127.0.0.1/32","::1/128"],"tailscale":{"mode":"serve","resetOnExit":true}},"skills":{"entries":{"gh-issues":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"nano-banana-pro":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"notion":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-image-gen":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-whisper-api":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"sag":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"}}},"plugins":{"allow":["telegram","acpx","clawrouter"],"entries":{"qwen-portal-auth":{"enabled":true},"acpx":{"enabled":true,"config":{"permissionMode":"approve-all","nonInteractivePermissions":"fail","expectedVersion":"any","command":"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx"}},"clawrouter":{"enabled":true}},"installs":{"clawrouter":{"source":"npm","spec":"@blockrun/clawrouter@latest","installPath":"/home/ubuntu/.openclaw/extensions/clawrouter","version":"0.12.43","resolvedName":"@blockrun/clawrouter","resolvedVersion":"0.12.43","resolvedSpec":"@blockrun/clawrouter@0.12.43","integrity":"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==","shasum":"3331382e1a46524bee73b8ffa83677950f5bbae5","resolvedAt":"2026-03-15T22:45:46.066Z","installedAt":"2026-03-15T22:46:43.662Z"}}}},"resolved":{"meta":{"lastTouchedVersion":"2026.3.13","lastTouchedAt":"2026-03-15T23:17:49.868Z"},"env":{"OPENAI_API_KEY":"__OPENCLAW_REDACTED__"},"wizard":{"lastRunAt":"2026-03-15T22:40:03.597Z","lastRunVersion":"2026.3.13","lastRunCommand":"doctor","lastRunMode":"local"},"diagnostics":{"flags":["telegram.http"]},"browser":{"executablePath":"/usr/bin/chromium-browser","headless":true,"noSandbox":true,"defaultProfile":"openclaw","profiles":{"openclaw":{"cdpPort":18800,"cdpUrl":"http://127.0.0.1:18800","color":"#FF4500"}}},"auth":{"profiles":{"openai-codex:default":{"provider":"openai-codex","mode":"oauth"}}},"acp":{"enabled":true,"dispatch":{"enabled":true},"backend":"acpx","defaultAgent":"codex","allowedAgents":["codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"],"maxConcurrentSessions":8},"models":{"mode":"merge","providers":{"custom-api-deepseek-com":{"baseUrl":"https://api.deepseek.com","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"deepseek-chat","name":"deepseek-chat (Custom Provider)","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":16000,"maxTokens":4096}]},"blockrun":{"baseUrl":"http://127.0.0.1:8402/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"auto","name":"Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"free","name":"Free (NVIDIA GPT-OSS-120B only)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":4096},{"id":"eco","name":"Eco (Smart Router - Cost Optimized)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"premium","name":"Premium (Smart Router - Best Quality)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":2000000,"maxTokens":200000},{"id":"openai/gpt-5.2","name":"GPT-5.2","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.25,"output":2,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":65536},{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.05,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":32768},{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":21,"output":168,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4","name":"GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.3","name":"GPT-5.3","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16000},{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-4.1","name":"GPT-4.1","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":1.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o","name":"GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o-mini","name":"GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/o1","name":"o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o1-mini","name":"o1-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o3","name":"o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o3-mini","name":"o3-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o4-mini","name":"o4-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"google/gemini-3.1-pro","name":"Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-pro-preview","name":"Gemini 3 Pro Preview","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"deepseek/deepseek-chat","name":"DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"deepseek/deepseek-reasoner","name":"DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"moonshot/kimi-k2.5","name":"Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"xai/grok-3","name":"Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-3-mini","name":"Grok 3 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-reasoning","name":"Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-non-reasoning","name":"Grok 4 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-reasoning","name":"Grok 4.1 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-non-reasoning","name":"Grok 4.1 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-0709","name":"Grok 4 (0709)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":1.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-2-vision","name":"Grok 2 Vision","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"nvidia/gpt-oss-120b","name":"NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"nvidia/kimi-k2.5","name":"NVIDIA Kimi K2.5","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.55,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":16384},{"id":"claude","name":"claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet","name":"sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4","name":"sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4.6","name":"sonnet-4.6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4-6","name":"sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"opus","name":"opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4","name":"opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4.6","name":"opus-4.6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4-6","name":"opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"haiku","name":"haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/sonnet","name":"anthropic/sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/opus","name":"anthropic/opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/haiku","name":"anthropic/haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude","name":"anthropic/claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4-6","name":"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4-6","name":"anthropic/claude-opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-haiku-4","name":"anthropic/claude-haiku-4 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-haiku-4-5","name":"anthropic/claude-haiku-4-5 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"gpt","name":"gpt → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt4","name":"gpt4 → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt5","name":"gpt5 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4","name":"gpt-5.4 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4-pro","name":"gpt-5.4-pro → GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"codex","name":"codex → GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"mini","name":"mini → GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"o1","name":"o1 → o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"o3","name":"o3 → o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"deepseek","name":"deepseek → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"reasoner","name":"reasoner → DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"kimi","name":"kimi → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"moonshot","name":"moonshot → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"kimi-k2.5","name":"kimi-k2.5 → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"gemini","name":"gemini → Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"flash","name":"flash → Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"gemini-3.1-pro-preview","name":"gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"grok","name":"grok → Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-fast","name":"grok-fast → Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-code","name":"grok-code → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"nvidia","name":"nvidia → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt-120b","name":"gpt-120b → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"minimax","name":"minimax → MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"auto-router","name":"auto-router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"router","name":"router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000}]},"custom-api-moonshot-ai":{"baseUrl":"https://api.moonshot.ai/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"kimi-k2.5","name":"Kimi K2.5 (Moonshot)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192}]}}},"agents":{"defaults":{"model":{"primary":"blockrun/auto","fallbacks":["custom-api-deepseek-com/deepseek-chat"]},"models":{"blockrun/auto":{},"openrouter/anthropic/claude-sonnet-4-6":{"alias":"claude"},"openai-codex/gpt-5.1":{"alias":"codex-chat"},"openai-codex/gpt-5.3-codex-spark":{"alias":"codex-spark"},"openai-codex/gpt-5.3-codex":{"alias":"codex-max"},"openai-codex/gpt-5.4":{"alias":"gpt-5.4"},"custom-api-deepseek-com/deepseek-chat":{"alias":"deepseek"},"claude-sonnet-cli/default":{"alias":"claude-sonnet"},"claude-opus-cli/default":{"alias":"claude-opus"},"blockrun/free":{},"blockrun/eco":{},"blockrun/premium":{},"blockrun/anthropic/claude-sonnet-4.6":{},"blockrun/anthropic/claude-opus-4.6":{},"blockrun/anthropic/claude-haiku-4.5":{},"blockrun/openai/gpt-5.2":{},"blockrun/openai/gpt-4o":{},"blockrun/openai/o3":{},"blockrun/google/gemini-3.1-pro":{},"blockrun/google/gemini-3-flash-preview":{},"blockrun/deepseek/deepseek-chat":{},"blockrun/moonshot/kimi-k2.5":{},"blockrun/xai/grok-3":{},"blockrun/minimax/minimax-m2.5":{},"openrouter/openrouter/free":{},"custom-api-moonshot-ai/kimi-k2.5":{"alias":"kimi"},"clawrouter/auto":{"alias":"clawrouter"},"openrouter/openrouter/auto":{},"blockrun/openai/gpt-5.3":{}},"workspace":"/home/ubuntu/.openclaw/workspace","cliBackends":{"codex-cli":{"command":"/home/linuxbrew/.linuxbrew/bin/codex","args":["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"],"output":"jsonl"},"gemini-cli":{"command":"/home/ubuntu/.local/bin/gemini-cli-openclaw","output":"text"},"deepseek-code":{"command":"/home/ubuntu/.local/bin/deepseek-code-openclaw","output":"text"},"claude-sonnet-cli":{"command":"/home/ubuntu/.local/bin/claude-sonnet-openclaw","output":"text"},"claude-opus-cli":{"command":"/home/ubuntu/.local/bin/claude-opus-openclaw","output":"text"},"kimi-cli":{"command":"/home/ubuntu/.local/bin/kimi-openclaw","output":"text"}},"compaction":{"mode":"safeguard"},"elevatedDefault":"off","maxConcurrent":1,"subagents":{"maxConcurrent":4}},"list":[{"id":"pipo","name":"pipo","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"openai-codex/gpt-5.4","fallbacks":["blockrun/auto","openrouter/openrouter/free"]},"subagents":{"allowAgents":["codex","gemini","claude","deepseek-code","kimi","clawrouter","openrouter"]}},{"id":"codex","name":"codex","workspace":"/home/ubuntu/.openclaw/workspace-codex","agentDir":"/home/ubuntu/.openclaw/agents/codex/agent","model":"openai-codex/gpt-5.3-codex"},{"id":"gemini","name":"gemini","workspace":"/home/ubuntu/.openclaw/workspace-gemini","agentDir":"/home/ubuntu/.openclaw/agents/gemini/agent","model":"gemini-cli/default"},{"id":"deepseek-code","name":"deepseek-code","workspace":"/home/ubuntu/.openclaw/workspace-deepseek-code","agentDir":"/home/ubuntu/.openclaw/agents/deepseek-code/agent","model":"deepseek-code/default"},{"id":"claude","name":"claude","workspace":"/home/ubuntu/.openclaw/workspace-claude","agentDir":"/home/ubuntu/.openclaw/agents/claude/agent","model":"claude-sonnet-cli/default"},{"id":"claude-opus","name":"claude-opus","workspace":"/home/ubuntu/.openclaw/workspace-claude-opus","agentDir":"/home/ubuntu/.openclaw/agents/claude-opus/agent","model":"claude-opus-cli/default"},{"id":"kimi","name":"kimi","workspace":"/home/ubuntu/.openclaw/workspace-kimi","agentDir":"/home/ubuntu/.openclaw/agents/kimi/agent","model":"kimi-cli/default"},{"id":"clawrouter","name":"ClawRouter","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"blockrun/auto","fallbacks":["openrouter/openrouter/free"]}},{"id":"openrouter","name":"OpenRouter","workspace":"/home/ubuntu/.openclaw/workspace-openrouter","agentDir":"/home/ubuntu/.openclaw/agents/openrouter/agent","model":{"primary":"openrouter/openrouter/auto","fallbacks":["openrouter/openrouter/free"]}}]},"tools":{"sessions":{"visibility":"all"},"agentToAgent":{"enabled":true,"allow":["pipo","codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"]},"elevated":{"enabled":true,"allowFrom":{"telegram":[842987156],"webchat":[]}},"exec":{"ask":"off"}},"messages":{"ackReactionScope":"group-mentions"},"commands":{"native":"auto","nativeSkills":"auto","restart":true,"ownerDisplay":"raw"},"session":{"dmScope":"per-channel-peer"},"hooks":{"internal":{"enabled":true,"entries":{"session-memory":{"enabled":true},"bootstrap-extra-files":{"enabled":true},"boot-md":{"enabled":true}}}},"channels":{"telegram":{"enabled":true,"dmPolicy":"allowlist","botToken":"__OPENCLAW_REDACTED__","replyToMode":"all","allowFrom":[842987156],"groupPolicy":"allowlist","streaming":"off","mediaMaxMb":20,"timeoutSeconds":60,"retry":{"attempts":6,"minDelayMs":1500,"maxDelayMs":90000,"jitter":0.1},"network":{"autoSelectFamily":false,"dnsResultOrder":"ipv4first"}}},"gateway":{"port":18789,"mode":"local","bind":"loopback","controlUi":{"allowedOrigins":["https://miopenclaw-vnic.tail9799d2.ts.net","https://miopenclaw-vnic.tail9799d2.ts.net/","http://127.0.0.1:18789"]},"auth":{"mode":"token","token":"__OPENCLAW_REDACTED__"},"trustedProxies":["127.0.0.1/32","::1/128"],"tailscale":{"mode":"serve","resetOnExit":true}},"skills":{"entries":{"gh-issues":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"nano-banana-pro":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"notion":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-image-gen":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-whisper-api":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"sag":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"}}},"plugins":{"allow":["telegram","acpx","clawrouter"],"entries":{"qwen-portal-auth":{"enabled":true},"acpx":{"enabled":true,"config":{"permissionMode":"approve-all","nonInteractivePermissions":"fail","expectedVersion":"any","command":"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx"}},"clawrouter":{"enabled":true}},"installs":{"clawrouter":{"source":"npm","spec":"@blockrun/clawrouter@latest","installPath":"/home/ubuntu/.openclaw/extensions/clawrouter","version":"0.12.43","resolvedName":"@blockrun/clawrouter","resolvedVersion":"0.12.43","resolvedSpec":"@blockrun/clawrouter@0.12.43","integrity":"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==","shasum":"3331382e1a46524bee73b8ffa83677950f5bbae5","resolvedAt":"2026-03-15T22:45:46.066Z","installedAt":"2026-03-15T22:46:43.662Z"}}}},"valid":true,"config":{"meta":{"lastTouchedVersion":"2026.3.13","lastTouchedAt":"2026-03-15T23:17:49.868Z"},"env":{"OPENAI_API_KEY":"__OPENCLAW_REDACTED__"},"wizard":{"lastRunAt":"2026-03-15T22:40:03.597Z","lastRunVersion":"2026.3.13","lastRunCommand":"doctor","lastRunMode":"local"},"diagnostics":{"flags":["telegram.http"]},"browser":{"executablePath":"/usr/bin/chromium-browser","headless":true,"noSandbox":true,"defaultProfile":"openclaw","profiles":{"openclaw":{"cdpPort":18800,"cdpUrl":"http://127.0.0.1:18800","color":"#FF4500"}}},"auth":{"profiles":{"openai-codex:default":{"provider":"openai-codex","mode":"oauth"}}},"acp":{"enabled":true,"dispatch":{"enabled":true},"backend":"acpx","defaultAgent":"codex","allowedAgents":["codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"],"maxConcurrentSessions":8},"models":{"mode":"merge","providers":{"custom-api-deepseek-com":{"baseUrl":"https://api.deepseek.com","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"deepseek-chat","name":"deepseek-chat (Custom Provider)","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":16000,"maxTokens":4096,"api":"openai-completions"}]},"blockrun":{"baseUrl":"http://127.0.0.1:8402/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"auto","name":"Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"free","name":"Free (NVIDIA GPT-OSS-120B only)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":4096},{"id":"eco","name":"Eco (Smart Router - Cost Optimized)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"premium","name":"Premium (Smart Router - Best Quality)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":2000000,"maxTokens":200000},{"id":"openai/gpt-5.2","name":"GPT-5.2","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.25,"output":2,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":65536},{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.05,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":32768},{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":21,"output":168,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4","name":"GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.3","name":"GPT-5.3","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16000},{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-4.1","name":"GPT-4.1","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":1.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o","name":"GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o-mini","name":"GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/o1","name":"o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o1-mini","name":"o1-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o3","name":"o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o3-mini","name":"o3-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o4-mini","name":"o4-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"google/gemini-3.1-pro","name":"Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-pro-preview","name":"Gemini 3 Pro Preview","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"deepseek/deepseek-chat","name":"DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"deepseek/deepseek-reasoner","name":"DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"moonshot/kimi-k2.5","name":"Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"xai/grok-3","name":"Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-3-mini","name":"Grok 3 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-reasoning","name":"Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-non-reasoning","name":"Grok 4 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-reasoning","name":"Grok 4.1 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-non-reasoning","name":"Grok 4.1 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-0709","name":"Grok 4 (0709)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":1.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-2-vision","name":"Grok 2 Vision","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"nvidia/gpt-oss-120b","name":"NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"nvidia/kimi-k2.5","name":"NVIDIA Kimi K2.5","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.55,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":16384},{"id":"claude","name":"claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet","name":"sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4","name":"sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4.6","name":"sonnet-4.6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4-6","name":"sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"opus","name":"opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4","name":"opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4.6","name":"opus-4.6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4-6","name":"opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"haiku","name":"haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/sonnet","name":"anthropic/sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/opus","name":"anthropic/opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/haiku","name":"anthropic/haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude","name":"anthropic/claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4-6","name":"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4-6","name":"anthropic/claude-opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-haiku-4","name":"anthropic/claude-haiku-4 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-haiku-4-5","name":"anthropic/claude-haiku-4-5 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"gpt","name":"gpt → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt4","name":"gpt4 → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt5","name":"gpt5 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4","name":"gpt-5.4 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4-pro","name":"gpt-5.4-pro → GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"codex","name":"codex → GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"mini","name":"mini → GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"o1","name":"o1 → o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"o3","name":"o3 → o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"deepseek","name":"deepseek → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"reasoner","name":"reasoner → DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"kimi","name":"kimi → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"moonshot","name":"moonshot → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"kimi-k2.5","name":"kimi-k2.5 → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"gemini","name":"gemini → Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"flash","name":"flash → Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"gemini-3.1-pro-preview","name":"gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"grok","name":"grok → Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-fast","name":"grok-fast → Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-code","name":"grok-code → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"nvidia","name":"nvidia → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt-120b","name":"gpt-120b → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"minimax","name":"minimax → MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"auto-router","name":"auto-router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"router","name":"router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000}]},"custom-api-moonshot-ai":{"baseUrl":"https://api.moonshot.ai/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"kimi-k2.5","name":"Kimi K2.5 (Moonshot)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192}]}}},"agents":{"defaults":{"model":{"primary":"blockrun/auto","fallbacks":["custom-api-deepseek-com/deepseek-chat"]},"models":{"blockrun/auto":{},"openrouter/anthropic/claude-sonnet-4-6":{"alias":"claude"},"openai-codex/gpt-5.1":{"alias":"codex-chat"},"openai-codex/gpt-5.3-codex-spark":{"alias":"codex-spark"},"openai-codex/gpt-5.3-codex":{"alias":"codex-max"},"openai-codex/gpt-5.4":{"alias":"gpt-5.4"},"custom-api-deepseek-com/deepseek-chat":{"alias":"deepseek"},"claude-sonnet-cli/default":{"alias":"claude-sonnet"},"claude-opus-cli/default":{"alias":"claude-opus"},"blockrun/free":{},"blockrun/eco":{},"blockrun/premium":{},"blockrun/anthropic/claude-sonnet-4.6":{},"blockrun/anthropic/claude-opus-4.6":{},"blockrun/anthropic/claude-haiku-4.5":{},"blockrun/openai/gpt-5.2":{},"blockrun/openai/gpt-4o":{},"blockrun/openai/o3":{},"blockrun/google/gemini-3.1-pro":{},"blockrun/google/gemini-3-flash-preview":{},"blockrun/deepseek/deepseek-chat":{},"blockrun/moonshot/kimi-k2.5":{},"blockrun/xai/grok-3":{},"blockrun/minimax/minimax-m2.5":{},"openrouter/openrouter/free":{},"custom-api-moonshot-ai/kimi-k2.5":{"alias":"kimi"},"clawrouter/auto":{"alias":"clawrouter"},"openrouter/openrouter/auto":{},"blockrun/openai/gpt-5.3":{}},"workspace":"/home/ubuntu/.openclaw/workspace","cliBackends":{"codex-cli":{"command":"/home/linuxbrew/.linuxbrew/bin/codex","args":["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"],"output":"jsonl"},"gemini-cli":{"command":"/home/ubuntu/.local/bin/gemini-cli-openclaw","output":"text"},"deepseek-code":{"command":"/home/ubuntu/.local/bin/deepseek-code-openclaw","output":"text"},"claude-sonnet-cli":{"command":"/home/ubuntu/.local/bin/claude-sonnet-openclaw","output":"text"},"claude-opus-cli":{"command":"/home/ubuntu/.local/bin/claude-opus-openclaw","output":"text"},"kimi-cli":{"command":"/home/ubuntu/.local/bin/kimi-openclaw","output":"text"}},"compaction":{"mode":"safeguard"},"elevatedDefault":"off","maxConcurrent":1,"subagents":{"maxConcurrent":4}},"list":[{"id":"pipo","name":"pipo","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"openai-codex/gpt-5.4","fallbacks":["blockrun/auto","openrouter/openrouter/free"]},"subagents":{"allowAgents":["codex","gemini","claude","deepseek-code","kimi","clawrouter","openrouter"]}},{"id":"codex","name":"codex","workspace":"/home/ubuntu/.openclaw/workspace-codex","agentDir":"/home/ubuntu/.openclaw/agents/codex/agent","model":"openai-codex/gpt-5.3-codex"},{"id":"gemini","name":"gemini","workspace":"/home/ubuntu/.openclaw/workspace-gemini","agentDir":"/home/ubuntu/.openclaw/agents/gemini/agent","model":"gemini-cli/default"},{"id":"deepseek-code","name":"deepseek-code","workspace":"/home/ubuntu/.openclaw/workspace-deepseek-code","agentDir":"/home/ubuntu/.openclaw/agents/deepseek-code/agent","model":"deepseek-code/default"},{"id":"claude","name":"claude","workspace":"/home/ubuntu/.openclaw/workspace-claude","agentDir":"/home/ubuntu/.openclaw/agents/claude/agent","model":"claude-sonnet-cli/default"},{"id":"claude-opus","name":"claude-opus","workspace":"/home/ubuntu/.openclaw/workspace-claude-opus","agentDir":"/home/ubuntu/.openclaw/agents/claude-opus/agent","model":"claude-opus-cli/default"},{"id":"kimi","name":"kimi","workspace":"/home/ubuntu/.openclaw/workspace-kimi","agentDir":"/home/ubuntu/.openclaw/agents/kimi/agent","model":"kimi-cli/default"},{"id":"clawrouter","name":"ClawRouter","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"blockrun/auto","fallbacks":["openrouter/openrouter/free"]}},{"id":"openrouter","name":"OpenRouter","workspace":"/home/ubuntu/.openclaw/workspace-openrouter","agentDir":"/home/ubuntu/.openclaw/agents/openrouter/agent","model":{"primary":"openrouter/openrouter/auto","fallbacks":["openrouter/openrouter/free"]}}]},"tools":{"sessions":{"visibility":"all"},"agentToAgent":{"enabled":true,"allow":["pipo","codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"]},"elevated":{"enabled":true,"allowFrom":{"telegram":[842987156],"webchat":[]}},"exec":{"ask":"off"}},"messages":{"ackReactionScope":"group-mentions"},"commands":{"native":"auto","nativeSkills":"auto","restart":true,"ownerDisplay":"raw"},"session":{"dmScope":"per-channel-peer"},"hooks":{"internal":{"enabled":true,"entries":{"session-memory":{"enabled":true},"bootstrap-extra-files":{"enabled":true},"boot-md":{"enabled":true}}}},"channels":{"telegram":{"enabled":true,"dmPolicy":"allowlist","botToken":"__OPENCLAW_REDACTED__","replyToMode":"all","allowFrom":[842987156],"groupPolicy":"allowlist","streaming":"off","mediaMaxMb":20,"timeoutSeconds":60,"retry":{"attempts":6,"minDelayMs":1500,"maxDelayMs":90000,"jitter":0.1},"network":{"autoSelectFamily":false,"dnsResultOrder":"ipv4first"}}},"gateway":{"port":18789,"mode":"local","bind":"loopback","controlUi":{"allowedOrigins":["https://miopenclaw-vnic.tail9799d2.ts.net","https://miopenclaw-vnic.tail9799d2.ts.net/","http://127.0.0.1:18789"]},"auth":{"mode":"token","token":"__OPENCLAW_REDACTED__"},"trustedProxies":["127.0.0.1/32","::1/128"],"tailscale":{"mode":"serve","resetOnExit":true}},"skills":{"entries":{"gh-issues":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"nano-banana-pro":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"notion":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-image-gen":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-whisper-api":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"sag":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"}}},"plugins":{"allow":["telegram","acpx","clawrouter"],"entries":{"qwen-portal-auth":{"enabled":true},"acpx":{"enabled":true,"config":{"permissionMode":"approve-all","nonInteractivePermissions":"fail","expectedVersion":"any","command":"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx"}},"clawrouter":{"enabled":true}},"installs":{"clawrouter":{"source":"npm","spec":"@blockrun/clawrouter@latest","installPath":"/home/ubuntu/.openclaw/extensions/clawrouter","version":"0.12.43","resolvedName":"@blockrun/clawrouter","resolvedVersion":"0.12.43","resolvedSpec":"@blockrun/clawrouter@0.12.43","integrity":"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==","shasum":"3331382e1a46524bee73b8ffa83677950f5bbae5","resolvedAt":"2026-03-15T22:45:46.066Z","installedAt":"2026-03-15T22:46:43.662Z"}}},"talk":{"apiKey":"__OPENCLAW_REDACTED__","provider":"elevenlabs","providers":{"elevenlabs":{"apiKey":"__OPENCLAW_REDACTED__"}}}},"hash":"31f4e11b98ddb833f53a89ddcd4021b23f92551d22a24ad5d438e6c901140df1","issues":[],"warnings":[],"legacyIssues":[]}},"isError":false,"timestamp":1773622718183}} {"type":"message","id":"98580141","parentId":"dd3a9671","timestamp":"2026-03-16T00:59:32.848Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Considering session approvals**\n\nI’ve realized that since Telegram doesn’t have an approval client, tasks involving write actions might not work properly. That's a tradeoff to keep in mind. The user asked for corrections, so I’ll suggest that harness write sessions may now require Web UI or Discord approvals. Alternatively, using runtime=\"subagent\" could be a valid solution. It feels good to explore these options!\n\n**Updating project files**\n\nI think I could update the tools with a note about the acpx approval mode change, but maybe that’s too much. I might just need to use edit/write to modify the Asana scripts and the SKILL/README, particularly the configure.mjs comments. I’ll focus on patching the files with precise replacements. I should edit configure.mjs to eliminate the env note and adjust asana_api.mjs and oauth_oob.mjs to remove certain fallback and error messages. Keeping command-line flags could be enough. Let's create those patches!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b755c1a118819093577775732b0004\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1XWrI-c7G051IT_H7ssKeuPBWhloxL3PzmVqWZk_68PVa-4bA892TJuWmwiA38u57lwi4zyO17ILQbo5owMrBiVyLEDQBhxADax-IK1fsF8uIXmbPf2QcY16fGdKqcTEkWLJl3koYQEBK2byQMY0W10fVXukBjvj1LIIAwAalGpgB_wtjJSlDtzZHUguiYi1UnKQ9AO_lcHXro8aIZXb3I3LTahdc28FgDZAJNn_gw2bz8MSJbIYregaFI0RfOjfRbzasts3Kvb3FOwTMQ0Mz5YTO5QOmKrCvpv5Ilk0X056rgfW3wiFr-LxpgSJfuGfjpUWFzyDwIgn3kFcEhuPTzTtg2yyATcaBBDx_H1skv1M7psWsx4YEvALO7yv3eLZGhYRue8BRMvKSyw0r2jgj8WLl7y3Mf8FTiK_MhBHj5uP3_D9Rs-ukMf6i_hORSpb99y3Biv_0JbPQ5UZQpzy4fz4mB5ppGGVQOXCud-8W0WeevY0I7fPfJku-VJrsrcFz6L_xHA9HpPKD47suUyJABrP7rcnRycoJwvMH2wyK4hkO6CQQsu1UQ_jPrevEYUKve4uSSLF-ZwidfqNd2GCblVrRghr4lJI2cDsq8glgsHL7bebj9rBP5MdwYLfQf8nq9mPW1XXqM6Tic0ExsWv2P9cKwUKRt_6Yh1jD4FkxwkxAJYuSppWaHw4o594Wq9MkMl0pRu9-xAWH2K4XIrZg_j6Bp15l38rr8-DkBjWiTgNuhP5VtP7aRaVjyqvBOJEtq2xQ0uDUodTArSKlsJydksXVRx-ehI82J-sWUBLZdvkmm1HS-YvwUCqZp2WezQx3iwKOuZG-O9srPTEKgkt1VLutA7ixcFqi3hwL1R1alvHx9vaJhmaupwApNDBegX-Sj-vGcaDaZu-1pgpQzRJgJmDvUWvi_V8Kd8s1OerubKeSQJiqW2ulc0pKuuw5Xwy18_LE34sxtX97pfCG3okexr57Oklnj-2dVhNSN_1J35U_GBYGvmkHz0Z_y8F4ZRce3yaKuPmhjlvj6oN9R7LLb-UKr30F9wvOEaJ51zhUhOg-sAaTmK_VhqxNZNCSn9HjCioCSbScVY5uunVjuRDmxkhAUUKumjOUJIRLUNPikoMcYHfijVrfYX6kHe2L-5wkNSCwMykTyP01JrzLnlMcSvxLQ97lunhvr3FzCQclIsV-AN4-z3TS8cK9Debm6T2cKT2Jbj_vQ8_TlDjjjR_CNjEPngVVDBjH0TVjfKeiu89Z9riSi1Q2m8M3HMASXoaY_k0beNTbRhVM9Wg_-lph1sHZCVZ8aENcfGVqZBr87QdqCTtO76Jiq0RzbSKj8u_OExgiZ_8V82PNjdm96alRnImv0D7lfcDFpn58TuZwxH5PQsU7O-POBuQ3TV2UgXiH1a1oRDmOtvvCRjLu3Co7BNU-EdaWG817gZmeBV8BDGc6yIlqFYVpI9OyjDcSEq1VRhTN8XR7VnHSmifKq5pqULXTcNyErWTOEEC273lLBoqhfEW_5v5MQLiJHSSz-KLF0sc_wDcqsJ1VbIJWt7DEajbuA4_K5D56BhhlpUmZtgcVIy8wMt9AP9tA1nLa7hI84WO6Ryeckqu-0SSOIMhUuE0p5_qleH7oxPHo5nOkDK-gDRyeH6KcwQPdIm98pp0EHS3jqmwl-Dfw7LOJT3dZaY55QPVxrT2lrzLFMT87xT_1NxTduIAv2VZ3kb5iOCxo87NLT5BSkNaQ_wCJjX-lIeQWQHXC15o_VClHtdl5tyzKPbo77T436Nc1F6nwzQLvPdeSmvYCzRaqxK88OCIrGomP4kbNDbfPf1Y_NFhMDvD_w2JC0gleLySbIPl7S3zGLG-v3FaK1zxOZ6eySCbz99v9ZAKB2VZ6g9FzMSGJMq30MhIjJmNhbf9390SrDVXZnciZmEVKYWBBhS5XKEMnXzV0cBrRAh2_4rwoahzHHMF6U7M8-cjxA50M1hhkhalL2T5CkadoU7FpDRfujgMilCS_f9TdEgRe9B5WO56EMl18PHhSDzm1CUEG3ruLlsMj8IcaFHW_gjwDzAFUyiikeZKhf9CchRkBH9sWIOCCbOhZfaz0RWRJnDQtw-k-pbKL6TfGw3S4SlMFcXrlruIDleZu0oYsbKWG8OHEes1ccxu9JvNYXYAI-zX8Y76JyCzTgcYD4DohciFDItKMJ23f2Dx8E2Cj8p6SMD6GfxO_1n7BtqrAqQ4pImtSEbEZ7_cmQOHMLBObnXKEMZDJnqWmjXyUo9gc0hBb2RaE0xBzTMCj4LGjgzW4Mwd98NS1xLqznyqoen1vLbyDJIGVL-yM6jHOWR3DF_ISi0VL2WB94b27OMFDp2wq_8dSjel2XweSsxRfUygtz6GqcMmPE6mslXuVurLhz9nXy6KpHRWvX96EqU18GsM28zsFrif88NgXzTMTFoJYmDFnpVuNZuIwdERbIZNrZO4dG7dYiXvWtal2VvcwF_3p40LQhMvifFg7hoA9brWCv8aPPW6C-ChgUIuuA2E4WgAKdcmFgNk_J_quM6Pxd6hLbqPo-nanOyITg8_CDSBg34d_laCp6qyX0c4XZu6BmS2zadz69wosp663rtMkMV5PdoyC4zdN85fZqxL1XAj8dnekiq5tI-JLvMU0EGtU0dElhuCy_9WQZ7n-gOfzjwifM2KpqdiBzPNn1FVFMdWqCm65otCX5-wEV69t_Iu8jE3f5zUvPFyt0Y-EYYvg4n8lyFnbxwTj0oGugwPyT6T3qzru4n0mVEfVcnioxQu9SZvoVZG_kko2fPzZa5I1Wf8zaAiUGFyjlelWHl-5wlgHdak4mmG2RqHvTGRnP_FsKiQl3BfQPSMa2gRVKe7S-yyQpBZqkFurgrPbru2cvWMwKNJz0depBl9jYM-f5r2G006ICqSFBPDVuFL_56xn1r1ZxUTblgO4Z0P8RvGprjr0heRyF_8gGB_Uw9zbtQS2UtsvL25IqeWWEiXJdY1r6OOgOJO_Q4jbbRcTDuf1YJKczh4VqmK8TIrxbCJCzSjkAKiPHCz-SZKqdygC0k0pEYgQQExHDHBVBhw63L7y10MkFt302jrfo81m0AAL5AOfrj5NvUkIpvW8F2YZ_8dLd6Ziu0SIbFvLqOS08ld6EF-jq168oKEshxKXkixR5fOkT82KPahjwDLAGy8ZwSHUt3-ktsgL9tWIkl3RYmffLvRk3OR_-46eLjQkc0xDGhWbBmU3JxpWLkkxyimc0I5XZZQDQfqr5Z-SiCSviFMbeVtXi8YPqTGa3WZuE5eXoMyFLEhQ_X72n6yiIirZdZ4UMaLLmY8zoyfSFvOsiWVAwnD_9f2w_WNyYhe1OQGqCnq2udsZSi5gptx9ZZ917uSR6dPgqqI2bg2oH8R4JIEu0H4_9CafrW6ghrvkAMoy2kaNJawogMNv3cUoeSb_dOUUuEKVXf3vhAD5orzOAD6vDWS8I4pqV5S_R9Fa2s4Dg62VaBVdA7JeJ0fhHM29EAzoxbxKF3ZqWQ1nK28tPOcBfZszszEGxChu3gJh_RHPgcuoceCMZEwapwubWnEs0DZSu56v1sdx6B6w-oTV6a-scTgjaQi7xocx7ru_5oumDt9ByZuN6SvQVA_Gv1OD7rCgYJ1hrGKr2wVasyJ1LbaUiSA7u_oVQ9bCGv_CqOT8X75hKMCjzovl5Iv2QXxrvTnWAIEDiRixYEUUm0WLnBt999oDIkNoqlgOwECDuGpTTMeTM9DL0ZUdxkBKb_W38WIqK7aKM2TGk9wJhOlNhvicRh8YaFU2AXqLSYUiWmf4fBuOmrHgZIiNd1H1bd8ykgz6JGHLujQgJbqWupv0AIVfVJxc_bWj3UjA8FbqFQAnu1xeKnUI6L3Jh-KNcIWlox1ye3rzl68MHSOxfg84JgxERp49gN28SPnumWNeSwPXfvhYEhd6BaUYEmiJus09gBOk_LuDEy2oVNfz7idXWnwuFGJimca9g-q7LSeL5SC6IKw7cnxdH_x1hTkTg09SylJI1Ejyu6RwZ76Awlu3BlM6Q4xvX9rfp7Jx1ZtgOS2RedK4JQ_oQmPSt-ysxrflIZo3irsNc7tFh9vZ640ZFH8TR4HkLRiTO_AP2KMXGbckDJr0JPCRDiUN1nU9xNmh6YphrZOwdp4WzlcVBMlyWwHyzK4OVJQ4bi7GcMnyqMkTdKcorYwjb8ePFf4Nppjhr88Y-ndn-Zcn_Xb45Swb6pxM7fR9Vtbh6PmPLWgCAMGcIS0kFB_jD-WLQ2A_CEwjpls-ZtbfLRd3TYG5QLC5N9TSyI03vad1a6jzXABMYL90ETEhUwJSK8Nb-D8fck8gu7Yo3KeIv5kzN8OszWnL2PHYfnM0SOSDt4YrpgqqETBqOdk5JSlgwPwtlQSpFdNYTWk_Zbv2cov6XA_xxndYCar6oOAcPX1mzhJeJ-WaLSTGS-clxc7aM1bm0ZLvNpievqFUoVxupGk_4vu9FNRRXVMGrK7Te1WuYymj8AVneAbsRjBWr15Aeu3rG2kWfvp1gJikBqlAwiOJ8TgI3HHdC_dJz1gbzwFHvuZ8dpdrvWARphi8aC8XWK9OK2cEeK0yl2EiF-JkS2NHJe0mOpj7xfxiLEf53NczjuLlrf0mBJ56Z0u-8yj3Nt5G67UZGLZB567gkaW-W-68OE2lY2iBwqH46tqWVF8x77m7xAv8tkdfBnJ2wmRst3J-eVRr1AIyaCHDs23vzjAV9vU9Qax7tnpkHBqmGb5s2VXnXRQ5O38ke9FBNh2bYyXwd4UfSFzQnXqfXTB3QPo2s-U1DDWlY-beUEGqw_5bQU-IqOeSm3T0z1d6fyOjkqn51G1O7FgiYLhYqDeIqSS77OZVMp-zUuOMQ5ZvsC0Yo-HfI5veY41rh093lJgbsHBmZzNB_JQA04YBDuSIFoTP210DKJEPpoqcdgF64dCy063gQURJLoA8c8tNbqlObzDxMxGcYupskYVzlhy-cyHri0rhYp0xp5kIVEEiW0L80e3kIwYJeJY7a8xrvMa6Jh7C450oJxXTdAQq3CtRL1sVLsVpSyy1P69alOh8cWCMYUNv1NsBNB0zfxmGgnvrydf46dDXpqjzvE8MwgRPtKFJOkyEF2rZ8WKtrQav4qOViBd3kNli8F1VgHMq6X9xxaqF-V4GR8ejsgEukXVkeyBBvnQPeYh-q_tkZ-JLNIpEVQzLZvpbd1eOswiOm2rMueex9txLrfHxWiqnrlKF4ZOOrLY13BfbXRcXMRfvmWX9B_sJg4NIK2Es4vYyc_zBw6slEYjDn2XXgY5Mv5QIfxcNaRqNEHDbO51EvNQRrpQHzDmlEZRdbCXZ-DYXzEQXUmnV80O0c7gMCdjGlI1Y-npLkZUwlNQ0B_lDhNQ1Q8QHaWvxG8BTG1L45kSIojpXIiaIt17wRyKCUvpkRnLGHEa7YI7GlQsxxwJZ6Cn0h2DvIHGu_qBf_9FcwjsygK8vFM99vivHB_uMEws2_TEkz4L1GNQGLB8tyPxqAUb5GbLJANRnFioVvl4XYp5QpXd1Z_m2PVOwBVYOrrh6CKNMMOK8VCSKAdmisX_OLc852LI5w8J0W8_hMmE8EwMTcDLL637FIWK-TPrqdJTLVFiKCypLPAPvXIipaEzb2LrPN-X9ko_0BC_cvx9nAdIVSYo7mu-n5NoNRF7NBN8menlN3OdSw500p6BUY3EsjfiwkBu7Jl6Y5Wxeq6A6MUPuAfqLgNTciYa90tlOrI4gl-YFn1fc_HCpcxLeOz_2RPU-EuuvuyFvxtQjpBdtdFjDAvt79GZIBSIYtbp-1WlYy4LlnkFOX-gGK4uNKOy4ny7wXgAYfWEb9YhZj3hpv11bkVYvX3as2R-lu_PguCRXcE9sglneaPLPCAx2goQP9VaYJzs_8kVlB0sARk8Z64egowT4T62tDJex8Mw5KY1ZkBO8Bgv_QzqIhmuW-STqN7cH80GygEgRMK4Vtvor-hKUXyjZk8eGFm7W-09t61l4eBx8GHzDIfS2XdCoWksH60w8LxF9cl8SDDGjT2BZ1FrHqaUxL1d1fE20jgyutyqHQG0MzZ8xLqWT_4xAfvLax-kHugzi2Ex4plXIHr9xiZaTdZ7msclGGJJQJkAVuv2-oT1cuMmLXNvvPAqGqrQDY2JFR_UzgbfaI5PHxYt4lYT5Ch5FtXYzFD-rvlSZ3O6sscNabqT5BdD35SCEBoR7sTpw1X1VjYaszeCVOZ96ksnKLhDSLM_Ps1IljlHSg4fNIk1b6Q0BPQExTBsuUtz3EddmbQ15RQlOJkdCJhBtuAFL69RxpYmQMK2ztTNKTHT08yVHNi8GwMxKKuPRRwUxtW3WGUpgDE4WRYTizL1JiUJMgtq4anukOKqMLz49YOXb9f34gZUEaIJ4IkHRsq_FjQ4xoFTeqxeyyEdKPmPC8nUj3UyD0kKSl4-SmF55M2H4Zh2rqjMERZZdn6T-oGXxzFbsxIscrBLhFUirgrglG-e1SBbVGyddb6_puHB4rUeY6sr-LvvtOGp4VhNCwQYQ-7KBHW7jS-q8VHcMfaOWtJBWvH-oBMhYrbTYaxByOoxL5GDSdqJx7y71T-XNGdJYDn6wjP71jviuNtUNnGJag1FOwY7ZP08GVMGhNoI7a5RZbGZNH-OFoObp5uu37bOifZJrog9asARQXJo5d3MhoC1kmAZxvCV-vhl6SkQiOR8Evn5xvla8P-8UhsDBt_1Xh3D3Omjw44uVBHyX872b3TuBr0CauBxfY8tXKOLcvqFGvILJeo3A8tEFP0BU0O2-lBFE8_xRw4d_9MRR1iOAeB8zMlJYLs5jgV9z7SRvdYWzqMSUllj2578SyaMYkvusvesUdvnL3IHr-cyCEQg05xlZzQqJXFPlDi4zRp9bLx2LddUagfROUBjjJEYsFClGdu241BGEICJCzI3pz00FpkUvqZUMqidXxS8b1-r58zAENN0eSGpl1OAXqxFXZVYYslwHS2d2UGUrI9hnnZToEiv22QwmcCXrAJYA6k1-vIwxQ7MXae3dSHPf7EVeeiMGtX3aTW7V5zq41Sk5uBCCuN3mk3glcu8Cp-zkIT2k03TRC5t4TMePDagTaufdOhQAAJyEZCzN5rogwLIwVcd5-9RghC3C3qQDk_7zNxB5GM55ox03zvkP6foYTRyD3MPzbtvLSZIdHBE2e6eUpHbzaJ7TzdiDOxJbluxrJJPUW8-yrSLk2m0Tz21TEW9I22otIa_tZk8vQ9jn6eti7dmaTuWC7BvYdOi8xSyfeSInj9bJJO2PKPDoo7MHNrxP2aGsgDChKk_Sx3mjivSY-6amaXGgcAgom_lULp4WwbAO1YscuYBnw3l-9Yqe7mkLx1UJywO1f_LWEJutQWAtwiogr7Qr9au0KWHhllNIskB9ptQjrs0bwZzYSbfEidL9hJ7wUZ6emGUEgWC42JmUFM53qMENhvtNI7ncWazuLiHfxWNMq6DgfjEjE5VvF4wH8uOnBd9h7grd681acsgjwY0uaWzovLJjTmoLY2g-LbmQLU4wN46D9vKYUcSYccysdQdzjBHb95cvlO8PPxfO_vUREZ5XEprcf4Z-uc3PCxhCjHRCdxo2w1HW5ps97P1JCFh7NY_yEjkgR6qPerz3Uvwu5P49Bt8z9cPFtM7QYGHT9cIG_6YTafL7ce90Pi007nrPdeTCVC4O5opWe2FmFDk9Gr1gGnxG1gAHxKgD6VbIx1qZ6qIgfcRaD3wf8c_xnXMojOEIm36TfHnixxSpEuhPSj-D_Iwd799J9HWzFY8OUQSex26_ZGzBtdDqD2KBdPi4hE3C6ixv0PBF8xpItFCQ==\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Considering session approvals**\\n\\nI’ve realized that since Telegram doesn’t have an approval client, tasks involving write actions might not work properly. That's a tradeoff to keep in mind. The user asked for corrections, so I’ll suggest that harness write sessions may now require Web UI or Discord approvals. Alternatively, using runtime=\\\"subagent\\\" could be a valid solution. It feels good to explore these options!\"},{\"type\":\"summary_text\",\"text\":\"**Updating project files**\\n\\nI think I could update the tools with a note about the acpx approval mode change, but maybe that’s too much. I might just need to use edit/write to modify the Asana scripts and the SKILL/README, particularly the configure.mjs comments. I’ll focus on patching the files with precise replacements. I should edit configure.mjs to eliminate the env note and adjust asana_api.mjs and oauth_oob.mjs to remove certain fallback and error messages. Keeping command-line flags could be enough. Let's create those patches!\"}]}"},{"type":"text","text":"Voy con parches reversibles y de bajo blast radius: pin de `clawrouter`, pin de versión de `acpx`, endurecimiento de exec, y limpieza de la skill `asana` para que deje de depender de secretos tomados del entorno. No toco Tailscale, bind ni Telegram, así que el acceso debería seguir igual tras el restart.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b755d694c0819098831087df836fda\",\"phase\":\"commentary\"}"},{"type":"toolCall","id":"call_FnwpC9kJ2d6d8oqvvae804h1|fc_0776d4d0ce7a6f6b0169b755f44ff48190825f34a13ca0e624","name":"edit","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs","old_string":" * Reads token from ~/.clawdbot/asana/token.json\n * Requires ASANA_CLIENT_ID + ASANA_CLIENT_SECRET for refresh.\n */","new_string":" * Reads token from ~/.clawdbot/asana/token.json\n * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json for refresh.\n */"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs\",\"old_string\":\" * Reads token from ~/.clawdbot/asana/token.json\\n * Requires ASANA_CLIENT_ID + ASANA_CLIENT_SECRET for refresh.\\n */\",\"new_string\":\" * Reads token from ~/.clawdbot/asana/token.json\\n * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json for refresh.\\n */\"}"},{"type":"toolCall","id":"call_y8VGh3sTI61xmbm14xwaVdOB|fc_0776d4d0ce7a6f6b0169b755f450008190bd404ebf29df2a06","name":"edit","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs","old_string":" let clientId = process.env.ASANA_CLIENT_ID;\n let clientSecret = process.env.ASANA_CLIENT_SECRET;\n if (!clientId || !clientSecret) {\n // Fallback to ~/.clawdbot/asana/credentials.json\n try {\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n clientId = clientId || creds.client_id;\n clientSecret = clientSecret || creds.client_secret;\n } catch {\n // ignore\n }\n }\n if (!clientId || !clientSecret) {\n die(\n 'Token needs refresh but ASANA_CLIENT_ID/ASANA_CLIENT_SECRET are not set, and ~/.clawdbot/asana/credentials.json is missing. Run: node skills/asana/scripts/configure.mjs --client-id ... --client-secret ...',\n );\n }\n","new_string":" let clientId;\n let clientSecret;\n try {\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n clientId = creds.client_id;\n clientSecret = creds.client_secret;\n } catch {\n // ignore\n }\n if (!clientId || !clientSecret) {\n die(\n 'Token needs refresh but ~/.clawdbot/asana/credentials.json is missing or incomplete. Run: node skills/asana/scripts/configure.mjs --client-id ... --client-secret ...',\n );\n }\n"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs\",\"old_string\":\" let clientId = process.env.ASANA_CLIENT_ID;\\n let clientSecret = process.env.ASANA_CLIENT_SECRET;\\n if (!clientId || !clientSecret) {\\n // Fallback to ~/.clawdbot/asana/credentials.json\\n try {\\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\\n clientId = clientId || creds.client_id;\\n clientSecret = clientSecret || creds.client_secret;\\n } catch {\\n // ignore\\n }\\n }\\n if (!clientId || !clientSecret) {\\n die(\\n 'Token needs refresh but ASANA_CLIENT_ID/ASANA_CLIENT_SECRET are not set, and ~/.clawdbot/asana/credentials.json is missing. Run: node skills/asana/scripts/configure.mjs --client-id ... --client-secret ...',\\n );\\n }\\n\",\"new_string\":\" let clientId;\\n let clientSecret;\\n try {\\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\\n clientId = creds.client_id;\\n clientSecret = creds.client_secret;\\n } catch {\\n // ignore\\n }\\n if (!clientId || !clientSecret) {\\n die(\\n 'Token needs refresh but ~/.clawdbot/asana/credentials.json is missing or incomplete. Run: node skills/asana/scripts/configure.mjs --client-id ... --client-secret ...',\\n );\\n }\\n\"}"},{"type":"toolCall","id":"call_Gz8W5sQwSftYT9ohZFlK3lYt|fc_0776d4d0ce7a6f6b0169b755f450088190a44b59e52e1d4226","name":"edit","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs","old_string":" * Usage:\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs authorize\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs token --code \"...\"\n */","new_string":" * Usage:\n * node asana/scripts/oauth_oob.mjs authorize\n * node asana/scripts/oauth_oob.mjs token --code \"...\"\n *\n * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json.\n */"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs\",\"old_string\":\" * Usage:\\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs authorize\\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs token --code \\\"...\\\"\\n */\",\"new_string\":\" * Usage:\\n * node asana/scripts/oauth_oob.mjs authorize\\n * node asana/scripts/oauth_oob.mjs token --code \\\"...\\\"\\n *\\n * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json.\\n */\"}"},{"type":"toolCall","id":"call_Js9cYyX33SebYuJpNxQsykiu|fc_0776d4d0ce7a6f6b0169b755f4500c8190b4f796bba0026f8b","name":"edit","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs","old_string":" let clientId = process.env.ASANA_CLIENT_ID;\n let clientSecret = process.env.ASANA_CLIENT_SECRET;\n\n // Optional fallback to ~/.clawdbot/asana/credentials.json\n try {\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n clientId = clientId || creds.client_id;\n clientSecret = clientSecret || creds.client_secret;\n } catch {\n // ignore\n }\n\n if (!cmd) die('Command required: authorize | token');\n if (!clientId) die('Missing ASANA_CLIENT_ID (or ~/.clawdbot/asana/credentials.json)');\n","new_string":" let clientId;\n let clientSecret;\n\n try {\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n clientId = creds.client_id;\n clientSecret = creds.client_secret;\n } catch {\n // ignore\n }\n\n if (!cmd) die('Command required: authorize | token');\n if (!clientId) die('Missing ~/.clawdbot/asana/credentials.json (run configure.mjs first)');\n"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs\",\"old_string\":\" let clientId = process.env.ASANA_CLIENT_ID;\\n let clientSecret = process.env.ASANA_CLIENT_SECRET;\\n\\n // Optional fallback to ~/.clawdbot/asana/credentials.json\\n try {\\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\\n clientId = clientId || creds.client_id;\\n clientSecret = clientSecret || creds.client_secret;\\n } catch {\\n // ignore\\n }\\n\\n if (!cmd) die('Command required: authorize | token');\\n if (!clientId) die('Missing ASANA_CLIENT_ID (or ~/.clawdbot/asana/credentials.json)');\\n\",\"new_string\":\" let clientId;\\n let clientSecret;\\n\\n try {\\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\\n clientId = creds.client_id;\\n clientSecret = creds.client_secret;\\n } catch {\\n // ignore\\n }\\n\\n if (!cmd) die('Command required: authorize | token');\\n if (!clientId) die('Missing ~/.clawdbot/asana/credentials.json (run configure.mjs first)');\\n\"}"},{"type":"toolCall","id":"call_aHXvL2vMIGSmoQWkAyRARBtZ|fc_0776d4d0ce7a6f6b0169b755f4501481908012bf4923905edc","name":"edit","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/configure.mjs","old_string":" * Notes:\n * - Keep this file secret.\n * - You can also set ASANA_CLIENT_ID / ASANA_CLIENT_SECRET as environment variables instead.\n */","new_string":" * Notes:\n * - Keep this file secret.\n * - This helper writes the only credential source used by the skill.\n */"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/configure.mjs\",\"old_string\":\" * Notes:\\n * - Keep this file secret.\\n * - You can also set ASANA_CLIENT_ID / ASANA_CLIENT_SECRET as environment variables instead.\\n */\",\"new_string\":\" * Notes:\\n * - Keep this file secret.\\n * - This helper writes the only credential source used by the skill.\\n */\"}"},{"type":"toolCall","id":"call_TIC0hjSqLc2J2p1NVfs1H0Dj|fc_0776d4d0ce7a6f6b0169b755f450308190b27cb29876f332fc","name":"edit","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/configure.mjs","old_string":"const clientId = flags['client-id'] || process.env.ASANA_CLIENT_ID;\nconst clientSecret = flags['client-secret'] || process.env.ASANA_CLIENT_SECRET;\n\nif (!clientId) die('Missing --client-id (or ASANA_CLIENT_ID)');\nif (!clientSecret) die('Missing --client-secret (or ASANA_CLIENT_SECRET)');\n","new_string":"const clientId = flags['client-id'];\nconst clientSecret = flags['client-secret'];\n\nif (!clientId) die('Missing --client-id');\nif (!clientSecret) die('Missing --client-secret');\n"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/configure.mjs\",\"old_string\":\"const clientId = flags['client-id'] || process.env.ASANA_CLIENT_ID;\\nconst clientSecret = flags['client-secret'] || process.env.ASANA_CLIENT_SECRET;\\n\\nif (!clientId) die('Missing --client-id (or ASANA_CLIENT_ID)');\\nif (!clientSecret) die('Missing --client-secret (or ASANA_CLIENT_SECRET)');\\n\",\"new_string\":\"const clientId = flags['client-id'];\\nconst clientSecret = flags['client-secret'];\\n\\nif (!clientId) die('Missing --client-id');\\nif (!clientSecret) die('Missing --client-secret');\\n\"}"},{"type":"toolCall","id":"call_4vuvJgSl2v4XK22zdTJfvMk1|fc_0776d4d0ce7a6f6b0169b755f450388190a7dd2f1cedface5d","name":"edit","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/SKILL.md","old_string":"**Option B:** set environment variables (shell/session):\n- `ASANA_CLIENT_ID`\n- `ASANA_CLIENT_SECRET`\n\n### 2) Run OAuth\nFrom the repo root:\n","new_string":"### 2) Run OAuth\nFrom the repo root:\n"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/SKILL.md\",\"old_string\":\"**Option B:** set environment variables (shell/session):\\n- `ASANA_CLIENT_ID`\\n- `ASANA_CLIENT_SECRET`\\n\\n### 2) Run OAuth\\nFrom the repo root:\\n\",\"new_string\":\"### 2) Run OAuth\\nFrom the repo root:\\n\"}"},{"type":"toolCall","id":"call_JDIolTDzGBBVvin5CTSBHEtE|fc_0776d4d0ce7a6f6b0169b755f4504081908b68ab780dce6c2a","name":"edit","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/SKILL.md","old_string":"```bash\nnode scripts/oauth_oob.mjs authorize\n```\n2) Open the printed URL, click **Allow**, copy the code.\n3) Exchange code and save tokens locally:\n```bash\nnode scripts/oauth_oob.mjs token --code \"PASTE_CODE_HERE\"\n```\n","new_string":"```bash\nnode scripts/oauth_oob.mjs authorize\n```\n2) Open the printed URL, click **Allow**, copy the code.\n3) Exchange code and save tokens locally:\n```bash\nnode scripts/oauth_oob.mjs token --code \"PASTE_CODE_HERE\"\n```\n"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/SKILL.md\",\"old_string\":\"```bash\\nnode scripts/oauth_oob.mjs authorize\\n```\\n2) Open the printed URL, click **Allow**, copy the code.\\n3) Exchange code and save tokens locally:\\n```bash\\nnode scripts/oauth_oob.mjs token --code \\\"PASTE_CODE_HERE\\\"\\n```\\n\",\"new_string\":\"```bash\\nnode scripts/oauth_oob.mjs authorize\\n```\\n2) Open the printed URL, click **Allow**, copy the code.\\n3) Exchange code and save tokens locally:\\n```bash\\nnode scripts/oauth_oob.mjs token --code \\\"PASTE_CODE_HERE\\\"\\n```\\n\"}"},{"type":"toolCall","id":"call_JlVN578bj1WwlBUEDmeWe3AJ|fc_0776d4d0ce7a6f6b0169b755f45048819082581e0eaf7f9152","name":"edit","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/SKILL.md","old_string":"- OAuth access tokens expire; refresh tokens are used to obtain new access tokens.\n- If you later want multi-user support, replace OOB with a real redirect/callback.\n- Don’t log tokens.\n","new_string":"- OAuth access tokens expire; refresh tokens are used to obtain new access tokens.\n- This skill reads client credentials only from `~/.clawdbot/asana/credentials.json`.\n- If you later want multi-user support, replace OOB with a real redirect/callback.\n- Don’t log tokens.\n"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/SKILL.md\",\"old_string\":\"- OAuth access tokens expire; refresh tokens are used to obtain new access tokens.\\n- If you later want multi-user support, replace OOB with a real redirect/callback.\\n- Don’t log tokens.\\n\",\"new_string\":\"- OAuth access tokens expire; refresh tokens are used to obtain new access tokens.\\n- This skill reads client credentials only from `~/.clawdbot/asana/credentials.json`.\\n- If you later want multi-user support, replace OOB with a real redirect/callback.\\n- Don’t log tokens.\\n\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":89093,"output":2840,"cacheRead":23040,"cacheWrite":0,"totalTokens":114973,"cost":{"input":0.22273250000000003,"output":0.0426,"cacheRead":0.0057599999999999995,"cacheWrite":0,"total":0.2710925}},"stopReason":"toolUse","timestamp":1773622718207}} {"type":"message","id":"2b4f5f77","parentId":"98580141","timestamp":"2026-03-16T00:59:33.019Z","message":{"role":"toolResult","toolCallId":"call_FnwpC9kJ2d6d8oqvvae804h1|fc_0776d4d0ce7a6f6b0169b755f44ff48190825f34a13ca0e624","toolName":"edit","content":[{"type":"text","text":"Successfully replaced text in /home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs."}],"details":{"diff":" ...\n 2 /**\n 3 * Minimal Asana API CLI with OAuth refresh.\n 4 *\n 5 * Reads token from ~/.clawdbot/asana/token.json\n- 6 * Requires ASANA_CLIENT_ID + ASANA_CLIENT_SECRET for refresh.\n+ 6 * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json for refresh.\n 7 */\n 8 \n 9 import fs from 'node:fs';\n 10 import os from 'node:os';\n ...","firstChangedLine":6},"isError":false,"timestamp":1773622773008}} {"type":"message","id":"6fbceeb7","parentId":"2b4f5f77","timestamp":"2026-03-16T00:59:33.033Z","message":{"role":"toolResult","toolCallId":"call_y8VGh3sTI61xmbm14xwaVdOB|fc_0776d4d0ce7a6f6b0169b755f450008190bd404ebf29df2a06","toolName":"edit","content":[{"type":"text","text":"Successfully replaced text in /home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs."}],"details":{"diff":" ...\n 86 // Some flows may not return refresh_token; in that case user must re-auth.\n 87 return token;\n 88 }\n 89 \n- 90 let clientId = process.env.ASANA_CLIENT_ID;\n- 91 let clientSecret = process.env.ASANA_CLIENT_SECRET;\n- 92 if (!clientId || !clientSecret) {\n- 93 // Fallback to ~/.clawdbot/asana/credentials.json\n- 94 try {\n- 95 const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n- 96 const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n- 97 clientId = clientId || creds.client_id;\n- 98 clientSecret = clientSecret || creds.client_secret;\n- 99 } catch {\n-100 // ignore\n-101 }\n+ 90 let clientId;\n+ 91 let clientSecret;\n+ 92 try {\n+ 93 const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n+ 94 const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n+ 95 clientId = creds.client_id;\n+ 96 clientSecret = creds.client_secret;\n+ 97 } catch {\n+ 98 // ignore\n 102 }\n 103 if (!clientId || !clientSecret) {\n 104 die(\n-105 'Token needs refresh but ASANA_CLIENT_ID/ASANA_CLIENT_SECRET are not set, and ~/.clawdbot/asana/credentials.json is missing. Run: node skills/asana/scripts/configure.mjs --client-id ... --client-secret ...',\n+102 'Token needs refresh but ~/.clawdbot/asana/credentials.json is missing or incomplete. Run: node skills/asana/scripts/configure.mjs --client-id ... --client-secret ...',\n 106 );\n 107 }\n 108 \n 109 const data = await postForm(TOKEN_URL, {\n ...","firstChangedLine":90},"isError":false,"timestamp":1773622773022}} {"type":"message","id":"c79848aa","parentId":"6fbceeb7","timestamp":"2026-03-16T00:59:33.044Z","message":{"role":"toolResult","toolCallId":"call_Gz8W5sQwSftYT9ohZFlK3lYt|fc_0776d4d0ce7a6f6b0169b755f450088190a44b59e52e1d4226","toolName":"edit","content":[{"type":"text","text":"Successfully replaced text in /home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs."}],"details":{"diff":" ...\n 2 /**\n 3 * Asana OAuth (OOB/manual code paste) helper.\n 4 *\n 5 * Usage:\n- 6 * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs authorize\n- 7 * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs token --code \"...\"\n+ 6 * node asana/scripts/oauth_oob.mjs authorize\n+ 7 * node asana/scripts/oauth_oob.mjs token --code \"...\"\n+ 8 *\n+ 9 * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json.\n 8 */\n 9 \n 10 import fs from 'node:fs';\n 11 import os from 'node:os';\n ...","firstChangedLine":6},"isError":false,"timestamp":1773622773033}} {"type":"message","id":"daee226f","parentId":"c79848aa","timestamp":"2026-03-16T00:59:33.056Z","message":{"role":"toolResult","toolCallId":"call_Js9cYyX33SebYuJpNxQsykiu|fc_0776d4d0ce7a6f6b0169b755f4500c8190b4f796bba0026f8b","toolName":"edit","content":[{"type":"text","text":"Successfully replaced text in /home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs."}],"details":{"diff":" ...\n 80 }\n 81 \n 82 async function main() {\n 83 const { cmd, flags } = parseArgs(process.argv.slice(2));\n- 84 let clientId = process.env.ASANA_CLIENT_ID;\n- 85 let clientSecret = process.env.ASANA_CLIENT_SECRET;\n+ 84 let clientId;\n+ 85 let clientSecret;\n 86 \n- 87 // Optional fallback to ~/.clawdbot/asana/credentials.json\n 88 try {\n 89 const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n 90 const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n- 91 clientId = clientId || creds.client_id;\n- 92 clientSecret = clientSecret || creds.client_secret;\n+ 90 clientId = creds.client_id;\n+ 91 clientSecret = creds.client_secret;\n 93 } catch {\n 94 // ignore\n 95 }\n 96 \n 97 if (!cmd) die('Command required: authorize | token');\n- 98 if (!clientId) die('Missing ASANA_CLIENT_ID (or ~/.clawdbot/asana/credentials.json)');\n+ 97 if (!clientId) die('Missing ~/.clawdbot/asana/credentials.json (run configure.mjs first)');\n 99 \n 100 if (cmd === 'authorize') {\n 101 const scope = flags.scope || 'default';\n 102 const state = flags.state || crypto.randomUUID();\n ...","firstChangedLine":84},"isError":false,"timestamp":1773622773045}} {"type":"message","id":"6476903f","parentId":"daee226f","timestamp":"2026-03-16T00:59:33.070Z","message":{"role":"toolResult","toolCallId":"call_aHXvL2vMIGSmoQWkAyRARBtZ|fc_0776d4d0ce7a6f6b0169b755f4501481908012bf4923905edc","toolName":"edit","content":[{"type":"text","text":"Successfully replaced text in /home/ubuntu/.agents/skills/asana/scripts/configure.mjs."}],"details":{"diff":" ...\n 8 * node skills/asana/scripts/configure.mjs --client-id \"...\" --client-secret \"...\"\n 9 *\n 10 * Notes:\n 11 * - Keep this file secret.\n-12 * - You can also set ASANA_CLIENT_ID / ASANA_CLIENT_SECRET as environment variables instead.\n+12 * - This helper writes the only credential source used by the skill.\n 13 */\n 14 \n 15 import fs from 'node:fs';\n 16 import os from 'node:os';\n ...","firstChangedLine":12},"isError":false,"timestamp":1773622773056}} {"type":"message","id":"128340e2","parentId":"6476903f","timestamp":"2026-03-16T00:59:33.082Z","message":{"role":"toolResult","toolCallId":"call_TIC0hjSqLc2J2p1NVfs1H0Dj|fc_0776d4d0ce7a6f6b0169b755f450308190b27cb29876f332fc","toolName":"edit","content":[{"type":"text","text":"Successfully replaced text in /home/ubuntu/.agents/skills/asana/scripts/configure.mjs."}],"details":{"diff":" ...\n 34 return flags;\n 35 }\n 36 \n 37 const flags = parseArgs(process.argv.slice(2));\n-38 const clientId = flags['client-id'] || process.env.ASANA_CLIENT_ID;\n-39 const clientSecret = flags['client-secret'] || process.env.ASANA_CLIENT_SECRET;\n+38 const clientId = flags['client-id'];\n+39 const clientSecret = flags['client-secret'];\n 40 \n-41 if (!clientId) die('Missing --client-id (or ASANA_CLIENT_ID)');\n-42 if (!clientSecret) die('Missing --client-secret (or ASANA_CLIENT_SECRET)');\n+41 if (!clientId) die('Missing --client-id');\n+42 if (!clientSecret) die('Missing --client-secret');\n 43 \n 44 const outPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n 45 fs.mkdirSync(path.dirname(outPath), { recursive: true });\n 46 fs.writeFileSync(outPath, JSON.stringify({ client_id: String(clientId), client_secret: String(clientSecret) }, null, 2));\n ...","firstChangedLine":38},"isError":false,"timestamp":1773622773071}} {"type":"message","id":"7242cf77","parentId":"128340e2","timestamp":"2026-03-16T00:59:33.116Z","message":{"role":"toolResult","toolCallId":"call_4vuvJgSl2v4XK22zdTJfvMk1|fc_0776d4d0ce7a6f6b0169b755f450388190a7dd2f1cedface5d","toolName":"edit","content":[{"type":"text","text":"Successfully replaced text in /home/ubuntu/.agents/skills/asana/SKILL.md."}],"details":{"diff":" ...\n 30 node scripts/configure.mjs --client-id \"...\" --client-secret \"...\"\n 31 ```\n 32 This writes `~/.clawdbot/asana/credentials.json`.\n 33 \n- 34 **Option B:** set environment variables (shell/session):\n- 35 - `ASANA_CLIENT_ID`\n- 36 - `ASANA_CLIENT_SECRET`\n- 37 \n 38 ### 2) Run OAuth\n 39 From the repo root:\n 40 \n 41 1) Print the authorize URL:\n ...","firstChangedLine":34},"isError":false,"timestamp":1773622773105}} {"type":"message","id":"ae8e07ca","parentId":"7242cf77","timestamp":"2026-03-16T00:59:33.126Z","message":{"role":"toolResult","toolCallId":"call_JDIolTDzGBBVvin5CTSBHEtE|fc_0776d4d0ce7a6f6b0169b755f4504081908b68ab780dce6c2a","toolName":"edit","content":[{"type":"text","text":"{\n \"status\": \"error\",\n \"tool\": \"edit\",\n \"error\": \"No changes made to /home/ubuntu/.agents/skills/asana/SKILL.md. The replacement produced identical content. This might indicate an issue with special characters or the text not existing as expected.\"\n}"}],"details":{"status":"error","tool":"edit","error":"No changes made to /home/ubuntu/.agents/skills/asana/SKILL.md. The replacement produced identical content. This might indicate an issue with special characters or the text not existing as expected."},"isError":false,"timestamp":1773622773116}} {"type":"message","id":"d072f435","parentId":"ae8e07ca","timestamp":"2026-03-16T00:59:33.138Z","message":{"role":"toolResult","toolCallId":"call_JlVN578bj1WwlBUEDmeWe3AJ|fc_0776d4d0ce7a6f6b0169b755f45048819082581e0eaf7f9152","toolName":"edit","content":[{"type":"text","text":"Successfully replaced text in /home/ubuntu/.agents/skills/asana/SKILL.md."}],"details":{"diff":" ...\n 140 ```\n 141 \n 142 ## Notes / gotchas\n 143 - OAuth access tokens expire; refresh tokens are used to obtain new access tokens.\n+144 - This skill reads client credentials only from `~/.clawdbot/asana/credentials.json`.\n 144 - If you later want multi-user support, replace OOB with a real redirect/callback.\n 145 - Don’t log tokens.","firstChangedLine":144},"isError":false,"timestamp":1773622773127}} {"type":"message","id":"3bbe89b5","parentId":"d072f435","timestamp":"2026-03-16T00:59:38.701Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Inspecting for lingering mentions**\n\nI should check the SKILL to make sure there aren't any lingering environmental mentions. It seems like a good idea to use a read function to thoroughly inspect everything. I want to ensure I've covered all bases and that everything is in line with what should be there. This way, I can feel confident that the output is clean and free from any unnecessary references. It's just something I want to double-check!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b755f705748190b6dce8404e186801\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1X6sh5QrjS3LtZWfzUQGanGoen2pKcMFL2Nh-PQW5k34s8DTzAPjRoVUpLhvWU00ATBVtwbP3r1JlVI9wnI5VAZ2vsW6KwFQ15JEz76yceA_FrRiB9MGzyNDGx906RX7cl5wt0cUe4z6Eqxazs8JpWS3wJbZKyj9AxOrQT6Ig9QD55xIKshwRxe8FqoZhF6PGXph0rNyusIkTszbMQAuehj-4sYKIS_1_3ZCoKA1Z8MRCnB4djC4fV7S9S_9iXd-DnlvhTu50xg7zRnlsEi8U9g7OtGAEZMmWIiix0kmVWRaKhYSy2JmGVor43PzoS3BaNnoaG-UZXRtTXdJeE056eWjt06541y-LEAfKxiEBOIA8ZVQviHpQrqbAhkSBi4grk1DdgnZpx0dMGvjFuWJrxC-gyeiU20ll7wE5dJVPU62xSRCEXAEmSysLUGKceyjg4bcU8TlofhsQGimZ9KCu1EJbyvvkiR4Eet7Ov5BRx8ySn9qpjOBTNpUvLxRkcjNkAfi971WwFfEP3xNchR_VhKRu32OBTf-CqfYzdXE0rFbZN3X6QmCSky4qIcW5akaFY_NGjxhB6eALZePWYDZG9knj63gtbt1mA8tpbzOB81J1LbmFMTymxjM-o9hwNj7iiTYJaPhGkFk6OoqhvGgDCVwBMjkgq3qUXDqBT43lbs1iJy-InVWtA_1vTB8S5hcf5JHptkUSrECEF7fs8zuN0ropJzAi24kGPr6Crj4BIufjM_MNGVHXuEVNdHbFUsFaeV8FoAozc89E_fxb5tEdq6peuBF_5vvR23ANAJTZz31HxDVjwKZraFqWwYtmaPCYPrBKrFmloKKyZBL34gqpdMOzuYokrX__G7uv3nyyHFx9E2sr2Pxa0ZTPjsdxqNmDAptuJCmCnOzjlIQh0nJqj1Kegp2EpWQyVMzrAOwWgMv8Y=\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Inspecting for lingering mentions**\\n\\nI should check the SKILL to make sure there aren't any lingering environmental mentions. It seems like a good idea to use a read function to thoroughly inspect everything. I want to ensure I've covered all bases and that everything is in line with what should be there. This way, I can feel confident that the output is clean and free from any unnecessary references. It's just something I want to double-check!\"}]}"},{"type":"toolCall","id":"call_n41DryJDZfoN3g0wHi7ft0Mi|fc_0776d4d0ce7a6f6b0169b755fa31088190bf43a28d5b1b017c","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/SKILL.md"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/SKILL.md\"}"},{"type":"toolCall","id":"call_3pFVoySyEKFwsKwddPNBO25C|fc_0776d4d0ce7a6f6b0169b755fa3118819098183a8cfd38e5dd","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/configure.mjs"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/configure.mjs\"}"},{"type":"toolCall","id":"call_kTTzauMd83IfTlH6f4ioujNi|fc_0776d4d0ce7a6f6b0169b755fa311c8190b4fb9cf057e1f8aa","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs","offset":1,"limit":120},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs\",\"offset\":1,\"limit\":120}"},{"type":"toolCall","id":"call_hMKDtU4EYGaKOemHc2l92on9|fc_0776d4d0ce7a6f6b0169b755fa312081908bfbb2c44e0c86c7","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs","offset":1,"limit":120},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs\",\"offset\":1,\"limit\":120}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":455,"output":172,"cacheRead":114816,"cacheWrite":0,"totalTokens":115443,"cost":{"input":0.0011375,"output":0.0025800000000000003,"cacheRead":0.028704,"cacheWrite":0,"total":0.0324215}},"stopReason":"toolUse","timestamp":1773622773146}} {"type":"message","id":"2f20c07b","parentId":"3bbe89b5","timestamp":"2026-03-16T00:59:38.765Z","message":{"role":"toolResult","toolCallId":"call_n41DryJDZfoN3g0wHi7ft0Mi|fc_0776d4d0ce7a6f6b0169b755fa31088190bf43a28d5b1b017c","toolName":"read","content":[{"type":"text","text":"---\nname: asana\ndescription: \"Integrate Asana with Clawdbot via the Asana REST API. Use when you need to list/search/create/update Asana tasks/projects/workspaces, or to set up Asana OAuth (authorization code grant) for a personal local-only integration (OOB/manual code paste).\"\n---\n\n# Asana (Clawdbot skill)\n\nThis skill is designed for a **personal local-only** Asana integration using **OAuth** with an **out-of-band/manual code paste** flow.\n\n## What this skill provides\n- A small Node CLI to:\n - generate the Asana authorize URL\n - exchange an authorization code for access/refresh tokens\n - auto-refresh the access token\n - make basic API calls (e.g. `/users/me`, `/workspaces`, tasks)\n\n## Setup (OAuth, OOB/manual code)\n\n### 0) Create an Asana app\nIn Asana Developer Console (My apps):\n- Create app\n- Enable scopes you will need (typical: `tasks:read`, `tasks:write`, `projects:read`)\n- Set redirect URI to the OOB value (manual code):\n - `urn:ietf:wg:oauth:2.0:oob`\n\n### 1) Provide credentials (two options)\n\n**Option A (recommended for Clawdbot):** save to a local credentials file:\n```bash\nnode scripts/configure.mjs --client-id \"...\" --client-secret \"...\"\n```\nThis writes `~/.clawdbot/asana/credentials.json`.\n\n**Option B:** set environment variables (shell/session):\n- `ASANA_CLIENT_ID`\n- `ASANA_CLIENT_SECRET`\n\n### 2) Run OAuth\nFrom the repo root:\n\n1) Print the authorize URL:\n```bash\nnode scripts/oauth_oob.mjs authorize\n```\n2) Open the printed URL, click **Allow**, copy the code.\n3) Exchange code and save tokens locally:\n```bash\nnode scripts/oauth_oob.mjs token --code \"PASTE_CODE_HERE\"\n```\n\nTokens are stored at:\n- `~/.clawdbot/asana/token.json`\n\n## Chat usage (support both explicit + natural language)\n\nYou can use either:\n- **Explicit commands**: start the message with `/asana ...`\n- **Natural language**: e.g. “list tasks assigned to me”\n\nFor Clawdbot, implement the mapping by translating the user request into the appropriate `asana_api.mjs` command.\n\nExamples:\n- `/asana tasks-assigned` → `tasks-assigned --assignee me`\n- “list tasks assigned to me” → `tasks-assigned --assignee me`\n- “list all tasks in ” → resolve `` to a project gid, then `tasks-in-project --project `\n- “list tasks due date from 2026-01-01 to 2026-01-15” → `search-tasks --assignee me --due_on.after 2026-01-01 --due_on.before 2026-01-15`\n\n(Optional helper) `scripts/asana_chat.mjs` can map common phrases to a command skeleton.\n\n## Using the API helper\n\nSanity check (who am I):\n```bash\nnode scripts/asana_api.mjs me\n```\n\nList workspaces:\n```bash\nnode scripts/asana_api.mjs workspaces\n```\n\nSet a default workspace (optional):\n```bash\nnode scripts/asana_api.mjs set-default-workspace --workspace \n```\nAfter that, you can omit `--workspace` for commands that support it.\n\nList projects in a workspace (explicit):\n```bash\nnode scripts/asana_api.mjs projects --workspace \n```\nList projects using the default workspace:\n```bash\nnode scripts/asana_api.mjs projects\n```\n\nList tasks in a project:\n```bash\nnode scripts/asana_api.mjs tasks-in-project --project \n```\n\nList tasks assigned to me (workspace required by Asana):\n```bash\nnode scripts/asana_api.mjs tasks-assigned --workspace --assignee me\n```\nOr using the default workspace:\n```bash\nnode scripts/asana_api.mjs tasks-assigned --assignee me\n```\n\nSearch tasks (advanced search):\n```bash\nnode scripts/asana_api.mjs search-tasks --workspace --text \"release\" --assignee me\n# also supports convenience: --project \n```\n\nView a task:\n```bash\nnode scripts/asana_api.mjs task \n```\n\nMark a task complete:\n```bash\nnode scripts/asana_api.mjs complete-task \n```\n\nUpdate a task:\n```bash\nnode scripts/asana_api.mjs update-task --name \"New title\" --due_on 2026-02-01\n```\n\nComment on a task:\n```bash\nnode scripts/asana_api.mjs comment --text \"Update: shipped\"\n```\n\nCreate a task:\n```bash\nnode scripts/asana_api.mjs create-task --workspace --name \"Test task\" --notes \"from clawdbot\" --projects \n```\n\n## Notes / gotchas\n- OAuth access tokens expire; refresh tokens are used to obtain new access tokens.\n- This skill reads client credentials only from `~/.clawdbot/asana/credentials.json`.\n- If you later want multi-user support, replace OOB with a real redirect/callback.\n- Don’t log tokens.\n"}],"isError":false,"timestamp":1773622778754}} {"type":"message","id":"e60e129d","parentId":"2f20c07b","timestamp":"2026-03-16T00:59:38.776Z","message":{"role":"toolResult","toolCallId":"call_3pFVoySyEKFwsKwddPNBO25C|fc_0776d4d0ce7a6f6b0169b755fa3118819098183a8cfd38e5dd","toolName":"read","content":[{"type":"text","text":"#!/usr/bin/env node\n/**\n * Configure local-only Asana OAuth credentials for the Clawdbot Asana skill.\n *\n * Writes to: ~/.clawdbot/asana/credentials.json\n *\n * Usage:\n * node skills/asana/scripts/configure.mjs --client-id \"...\" --client-secret \"...\"\n *\n * Notes:\n * - Keep this file secret.\n * - You can also set ASANA_CLIENT_ID / ASANA_CLIENT_SECRET as environment variables instead.\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nfunction die(msg) {\n console.error(msg);\n process.exit(1);\n}\n\nfunction parseArgs(argv) {\n const flags = {};\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (a.startsWith('--')) {\n const k = a.slice(2);\n const v = argv[i + 1] && !argv[i + 1].startsWith('--') ? argv[++i] : true;\n flags[k] = v;\n }\n }\n return flags;\n}\n\nconst flags = parseArgs(process.argv.slice(2));\nconst clientId = flags['client-id'];\nconst clientSecret = flags['client-secret'];\n\nif (!clientId) die('Missing --client-id');\nif (!clientSecret) die('Missing --client-secret');\n\nconst outPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\nfs.mkdirSync(path.dirname(outPath), { recursive: true });\nfs.writeFileSync(outPath, JSON.stringify({ client_id: String(clientId), client_secret: String(clientSecret) }, null, 2));\nconsole.log(`Saved Asana OAuth credentials to: ${outPath}`);\nlientSecret) }, null, 2));\nconsole.log(`Saved Asana OAuth credentials to: ${outPath}`);\n"}],"isError":false,"timestamp":1773622778766}} {"type":"message","id":"d99a3b6a","parentId":"e60e129d","timestamp":"2026-03-16T00:59:38.787Z","message":{"role":"toolResult","toolCallId":"call_kTTzauMd83IfTlH6f4ioujNi|fc_0776d4d0ce7a6f6b0169b755fa311c8190b4fb9cf057e1f8aa","toolName":"read","content":[{"type":"text","text":"#!/usr/bin/env node\n/**\n * Asana OAuth (OOB/manual code paste) helper.\n *\n * Usage:\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs authorize\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs token --code \"...\"\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst AUTH_URL = 'https://app.asana.com/-/oauth_authorize';\nconst TOKEN_URL = 'https://app.asana.com/-/oauth_token';\nconst REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob';\n\nfunction die(msg) {\n console.error(msg);\n process.exit(1);\n}\n\nfunction parseArgs(argv) {\n const [cmd, ...rest] = argv;\n const flags = {};\n for (let i = 0; i < rest.length; i++) {\n const a = rest[i];\n if (a.startsWith('--')) {\n const k = a.slice(2);\n const v = rest[i + 1] && !rest[i + 1].startsWith('--') ? rest[++i] : true;\n flags[k] = v;\n }\n }\n return { cmd, flags };\n}\n\nfunction tokenPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'token.json');\n}\n\nfunction ensureDir(p) {\n fs.mkdirSync(path.dirname(p), { recursive: true });\n}\n\nfunction saveToken(json) {\n const p = tokenPath();\n ensureDir(p);\n fs.writeFileSync(p, JSON.stringify(json, null, 2));\n console.log(`Saved token to: ${p}`);\n}\n\nfunction urlEncode(params) {\n const u = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) continue;\n u.set(k, String(v));\n }\n return u.toString();\n}\n\nasync function postForm(url, params) {\n const res = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: urlEncode(params),\n });\n const text = await res.text();\n let data;\n try {\n data = JSON.parse(text);\n } catch {\n throw new Error(`Non-JSON response (${res.status}): ${text.slice(0, 300)}`);\n }\n if (!res.ok) {\n throw new Error(`HTTP ${res.status}: ${JSON.stringify(data)}`);\n }\n return data;\n}\n\nasync function main() {\n const { cmd, flags } = parseArgs(process.argv.slice(2));\n let clientId;\n let clientSecret;\n\n try {\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n clientId = creds.client_id;\n clientSecret = creds.client_secret;\n } catch {\n // ignore\n }\n\n if (!cmd) die('Command required: authorize | token');\n if (!clientId) die('Missing ~/.clawdbot/asana/credentials.json (run configure.mjs first)');\n\n if (cmd === 'authorize') {\n const scope = flags.scope || 'default';\n const state = flags.state || crypto.randomUUID();\n // Asana supports code challenge / PKCE; OOB is typically used for simple flows.\n const url = `${AUTH_URL}?${urlEncode({\n client_id: clientId,\n redirect_uri: REDIRECT_URI,\n response_type: 'code',\n state,\n // If you want explicit scopes, pass --scope \"tasks:read tasks:write\"\n ...(scope !== 'default' ? { scope } : {}),\n })}`;\n console.log('Open this URL in your browser, click Allow, then copy the code:');\n console.log(url);\n console.log('\\nThen run:');\n console.log(`node asana/scripts/oauth_oob.mjs token --code \"PASTE_CODE\"`);\n return;\n }\n\n if (cmd === 'token') {\n if (!clientSecret) die('Missing ASANA_CLIENT_SECRET');\n const code = flags.code;\n\n[38 more lines in file. Use offset=121 to continue.]"}],"isError":false,"timestamp":1773622778776}} {"type":"message","id":"94219d61","parentId":"d99a3b6a","timestamp":"2026-03-16T00:59:38.799Z","message":{"role":"toolResult","toolCallId":"call_hMKDtU4EYGaKOemHc2l92on9|fc_0776d4d0ce7a6f6b0169b755fa312081908bfbb2c44e0c86c7","toolName":"read","content":[{"type":"text","text":"#!/usr/bin/env node\n/**\n * Minimal Asana API CLI with OAuth refresh.\n *\n * Reads token from ~/.clawdbot/asana/token.json\n * Requires ASANA_CLIENT_ID + ASANA_CLIENT_SECRET for refresh.\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst API_BASE = 'https://app.asana.com/api/1.0';\nconst TOKEN_URL = 'https://app.asana.com/-/oauth_token';\n\nfunction die(msg) {\n console.error(msg);\n process.exit(1);\n}\n\nfunction tokenPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'token.json');\n}\n\nfunction configPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'config.json');\n}\n\nfunction loadConfig() {\n const p = configPath();\n if (!fs.existsSync(p)) return {};\n try {\n return JSON.parse(fs.readFileSync(p, 'utf-8')) || {};\n } catch {\n return {};\n }\n}\n\nfunction loadToken() {\n const p = tokenPath();\n if (!fs.existsSync(p)) die(`Token file not found: ${p}. Run oauth_oob.mjs token first.`);\n return JSON.parse(fs.readFileSync(p, 'utf-8'));\n}\n\nfunction saveToken(tok) {\n const p = tokenPath();\n fs.mkdirSync(path.dirname(p), { recursive: true });\n fs.writeFileSync(p, JSON.stringify(tok, null, 2));\n}\n\nfunction urlEncode(params) {\n const u = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) continue;\n u.set(k, String(v));\n }\n return u.toString();\n}\n\nasync function postForm(url, params) {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: urlEncode(params),\n });\n const text = await res.text();\n let data;\n try {\n data = JSON.parse(text);\n } catch {\n throw new Error(`Non-JSON response (${res.status}): ${text.slice(0, 300)}`);\n }\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${JSON.stringify(data)}`);\n return data;\n}\n\nasync function ensureAccessToken(token) {\n const now = Date.now();\n const expiresAt = token.expires_at_ms;\n if (typeof token.access_token !== 'string') die('Token missing access_token');\n\n // Refresh if expiring within 2 minutes\n if (expiresAt && now < expiresAt - 120_000) return token;\n\n if (!token.refresh_token) {\n // Some flows may not return refresh_token; in that case user must re-auth.\n return token;\n }\n\n let clientId;\n let clientSecret;\n try {\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n clientId = creds.client_id;\n clientSecret = creds.client_secret;\n } catch {\n // ignore\n }\n if (!clientId || !clientSecret) {\n die(\n 'Token needs refresh but ~/.clawdbot/asana/credentials.json is missing or incomplete. Run: node skills/asana/scripts/configure.mjs --client-id ... --client-secret ...',\n );\n }\n\n const data = await postForm(TOKEN_URL, {\n grant_type: 'refresh_token',\n client_id: clientId,\n client_secret: clientSecret,\n refresh_token: token.refresh_token,\n });\n\n const refreshed = {\n ...token,\n ...data,\n obtained_at_ms: now,\n expires_at_ms: typeof data.expires_in === 'number' ? now + data.expires_in * 1000 : null,\n };\n\n saveToken(refreshed);\n\n[279 more lines in file. Use offset=121 to continue.]"}],"isError":false,"timestamp":1773622778788}} {"type":"message","id":"0aebfb06","parentId":"94219d61","timestamp":"2026-03-16T01:00:02.741Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Fixing configuration issues**\n\nI noticed that the configure.mjs file has some duplicated trailing lines due to an edit glitch, and the oauth_oob/asana_api headers aren't fully updated because of a partial mismatch. I need to fix this! Plus, it looks like SKILL still contains Option B, which I need to clean up. It might be easier to patch the entire configure.mjs file, so I’ll use the write function to ensure it has the correct content. Let's tackle that!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b755fdc9488190841afcce60f107d2\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1YAIGe8QGlbUjpxVDRAey1XvOBDNhy-orbxrQJ0ZbwYMrb8yz-w-7LsXvhjmd6_dz0T5ruEeDW_9kWn0DIfgFxb0M--68kjwjGGomqeH21uFEiQGD3mE_Od1OxomXVno_eye1WZVPo31hUbAO0RhVae6Z5FIS2aRlbhPEwY9GCFO5k0TfhuUJoXU5o0WftTNdcwwY1Wz74najib3u231VnMBbxZqUJ7EfePCUxXDHVz89qLSzvIKrvhpKoEZEv9wHTKBDgqt4Wb1cNwrdXplTs-fPd9hfr5yS8zmVDpWOHdoipm38oCNRb0NEf2CjooG84zQVlTocLIjZjXaT0NOUwAOO-S-9aTRCiN7FuWFBOrQGKamGOT7azJcPukN3llWNl_Vkzs1e5z4V5Db0UrfT5f_30lX0922VRW8RgTFikHbBrN4lTGj1aMCeKNVF-KS94YJjOyEpyDYqZ2CMB6epleEaq1tW7yZHWvOnBCBSLDUxkJT2UlaoemDsnmxMvHyPlh_C-sHK3oNh8H9gurhjX_DOwxEV9L6Y9Nr7O9mqHmGbDi5PmxI-MbltwCoaNS7QzJng288etup0JIEiIVG5wZXHNhhn_IHvsqKex12e2ldbk73q2x5eEUdfUmsqHo7tOmV2AY8Kisdy3hXAkSKaY72nNNgChZ6TrfnnFMb_NUs9i6o3MfFkTGj-vQxue2zcDk2-XHWjDiiFbm7ydxRt3v4tVQAYgM01NlisLSVAC7JY2XPcszZ3v-5J5SD5l_WaByt_PIgYzxVbQV86aQ8fUHJYkVf1jaA5SY2NjDFMxJz7V7tXiSt5WRVfvHP-a4x6dgUFM9iMsQsgqrsEqvjPZwmd-SEezKYE2sVqofIwsivchpytrAX_RrXcyHvYuPLQDURB7H5-0iS4nbGIqCFjLkOxNu8odBPIz8GHgow-TrXmq1T4-ZPGgkfbFyZCcflTTUfRhkUY5nnQooPdqPGo6MqDIVdAm6sCLQhEWW2yQk_gzHQyLa744o8bbp7854ZLzienStEuBdPTfYsaAB0Yo1rN8HLWco2jvIe97V7fQvutLjInHf1UP0qj7PFys-1LU0-pAQzWNGCAn7I7K_Bh-Ka1E-H-UVAioj8z-QL3feN6xOBz1oHxBayeOo4x3AF5-1LL5RfePcOORwcunR0ED6T11f3VQBgl_T-vGdOOKbRkc=\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Fixing configuration issues**\\n\\nI noticed that the configure.mjs file has some duplicated trailing lines due to an edit glitch, and the oauth_oob/asana_api headers aren't fully updated because of a partial mismatch. I need to fix this! Plus, it looks like SKILL still contains Option B, which I need to clean up. It might be easier to patch the entire configure.mjs file, so I’ll use the write function to ensure it has the correct content. Let's tackle that!\"}]}"},{"type":"text","text":"Encontré un par de restos feos en el parche de `asana`; los limpio antes del restart para no dejarte una skill a medias.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b75600dfdc8190b9a9f7c97cab03d5\",\"phase\":\"commentary\"}"},{"type":"toolCall","id":"call_bvsRr9GDP2i03Qg8jGfCYrPy|fc_0776d4d0ce7a6f6b0169b756122fcc8190b9fa4c4f52711cc3","name":"write","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/configure.mjs","content":"#!/usr/bin/env node\n/**\n * Configure local-only Asana OAuth credentials for the Clawdbot Asana skill.\n *\n * Writes to: ~/.clawdbot/asana/credentials.json\n *\n * Usage:\n * node skills/asana/scripts/configure.mjs --client-id \"...\" --client-secret \"...\"\n *\n * Notes:\n * - Keep this file secret.\n * - This helper writes the only credential source used by the skill.\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nfunction die(msg) {\n console.error(msg);\n process.exit(1);\n}\n\nfunction parseArgs(argv) {\n const flags = {};\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (a.startsWith('--')) {\n const k = a.slice(2);\n const v = argv[i + 1] && !argv[i + 1].startsWith('--') ? argv[++i] : true;\n flags[k] = v;\n }\n }\n return flags;\n}\n\nconst flags = parseArgs(process.argv.slice(2));\nconst clientId = flags['client-id'];\nconst clientSecret = flags['client-secret'];\n\nif (!clientId) die('Missing --client-id');\nif (!clientSecret) die('Missing --client-secret');\n\nconst outPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\nfs.mkdirSync(path.dirname(outPath), { recursive: true });\nfs.writeFileSync(outPath, JSON.stringify({ client_id: String(clientId), client_secret: String(clientSecret) }, null, 2));\nconsole.log(`Saved Asana OAuth credentials to: ${outPath}`);\n"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/configure.mjs\",\"content\":\"#!/usr/bin/env node\\n/**\\n * Configure local-only Asana OAuth credentials for the Clawdbot Asana skill.\\n *\\n * Writes to: ~/.clawdbot/asana/credentials.json\\n *\\n * Usage:\\n * node skills/asana/scripts/configure.mjs --client-id \\\"...\\\" --client-secret \\\"...\\\"\\n *\\n * Notes:\\n * - Keep this file secret.\\n * - This helper writes the only credential source used by the skill.\\n */\\n\\nimport fs from 'node:fs';\\nimport os from 'node:os';\\nimport path from 'node:path';\\n\\nfunction die(msg) {\\n console.error(msg);\\n process.exit(1);\\n}\\n\\nfunction parseArgs(argv) {\\n const flags = {};\\n for (let i = 0; i < argv.length; i++) {\\n const a = argv[i];\\n if (a.startsWith('--')) {\\n const k = a.slice(2);\\n const v = argv[i + 1] && !argv[i + 1].startsWith('--') ? argv[++i] : true;\\n flags[k] = v;\\n }\\n }\\n return flags;\\n}\\n\\nconst flags = parseArgs(process.argv.slice(2));\\nconst clientId = flags['client-id'];\\nconst clientSecret = flags['client-secret'];\\n\\nif (!clientId) die('Missing --client-id');\\nif (!clientSecret) die('Missing --client-secret');\\n\\nconst outPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\\nfs.mkdirSync(path.dirname(outPath), { recursive: true });\\nfs.writeFileSync(outPath, JSON.stringify({ client_id: String(clientId), client_secret: String(clientSecret) }, null, 2));\\nconsole.log(`Saved Asana OAuth credentials to: ${outPath}`);\\n\"}"},{"type":"toolCall","id":"call_NO87WD6vt3n6JEgN9uJZ4w9z|fc_0776d4d0ce7a6f6b0169b756122fdc81909bb0f923f28e7072","name":"edit","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs","old_string":" * Usage:\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs authorize\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs token --code \"...\"\n */","new_string":" * Usage:\n * node asana/scripts/oauth_oob.mjs authorize\n * node asana/scripts/oauth_oob.mjs token --code \"...\"\n *\n * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json.\n */"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs\",\"old_string\":\" * Usage:\\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs authorize\\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs token --code \\\"...\\\"\\n */\",\"new_string\":\" * Usage:\\n * node asana/scripts/oauth_oob.mjs authorize\\n * node asana/scripts/oauth_oob.mjs token --code \\\"...\\\"\\n *\\n * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json.\\n */\"}"},{"type":"toolCall","id":"call_9ZggX27Kblf8LLhmY0xaiaqb|fc_0776d4d0ce7a6f6b0169b756122fe08190a31b48c172be25cb","name":"edit","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs","old_string":" if (!clientSecret) die('Missing ASANA_CLIENT_SECRET');\n","new_string":" if (!clientSecret) die('Missing ~/.clawdbot/asana/credentials.json client_secret');\n"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs\",\"old_string\":\" if (!clientSecret) die('Missing ASANA_CLIENT_SECRET');\\n\",\"new_string\":\" if (!clientSecret) die('Missing ~/.clawdbot/asana/credentials.json client_secret');\\n\"}"},{"type":"toolCall","id":"call_dsSzplyzzWayCVMotHB969J1|fc_0776d4d0ce7a6f6b0169b756122fe88190b42ebd6db45d6a85","name":"edit","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs","old_string":" * Reads token from ~/.clawdbot/asana/token.json\n * Requires ASANA_CLIENT_ID + ASANA_CLIENT_SECRET for refresh.\n */","new_string":" * Reads token from ~/.clawdbot/asana/token.json\n * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json for refresh.\n */"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs\",\"old_string\":\" * Reads token from ~/.clawdbot/asana/token.json\\n * Requires ASANA_CLIENT_ID + ASANA_CLIENT_SECRET for refresh.\\n */\",\"new_string\":\" * Reads token from ~/.clawdbot/asana/token.json\\n * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json for refresh.\\n */\"}"},{"type":"toolCall","id":"call_uNqc1XAiy9lhjXcAIPq4YB6U|fc_0776d4d0ce7a6f6b0169b756122fec8190ae25ce6cdb8a1931","name":"edit","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/SKILL.md","old_string":"### 1) Provide credentials (two options)\n\n**Option A (recommended for Clawdbot):** save to a local credentials file:\n```bash\nnode scripts/configure.mjs --client-id \"...\" --client-secret \"...\"\n```\nThis writes `~/.clawdbot/asana/credentials.json`.\n\n**Option B:** set environment variables (shell/session):\n- `ASANA_CLIENT_ID`\n- `ASANA_CLIENT_SECRET`\n\n### 2) Run OAuth\n","new_string":"### 1) Provide credentials\n\nSave OAuth client credentials to the local credentials file:\n```bash\nnode scripts/configure.mjs --client-id \"...\" --client-secret \"...\"\n```\nThis writes `~/.clawdbot/asana/credentials.json`.\n\n### 2) Run OAuth\n"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/SKILL.md\",\"old_string\":\"### 1) Provide credentials (two options)\\n\\n**Option A (recommended for Clawdbot):** save to a local credentials file:\\n```bash\\nnode scripts/configure.mjs --client-id \\\"...\\\" --client-secret \\\"...\\\"\\n```\\nThis writes `~/.clawdbot/asana/credentials.json`.\\n\\n**Option B:** set environment variables (shell/session):\\n- `ASANA_CLIENT_ID`\\n- `ASANA_CLIENT_SECRET`\\n\\n### 2) Run OAuth\\n\",\"new_string\":\"### 1) Provide credentials\\n\\nSave OAuth client credentials to the local credentials file:\\n```bash\\nnode scripts/configure.mjs --client-id \\\"...\\\" --client-secret \\\"...\\\"\\n```\\nThis writes `~/.clawdbot/asana/credentials.json`.\\n\\n### 2) Run OAuth\\n\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":3524,"output":1129,"cacheRead":115328,"cacheWrite":0,"totalTokens":119981,"cost":{"input":0.00881,"output":0.016935000000000002,"cacheRead":0.028832,"cacheWrite":0,"total":0.054577}},"stopReason":"toolUse","timestamp":1773622778808}} {"type":"message","id":"c103c241","parentId":"0aebfb06","timestamp":"2026-03-16T01:00:02.823Z","message":{"role":"toolResult","toolCallId":"call_bvsRr9GDP2i03Qg8jGfCYrPy|fc_0776d4d0ce7a6f6b0169b756122fcc8190b9fa4c4f52711cc3","toolName":"write","content":[{"type":"text","text":"Successfully wrote 1365 bytes to /home/ubuntu/.agents/skills/asana/scripts/configure.mjs"}],"isError":false,"timestamp":1773622802812}} {"type":"message","id":"a2e9b2d3","parentId":"c103c241","timestamp":"2026-03-16T01:00:02.843Z","message":{"role":"toolResult","toolCallId":"call_NO87WD6vt3n6JEgN9uJZ4w9z|fc_0776d4d0ce7a6f6b0169b756122fdc81909bb0f923f28e7072","toolName":"edit","content":[{"type":"text","text":"Successfully replaced text in /home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs."}],"details":{"diff":" ...\n 2 /**\n 3 * Asana OAuth (OOB/manual code paste) helper.\n 4 *\n 5 * Usage:\n- 6 * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs authorize\n- 7 * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs token --code \"...\"\n+ 6 * node asana/scripts/oauth_oob.mjs authorize\n+ 7 * node asana/scripts/oauth_oob.mjs token --code \"...\"\n+ 8 *\n+ 9 * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json.\n 8 */\n 9 \n 10 import fs from 'node:fs';\n 11 import os from 'node:os';\n ...","firstChangedLine":6},"isError":false,"timestamp":1773622802831}} {"type":"message","id":"e320f451","parentId":"a2e9b2d3","timestamp":"2026-03-16T01:00:02.854Z","message":{"role":"toolResult","toolCallId":"call_9ZggX27Kblf8LLhmY0xaiaqb|fc_0776d4d0ce7a6f6b0169b756122fe08190a31b48c172be25cb","toolName":"edit","content":[{"type":"text","text":"Successfully replaced text in /home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs."}],"details":{"diff":" ...\n 115 return;\n 116 }\n 117 \n 118 if (cmd === 'token') {\n-119 if (!clientSecret) die('Missing ASANA_CLIENT_SECRET');\n+119 if (!clientSecret) die('Missing ~/.clawdbot/asana/credentials.json client_secret');\n 120 const code = flags.code;\n 121 if (!code || typeof code !== 'string') die('Missing --code');\n 122 \n 123 const data = await postForm(TOKEN_URL, {\n ...","firstChangedLine":119},"isError":false,"timestamp":1773622802843}} {"type":"message","id":"d4b4c27b","parentId":"e320f451","timestamp":"2026-03-16T01:00:02.866Z","message":{"role":"toolResult","toolCallId":"call_dsSzplyzzWayCVMotHB969J1|fc_0776d4d0ce7a6f6b0169b756122fe88190b42ebd6db45d6a85","toolName":"edit","content":[{"type":"text","text":"Successfully replaced text in /home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs."}],"details":{"diff":" ...\n 2 /**\n 3 * Minimal Asana API CLI with OAuth refresh.\n 4 *\n 5 * Reads token from ~/.clawdbot/asana/token.json\n- 6 * Requires ASANA_CLIENT_ID + ASANA_CLIENT_SECRET for refresh.\n+ 6 * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json for refresh.\n 7 */\n 8 \n 9 import fs from 'node:fs';\n 10 import os from 'node:os';\n ...","firstChangedLine":6},"isError":false,"timestamp":1773622802855}} {"type":"message","id":"0b29030b","parentId":"d4b4c27b","timestamp":"2026-03-16T01:00:02.886Z","message":{"role":"toolResult","toolCallId":"call_uNqc1XAiy9lhjXcAIPq4YB6U|fc_0776d4d0ce7a6f6b0169b756122fec8190ae25ce6cdb8a1931","toolName":"edit","content":[{"type":"text","text":"Successfully replaced text in /home/ubuntu/.agents/skills/asana/SKILL.md."}],"details":{"diff":" ...\n 22 - Enable scopes you will need (typical: `tasks:read`, `tasks:write`, `projects:read`)\n 23 - Set redirect URI to the OOB value (manual code):\n 24 - `urn:ietf:wg:oauth:2.0:oob`\n 25 \n- 26 ### 1) Provide credentials (two options)\n+ 26 ### 1) Provide credentials\n 27 \n- 28 **Option A (recommended for Clawdbot):** save to a local credentials file:\n+ 28 Save OAuth client credentials to the local credentials file:\n 29 ```bash\n 30 node scripts/configure.mjs --client-id \"...\" --client-secret \"...\"\n 31 ```\n 32 This writes `~/.clawdbot/asana/credentials.json`.\n 33 \n- 34 **Option B:** set environment variables (shell/session):\n- 35 - `ASANA_CLIENT_ID`\n- 36 - `ASANA_CLIENT_SECRET`\n- 37 \n 38 ### 2) Run OAuth\n 39 From the repo root:\n 40 \n 41 1) Print the authorize URL:\n ...","firstChangedLine":26},"isError":false,"timestamp":1773622802866}} {"type":"message","id":"544fa8d5","parentId":"0b29030b","timestamp":"2026-03-16T01:00:09.592Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b75616a7808190a73d14202b20aa04\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1YZCL5iOCsCLDAKFkQiaHdYoYoan0SqhVzulUspZXWKXPNCfGCmdlaqvNAhiN4WFXVx5KIvKkAbqBFJvVK0c0LZmnA0D87yZll3bR-UNFpXnQPDuOcDop3xEwzee0hltqrji9hjQjRxZiOWDSJPH1DWmvcyuY3625Bq-hEBGPWKgSA0ndBJO5Ypr3AjXRFIY3dMnWVNgNoCWfaXNP9bdgSCr8tVzKObGD10GA2ztJL4KbIhcQVlO_Q6Td3dcECYVfj3bnQ_6XbzA3W4ZVdfkahMBdO14OwDMFeoQv5VwXzL2f0dHKzsV5U0I7csY1DYt8JFlVjpeUJvhrzB0lVVtpAzkNekzhHd5CVzUtC9vOphUysjim6fqOtMPXLCUCs28EoYdIv_g2a-leIg1srZ8rchFgJAShjkB-CkuR2d6tiCeLBoHkmqCvPWozrr_zXspA_CdwSa_aG7JOjqgv3YwQLQbwhVd3PNjCvZWZJYWPzT7oec8_6UNR9bXY6KxlAtnUwwHeZeYJOXKtf6ztenusraTtsnS49V2g5BNyw6H5WNFL_rbS-xp2FJSerJw_3G3xMuBXEtNYTKstBR5TjXhtVgKkjko_gNuJMCVl-ccs4h84cWHGP8TcfiM6L7i0_vjmxZUuOxwxFbynqB0-zNHMe_wz121oJ4Ice9W0LxtlUIM0WgXkn1JoLfxaz5Qv3Sk84BJgzxXkjkVdruPTrTARjdhQMNBh51afomdZyXf-id2TTsHigvZ8XaYaL7IIuiWkEKEX46Z5UMdpjLvJr0QNkDEI9GiBdEC08g3uOxHmxPbdmD8Pvdj9WWNS1Wyl1p8iYF9-REDsADhNgixvnPVw1wlJBrRATMIglJObw-wQc7Pvw_O69BXpK-mXr1tMUmliQr\",\"summary\":[]}"},{"type":"toolCall","id":"call_uwKPRmob6F8UgSY9Ky0L1e0Y|fc_0776d4d0ce7a6f6b0169b756190df88190b8b94861afd69a7f","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/SKILL.md"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/SKILL.md\"}"},{"type":"toolCall","id":"call_N75uQlokz9V2Jb60hZP5Ce3K|fc_0776d4d0ce7a6f6b0169b756190e088190843f531b3c4e5879","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/configure.mjs"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/configure.mjs\"}"},{"type":"toolCall","id":"call_NvSfYOYnNQSWKkcSIztOsR0A|fc_0776d4d0ce7a6f6b0169b756190e108190b8439097d7d77856","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs","offset":1,"limit":80},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs\",\"offset\":1,\"limit\":80}"},{"type":"toolCall","id":"call_KvD1nuiyJf9AmIMtnjziwwbq|fc_0776d4d0ce7a6f6b0169b756190e1881909a4d73b041c6711d","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs","offset":1,"limit":40},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs\",\"offset\":1,\"limit\":40}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":93277,"output":163,"cacheRead":24064,"cacheWrite":0,"totalTokens":117504,"cost":{"input":0.23319250000000002,"output":0.002445,"cacheRead":0.006016,"cacheWrite":0,"total":0.24165350000000002}},"stopReason":"toolUse","timestamp":1773622802887}} {"type":"message","id":"91e47fa2","parentId":"544fa8d5","timestamp":"2026-03-16T01:00:09.664Z","message":{"role":"toolResult","toolCallId":"call_uwKPRmob6F8UgSY9Ky0L1e0Y|fc_0776d4d0ce7a6f6b0169b756190df88190b8b94861afd69a7f","toolName":"read","content":[{"type":"text","text":"---\nname: asana\ndescription: \"Integrate Asana with Clawdbot via the Asana REST API. Use when you need to list/search/create/update Asana tasks/projects/workspaces, or to set up Asana OAuth (authorization code grant) for a personal local-only integration (OOB/manual code paste).\"\n---\n\n# Asana (Clawdbot skill)\n\nThis skill is designed for a **personal local-only** Asana integration using **OAuth** with an **out-of-band/manual code paste** flow.\n\n## What this skill provides\n- A small Node CLI to:\n - generate the Asana authorize URL\n - exchange an authorization code for access/refresh tokens\n - auto-refresh the access token\n - make basic API calls (e.g. `/users/me`, `/workspaces`, tasks)\n\n## Setup (OAuth, OOB/manual code)\n\n### 0) Create an Asana app\nIn Asana Developer Console (My apps):\n- Create app\n- Enable scopes you will need (typical: `tasks:read`, `tasks:write`, `projects:read`)\n- Set redirect URI to the OOB value (manual code):\n - `urn:ietf:wg:oauth:2.0:oob`\n\n### 1) Provide credentials\n\nSave OAuth client credentials to the local credentials file:\n```bash\nnode scripts/configure.mjs --client-id \"...\" --client-secret \"...\"\n```\nThis writes `~/.clawdbot/asana/credentials.json`.\n\n### 2) Run OAuth\nFrom the repo root:\n\n1) Print the authorize URL:\n```bash\nnode scripts/oauth_oob.mjs authorize\n```\n2) Open the printed URL, click **Allow**, copy the code.\n3) Exchange code and save tokens locally:\n```bash\nnode scripts/oauth_oob.mjs token --code \"PASTE_CODE_HERE\"\n```\n\nTokens are stored at:\n- `~/.clawdbot/asana/token.json`\n\n## Chat usage (support both explicit + natural language)\n\nYou can use either:\n- **Explicit commands**: start the message with `/asana ...`\n- **Natural language**: e.g. “list tasks assigned to me”\n\nFor Clawdbot, implement the mapping by translating the user request into the appropriate `asana_api.mjs` command.\n\nExamples:\n- `/asana tasks-assigned` → `tasks-assigned --assignee me`\n- “list tasks assigned to me” → `tasks-assigned --assignee me`\n- “list all tasks in ” → resolve `` to a project gid, then `tasks-in-project --project `\n- “list tasks due date from 2026-01-01 to 2026-01-15” → `search-tasks --assignee me --due_on.after 2026-01-01 --due_on.before 2026-01-15`\n\n(Optional helper) `scripts/asana_chat.mjs` can map common phrases to a command skeleton.\n\n## Using the API helper\n\nSanity check (who am I):\n```bash\nnode scripts/asana_api.mjs me\n```\n\nList workspaces:\n```bash\nnode scripts/asana_api.mjs workspaces\n```\n\nSet a default workspace (optional):\n```bash\nnode scripts/asana_api.mjs set-default-workspace --workspace \n```\nAfter that, you can omit `--workspace` for commands that support it.\n\nList projects in a workspace (explicit):\n```bash\nnode scripts/asana_api.mjs projects --workspace \n```\nList projects using the default workspace:\n```bash\nnode scripts/asana_api.mjs projects\n```\n\nList tasks in a project:\n```bash\nnode scripts/asana_api.mjs tasks-in-project --project \n```\n\nList tasks assigned to me (workspace required by Asana):\n```bash\nnode scripts/asana_api.mjs tasks-assigned --workspace --assignee me\n```\nOr using the default workspace:\n```bash\nnode scripts/asana_api.mjs tasks-assigned --assignee me\n```\n\nSearch tasks (advanced search):\n```bash\nnode scripts/asana_api.mjs search-tasks --workspace --text \"release\" --assignee me\n# also supports convenience: --project \n```\n\nView a task:\n```bash\nnode scripts/asana_api.mjs task \n```\n\nMark a task complete:\n```bash\nnode scripts/asana_api.mjs complete-task \n```\n\nUpdate a task:\n```bash\nnode scripts/asana_api.mjs update-task --name \"New title\" --due_on 2026-02-01\n```\n\nComment on a task:\n```bash\nnode scripts/asana_api.mjs comment --text \"Update: shipped\"\n```\n\nCreate a task:\n```bash\nnode scripts/asana_api.mjs create-task --workspace --name \"Test task\" --notes \"from clawdbot\" --projects \n```\n\n## Notes / gotchas\n- OAuth access tokens expire; refresh tokens are used to obtain new access tokens.\n- This skill reads client credentials only from `~/.clawdbot/asana/credentials.json`.\n- If you later want multi-user support, replace OOB with a real redirect/callback.\n- Don’t log tokens.\n"}],"isError":false,"timestamp":1773622809652}} {"type":"message","id":"3728e02b","parentId":"91e47fa2","timestamp":"2026-03-16T01:00:09.675Z","message":{"role":"toolResult","toolCallId":"call_N75uQlokz9V2Jb60hZP5Ce3K|fc_0776d4d0ce7a6f6b0169b756190e088190843f531b3c4e5879","toolName":"read","content":[{"type":"text","text":"#!/usr/bin/env node\n/**\n * Configure local-only Asana OAuth credentials for the Clawdbot Asana skill.\n *\n * Writes to: ~/.clawdbot/asana/credentials.json\n *\n * Usage:\n * node skills/asana/scripts/configure.mjs --client-id \"...\" --client-secret \"...\"\n *\n * Notes:\n * - Keep this file secret.\n * - This helper writes the only credential source used by the skill.\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nfunction die(msg) {\n console.error(msg);\n process.exit(1);\n}\n\nfunction parseArgs(argv) {\n const flags = {};\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (a.startsWith('--')) {\n const k = a.slice(2);\n const v = argv[i + 1] && !argv[i + 1].startsWith('--') ? argv[++i] : true;\n flags[k] = v;\n }\n }\n return flags;\n}\n\nconst flags = parseArgs(process.argv.slice(2));\nconst clientId = flags['client-id'];\nconst clientSecret = flags['client-secret'];\n\nif (!clientId) die('Missing --client-id');\nif (!clientSecret) die('Missing --client-secret');\n\nconst outPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\nfs.mkdirSync(path.dirname(outPath), { recursive: true });\nfs.writeFileSync(outPath, JSON.stringify({ client_id: String(clientId), client_secret: String(clientSecret) }, null, 2));\nconsole.log(`Saved Asana OAuth credentials to: ${outPath}`);\n"}],"isError":false,"timestamp":1773622809664}} {"type":"message","id":"0de1acac","parentId":"3728e02b","timestamp":"2026-03-16T01:00:09.687Z","message":{"role":"toolResult","toolCallId":"call_NvSfYOYnNQSWKkcSIztOsR0A|fc_0776d4d0ce7a6f6b0169b756190e108190b8439097d7d77856","toolName":"read","content":[{"type":"text","text":"#!/usr/bin/env node\n/**\n * Asana OAuth (OOB/manual code paste) helper.\n *\n * Usage:\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs authorize\n * ASANA_CLIENT_ID=... ASANA_CLIENT_SECRET=... node asana/scripts/oauth_oob.mjs token --code \"...\"\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst AUTH_URL = 'https://app.asana.com/-/oauth_authorize';\nconst TOKEN_URL = 'https://app.asana.com/-/oauth_token';\nconst REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob';\n\nfunction die(msg) {\n console.error(msg);\n process.exit(1);\n}\n\nfunction parseArgs(argv) {\n const [cmd, ...rest] = argv;\n const flags = {};\n for (let i = 0; i < rest.length; i++) {\n const a = rest[i];\n if (a.startsWith('--')) {\n const k = a.slice(2);\n const v = rest[i + 1] && !rest[i + 1].startsWith('--') ? rest[++i] : true;\n flags[k] = v;\n }\n }\n return { cmd, flags };\n}\n\nfunction tokenPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'token.json');\n}\n\nfunction ensureDir(p) {\n fs.mkdirSync(path.dirname(p), { recursive: true });\n}\n\nfunction saveToken(json) {\n const p = tokenPath();\n ensureDir(p);\n fs.writeFileSync(p, JSON.stringify(json, null, 2));\n console.log(`Saved token to: ${p}`);\n}\n\nfunction urlEncode(params) {\n const u = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) continue;\n u.set(k, String(v));\n }\n return u.toString();\n}\n\nasync function postForm(url, params) {\n const res = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: urlEncode(params),\n });\n const text = await res.text();\n let data;\n try {\n data = JSON.parse(text);\n } catch {\n throw new Error(`Non-JSON response (${res.status}): ${text.slice(0, 300)}`);\n }\n if (!res.ok) {\n throw new Error(`HTTP ${res.status}: ${JSON.stringify(data)}`);\n }\n return data;\n}\n\n[78 more lines in file. Use offset=81 to continue.]"}],"isError":false,"timestamp":1773622809676}} {"type":"message","id":"5c3f17db","parentId":"0de1acac","timestamp":"2026-03-16T01:00:09.698Z","message":{"role":"toolResult","toolCallId":"call_KvD1nuiyJf9AmIMtnjziwwbq|fc_0776d4d0ce7a6f6b0169b756190e1881909a4d73b041c6711d","toolName":"read","content":[{"type":"text","text":"#!/usr/bin/env node\n/**\n * Minimal Asana API CLI with OAuth refresh.\n *\n * Reads token from ~/.clawdbot/asana/token.json\n * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json for refresh.\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst API_BASE = 'https://app.asana.com/api/1.0';\nconst TOKEN_URL = 'https://app.asana.com/-/oauth_token';\n\nfunction die(msg) {\n console.error(msg);\n process.exit(1);\n}\n\nfunction tokenPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'token.json');\n}\n\nfunction configPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'config.json');\n}\n\nfunction loadConfig() {\n const p = configPath();\n if (!fs.existsSync(p)) return {};\n try {\n return JSON.parse(fs.readFileSync(p, 'utf-8')) || {};\n } catch {\n return {};\n }\n}\n\nfunction loadToken() {\n const p = tokenPath();\n\n[359 more lines in file. Use offset=41 to continue.]"}],"isError":false,"timestamp":1773622809687}} {"type":"message","id":"ddb14f34","parentId":"5c3f17db","timestamp":"2026-03-16T01:00:16.584Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Rewriting oauth_oob**\n\nI notice the oauth_oob header is still stale, which could be because the replacement didn’t match earlier content. It seems I need to rewrite the entire oauth_oob.mjs to ensure everything is correct. I might also need to patch the missing clientSecret message. So, I should read through the remaining lines from offset 81 to 160 to see what needs fixing. Let's get into that!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7561bc64c819088056ffe0ffcb442\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1YgFnBSlANTvPhsIkFLuogZkfacqolfNV0c58D5PBMcr8W7zpkLMLXwCIaqGkA30fCP_1Kod1n3Q5sbFJ_RpR21S_i9u5XneQ3OqswjJHyO-EoOWinEuM8LktPEoYFUiWDLTPEHhPewprYmP-ZUqGgn6ijgguGNoiqXhJNM6zVR0JIVmyrT6rWXmQYa6OmeioTxEbjZjzvAU4BeDtIToXMeehFnR1LLq3_-xmMYpMkHTWLzjenJ2VV7L9KWmLeogj0B6JwEAFABoxhdx3QGZ24xZCwNRgVY9zce1Mfips2uIdc89Ksp2Ek06XlZIWBi2WsMMdYS2TaOPeGDcSvBFJLeyqEA71sAeWtZ25CxtO6zQpe8S3-27rOzXaNse2Iq_cHSYGMGlz5-pbVCT-uBnHoX-Zpt544NGR1wWy0RwKuKVvEVx1GBQMwh83ybfATTmUiEcQ_BfJLzrFij8N-OnCHBqQ8P7qCedPDqicCpqHoMTtrV7rXe0qtsXcJoh_j_0HDkylmu_NeWdQWWkooQbi_1Qux6IHZkxJY_slAkCCekQDMKwF-JMvkrQRUwjt-7OQ1DrmVFChdMNBrWBicm49F95aQ5MkpSiAQ6qdHRUeurnxssuboXPMUoVDjJw3VqaBv7mwafL3eTCNrkU7mKwVB0w-DYM0WnA_AZu1m0R1Nr4XEdrcQnEJvzshw2m0h8w4gi1o8eMgSe-B5BkellUumguxoGBuU1vv0N6cAUYFDeg6YhV8jIQFaeCoZxnrSRJNsTfUVHEgTdZ9skWL-Upv_snQzYOMOib5epvK2jGYi8Hg4Z_5lX1nNetZ_-iohnp7M4clHI3qXIDJ8hKZSXdiP4r684fxjP4b4SbjJo6mubguM2EF0OB8uuYAdVjr0-pKzv2GUdAkZpmoTvg3BH3sc1dHTL94AVrCXrynBYaozP03X9Q0L4Hm6lhUsepTKrH8R-_M8vvIlZ5O4JuKuqtl-ASGJ_fE7Gym686hI_B__uWZuncfLRHDYlegUpbjHPBY_yuY5SDKI1akfL8kYaUeRZT7d8cIOt-9pgp7Enm-Scvl8vLXGR3rogaiLgjVMdQbcAS31Of8x7hcUrNpIlneEpaUWs293lq9QJu7k626P3m90Gj2ZLmk1XbgPDomf7WK26\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Rewriting oauth_oob**\\n\\nI notice the oauth_oob header is still stale, which could be because the replacement didn’t match earlier content. It seems I need to rewrite the entire oauth_oob.mjs to ensure everything is correct. I might also need to patch the missing clientSecret message. So, I should read through the remaining lines from offset 81 to 160 to see what needs fixing. Let's get into that!\"}]}"},{"type":"toolCall","id":"call_cPTPt1eqLw3SaEhZpF1rXZpQ|fc_0776d4d0ce7a6f6b0169b756203224819082d8e87e23b53bd3","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs","offset":81,"limit":120},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs\",\"offset\":81,\"limit\":120}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":2495,"output":94,"cacheRead":117376,"cacheWrite":0,"totalTokens":119965,"cost":{"input":0.006237500000000001,"output":0.00141,"cacheRead":0.029344,"cacheWrite":0,"total":0.0369915}},"stopReason":"toolUse","timestamp":1773622809711}} {"type":"message","id":"0938bc0e","parentId":"ddb14f34","timestamp":"2026-03-16T01:00:16.609Z","message":{"role":"toolResult","toolCallId":"call_cPTPt1eqLw3SaEhZpF1rXZpQ|fc_0776d4d0ce7a6f6b0169b756203224819082d8e87e23b53bd3","toolName":"read","content":[{"type":"text","text":"\nasync function main() {\n const { cmd, flags } = parseArgs(process.argv.slice(2));\n let clientId;\n let clientSecret;\n\n try {\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n clientId = creds.client_id;\n clientSecret = creds.client_secret;\n } catch {\n // ignore\n }\n\n if (!cmd) die('Command required: authorize | token');\n if (!clientId) die('Missing ~/.clawdbot/asana/credentials.json (run configure.mjs first)');\n\n if (cmd === 'authorize') {\n const scope = flags.scope || 'default';\n const state = flags.state || crypto.randomUUID();\n // Asana supports code challenge / PKCE; OOB is typically used for simple flows.\n const url = `${AUTH_URL}?${urlEncode({\n client_id: clientId,\n redirect_uri: REDIRECT_URI,\n response_type: 'code',\n state,\n // If you want explicit scopes, pass --scope \"tasks:read tasks:write\"\n ...(scope !== 'default' ? { scope } : {}),\n })}`;\n console.log('Open this URL in your browser, click Allow, then copy the code:');\n console.log(url);\n console.log('\\nThen run:');\n console.log(`node asana/scripts/oauth_oob.mjs token --code \"PASTE_CODE\"`);\n return;\n }\n\n if (cmd === 'token') {\n if (!clientSecret) die('Missing ~/.clawdbot/asana/credentials.json client_secret');\n const code = flags.code;\n if (!code || typeof code !== 'string') die('Missing --code');\n\n const data = await postForm(TOKEN_URL, {\n grant_type: 'authorization_code',\n client_id: clientId,\n client_secret: clientSecret,\n redirect_uri: REDIRECT_URI,\n code,\n });\n\n // Normalize with a timestamp; Asana returns expires_in (seconds)\n const now = Date.now();\n const token = {\n ...data,\n obtained_at_ms: now,\n expires_at_ms: typeof data.expires_in === 'number' ? now + data.expires_in * 1000 : null,\n };\n\n saveToken(token);\n return;\n }\n\n die(`Unknown command: ${cmd}`);\n}\n\nmain().catch((e) => die(String(e?.stack || e)));\null,\n };\n\n saveToken(token);\n return;\n }\n\n die(`Unknown command: ${cmd}`);\n}\n\nmain().catch((e) => die(String(e?.stack || e)));\n"}],"isError":false,"timestamp":1773622816598}} {"type":"message","id":"b001dc87","parentId":"0938bc0e","timestamp":"2026-03-16T01:00:45.311Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7562226748190831453b4c0c03a87\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1YlP_FMCUprf_NfXeCIQlnjhopJE00Bf-dXQoWfQ8hBlqu0ozGeqkh0brOS3LVGjeglBVGRgd8CSf0Rh4ng9szg-JLMAMA_GPsdOt4skH0e0aY0BWU21BSBHpC_SfbPTN20jzI6OHvYCVCkymn4ikhMgHhofiHRc_B7EoUZpecVkOl-fbvteS_aANGXKQMay5eFFIYi7nVkfEXprQD8RitxFGZd0qy7VKWew8R_iyYAgq0SiP1_EpAmgUzgdf_1ZSOdlaU8k5rHvayKt6mXi9eRuOG66PD9TBsuKGmvjeSzBtgtk8Xu4ehfWm_yoPy6E7AQP2VdvnFZ1Ycu7pnbU2CivMhlCAsInbT3PgQ1aiNMzwqTcJn7ZnuJEPNSNKGXDdII27n2-CbNrxWDAXgOEwYX-E3FcsPlCutpdjgFKu0xjb5eTQPPpAMsCY8qd4nWdAb6JkaiTVWmAKkWU282OBzn_PIDlkMJZh0-YzlMb0i05T2JCH-5DSkyHiVHykvSFlVX2pjiMqRWFtKUfq7hpfcXe5g09nyc38Ekxbu5bel-EFRjAlThp6zDgZLJ5rWfglukTGR7usge064Xra2Ao-E-hrs98Ubu6KjpopnrRbdACM8osPmV85N_gI23ch7dH6SXGjh2gqP1ZYzHcuM3tC7kqLIqyiXLVg8y5nEEg7TG0EH67qMY-_NmSiQ89fXoD7QDqIrDuUYxMoQiFhzWoMJwTk3BL_MqOEOcDHX9o4owoiQiR7A_3zjLFTVESos5XwlR7lPUGlg7EJvgHTQrtgsLpmFQDQ2mNNoSYRwM5aMIKc3S_zGVuJPh5G1CRcE37fKU3zQUP_0c1vD3Bq0RzPeNpdLteBAGjo8I5635Q_3-QCXPZdVgL5aLdfczFWz0f70-IHEGIzMzXaqczzUqnxPv09gTVJZCVW3bQneg2AUhi92WMgb-5ugXF7X2n40w3nf8eYwi6-qIVJcnSwQerhBe1B2LuxuTnxrPDP5J4JQk0gwpc147yFk_UNRf4tZQPARkO4Wz5MI4GIF_DyMimU8TYZyo6PACjR2n1KzN2sHRV8CqWM2UbceLQ2L4Zl569TrYhHTtgiqYZ1JZMr6VMpdY60NS99UeNs6G-FrlTcpmifKjk5UjxLbFhT_Am5dL2l3oxATo4qKdzomhUI6qd6c4-nsV608ixdIbzYoFEn9vNx86lg7zfe1fvmdS-T3gww4sdCVdIALvgabmrNvUcmXCDt_1Ezj9kxNUEoQ2vqEBQJX6SiXNd70-ZpY_ktvObsr5332JGEtbmTx8ChY7ckVawnbsWuMzee9xI3Nw2m-dF_HhAEfP1mGCPSTiBQyNCWZ0kHaIGBUkOeAQb4nw0Y0rUd_pD6qXMefj7AiKscFtQqV1aczHeRlK_Zd5dI5U4Hwld6J1O75Yb1mQS9Jdv6qDOMvBUElpl1FGYdF_5gdXbu2eZTgPNKLcKzeOg0K35I_RUetS6l-Dbnbi3rGkfAkBOi0ufnjcVeEtEB7ZO82o9W8keIWjTsIzSVgsM90XJNyOoSryZCofi7-NH-eTPe21McnzCCoJn_5LO9I8WgfeQ3OCNjQX2Ti62W669TwXvlac\",\"summary\":[]}"},{"type":"toolCall","id":"call_X2IqWjbBmHvXNBc0tyKFiMwr|fc_0776d4d0ce7a6f6b0169b756258fe08190ba16ed7b9967af81","name":"write","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs","content":"#!/usr/bin/env node\n/**\n * Asana OAuth (OOB/manual code paste) helper.\n *\n * Usage:\n * node asana/scripts/oauth_oob.mjs authorize\n * node asana/scripts/oauth_oob.mjs token --code \"...\"\n *\n * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json.\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst AUTH_URL = 'https://app.asana.com/-/oauth_authorize';\nconst TOKEN_URL = 'https://app.asana.com/-/oauth_token';\nconst REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob';\n\nfunction die(msg) {\n console.error(msg);\n process.exit(1);\n}\n\nfunction parseArgs(argv) {\n const [cmd, ...rest] = argv;\n const flags = {};\n for (let i = 0; i < rest.length; i++) {\n const a = rest[i];\n if (a.startsWith('--')) {\n const k = a.slice(2);\n const v = rest[i + 1] && !rest[i + 1].startsWith('--') ? rest[++i] : true;\n flags[k] = v;\n }\n }\n return { cmd, flags };\n}\n\nfunction tokenPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'token.json');\n}\n\nfunction ensureDir(p) {\n fs.mkdirSync(path.dirname(p), { recursive: true });\n}\n\nfunction saveToken(json) {\n const p = tokenPath();\n ensureDir(p);\n fs.writeFileSync(p, JSON.stringify(json, null, 2));\n console.log(`Saved token to: ${p}`);\n}\n\nfunction urlEncode(params) {\n const u = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) continue;\n u.set(k, String(v));\n }\n return u.toString();\n}\n\nasync function postForm(url, params) {\n const res = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: urlEncode(params),\n });\n const text = await res.text();\n let data;\n try {\n data = JSON.parse(text);\n } catch {\n throw new Error(`Non-JSON response (${res.status}): ${text.slice(0, 300)}`);\n }\n if (!res.ok) {\n throw new Error(`HTTP ${res.status}: ${JSON.stringify(data)}`);\n }\n return data;\n}\n\nasync function main() {\n const { cmd, flags } = parseArgs(process.argv.slice(2));\n let clientId;\n let clientSecret;\n\n try {\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n clientId = creds.client_id;\n clientSecret = creds.client_secret;\n } catch {\n // ignore\n }\n\n if (!cmd) die('Command required: authorize | token');\n if (!clientId) die('Missing ~/.clawdbot/asana/credentials.json (run configure.mjs first)');\n\n if (cmd === 'authorize') {\n const scope = flags.scope || 'default';\n const state = flags.state || crypto.randomUUID();\n const url = `${AUTH_URL}?${urlEncode({\n client_id: clientId,\n redirect_uri: REDIRECT_URI,\n response_type: 'code',\n state,\n ...(scope !== 'default' ? { scope } : {}),\n })}`;\n console.log('Open this URL in your browser, click Allow, then copy the code:');\n console.log(url);\n console.log('\\nThen run:');\n console.log(`node asana/scripts/oauth_oob.mjs token --code \"PASTE_CODE\"`);\n return;\n }\n\n if (cmd === 'token') {\n if (!clientSecret) die('Missing ~/.clawdbot/asana/credentials.json client_secret');\n const code = flags.code;\n if (!code || typeof code !== 'string') die('Missing --code');\n\n const data = await postForm(TOKEN_URL, {\n grant_type: 'authorization_code',\n client_id: clientId,\n client_secret: clientSecret,\n redirect_uri: REDIRECT_URI,\n code,\n });\n\n const now = Date.now();\n const token = {\n ...data,\n obtained_at_ms: now,\n expires_at_ms: typeof data.expires_in === 'number' ? now + data.expires_in * 1000 : null,\n };\n\n saveToken(token);\n return;\n }\n\n die(`Unknown command: ${cmd}`);\n}\n\nmain().catch((e) => die(String(e?.stack || e)));\n"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs\",\"content\":\"#!/usr/bin/env node\\n/**\\n * Asana OAuth (OOB/manual code paste) helper.\\n *\\n * Usage:\\n * node asana/scripts/oauth_oob.mjs authorize\\n * node asana/scripts/oauth_oob.mjs token --code \\\"...\\\"\\n *\\n * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json.\\n */\\n\\nimport fs from 'node:fs';\\nimport os from 'node:os';\\nimport path from 'node:path';\\n\\nconst AUTH_URL = 'https://app.asana.com/-/oauth_authorize';\\nconst TOKEN_URL = 'https://app.asana.com/-/oauth_token';\\nconst REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob';\\n\\nfunction die(msg) {\\n console.error(msg);\\n process.exit(1);\\n}\\n\\nfunction parseArgs(argv) {\\n const [cmd, ...rest] = argv;\\n const flags = {};\\n for (let i = 0; i < rest.length; i++) {\\n const a = rest[i];\\n if (a.startsWith('--')) {\\n const k = a.slice(2);\\n const v = rest[i + 1] && !rest[i + 1].startsWith('--') ? rest[++i] : true;\\n flags[k] = v;\\n }\\n }\\n return { cmd, flags };\\n}\\n\\nfunction tokenPath() {\\n return path.join(os.homedir(), '.clawdbot', 'asana', 'token.json');\\n}\\n\\nfunction ensureDir(p) {\\n fs.mkdirSync(path.dirname(p), { recursive: true });\\n}\\n\\nfunction saveToken(json) {\\n const p = tokenPath();\\n ensureDir(p);\\n fs.writeFileSync(p, JSON.stringify(json, null, 2));\\n console.log(`Saved token to: ${p}`);\\n}\\n\\nfunction urlEncode(params) {\\n const u = new URLSearchParams();\\n for (const [k, v] of Object.entries(params)) {\\n if (v === undefined || v === null) continue;\\n u.set(k, String(v));\\n }\\n return u.toString();\\n}\\n\\nasync function postForm(url, params) {\\n const res = await fetch(url, {\\n method: 'POST',\\n headers: {\\n 'Content-Type': 'application/x-www-form-urlencoded',\\n },\\n body: urlEncode(params),\\n });\\n const text = await res.text();\\n let data;\\n try {\\n data = JSON.parse(text);\\n } catch {\\n throw new Error(`Non-JSON response (${res.status}): ${text.slice(0, 300)}`);\\n }\\n if (!res.ok) {\\n throw new Error(`HTTP ${res.status}: ${JSON.stringify(data)}`);\\n }\\n return data;\\n}\\n\\nasync function main() {\\n const { cmd, flags } = parseArgs(process.argv.slice(2));\\n let clientId;\\n let clientSecret;\\n\\n try {\\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\\n clientId = creds.client_id;\\n clientSecret = creds.client_secret;\\n } catch {\\n // ignore\\n }\\n\\n if (!cmd) die('Command required: authorize | token');\\n if (!clientId) die('Missing ~/.clawdbot/asana/credentials.json (run configure.mjs first)');\\n\\n if (cmd === 'authorize') {\\n const scope = flags.scope || 'default';\\n const state = flags.state || crypto.randomUUID();\\n const url = `${AUTH_URL}?${urlEncode({\\n client_id: clientId,\\n redirect_uri: REDIRECT_URI,\\n response_type: 'code',\\n state,\\n ...(scope !== 'default' ? { scope } : {}),\\n })}`;\\n console.log('Open this URL in your browser, click Allow, then copy the code:');\\n console.log(url);\\n console.log('\\\\nThen run:');\\n console.log(`node asana/scripts/oauth_oob.mjs token --code \\\"PASTE_CODE\\\"`);\\n return;\\n }\\n\\n if (cmd === 'token') {\\n if (!clientSecret) die('Missing ~/.clawdbot/asana/credentials.json client_secret');\\n const code = flags.code;\\n if (!code || typeof code !== 'string') die('Missing --code');\\n\\n const data = await postForm(TOKEN_URL, {\\n grant_type: 'authorization_code',\\n client_id: clientId,\\n client_secret: clientSecret,\\n redirect_uri: REDIRECT_URI,\\n code,\\n });\\n\\n const now = Date.now();\\n const token = {\\n ...data,\\n obtained_at_ms: now,\\n expires_at_ms: typeof data.expires_in === 'number' ? now + data.expires_in * 1000 : null,\\n };\\n\\n saveToken(token);\\n return;\\n }\\n\\n die(`Unknown command: ${cmd}`);\\n}\\n\\nmain().catch((e) => die(String(e?.stack || e)));\\n\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":740,"output":1411,"cacheRead":119808,"cacheWrite":0,"totalTokens":121959,"cost":{"input":0.00185,"output":0.021165,"cacheRead":0.029952,"cacheWrite":0,"total":0.052967}},"stopReason":"toolUse","timestamp":1773622816622}} {"type":"message","id":"311d469b","parentId":"b001dc87","timestamp":"2026-03-16T01:00:45.343Z","message":{"role":"toolResult","toolCallId":"call_X2IqWjbBmHvXNBc0tyKFiMwr|fc_0776d4d0ce7a6f6b0169b756258fe08190ba16ed7b9967af81","toolName":"write","content":[{"type":"text","text":"Successfully wrote 3811 bytes to /home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs"}],"isError":false,"timestamp":1773622845332}} {"type":"message","id":"8d1b3436","parentId":"311d469b","timestamp":"2026-03-16T01:00:50.799Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Considering Asana API duplicates**\n\nI’m thinking about whether I need to rewrite the Asana API if there's any duplicate trailing content. I should probably inspect the end of the content to see if anything stands out or needs to be adjusted. It's essential to ensure everything is neat and organized, especially in APIs. Getting this right will help prevent any confusion later, so let's take a closer look and clarify if any changes are necessary.","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7563f91bc8190b2f64dc68c34bbe1\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1ZCNW7z6SdCHc7XyucfiW1wfGEbF8vwTrjxV7X1dHyzTS4UJZFRjJnE1r4LHebKQ3yADy_KqFPDjf70xTMblMSd6FWnTsxWlUeOf_MtovQ0yjw0Ye5dZ9kyHSKq67qDhg8N1YQ_a9Vx411h-LzCyPRMbOqJfMrPehqVqIIW2tXFpfvhGBgiRJosJRyO5wZCfM0WBxKNaVndcyNW4CuagCQyg3RQidY8rFtqXeJu4TEJ5JertiCX_8ZltLYc2cykqRiu2FVuJUq-XZvGcoWBXFAMFy_otpNNX92qU8oLVvgnlYTCakTWgIU76fHb59F6imkWJSTAT9eRTwV5Z4ec92Gv-HarUlGeKnjwQCi0e1Jjg4BaI-88V-q_oJigTUdGmDQjqabZDgqWyGKl6gCBOUVP_YB6bqTv2kN-W5K7N7SacUk3PxkV1IrULglPRF3aRuGe1x3SC61zFPUikU3M85seun78fLhHQtEdqn8AkCsLXKGfIpILqIbL_FdziZC8hQH4euEev_7ai5mnDBW5RQznMl6vqijKt9iAliiPQkbx9AaouhSxWVm7sE0oIGfpTpz1rx9VDySg5vFmPdzrQ-5--zOq0rT_NzU9SYyIefVVYgVT08SbVc0yagenZoQMd0m3RaDF7DsVW9WTGEICa176iZwQt5gKnw1OCfuQ2Iw_4rgvZs5pkh6mCKJVxCsDWhXPsta5UlltMwcPjnexZG0tEoLamO9WwJwlYMEEblew8Wvv7D3H9YI2T8C8SgRV63WBz-BslOT999ikyhU9HJX68echa6vBmReeeRzGxTo1AtFM9l7N90VpoApxberG5uUm_127CN5Z3PoaaRYHp88QTe4A3CiUcx_slYjR-uIM-x-QsUGQHaMMpCO1ojeACyPhvlHyzLEBUb8PDu535yfLcGwvWVi4TkZ-RTAR8hNKymw=\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Considering Asana API duplicates**\\n\\nI’m thinking about whether I need to rewrite the Asana API if there's any duplicate trailing content. I should probably inspect the end of the content to see if anything stands out or needs to be adjusted. It's essential to ensure everything is neat and organized, especially in APIs. Getting this right will help prevent any confusion later, so let's take a closer look and clarify if any changes are necessary.\"}]}"},{"type":"toolCall","id":"call_T2CHW2jvU1wYYfxMu2nYFz5d|fc_0776d4d0ce7a6f6b0169b7564259688190bd88825e4eab1ed9","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs","offset":330,"limit":80},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs\",\"offset\":330,\"limit\":80}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":136,"output":63,"cacheRead":121856,"cacheWrite":0,"totalTokens":122055,"cost":{"input":0.00034,"output":0.000945,"cacheRead":0.030463999999999998,"cacheWrite":0,"total":0.031749}},"stopReason":"toolUse","timestamp":1773622845354}} {"type":"message","id":"5e972204","parentId":"8d1b3436","timestamp":"2026-03-16T01:00:50.826Z","message":{"role":"toolResult","toolCallId":"call_T2CHW2jvU1wYYfxMu2nYFz5d|fc_0776d4d0ce7a6f6b0169b7564259688190bd88825e4eab1ed9","toolName":"read","content":[{"type":"text","text":" if (cmd === 'update-task') {\n const gid = flags.gid || positionals[0];\n if (!gid) die('Usage: update-task [--name ...] [--notes ...] [--due_on YYYY-MM-DD] [--completed true|false]');\n\n const data = {};\n if (flags.name) data.name = String(flags.name);\n if (flags.notes) data.notes = String(flags.notes);\n if (flags.due_on) data.due_on = String(flags.due_on);\n if (flags.completed !== undefined) data.completed = String(flags.completed) === 'true' || flags.completed === true;\n\n if (Object.keys(data).length === 0) die('No fields provided to update.');\n\n const r = await asanaPut(`/tasks/${gid}`, accessToken, { data });\n printJson(r);\n return;\n }\n\n if (cmd === 'complete-task') {\n const gid = flags.gid || positionals[0];\n if (!gid) die('Usage: complete-task ');\n const r = await asanaPut(`/tasks/${gid}`, accessToken, { data: { completed: true } });\n printJson(r);\n return;\n }\n\n if (cmd === 'comment') {\n const gid = flags.gid || flags.task || positionals[0];\n const text = flags.text;\n if (!gid) die('Usage: comment --text \"...\"');\n if (!text) die('Missing --text');\n // Stories API: POST /tasks/{task_gid}/stories\n const r = await asanaPost(`/tasks/${gid}/stories`, accessToken, { data: { text: String(text) } });\n printJson(r);\n return;\n }\n\n if (cmd === 'create-task') {\n const workspace = flags.workspace;\n const name = flags.name;\n const notes = flags.notes || '';\n const projects = flags.projects;\n if (!name) die('Missing --name');\n\n const data = { name, notes };\n if (workspace) data.workspace = String(workspace);\n if (projects) data.projects = csvList(projects);\n if (flags.due_on) data.due_on = String(flags.due_on);\n\n const r = await asanaPost('/tasks', accessToken, { data });\n printJson(r);\n return;\n }\n\n die(`Unknown command: ${cmd}`);\n}\n\nmain().catch((e) => die(String(e?.stack || e)));\n= csvList(projects);\n if (flags.due_on) data.due_on = String(flags.due_on);\n\n const r = await asanaPost('/tasks', accessToken, { data });\n printJson(r);\n return;\n }\n\n die(`Unknown command: ${cmd}`);\n}\n\nmain().catch((e) => die(String(e?.stack || e)));\n"}],"isError":false,"timestamp":1773622850815}} {"type":"message","id":"e38e0569","parentId":"5e972204","timestamp":"2026-03-16T01:01:03.005Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Editing file content**\n\nI’m noticing that the asana_api has some duplicate content from previous edits. I’m wondering if I need to rewrite the entire file, even though it might be a long task. Alternatively, I could just remove the duplicated tail instead. It seems simpler to just use the exact old string from where the duplication begins.\n\nHmm, should I write the whole file content? That could be risky due to potential mistakes. Maybe just editing the duplicated tail would be a better choice.\n\n**Refining code chunk**\n\nI'm considering replacing a specific chunk of code, looking to streamline it. My idea is to simplify and replace the repeated `main().catch((e) => die(String(e?.stack || e)));` so that there's only one instance of it. This could help reduce clutter or possible errors in the code. \n\nI think it’s a good approach, so let’s go ahead and attempt this update. Hopefully, this makes the code cleaner and easier to maintain!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b75645426081908a5e8ca3e593f888\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1ZOBTiya3kihugyCsIa4rek4LMhJ4DEqfoVqel1F0mGOMMptptsZnL4lQ60aZ8AuIr3o2A9gggD05l_D-3aJlI9WGsfJCc_EQGvqe6Nqu7WV-sp0Ww8AwG1-61Gqmi1JvxcVuvlSqxzkKUQxEWe9eXGYx2GCGD_3U05lmdejvl8P3Tu08gfUm7lTPr7EcMzH-YF3r8Z_jz7FsiBLJnuTQxsPU7GSX_9keExpHH3tYYOWXaomHtWS7efNKpSIF9dRM8U9ypFcs1h1yXxhUnFzOr0CwkSoBQdwfrOGwBx9Wp13_x9z8Rp8tFIZ0mjIIRUkpRyOSeBAsV6CmQv2Y3F1ikHmNfI96D7ZX3zug8vtAyqwlWRp-WwGAWlPCUpwqVW1BQqEjX287oSxIV37sQco9GEsculnjz6tfaLzv-QAOFB7bowYNs9Oq9eL-LC2Xfbg1uyD9vZwG1e_1poj1FdbKaYmc5RH1TI8dM8MhAiq3jVn75TIUuTQYlGq8MmsgEyQBm8vDA2VxTP7Ujd6nZVJht2yi7mX1bRJ5b9uGagsw06sQeEPAxPU7Aj-4MUpV3QpJuZn6Txwm4cYQwgRwpOGt6nWfkELuF0kOcB_rrNY5CZzeTaEbr3ok-roHJEfKomlJqb4zEt-vvMoAbqv_UmBDO2kHc4mptwSzHGk30Fq3qp8D4nPsRuhgW8Vvzvjaelem1UMCYSQPgVelzinug4AncFXMAyo9iOuKgvUwDv5ittCC70xoqSC_4eKLLl6ohqd3EGfB-HaYKrPsfYzZkp5RLlv18dgS26wJlYbrS9AL8-vLblgTFMW26SL3AB4w05l5nX_EpOOjwp1hHsIvkbFZQzaTL1dNALZKoZGqaP7-PK-KC_FP6eRlkFq2TZgQLNGfkPJZZEacdsqCQr9SqxOf0azdId5K6sOkb9cSjpBVNAn7EX_pQWJoepPmUk4LyXZqGUd-UZQ9bii3tn-VzDV9qA0WU34WNDcYVYE_knRrAhyGAe5Z2b3B4jYmuXhUr8Z-1erzVYM-uGUZqkwQLvBXMoAVYJOexlIqZEFkqosxgLVMLACkRa-wp-1fl3XDrWHppMv4Z0u0aFiaTP-bGWZ0V7ceIkVdZzcqeraAj1xwYtrDFdSSxK7bFfXdMdVADKmP0yUywXpWAvXKUwi7KgfRJEYkVEYTXaTohdSmJvsqM99Jwu4zp0HcmEY8eRSJkEB0_7ZggAIiHiMaCLDwZbaF8dyv7MXc8oS3kJYJ_SxJdPxTx6TvE4n4CgDPOF8nlQbniL8uQ4QQrcnTmVKSBSBxoC6dAEhdarwdmD9v22H8XayhxBkBtmtS1x0L-CuRqEzX6tFvbT6Z4hqwUTJ6o10ra8KsXVXPFivrd6K9p14ScTmr2s8OatXI9ieIeU7M2Hgd0zAo-NY57XHbpV3VkSMTwY8wtF0PZ0GkLq9EBQaXZ2qq1juA_2fZkW03_FnLroD5i7cEU8_sA4ww8KgMJxnY7TbLbzoRbL2ONBSz4oM2SrQglQI4Py6goO_47SEBFCPMmB1Vzee83G41yRNcVk-kD46CI9jPa0uM2GIQpQMOpOlo_2OMbyLaaRfKy5KRAXnJ06dzCKCM3ZfMzyi1GZIh0mRqPxCjlln_c5AK6LVYjZKKXepxdPBw0gm73viqjistieQ9wV_hJxcf6dYD4y-Cd4sp4DbRDa5TA1xKO4RMTyalFoQmynGsd3zmJXl4dEBO1G-SWNZHW6PtC9e7wks5EnkzHRmwFnA8Po2IChdpPVHD0yQ7BnE_vU2kzBARFhQx6JWM1tkFFPznxk6SHaB2TSeE-uOm86gv9YC63gE24DYVun5qqzp5DloqkbwcJJ12ukspWYA4n5tAQVN6Cjd32IHx4clE3er3yJUbzUn6ltmmCHkDEK40lq1x5us0YIHQ0bFYnnwdr4GgbqISbxdI3-d4MlujnXB_XhTCC7XE5STm40oEIwL2lJbIQ0OftgPjBP81jf70992lLvYwJGG8fQdvdhDSGfUmwzidTl-UpYXrFXXl7LZVDes85HEvBBGR6nlqIKYr-ed8fvn8772jdpDJr8Vc2IrLu21zSwAffytGRDNSLltf1U0Aa0upgPpeIAJPbisK38Bg_ZVLvWUtExuujoOa3K0uLduHDlIU6NV876IZZ7FiMVfrAT8Uyt1A1qnDetmqihoK8bFOoFX7UoQKKkq9Rz8wYS2nnLGBEubhgKMUGGlfZSDDTr2_Nbv4-eVEHyVm1ZhNtYQJPaIJeCtaq6IeiVjqOwoKv27ZGo1IlEz71bvGMlcj470COhu4JY9t9HQwPx-9NbBLvMO6y37g8XLePwWxMNuGkVmY3h39q84dpU2QP0fCtfk3Eob7SIX8EBvlL9tU9v1akn_R0x92zo815atqLZXUNh31PxD_cYu1v0ISlU21n8f1dWMRFNEiS0OGyilpcasjRiPx2lEOFyZc2HS4z8zrtuBimXZtojIEkf1OYJfxNu8gcLal1lADkPtwQ9X5axR204Dvcacrg8MzySCIDKMldkW7HAT6tP9b5M-Azd2y9D3ACVEXJ1WYH4mOZ43mXBO3gQyFqVhj0bAF47N5-3aDTGuyUaeHfXmRz16_JQ3vXV7Aa2_Zsm0QFCCl7xR03w2Z_jS9qePA==\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Editing file content**\\n\\nI’m noticing that the asana_api has some duplicate content from previous edits. I’m wondering if I need to rewrite the entire file, even though it might be a long task. Alternatively, I could just remove the duplicated tail instead. It seems simpler to just use the exact old string from where the duplication begins.\\n\\nHmm, should I write the whole file content? That could be risky due to potential mistakes. Maybe just editing the duplicated tail would be a better choice.\"},{\"type\":\"summary_text\",\"text\":\"**Refining code chunk**\\n\\nI'm considering replacing a specific chunk of code, looking to streamline it. My idea is to simplify and replace the repeated `main().catch((e) => die(String(e?.stack || e)));` so that there's only one instance of it. This could help reduce clutter or possible errors in the code. \\n\\nI think it’s a good approach, so let’s go ahead and attempt this update. Hopefully, this makes the code cleaner and easier to maintain!\"}]}"},{"type":"toolCall","id":"call_rtQjHTYgBvmtykdnk4ScGBKy|fc_0776d4d0ce7a6f6b0169b7564e793081908e1466c2e274b0e8","name":"edit","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs","old_string":"main().catch((e) => die(String(e?.stack || e)));\n= csvList(projects);\n if (flags.due_on) data.due_on = String(flags.due_on);\n\n const r = await asanaPost('/tasks', accessToken, { data });\n printJson(r);\n return;\n }\n\n die(`Unknown command: ${cmd}`);\n}\n\nmain().catch((e) => die(String(e?.stack || e)));\n","new_string":"main().catch((e) => die(String(e?.stack || e)));\n"},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs\",\"old_string\":\"main().catch((e) => die(String(e?.stack || e)));\\n= csvList(projects);\\n if (flags.due_on) data.due_on = String(flags.due_on);\\n\\n const r = await asanaPost('/tasks', accessToken, { data });\\n printJson(r);\\n return;\\n }\\n\\n die(`Unknown command: ${cmd}`);\\n}\\n\\nmain().catch((e) => die(String(e?.stack || e)));\\n\",\"new_string\":\"main().catch((e) => die(String(e?.stack || e)));\\n\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":817,"output":483,"cacheRead":121856,"cacheWrite":0,"totalTokens":123156,"cost":{"input":0.0020425,"output":0.007245000000000001,"cacheRead":0.030463999999999998,"cacheWrite":0,"total":0.039751499999999995}},"stopReason":"toolUse","timestamp":1773622850834}} {"type":"message","id":"2206d4a1","parentId":"e38e0569","timestamp":"2026-03-16T01:01:03.033Z","message":{"role":"toolResult","toolCallId":"call_rtQjHTYgBvmtykdnk4ScGBKy|fc_0776d4d0ce7a6f6b0169b7564e793081908e1466c2e274b0e8","toolName":"edit","content":[{"type":"text","text":"Successfully replaced text in /home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs."}],"details":{"diff":" ...\n 383 die(`Unknown command: ${cmd}`);\n 384 }\n 385 \n 386 main().catch((e) => die(String(e?.stack || e)));\n-387 = csvList(projects);\n-388 if (flags.due_on) data.due_on = String(flags.due_on);\n-389 \n-390 const r = await asanaPost('/tasks', accessToken, { data });\n-391 printJson(r);\n-392 return;\n-393 }\n-394 \n-395 die(`Unknown command: ${cmd}`);\n-396 }\n-397 \n-398 main().catch((e) => die(String(e?.stack || e)));","firstChangedLine":387},"isError":false,"timestamp":1773622863021}} {"type":"message","id":"65ac7653","parentId":"2206d4a1","timestamp":"2026-03-16T01:01:11.315Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"I'm considering that I need to verify that there are no duplicates or mentions of the environment in the oauth_oob. It's important that everything is clean and accurate to ensure a smooth process. I don't want to overlook any details since they could potentially cause issues down the line. So, I’ll take my time to double-check everything, removing anything unnecessary or repeated. This way, I can provide users with a seamless experience!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b75650fc308190bbbb6ab50a931331\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1ZUGCQfzeIQWRRxmqcfojvGZP07SZ9UtPyLdlPXBywHbI3_oPU2hh7veltlUMhUvmChoDn8NZl-oyJkHBO0WTBn_vWx05kXCZjUOPcMvRFC-Vs3BB6OyOKv4tOxl3DutikaCMhNb98veoWAq445xj4IvBPHZoQJxZcBlPFsb3-ElkqeYrPLDU-HoTZLPhlQecpXkl9sEhApJ2bvtTLF9oR8mS9eAQoqebCXsLXNC-5iafrk1uUtheGdmyKjF-b6sN-4jsHozU5I0n-zCbr-4QdP8P_EJiJeKWKrRIU0_3TNxoltYsTXnN8YqiPfvR9hf2Eva4_3xJawe37_-ow4ua_XxbbpNz95hANQESoUF-ClDJcJbBcJoMHHiJx0fYjBZ7nZ89MG-GwPp2WlJrCf_B1JiF7KR2PxLDkNPmFn7TbuG91pN8y7Csz1R7VJ0fuCrDx_PFCV2RAPBqp9QpdSThl83nZVz4TRgjPz6erA-8okQhe_Gl7xkujPMJrhJSF5QT07dlpP3JP6VKyjzzko7CBlCifnTKHLr4fAMAtssITQb8KJyxntivm__ks2xyByykp4rS47dr3SXWeV4pturd13uYDk82Jr4EpYwQAtlYgVPuidpNjSxZx1Qd2mCmhDrH5J6MLMvspkuNIZ_LA_ZxKDRvUopTnHxSBhuran1KxVbpOkeVmTm8DFOBp0_KYBtmjmdymNBv7hb4uLYLwsoQNSe_RoWsCr5L9d44oPRa3fjmoQmp7qY53feul_DkxP3X7Plp5k2hggq9tKXn6UZURPjgUB9O6GMccZhZyLA9FqO5z_su_f5jGlxJUXFT4fTTxMoPYaN7Thl9TYRe5ivWC9Znk4-rmCtxYT0ILwl7WtKD-uL8zPoIHIIK2gSEYwCjXoud7whgN0K5TV5Z05-geGOA==\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"I'm considering that I need to verify that there are no duplicates or mentions of the environment in the oauth_oob. It's important that everything is clean and accurate to ensure a smooth process. I don't want to overlook any details since they could potentially cause issues down the line. So, I’ll take my time to double-check everything, removing anything unnecessary or repeated. This way, I can provide users with a seamless experience!\"}]}"},{"type":"toolCall","id":"call_SZ6juKByEvTXtNJd6CPvY5go|fc_0776d4d0ce7a6f6b0169b7565479bc8190bd9ead8fe1882bc0","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs","offset":1,"limit":40},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs\",\"offset\":1,\"limit\":40}"},{"type":"toolCall","id":"call_9aswHA9JmlUcFH6lqapsD1hg|fc_0776d4d0ce7a6f6b0169b7565479c88190875951d0fd20b5aa","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs","offset":80,"limit":60},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs\",\"offset\":80,\"limit\":60}"},{"type":"toolCall","id":"call_hPFo97CjzhpKwvocN0T5Ny4h|fc_0776d4d0ce7a6f6b0169b7565479d0819084acc43d8bc4e207","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs","offset":1,"limit":30},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs\",\"offset\":1,\"limit\":30}"},{"type":"toolCall","id":"call_mQEOMfA4zqJeyylJvymCVTO9|fc_0776d4d0ce7a6f6b0169b7565479d88190b076a80cb117396d","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs","offset":360,"limit":40},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs\",\"offset\":360,\"limit\":40}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":179,"output":188,"cacheRead":123008,"cacheWrite":0,"totalTokens":123375,"cost":{"input":0.00044750000000000004,"output":0.00282,"cacheRead":0.030751999999999998,"cacheWrite":0,"total":0.0340195}},"stopReason":"toolUse","timestamp":1773622863045}} {"type":"message","id":"74f63b83","parentId":"65ac7653","timestamp":"2026-03-16T01:01:11.376Z","message":{"role":"toolResult","toolCallId":"call_SZ6juKByEvTXtNJd6CPvY5go|fc_0776d4d0ce7a6f6b0169b7565479bc8190bd9ead8fe1882bc0","toolName":"read","content":[{"type":"text","text":"#!/usr/bin/env node\n/**\n * Asana OAuth (OOB/manual code paste) helper.\n *\n * Usage:\n * node asana/scripts/oauth_oob.mjs authorize\n * node asana/scripts/oauth_oob.mjs token --code \"...\"\n *\n * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json.\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst AUTH_URL = 'https://app.asana.com/-/oauth_authorize';\nconst TOKEN_URL = 'https://app.asana.com/-/oauth_token';\nconst REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob';\n\nfunction die(msg) {\n console.error(msg);\n process.exit(1);\n}\n\nfunction parseArgs(argv) {\n const [cmd, ...rest] = argv;\n const flags = {};\n for (let i = 0; i < rest.length; i++) {\n const a = rest[i];\n if (a.startsWith('--')) {\n const k = a.slice(2);\n const v = rest[i + 1] && !rest[i + 1].startsWith('--') ? rest[++i] : true;\n flags[k] = v;\n }\n }\n return { cmd, flags };\n}\n\nfunction tokenPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'token.json');\n\n[106 more lines in file. Use offset=41 to continue.]"}],"isError":false,"timestamp":1773622871365}} {"type":"message","id":"7e848997","parentId":"74f63b83","timestamp":"2026-03-16T01:01:11.387Z","message":{"role":"toolResult","toolCallId":"call_9aswHA9JmlUcFH6lqapsD1hg|fc_0776d4d0ce7a6f6b0169b7565479c88190875951d0fd20b5aa","toolName":"read","content":[{"type":"text","text":" }\n return data;\n}\n\nasync function main() {\n const { cmd, flags } = parseArgs(process.argv.slice(2));\n let clientId;\n let clientSecret;\n\n try {\n const credPath = path.join(os.homedir(), '.clawdbot', 'asana', 'credentials.json');\n const creds = JSON.parse(fs.readFileSync(credPath, 'utf-8'));\n clientId = creds.client_id;\n clientSecret = creds.client_secret;\n } catch {\n // ignore\n }\n\n if (!cmd) die('Command required: authorize | token');\n if (!clientId) die('Missing ~/.clawdbot/asana/credentials.json (run configure.mjs first)');\n\n if (cmd === 'authorize') {\n const scope = flags.scope || 'default';\n const state = flags.state || crypto.randomUUID();\n const url = `${AUTH_URL}?${urlEncode({\n client_id: clientId,\n redirect_uri: REDIRECT_URI,\n response_type: 'code',\n state,\n ...(scope !== 'default' ? { scope } : {}),\n })}`;\n console.log('Open this URL in your browser, click Allow, then copy the code:');\n console.log(url);\n console.log('\\nThen run:');\n console.log(`node asana/scripts/oauth_oob.mjs token --code \"PASTE_CODE\"`);\n return;\n }\n\n if (cmd === 'token') {\n if (!clientSecret) die('Missing ~/.clawdbot/asana/credentials.json client_secret');\n const code = flags.code;\n if (!code || typeof code !== 'string') die('Missing --code');\n\n const data = await postForm(TOKEN_URL, {\n grant_type: 'authorization_code',\n client_id: clientId,\n client_secret: clientSecret,\n redirect_uri: REDIRECT_URI,\n code,\n });\n\n const now = Date.now();\n const token = {\n ...data,\n obtained_at_ms: now,\n expires_at_ms: typeof data.expires_in === 'number' ? now + data.expires_in * 1000 : null,\n };\n\n saveToken(token);\n return;\n\n[7 more lines in file. Use offset=140 to continue.]"}],"isError":false,"timestamp":1773622871376}} {"type":"message","id":"0e1678f3","parentId":"7e848997","timestamp":"2026-03-16T01:01:11.404Z","message":{"role":"toolResult","toolCallId":"call_hPFo97CjzhpKwvocN0T5Ny4h|fc_0776d4d0ce7a6f6b0169b7565479d0819084acc43d8bc4e207","toolName":"read","content":[{"type":"text","text":"#!/usr/bin/env node\n/**\n * Minimal Asana API CLI with OAuth refresh.\n *\n * Reads token from ~/.clawdbot/asana/token.json\n * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json for refresh.\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst API_BASE = 'https://app.asana.com/api/1.0';\nconst TOKEN_URL = 'https://app.asana.com/-/oauth_token';\n\nfunction die(msg) {\n console.error(msg);\n process.exit(1);\n}\n\nfunction tokenPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'token.json');\n}\n\nfunction configPath() {\n return path.join(os.homedir(), '.clawdbot', 'asana', 'config.json');\n}\n\nfunction loadConfig() {\n const p = configPath();\n\n[357 more lines in file. Use offset=31 to continue.]"}],"isError":false,"timestamp":1773622871393}} {"type":"message","id":"a0ac99c4","parentId":"0e1678f3","timestamp":"2026-03-16T01:01:11.416Z","message":{"role":"toolResult","toolCallId":"call_mQEOMfA4zqJeyylJvymCVTO9|fc_0776d4d0ce7a6f6b0169b7565479d88190b076a80cb117396d","toolName":"read","content":[{"type":"text","text":" // Stories API: POST /tasks/{task_gid}/stories\n const r = await asanaPost(`/tasks/${gid}/stories`, accessToken, { data: { text: String(text) } });\n printJson(r);\n return;\n }\n\n if (cmd === 'create-task') {\n const workspace = flags.workspace;\n const name = flags.name;\n const notes = flags.notes || '';\n const projects = flags.projects;\n if (!name) die('Missing --name');\n\n const data = { name, notes };\n if (workspace) data.workspace = String(workspace);\n if (projects) data.projects = csvList(projects);\n if (flags.due_on) data.due_on = String(flags.due_on);\n\n const r = await asanaPost('/tasks', accessToken, { data });\n printJson(r);\n return;\n }\n\n die(`Unknown command: ${cmd}`);\n}\n\nmain().catch((e) => die(String(e?.stack || e)));\n"}],"isError":false,"timestamp":1773622871405}} {"type":"message","id":"cdd083c4","parentId":"a0ac99c4","timestamp":"2026-03-16T01:01:28.987Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Patching config updates**\n\nGreat! Asana is fixed, so now I need to patch the config. I think I should include `baseHash` from `config.get` as I decide how to formulate this patch.\n\nI’m considering how to merge nested objects carefully. It's essential to keep `plugins.entries.acpx.config.nonInteractivePermissions` unchanged in the merge, and I should preserve only the necessary fields. I need to use `gateway.config.patch` with the `baseHash` and add a note indicating that this will restart auto. After the restart, I want to inform the user with a message like: \"Pinned clawrouter and acpx, tightened exec and acpx permissions.” I’m also pondering the potential impact of the `approve-reads` permission mode on task writing from Telegram, since the user approved it. Maybe I should set `permissionMode: \"approve-reads\"` and consider adjusting to `nonInteractivePermissions: \"deny\"` instead.\n\n**Adjusting patch settings**\n\nI'm facing a challenge here, as the current patch is failing. I might need to set `plugins.entries.acpx.config.expectedVersion` to \"0.1.15\" for it to work correctly. Additionally, I could consider setting `tools.exec.security` to \"allowlist\" and use \"ask on-miss\" since there’s currently no security in place.\n\nI’m also thinking about updating `plugins.installs.clawrouter.spec` to `resolvedSpec`, while keeping the version the same. It seems like a solid plan for this patch!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7565d23ac8190bb6bcf27f4ca8b5f\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1ZozPx-QtowcFYrFcQ9W2IrDinxU725CW4SRzIWiTMAK2bleJ7GTkUsqleREwkTZO0_hxG30MTENi3x-7l5hfnSDLtXUDqjOm518aIKZkAmdJfZ6dQ8nbaQKNV7LDz76-CH5i9r_K1Yh0IBzDbQh-taikI1nsxqQQJ8tv-OxCP3VKMjxxNaGV-brpFhyUsMc-_lC6FZVyeXiVhc97A_Asj6qm-XLXjkTMvwS0hNLFpHlIsk_6bjf-Alux42AGI97O4o_-gPmH1R4Q_zR6TfH9BXS8ENqFB-g7F2X9RMfIr43SJAZqkAE5nsgwP3j3N-lynOFLDhW2aGuoEi3McHSnbvN2gS7RTdXs7UzSQ1jGoB2-Ispmm5-JjhDMnuchKPmyLlesclrLHLSEV4RFJ8Rm6pF38_bgdsP67nG5WCPTdyRgXD13u7CqMIipXSnXt9PbGSJUf_MybJxk20CL3C4KWUqHzInCXc4mcG23IGv0lOu1UPsL4qQ4d6V_zqv-1KinGEc9FqSNYimEnuF_QVtPDmDxRC36bkPoTpxr4BKRCHGvL3KXEYOCI7aSGWqjIVj9GkyozvUin9YLnApk7Vrgiurt170x-yQt8CDv20Q7o4ySC3LJBCS2ZuQMzJYUTL9UBpcbm4Bp0erJu_vbnjqS2OLrKOWqLjfm-XPoseN4qUpGj1H9GYnwBeoOy6a8WMDEL2-JE6hkUcboO52HfMmBQMhfypNeg17OLQX8biOH-wpF37r9Suv_rol_wQXo7npK8O7XbNyj3WJXDX3qpDji9aey0rJ2oHNzPWRWc9Df3bGysE6Z3Ce0K4uWApQjIkAjpHU-pPIji-LTls1vTc8DqlOg1QDbuyi5uIPMxItskpktEwS0Z5l6PlJUzdCvvBtdx3tHyScNfozdWQk8w2CjA2mGE1tx2zdjW7h1AwS4FYv7qB1xIsKyh2g7JDWlhJv1gzrOOehvpoPhGjR8dEuE-EMmnZZNSKfZJTJt6KMSV064DaTrSlFIwK7eAnDMl3SNMF-bklCyvmDSh0nx_FKh0FeMfEqO7JK4LrN0nk4XJ2G9xc_49t-qNTgnoKPck2m29neyLakjcCDMe_sOABIQGT9fnokQnwDa8n98g8NVEb6P7116z6LXu049lYqYXVtRB-pVwwpleoYCB4Ydmq7Tm1MLvdO8NfJDNiRwUy_zvMhY1_mBPm1JbeaMp1r9KVvRsHe9dz-kbOph4r8cMDklDWkmzIF9ihvsX2vZEaUTI3KA8RyOPaVr43dZkDPOXmkZ8Ew8t_DE6Eu9L4ZOSl5XqlGhD6vy0_ERVlq0PNOG8v93zRUvK_byxASotqSwIkZM8yWOQUhHtFUUjztDur5i3dM-aX4d7dkeW96gMXBwkYIpfCmRlrCSpOJNESL8JqiLP_qmQTtJSIeblFgqNFJ_StVqwYCy-cxsG9JZZnqdTnBX6NlEmXrGfYrp_GHEZ9rQMDxhtZxFNbSiPOoT0ULqH6Hs9FAFDMlRJIZn63yyItgFZwe9kIMQ9LcwUkPYv93L9Fm_7L1CSFmJpYyMXKvszHIbrukhFRpCjJ3kXllZ9eku27c7nsTYsvy7YMb3jXjeGC4QnR4xOuNXW0AUlUrjPXm3kIDJhjrTX0CyxmRjWW5ozQoMdCW2ugk1S4W50zO9pXgVLacdROzWH-KORe3REs7rEeVv01lT3LPAzOpKaQ5f63mBYvgQODDFCR05SX1r2AWPcNKZeSJpxApIhqP2V71IKp8BAtW8D2neg_CiRDpK9Q3UcOOce8jt4MB4yFDjLZjdQz8gZQ_4ZkI3qvyN5FMhA6KN3McK7RL0tgMu2s6WHGuyJEOb29V78WvNYblszar83neH5dNde93jc4v712Q-dBEP5EbUHjSdy8TmlG9mkl1lLwEKdZLYoZypFWhCoyi67H7umDIn6tLOBw7h5lIv1TQrFvz7qS2L-8wxyLYXiP-47tvrsX8Q3OxZf1QJ6q3OzHD3PI3sxaPoT8vf6d4LxlxYMLzhYHNqNDPJb1K3zWXeKBJhzNthwC9jSXxp2XG-wzdCOnoeis6ElFpBLiAXYmT-aoaaGN0t6SHPfErJLMNVk4Fr14XNQgQygrykhYlwfHTWDEuN97MJuXovpckinkcIxTsExfgpWF4jSPpRefcZszTDvsrQsDATjy4f5069P4G5TMbiGL5aA3rAIOWBxewIJ1oxTmH9xeJYvsz1rSPkgQeVIYGJAPI8M4H9sbt-o_U32ahxKLDP6VEJOM0XPu3vFeyHAxlRcEJzRZYC1EBPNe5I-esa5m00tsHY6To19qFPz1eoegL8NSBLZ-O5nrAjOqb1LDRrATRlUcO4gptdudLCdfgVQEjGCaFNskWyJlVxaFMBctTYk2QVWUrJKBdPUby3Vk8h45eNujEqZyJuAhm6jGI9RMYAxXoeNZ-REEN4XFM-6CN7erYeXr0K2UwZDKulas2Agp_Jq6zhrSIc_nHq8VNwG7ic-GNU_v39VpQTtAUKL-Qr_LxavdU5tOSljvCUe6NPIzysoy-n4O-zkN1GE_vag9BjICS_yosjF1d6bCBU3Cs0mRUQsbQ8drqCdGpJ2tCBqd-qfMfTETFuvH83LL08MpP3Wi2vv3o80hEemK4dhgokr1g2DVZIFqIHLG5kNNmuRVgvA_GgIywPzyo1aasdPqp_PGnPy2yN-5UxcHr0J2WBH2J90vE-297-j4ebWVjkM91vapPenPlVbxqrWjk73qJwDEbjql2GrFgMxcHt_5JAmuoNMahsVcI7q5fX-g1oTVTgj_KiQXQtL8rWb9-uWzcaK0FoI-lL00c7SMyefdc7bMEqiz9gziVBXRpSr33FAYw1imPgW8pjBUWFDLpJleu5y8NQexk0Tl5cAPxmTKGsPU3d4hC6WM5-s67cAfsq9KZcUHxXw=\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Patching config updates**\\n\\nGreat! Asana is fixed, so now I need to patch the config. I think I should include `baseHash` from `config.get` as I decide how to formulate this patch.\\n\\nI’m considering how to merge nested objects carefully. It's essential to keep `plugins.entries.acpx.config.nonInteractivePermissions` unchanged in the merge, and I should preserve only the necessary fields. I need to use `gateway.config.patch` with the `baseHash` and add a note indicating that this will restart auto. After the restart, I want to inform the user with a message like: \\\"Pinned clawrouter and acpx, tightened exec and acpx permissions.” I’m also pondering the potential impact of the `approve-reads` permission mode on task writing from Telegram, since the user approved it. Maybe I should set `permissionMode: \\\"approve-reads\\\"` and consider adjusting to `nonInteractivePermissions: \\\"deny\\\"` instead.\"},{\"type\":\"summary_text\",\"text\":\"**Adjusting patch settings**\\n\\nI'm facing a challenge here, as the current patch is failing. I might need to set `plugins.entries.acpx.config.expectedVersion` to \\\"0.1.15\\\" for it to work correctly. Additionally, I could consider setting `tools.exec.security` to \\\"allowlist\\\" and use \\\"ask on-miss\\\" since there’s currently no security in place.\\n\\nI’m also thinking about updating `plugins.installs.clawrouter.spec` to `resolvedSpec`, while keeping the version the same. It seems like a solid plan for this patch!\"}]}"},{"type":"text","text":"Hago ahora el parche de config. Impacto: el gateway va a reiniciar una vez; Telegram debería volver solo. Cambio de postura: comandos `exec` fuera del allowlist ahora pueden pedir aprobación, y los harness ACPX quedan en modo `approve-reads` en vez de autoaprobar todo.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b756683ad08190b37de675bf4f4d59\",\"phase\":\"commentary\"}"},{"type":"toolCall","id":"call_erUc0kDvcOwVdmBPRYOOYxJc|fc_0776d4d0ce7a6f6b0169b756685a9881909e9fc6ed5056dd0b","name":"gateway","arguments":{"action":"config.patch","baseHash":"31f4e11b98ddb833f53a89ddcd4021b23f92551d22a24ad5d438e6c901140df1","note":"Endurecí OpenClaw: pin de clawrouter/acpx, exec más restrictivo y limpieza de la skill asana para evitar lectura de credenciales desde env.","raw":"{\n \"tools\": {\n \"exec\": {\n \"ask\": \"on-miss\",\n \"security\": \"allowlist\"\n }\n },\n \"plugins\": {\n \"entries\": {\n \"acpx\": {\n \"config\": {\n \"permissionMode\": \"approve-reads\",\n \"expectedVersion\": \"0.1.15\"\n }\n }\n },\n \"installs\": {\n \"clawrouter\": {\n \"spec\": \"@blockrun/clawrouter@0.12.43\"\n }\n }\n }\n}"},"partialJson":"{\"action\":\"config.patch\",\"baseHash\":\"31f4e11b98ddb833f53a89ddcd4021b23f92551d22a24ad5d438e6c901140df1\",\"note\":\"Endurecí OpenClaw: pin de clawrouter/acpx, exec más restrictivo y limpieza de la skill asana para evitar lectura de credenciales desde env.\",\"raw\":\"{\\n \\\"tools\\\": {\\n \\\"exec\\\": {\\n \\\"ask\\\": \\\"on-miss\\\",\\n \\\"security\\\": \\\"allowlist\\\"\\n }\\n },\\n \\\"plugins\\\": {\\n \\\"entries\\\": {\\n \\\"acpx\\\": {\\n \\\"config\\\": {\\n \\\"permissionMode\\\": \\\"approve-reads\\\",\\n \\\"expectedVersion\\\": \\\"0.1.15\\\"\\n }\\n }\\n },\\n \\\"installs\\\": {\\n \\\"clawrouter\\\": {\\n \\\"spec\\\": \\\"@blockrun/clawrouter@0.12.43\\\"\\n }\\n }\\n }\\n}\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":99523,"output":668,"cacheRead":24064,"cacheWrite":0,"totalTokens":124255,"cost":{"input":0.24880750000000001,"output":0.01002,"cacheRead":0.006016,"cacheWrite":0,"total":0.2648435}},"stopReason":"toolUse","timestamp":1773622871426}} {"type":"message","id":"ecb4c0ee","parentId":"cdd083c4","timestamp":"2026-03-16T01:01:29.247Z","message":{"role":"toolResult","toolCallId":"call_erUc0kDvcOwVdmBPRYOOYxJc|fc_0776d4d0ce7a6f6b0169b756685a9881909e9fc6ed5056dd0b","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"ok\": true,\n \"path\": \"/home/ubuntu/.openclaw/openclaw.json\",\n \"config\": {\n \"meta\": {\n \"lastTouchedVersion\": \"2026.3.13\",\n \"lastTouchedAt\": \"2026-03-15T23:17:49.868Z\"\n },\n \"env\": {\n \"OPENAI_API_KEY\": \"__OPENCLAW_REDACTED__\"\n },\n \"wizard\": {\n \"lastRunAt\": \"2026-03-15T22:40:03.597Z\",\n \"lastRunVersion\": \"2026.3.13\",\n \"lastRunCommand\": \"doctor\",\n \"lastRunMode\": \"local\"\n },\n \"diagnostics\": {\n \"flags\": [\n \"telegram.http\"\n ]\n },\n \"browser\": {\n \"executablePath\": \"/usr/bin/chromium-browser\",\n \"headless\": true,\n \"noSandbox\": true,\n \"defaultProfile\": \"openclaw\",\n \"profiles\": {\n \"openclaw\": {\n \"cdpPort\": 18800,\n \"cdpUrl\": \"http://127.0.0.1:18800\",\n \"color\": \"#FF4500\"\n }\n }\n },\n \"auth\": {\n \"profiles\": {\n \"openai-codex:default\": {\n \"provider\": \"openai-codex\",\n \"mode\": \"oauth\"\n }\n }\n },\n \"acp\": {\n \"enabled\": true,\n \"dispatch\": {\n \"enabled\": true\n },\n \"backend\": \"acpx\",\n \"defaultAgent\": \"codex\",\n \"allowedAgents\": [\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ],\n \"maxConcurrentSessions\": 8\n },\n \"models\": {\n \"mode\": \"merge\",\n \"providers\": {\n \"custom-api-deepseek-com\": {\n \"baseUrl\": \"https://api.deepseek.com\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"deepseek-chat\",\n \"name\": \"deepseek-chat (Custom Provider)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 16000,\n \"maxTokens\": 4096\n }\n ]\n },\n \"blockrun\": {\n \"baseUrl\": \"http://127.0.0.1:8402/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"auto\",\n \"name\": \"Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"free\",\n \"name\": \"Free (NVIDIA GPT-OSS-120B only)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 4096\n },\n {\n \"id\": \"eco\",\n \"name\": \"Eco (Smart Router - Cost Optimized)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"premium\",\n \"name\": \"Premium (Smart Router - Best Quality)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 2000000,\n \"maxTokens\": 200000\n },\n {\n \"id\": \"openai/gpt-5.2\",\n \"name\": \"GPT-5.2\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5-mini\",\n \"name\": \"GPT-5 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.25,\n \"output\": 2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/gpt-5-nano\",\n \"name\": \"GPT-5 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.05,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 32768\n },\n {\n \"id\": \"openai/gpt-5.2-pro\",\n \"name\": \"GPT-5.2 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 21,\n \"output\": 168,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4\",\n \"name\": \"GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4-pro\",\n \"name\": \"GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.3\",\n \"name\": \"GPT-5.3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16000\n },\n {\n \"id\": \"openai/gpt-5.3-codex\",\n \"name\": \"GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-4.1\",\n \"name\": \"GPT-4.1\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-mini\",\n \"name\": \"GPT-4.1 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.4,\n \"output\": 1.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-nano\",\n \"name\": \"GPT-4.1 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o\",\n \"name\": \"GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o-mini\",\n \"name\": \"GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/o1\",\n \"name\": \"o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o1-mini\",\n \"name\": \"o1-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o3\",\n \"name\": \"o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o3-mini\",\n \"name\": \"o3-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o4-mini\",\n \"name\": \"o4-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"anthropic/claude-haiku-4.5\",\n \"name\": \"Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-sonnet-4.6\",\n \"name\": \"Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4.6\",\n \"name\": \"Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"google/gemini-3.1-pro\",\n \"name\": \"Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-pro-preview\",\n \"name\": \"Gemini 3 Pro Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-flash-preview\",\n \"name\": \"Gemini 3 Flash Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.5,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-pro\",\n \"name\": \"Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash\",\n \"name\": \"Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash-lite\",\n \"name\": \"Gemini 2.5 Flash Lite\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"deepseek/deepseek-chat\",\n \"name\": \"DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"deepseek/deepseek-reasoner\",\n \"name\": \"DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot/kimi-k2.5\",\n \"name\": \"Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"xai/grok-3\",\n \"name\": \"Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-3-mini\",\n \"name\": \"Grok 3 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-reasoning\",\n \"name\": \"Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-non-reasoning\",\n \"name\": \"Grok 4 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-reasoning\",\n \"name\": \"Grok 4.1 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-non-reasoning\",\n \"name\": \"Grok 4.1 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-0709\",\n \"name\": \"Grok 4 (0709)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 1.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-2-vision\",\n \"name\": \"Grok 2 Vision\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax/minimax-m2.5\",\n \"name\": \"MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/gpt-oss-120b\",\n \"name\": \"NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/kimi-k2.5\",\n \"name\": \"NVIDIA Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.55,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet\",\n \"name\": \"sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4\",\n \"name\": \"sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4.6\",\n \"name\": \"sonnet-4.6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4-6\",\n \"name\": \"sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"opus\",\n \"name\": \"opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4\",\n \"name\": \"opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4.6\",\n \"name\": \"opus-4.6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4-6\",\n \"name\": \"opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"haiku\",\n \"name\": \"haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/sonnet\",\n \"name\": \"anthropic/sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/opus\",\n \"name\": \"anthropic/opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/haiku\",\n \"name\": \"anthropic/haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude\",\n \"name\": \"anthropic/claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4\",\n \"name\": \"anthropic/claude-sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4-6\",\n \"name\": \"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4\",\n \"name\": \"anthropic/claude-opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4-6\",\n \"name\": \"anthropic/claude-opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4.5\",\n \"name\": \"anthropic/claude-opus-4.5 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-haiku-4\",\n \"name\": \"anthropic/claude-haiku-4 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-haiku-4-5\",\n \"name\": \"anthropic/claude-haiku-4-5 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gpt\",\n \"name\": \"gpt → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt4\",\n \"name\": \"gpt4 → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt5\",\n \"name\": \"gpt5 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4\",\n \"name\": \"gpt-5.4 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4-pro\",\n \"name\": \"gpt-5.4-pro → GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex → GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"mini\",\n \"name\": \"mini → GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"o1\",\n \"name\": \"o1 → o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"o3\",\n \"name\": \"o3 → o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"deepseek\",\n \"name\": \"deepseek → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"reasoner\",\n \"name\": \"reasoner → DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot\",\n \"name\": \"moonshot → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"kimi-k2.5 → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini → Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"flash\",\n \"name\": \"flash → Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"gemini-3.1-pro-preview\",\n \"name\": \"gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3.1-pro-preview\",\n \"name\": \"google/gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"grok\",\n \"name\": \"grok → Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-fast\",\n \"name\": \"grok-fast → Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-code\",\n \"name\": \"grok-code → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"nvidia\",\n \"name\": \"nvidia → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt-120b\",\n \"name\": \"gpt-120b → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax\",\n \"name\": \"minimax → MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"auto-router\",\n \"name\": \"auto-router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"router\",\n \"name\": \"router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n }\n ]\n },\n \"custom-api-moonshot-ai\": {\n \"baseUrl\": \"https://api.moonshot.ai/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"Kimi K2.5 (Moonshot)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n }\n ]\n }\n }\n },\n \"agents\": {\n \"defaults\": {\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"custom-api-deepseek-com/deepseek-chat\"\n ]\n },\n \"models\": {\n \"blockrun/auto\": {},\n \"openrouter/anthropic/claude-sonnet-4-6\": {\n \"alias\": \"claude\"\n },\n \"openai-codex/gpt-5.1\": {\n \"alias\": \"codex-chat\"\n },\n \"openai-codex/gpt-5.3-codex-spark\": {\n \"alias\": \"codex-spark\"\n },\n \"openai-codex/gpt-5.3-codex\": {\n \"alias\": \"codex-max\"\n },\n \"openai-codex/gpt-5.4\": {\n \"alias\": \"gpt-5.4\"\n },\n \"custom-api-deepseek-com/deepseek-chat\": {\n \"alias\": \"deepseek\"\n },\n \"claude-sonnet-cli/default\": {\n \"alias\": \"claude-sonnet\"\n },\n \"claude-opus-cli/default\": {\n \"alias\": \"claude-opus\"\n },\n \"blockrun/free\": {},\n \"blockrun/eco\": {},\n \"blockrun/premium\": {},\n \"blockrun/anthropic/claude-sonnet-4.6\": {},\n \"blockrun/anthropic/claude-opus-4.6\": {},\n \"blockrun/anthropic/claude-haiku-4.5\": {},\n \"blockrun/openai/gpt-5.2\": {},\n \"blockrun/openai/gpt-4o\": {},\n \"blockrun/openai/o3\": {},\n \"blockrun/google/gemini-3.1-pro\": {},\n \"blockrun/google/gemini-3-flash-preview\": {},\n \"blockrun/deepseek/deepseek-chat\": {},\n \"blockrun/moonshot/kimi-k2.5\": {},\n \"blockrun/xai/grok-3\": {},\n \"blockrun/minimax/minimax-m2.5\": {},\n \"openrouter/openrouter/free\": {},\n \"custom-api-moonshot-ai/kimi-k2.5\": {\n \"alias\": \"kimi\"\n },\n \"clawrouter/auto\": {\n \"alias\": \"clawrouter\"\n },\n \"openrouter/openrouter/auto\": {},\n \"blockrun/openai/gpt-5.3\": {}\n },\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"cliBackends\": {\n \"codex-cli\": {\n \"command\": \"/home/linuxbrew/.linuxbrew/bin/codex\",\n \"args\": [\n \"exec\",\n \"--json\",\n \"--color\",\n \"never\",\n \"--sandbox\",\n \"read-only\",\n \"--skip-git-repo-check\"\n ],\n \"output\": \"jsonl\"\n },\n \"gemini-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/gemini-cli-openclaw\",\n \"output\": \"text\"\n },\n \"deepseek-code\": {\n \"command\": \"/home/ubuntu/.local/bin/deepseek-code-openclaw\",\n \"output\": \"text\"\n },\n \"claude-sonnet-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-sonnet-openclaw\",\n \"output\": \"text\"\n },\n \"claude-opus-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-opus-openclaw\",\n \"output\": \"text\"\n },\n \"kimi-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/kimi-openclaw\",\n \"output\": \"text\"\n }\n },\n \"compaction\": {\n \"mode\": \"safeguard\"\n },\n \"elevatedDefault\": \"off\",\n \"maxConcurrent\": 1,\n \"subagents\": {\n \"maxConcurrent\": 4\n }\n },\n \"list\": [\n {\n \"id\": \"pipo\",\n \"name\": \"pipo\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"openai-codex/gpt-5.4\",\n \"fallbacks\": [\n \"blockrun/auto\",\n \"openrouter/openrouter/free\"\n ]\n },\n \"subagents\": {\n \"allowAgents\": [\n \"codex\",\n \"gemini\",\n \"claude\",\n \"deepseek-code\",\n \"kimi\",\n \"clawrouter\",\n \"openrouter\"\n ]\n }\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-codex\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/codex/agent\",\n \"model\": \"openai-codex/gpt-5.3-codex\"\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-gemini\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/gemini/agent\",\n \"model\": \"gemini-cli/default\"\n },\n {\n \"id\": \"deepseek-code\",\n \"name\": \"deepseek-code\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-deepseek-code\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/deepseek-code/agent\",\n \"model\": \"deepseek-code/default\"\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude/agent\",\n \"model\": \"claude-sonnet-cli/default\"\n },\n {\n \"id\": \"claude-opus\",\n \"name\": \"claude-opus\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude-opus\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude-opus/agent\",\n \"model\": \"claude-opus-cli/default\"\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-kimi\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/kimi/agent\",\n \"model\": \"kimi-cli/default\"\n },\n {\n \"id\": \"clawrouter\",\n \"name\": \"ClawRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n },\n {\n \"id\": \"openrouter\",\n \"name\": \"OpenRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-openrouter\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/openrouter/agent\",\n \"model\": {\n \"primary\": \"openrouter/openrouter/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n }\n ]\n },\n \"tools\": {\n \"sessions\": {\n \"visibility\": \"all\"\n },\n \"agentToAgent\": {\n \"enabled\": true,\n \"allow\": [\n \"pipo\",\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ]\n },\n \"elevated\": {\n \"enabled\": true,\n \"allowFrom\": {\n \"telegram\": [\n 842987156\n ],\n \"webchat\": []\n }\n },\n \"exec\": {\n \"security\": \"allowlist\",\n \"ask\": \"on-miss\"\n }\n },\n \"messages\": {\n \"ackReactionScope\": \"group-mentions\"\n },\n \"commands\": {\n \"native\": \"auto\",\n \"nativeSkills\": \"auto\",\n \"restart\": true,\n \"ownerDisplay\": \"raw\"\n },\n \"session\": {\n \"dmScope\": \"per-channel-peer\"\n },\n \"hooks\": {\n \"internal\": {\n \"enabled\": true,\n \"entries\": {\n \"session-memory\": {\n \"enabled\": true\n },\n \"bootstrap-extra-files\": {\n \"enabled\": true\n },\n \"boot-md\": {\n \"enabled\": true\n }\n }\n }\n },\n \"channels\": {\n \"telegram\": {\n \"enabled\": true,\n \"dmPolicy\": \"allowlist\",\n \"botToken\": \"__OPENCLAW_REDACTED__\",\n \"replyToMode\": \"all\",\n \"allowFrom\": [\n 842987156\n ],\n \"groupPolicy\": \"allowlist\",\n \"streaming\": \"off\",\n \"mediaMaxMb\": 20,\n \"timeoutSeconds\": 60,\n \"retry\": {\n \"attempts\": 6,\n \"minDelayMs\": 1500,\n \"maxDelayMs\": 90000,\n \"jitter\": 0.1\n },\n \"network\": {\n \"autoSelectFamily\": false,\n \"dnsResultOrder\": \"ipv4first\"\n }\n }\n },\n \"talk\": {\n \"provider\": \"elevenlabs\",\n \"providers\": {\n \"elevenlabs\": {\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n }\n },\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"gateway\": {\n \"port\": 18789,\n \"mode\": \"local\",\n \"bind\": \"loopback\",\n \"controlUi\": {\n \"allowedOrigins\": [\n \"https://miopenclaw-vnic.tail9799d2.ts.net\",\n \"https://miopenclaw-vnic.tail9799d2.ts.net/\",\n \"http://127.0.0.1:18789\"\n ]\n },\n \"auth\": {\n \"mode\": \"token\",\n \"token\": \"__OPENCLAW_REDACTED__\"\n },\n \"trustedProxies\": [\n \"127.0.0.1/32\",\n \"::1/128\"\n ],\n \"tailscale\": {\n \"mode\": \"serve\",\n \"resetOnExit\": true\n }\n },\n \"skills\": {\n \"entries\": {\n \"gh-issues\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"nano-banana-pro\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"notion\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-image-gen\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-whisper-api\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"sag\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n }\n }\n },\n \"plugins\": {\n \"allow\": [\n \"telegram\",\n \"acpx\",\n \"clawrouter\"\n ],\n \"entries\": {\n \"qwen-portal-auth\": {\n \"enabled\": true\n },\n \"acpx\": {\n \"enabled\": true,\n \"config\": {\n \"permissionMode\": \"approve-reads\",\n \"nonInteractivePermissions\": \"fail\",\n \"expectedVersion\": \"0.1.15\",\n \"command\": \"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx\"\n }\n },\n \"clawrouter\": {\n \"enabled\": true\n }\n },\n \"installs\": {\n \"clawrouter\": {\n \"source\": \"npm\",\n \"spec\": \"@blockrun/clawrouter@0.12.43\",\n \"installPath\": \"/home/ubuntu/.openclaw/extensions/clawrouter\",\n \"version\": \"0.12.43\",\n \"resolvedName\": \"@blockrun/clawrouter\",\n \"resolvedVersion\": \"0.12.43\",\n \"resolvedSpec\": \"@blockrun/clawrouter@0.12.43\",\n \"integrity\": \"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==\",\n \"shasum\": \"3331382e1a46524bee73b8ffa83677950f5bbae5\",\n \"resolvedAt\": \"2026-03-15T22:45:46.066Z\",\n \"installedAt\": \"2026-03-15T22:46:43.662Z\"\n }\n }\n }\n },\n \"restart\": {\n \"ok\": true,\n \"pid\": 473624,\n \"signal\": \"SIGUSR1\",\n \"delayMs\": 2000,\n \"reason\": \"config.patch\",\n \"mode\": \"emit\",\n \"coalesced\": false,\n \"cooldownMsApplied\": 0\n },\n \"sentinel\": {\n \"path\": \"/home/ubuntu/.openclaw/restart-sentinel.json\",\n \"payload\": {\n \"kind\": \"config-patch\",\n \"status\": \"ok\",\n \"ts\": 1773622889213,\n \"sessionKey\": \"agent:pipo:telegram:direct:842987156\",\n \"message\": \"Endurecí OpenClaw: pin de clawrouter/acpx, exec más restrictivo y limpieza de la skill asana para evitar lectura de credenciales desde env.\",\n \"doctorHint\": \"Run: openclaw doctor --non-interactive\",\n \"stats\": {\n \"mode\": \"config.patch\",\n \"root\": \"/home/ubuntu/.openclaw/openclaw.json\"\n }\n }\n }\n }\n}"}],"details":{"ok":true,"result":{"ok":true,"path":"/home/ubuntu/.openclaw/openclaw.json","config":{"meta":{"lastTouchedVersion":"2026.3.13","lastTouchedAt":"2026-03-15T23:17:49.868Z"},"env":{"OPENAI_API_KEY":"__OPENCLAW_REDACTED__"},"wizard":{"lastRunAt":"2026-03-15T22:40:03.597Z","lastRunVersion":"2026.3.13","lastRunCommand":"doctor","lastRunMode":"local"},"diagnostics":{"flags":["telegram.http"]},"browser":{"executablePath":"/usr/bin/chromium-browser","headless":true,"noSandbox":true,"defaultProfile":"openclaw","profiles":{"openclaw":{"cdpPort":18800,"cdpUrl":"http://127.0.0.1:18800","color":"#FF4500"}}},"auth":{"profiles":{"openai-codex:default":{"provider":"openai-codex","mode":"oauth"}}},"acp":{"enabled":true,"dispatch":{"enabled":true},"backend":"acpx","defaultAgent":"codex","allowedAgents":["codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"],"maxConcurrentSessions":8},"models":{"mode":"merge","providers":{"custom-api-deepseek-com":{"baseUrl":"https://api.deepseek.com","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"deepseek-chat","name":"deepseek-chat (Custom Provider)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":16000,"maxTokens":4096}]},"blockrun":{"baseUrl":"http://127.0.0.1:8402/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"auto","name":"Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"free","name":"Free (NVIDIA GPT-OSS-120B only)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":4096},{"id":"eco","name":"Eco (Smart Router - Cost Optimized)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"premium","name":"Premium (Smart Router - Best Quality)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":2000000,"maxTokens":200000},{"id":"openai/gpt-5.2","name":"GPT-5.2","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.25,"output":2,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":65536},{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.05,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":32768},{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":21,"output":168,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4","name":"GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.3","name":"GPT-5.3","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16000},{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-4.1","name":"GPT-4.1","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":1.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o","name":"GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o-mini","name":"GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/o1","name":"o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o1-mini","name":"o1-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o3","name":"o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o3-mini","name":"o3-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o4-mini","name":"o4-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"google/gemini-3.1-pro","name":"Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-pro-preview","name":"Gemini 3 Pro Preview","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"deepseek/deepseek-chat","name":"DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"deepseek/deepseek-reasoner","name":"DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"moonshot/kimi-k2.5","name":"Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"xai/grok-3","name":"Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-3-mini","name":"Grok 3 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-reasoning","name":"Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-non-reasoning","name":"Grok 4 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-reasoning","name":"Grok 4.1 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-non-reasoning","name":"Grok 4.1 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-0709","name":"Grok 4 (0709)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":1.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-2-vision","name":"Grok 2 Vision","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"nvidia/gpt-oss-120b","name":"NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"nvidia/kimi-k2.5","name":"NVIDIA Kimi K2.5","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.55,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":16384},{"id":"claude","name":"claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet","name":"sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4","name":"sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4.6","name":"sonnet-4.6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4-6","name":"sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"opus","name":"opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4","name":"opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4.6","name":"opus-4.6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4-6","name":"opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"haiku","name":"haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/sonnet","name":"anthropic/sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/opus","name":"anthropic/opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/haiku","name":"anthropic/haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude","name":"anthropic/claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4-6","name":"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4-6","name":"anthropic/claude-opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-haiku-4","name":"anthropic/claude-haiku-4 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-haiku-4-5","name":"anthropic/claude-haiku-4-5 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"gpt","name":"gpt → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt4","name":"gpt4 → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt5","name":"gpt5 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4","name":"gpt-5.4 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4-pro","name":"gpt-5.4-pro → GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"codex","name":"codex → GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"mini","name":"mini → GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"o1","name":"o1 → o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"o3","name":"o3 → o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"deepseek","name":"deepseek → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"reasoner","name":"reasoner → DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"kimi","name":"kimi → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"moonshot","name":"moonshot → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"kimi-k2.5","name":"kimi-k2.5 → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"gemini","name":"gemini → Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"flash","name":"flash → Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"gemini-3.1-pro-preview","name":"gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"grok","name":"grok → Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-fast","name":"grok-fast → Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-code","name":"grok-code → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"nvidia","name":"nvidia → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt-120b","name":"gpt-120b → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"minimax","name":"minimax → MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"auto-router","name":"auto-router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"router","name":"router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000}]},"custom-api-moonshot-ai":{"baseUrl":"https://api.moonshot.ai/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"kimi-k2.5","name":"Kimi K2.5 (Moonshot)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192}]}}},"agents":{"defaults":{"model":{"primary":"blockrun/auto","fallbacks":["custom-api-deepseek-com/deepseek-chat"]},"models":{"blockrun/auto":{},"openrouter/anthropic/claude-sonnet-4-6":{"alias":"claude"},"openai-codex/gpt-5.1":{"alias":"codex-chat"},"openai-codex/gpt-5.3-codex-spark":{"alias":"codex-spark"},"openai-codex/gpt-5.3-codex":{"alias":"codex-max"},"openai-codex/gpt-5.4":{"alias":"gpt-5.4"},"custom-api-deepseek-com/deepseek-chat":{"alias":"deepseek"},"claude-sonnet-cli/default":{"alias":"claude-sonnet"},"claude-opus-cli/default":{"alias":"claude-opus"},"blockrun/free":{},"blockrun/eco":{},"blockrun/premium":{},"blockrun/anthropic/claude-sonnet-4.6":{},"blockrun/anthropic/claude-opus-4.6":{},"blockrun/anthropic/claude-haiku-4.5":{},"blockrun/openai/gpt-5.2":{},"blockrun/openai/gpt-4o":{},"blockrun/openai/o3":{},"blockrun/google/gemini-3.1-pro":{},"blockrun/google/gemini-3-flash-preview":{},"blockrun/deepseek/deepseek-chat":{},"blockrun/moonshot/kimi-k2.5":{},"blockrun/xai/grok-3":{},"blockrun/minimax/minimax-m2.5":{},"openrouter/openrouter/free":{},"custom-api-moonshot-ai/kimi-k2.5":{"alias":"kimi"},"clawrouter/auto":{"alias":"clawrouter"},"openrouter/openrouter/auto":{},"blockrun/openai/gpt-5.3":{}},"workspace":"/home/ubuntu/.openclaw/workspace","cliBackends":{"codex-cli":{"command":"/home/linuxbrew/.linuxbrew/bin/codex","args":["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"],"output":"jsonl"},"gemini-cli":{"command":"/home/ubuntu/.local/bin/gemini-cli-openclaw","output":"text"},"deepseek-code":{"command":"/home/ubuntu/.local/bin/deepseek-code-openclaw","output":"text"},"claude-sonnet-cli":{"command":"/home/ubuntu/.local/bin/claude-sonnet-openclaw","output":"text"},"claude-opus-cli":{"command":"/home/ubuntu/.local/bin/claude-opus-openclaw","output":"text"},"kimi-cli":{"command":"/home/ubuntu/.local/bin/kimi-openclaw","output":"text"}},"compaction":{"mode":"safeguard"},"elevatedDefault":"off","maxConcurrent":1,"subagents":{"maxConcurrent":4}},"list":[{"id":"pipo","name":"pipo","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"openai-codex/gpt-5.4","fallbacks":["blockrun/auto","openrouter/openrouter/free"]},"subagents":{"allowAgents":["codex","gemini","claude","deepseek-code","kimi","clawrouter","openrouter"]}},{"id":"codex","name":"codex","workspace":"/home/ubuntu/.openclaw/workspace-codex","agentDir":"/home/ubuntu/.openclaw/agents/codex/agent","model":"openai-codex/gpt-5.3-codex"},{"id":"gemini","name":"gemini","workspace":"/home/ubuntu/.openclaw/workspace-gemini","agentDir":"/home/ubuntu/.openclaw/agents/gemini/agent","model":"gemini-cli/default"},{"id":"deepseek-code","name":"deepseek-code","workspace":"/home/ubuntu/.openclaw/workspace-deepseek-code","agentDir":"/home/ubuntu/.openclaw/agents/deepseek-code/agent","model":"deepseek-code/default"},{"id":"claude","name":"claude","workspace":"/home/ubuntu/.openclaw/workspace-claude","agentDir":"/home/ubuntu/.openclaw/agents/claude/agent","model":"claude-sonnet-cli/default"},{"id":"claude-opus","name":"claude-opus","workspace":"/home/ubuntu/.openclaw/workspace-claude-opus","agentDir":"/home/ubuntu/.openclaw/agents/claude-opus/agent","model":"claude-opus-cli/default"},{"id":"kimi","name":"kimi","workspace":"/home/ubuntu/.openclaw/workspace-kimi","agentDir":"/home/ubuntu/.openclaw/agents/kimi/agent","model":"kimi-cli/default"},{"id":"clawrouter","name":"ClawRouter","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"blockrun/auto","fallbacks":["openrouter/openrouter/free"]}},{"id":"openrouter","name":"OpenRouter","workspace":"/home/ubuntu/.openclaw/workspace-openrouter","agentDir":"/home/ubuntu/.openclaw/agents/openrouter/agent","model":{"primary":"openrouter/openrouter/auto","fallbacks":["openrouter/openrouter/free"]}}]},"tools":{"sessions":{"visibility":"all"},"agentToAgent":{"enabled":true,"allow":["pipo","codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"]},"elevated":{"enabled":true,"allowFrom":{"telegram":[842987156],"webchat":[]}},"exec":{"security":"allowlist","ask":"on-miss"}},"messages":{"ackReactionScope":"group-mentions"},"commands":{"native":"auto","nativeSkills":"auto","restart":true,"ownerDisplay":"raw"},"session":{"dmScope":"per-channel-peer"},"hooks":{"internal":{"enabled":true,"entries":{"session-memory":{"enabled":true},"bootstrap-extra-files":{"enabled":true},"boot-md":{"enabled":true}}}},"channels":{"telegram":{"enabled":true,"dmPolicy":"allowlist","botToken":"__OPENCLAW_REDACTED__","replyToMode":"all","allowFrom":[842987156],"groupPolicy":"allowlist","streaming":"off","mediaMaxMb":20,"timeoutSeconds":60,"retry":{"attempts":6,"minDelayMs":1500,"maxDelayMs":90000,"jitter":0.1},"network":{"autoSelectFamily":false,"dnsResultOrder":"ipv4first"}}},"talk":{"provider":"elevenlabs","providers":{"elevenlabs":{"apiKey":"__OPENCLAW_REDACTED__"}},"apiKey":"__OPENCLAW_REDACTED__"},"gateway":{"port":18789,"mode":"local","bind":"loopback","controlUi":{"allowedOrigins":["https://miopenclaw-vnic.tail9799d2.ts.net","https://miopenclaw-vnic.tail9799d2.ts.net/","http://127.0.0.1:18789"]},"auth":{"mode":"token","token":"__OPENCLAW_REDACTED__"},"trustedProxies":["127.0.0.1/32","::1/128"],"tailscale":{"mode":"serve","resetOnExit":true}},"skills":{"entries":{"gh-issues":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"nano-banana-pro":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"notion":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-image-gen":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-whisper-api":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"sag":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"}}},"plugins":{"allow":["telegram","acpx","clawrouter"],"entries":{"qwen-portal-auth":{"enabled":true},"acpx":{"enabled":true,"config":{"permissionMode":"approve-reads","nonInteractivePermissions":"fail","expectedVersion":"0.1.15","command":"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx"}},"clawrouter":{"enabled":true}},"installs":{"clawrouter":{"source":"npm","spec":"@blockrun/clawrouter@0.12.43","installPath":"/home/ubuntu/.openclaw/extensions/clawrouter","version":"0.12.43","resolvedName":"@blockrun/clawrouter","resolvedVersion":"0.12.43","resolvedSpec":"@blockrun/clawrouter@0.12.43","integrity":"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==","shasum":"3331382e1a46524bee73b8ffa83677950f5bbae5","resolvedAt":"2026-03-15T22:45:46.066Z","installedAt":"2026-03-15T22:46:43.662Z"}}}},"restart":{"ok":true,"pid":473624,"signal":"SIGUSR1","delayMs":2000,"reason":"config.patch","mode":"emit","coalesced":false,"cooldownMsApplied":0},"sentinel":{"path":"/home/ubuntu/.openclaw/restart-sentinel.json","payload":{"kind":"config-patch","status":"ok","ts":1773622889213,"sessionKey":"agent:pipo:telegram:direct:842987156","message":"Endurecí OpenClaw: pin de clawrouter/acpx, exec más restrictivo y limpieza de la skill asana para evitar lectura de credenciales desde env.","doctorHint":"Run: openclaw doctor --non-interactive","stats":{"mode":"config.patch","root":"/home/ubuntu/.openclaw/openclaw.json"}}}}},"isError":false,"timestamp":1773622889236}} {"type":"message","id":"b8798617","parentId":"ecb4c0ee","timestamp":"2026-03-16T01:01:38.671Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Validating gateway configurations**\n\nI've patched the configuration, and I need to validate things after a restart. It seems the gateway is likely running, so I should run status checks. I’m thinking of executing the openclaw status check to see if it’s allowed. I might first try using the gateway's config.get command to see if that works. I also want to consider session status to validate everything effectively, so I'll keep those options in mind.","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7566b61448190b5215d70826a5db5\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1Zwo9blB7UtcdDxVXT4C-sC0l-MbM4YD7SdB13Q8JJWaS8JFdCV3CZBAmXneqtxDrnKqPC8_6Y9mSicsTfnX3RNiMdzGoVz6bWrjz2wj9Y_-zrk6jqWn_mYpfhwrHMeadxViXln_byJYqGxzMGxlkncfLEU7FgfacvGuTGrhngNz5Q30J4SPQ_OGRBLo7nSk56SL6peT4MNO3bGCYs8imOq_thQ1cnuDCFs8PPLcHsxs7-gInonLdsgN1G1Wc6JaPeDDq2jcZsHnVfmvrp8bD5ACUkbHn0iEqDr4HgdLmtrzdUchKEVscEgx4xfCi8pY1J7_dCczCnxxEqwe51f7RmloUF55RA14IlgFxitWhXiLxDNChzbeZ69vmXudGqTm78a1Hv3b4KJBynPY5FJBbe4IFpjVIZjPT1QdpuevRob4EKUs_77XAViUcYJhMPGl5pUTjJqrl6yZjwhCaZTa6XfviU-_qpla9NSeCdJG172Z6y7ij4VXzB5Hu9bsXaAOSYvyW0I8VM14z2sp5YJsirV5HfL747cFAueTnpOY23GikU6Pyl2LU_euVV2N9E4FsvCdWdmrP26f310YvtXbcvN3vW9qscTy7yd8n3emUc0y6VckTWaOKn2xh5hWi3si4FC3YP3m45bd-jPgHhKgF40Ns4O9b_Q2Wp05e-f-06aa5Uw-rThFtVuW1rUiHAtBEhck6FUHTDpPat2s5vtuds1J3m9SIMqWYwTn_KA6TaEagNqQ-UbLV-StHNzl6nxn1SU2Vq3bbHVqYUfU0UWLsu1zUnoDRWzfOv8TzSJtUiKuAHeDZV7Ck2mPeOAePdRsaPzCtnUaLaI2ltv60udNXdZNZ-wcQ62gRP9_r_MNK4CuooXdmip9r4RWrAY5M3QKN_eUkefDzc3pJ7qVwJOoD2VPPhr72jcfZz-bXim_Ww5ELlBsgnIyIpOa_K-R3Gnd9TyxW_wFG-6Zi2H9U8y9KQZYXacjo5zpGvtgr4zJ2HikJS_j1K3gCgoaLsafIkYl5c-BuG-iPS0wdmqoq-s3p3V5V_aMAKk6oX8RP3fk6DKMiyKMvJ6enmTyYGC3dNaP2UqKT82YTqLNjYmVV065Ko6AOJ_HBwtgjV1BckBsvYmjiOO_jqutLGfUesm6LJmU3WmRUkqFsmRxNKQsJcvtm-oTV0bU3QaoKW-F_YeGFdctvkRBinWVyWAtvfIz_NFM2TD5073JKtnMnGsS1X8yhl_VKCYxi8BIDVrBVt8zwwR3SwyT6BH9FSM4Rw1WlyK6x2qs89rhb4jgUSJ6hDrZ0VsWu6WPPa-joRKm5fl2Akn63JkyLXBieKJdmkvUlRJOAYEeKKzCoHSuQKumcMMFA6VRGL5lHA4ffYZXbOT1hj94MWu7RQM24Bg0ysw8nGyaFlWsVoYJ1vNNyT4PWNC7gkcdekW56Y1yNo3oC_LeqH5wvnjj0cn6HvRuyDhcfB5aXHmns4c5dHvz3_lIqFKBQv3kJRTecRvC7T60aYYyqTf-9JCbHhM8mD71PGaVFjbJ8CKmkdzQgIKsng2YWBCZU14SbAfJzSegcUdq94os1fx7FVjyL_zQmDHbAosirVRer2AEb-47T2jqL5uT-sq9l5uhyLkAVLWRecs-O0pX4tsIEGhYk7_yoGCxXo-9pD1E4pgNJV_MF9UJB9TYZO-XptNxOV1PEDcXdidfiyq-4MUzT42_5KcSDR8P8n-52cH1E7XeFXUTzDrHqt_lR_L-PaQZ_HIbkWcwavVKwlLo-rcEnIIBAIzkdl5FahafOa_nqrV\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Validating gateway configurations**\\n\\nI've patched the configuration, and I need to validate things after a restart. It seems the gateway is likely running, so I should run status checks. I’m thinking of executing the openclaw status check to see if it’s allowed. I might first try using the gateway's config.get command to see if that works. I also want to consider session status to validate everything effectively, so I'll keep those options in mind.\"}]}"},{"type":"text","text":"Ya volvió arriba. Hago la verificación final para confirmar que el restart quedó limpio y que no se rompió el canal.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b756702f2081908382733c38f78604\",\"phase\":\"commentary\"}"},{"type":"toolCall","id":"call_6A0Y8lEExtmID9d8604TXwgM|fc_0776d4d0ce7a6f6b0169b7567228d88190bd038e79189da5d1","name":"exec","arguments":{"command":"openclaw status","workdir":"/home/ubuntu/.openclaw/workspace","yieldMs":10000,"timeout":30},"partialJson":"{\"command\":\"openclaw status\",\"workdir\":\"/home/ubuntu/.openclaw/workspace\",\"yieldMs\":10000,\"timeout\":30}"},{"type":"toolCall","id":"call_2Ey8CDXWjpamfE5aVeo5YbEO|fc_0776d4d0ce7a6f6b0169b7567228ec8190ac87124818d63616","name":"exec","arguments":{"command":"openclaw --version","workdir":"/home/ubuntu/.openclaw/workspace","yieldMs":10000,"timeout":30},"partialJson":"{\"command\":\"openclaw --version\",\"workdir\":\"/home/ubuntu/.openclaw/workspace\",\"yieldMs\":10000,\"timeout\":30}"},{"type":"toolCall","id":"call_Q3ByLD0r3m1cbkFkCfn3znyP|fc_0776d4d0ce7a6f6b0169b7567228f48190856f488f8f4bdbff","name":"gateway","arguments":{"action":"config.get"},"partialJson":"{\"action\":\"config.get\"}"},{"type":"toolCall","id":"call_yGxrNXaWHefYSqjh323pLEaj|fc_0776d4d0ce7a6f6b0169b75672290081908ad10fdc12e9c28d","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs","offset":1,"limit":20},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/oauth_oob.mjs\",\"offset\":1,\"limit\":20}"},{"type":"toolCall","id":"call_QQWdfoAjZcsEAvzABOc13juN|fc_0776d4d0ce7a6f6b0169b7567229088190b98b853b54c74da2","name":"read","arguments":{"file_path":"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs","offset":1,"limit":12},"partialJson":"{\"file_path\":\"/home/ubuntu/.agents/skills/asana/scripts/asana_api.mjs\",\"offset\":1,\"limit\":12}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":37162,"output":373,"cacheRead":24064,"cacheWrite":0,"totalTokens":61599,"cost":{"input":0.092905,"output":0.005595,"cacheRead":0.006016,"cacheWrite":0,"total":0.104516}},"stopReason":"toolUse","timestamp":1773622889259}} {"type":"message","id":"696ead83","parentId":"b8798617","timestamp":"2026-03-16T01:01:38.909Z","message":{"role":"toolResult","toolCallId":"call_6A0Y8lEExtmID9d8604TXwgM|fc_0776d4d0ce7a6f6b0169b7567228d88190bd038e79189da5d1","toolName":"exec","content":[{"type":"text","text":"{\n \"status\": \"error\",\n \"tool\": \"exec\",\n \"error\": \"exec denied: allowlist miss\"\n}"}],"details":{"status":"error","tool":"exec","error":"exec denied: allowlist miss"},"isError":false,"timestamp":1773622898898}} {"type":"message","id":"f657e8a1","parentId":"696ead83","timestamp":"2026-03-16T01:01:38.921Z","message":{"role":"toolResult","toolCallId":"call_2Ey8CDXWjpamfE5aVeo5YbEO|fc_0776d4d0ce7a6f6b0169b7567228ec8190ac87124818d63616","toolName":"exec","content":[{"type":"text","text":"{\n \"status\": \"error\",\n \"tool\": \"exec\",\n \"error\": \"exec denied: allowlist miss\"\n}"}],"details":{"status":"error","tool":"exec","error":"exec denied: allowlist miss"},"isError":false,"timestamp":1773622898909}} {"type":"message","id":"b1e5870d","parentId":"f657e8a1","timestamp":"2026-03-16T01:01:39.080Z","message":{"role":"toolResult","toolCallId":"call_Q3ByLD0r3m1cbkFkCfn3znyP|fc_0776d4d0ce7a6f6b0169b7567228f48190856f488f8f4bdbff","toolName":"gateway","content":[{"type":"text","text":"{\n \"ok\": true,\n \"result\": {\n \"path\": \"/home/ubuntu/.openclaw/openclaw.json\",\n \"exists\": true,\n \"raw\": \"{\\n meta: {\\n lastTouchedVersion: '2026.3.13',\\n lastTouchedAt: '2026-03-16T01:01:29.186Z',\\n },\\n env: {\\n OPENAI_API_KEY: '__OPENCLAW_REDACTED__',\\n },\\n wizard: {\\n lastRunAt: '2026-03-15T22:40:03.597Z',\\n lastRunVersion: '2026.3.13',\\n lastRunCommand: 'doctor',\\n lastRunMode: 'local',\\n },\\n diagnostics: {\\n flags: [\\n 'telegram.http',\\n ],\\n },\\n browser: {\\n executablePath: '/usr/bin/chromium-browser',\\n headless: true,\\n noSandbox: true,\\n defaultProfile: 'openclaw',\\n profiles: {\\n openclaw: {\\n cdpPort: 18800,\\n cdpUrl: 'http://127.0.0.1:18800',\\n color: '#FF4500',\\n },\\n },\\n },\\n auth: {\\n profiles: {\\n 'openai-codex:default': {\\n provider: 'openai-codex',\\n mode: 'oauth',\\n },\\n },\\n },\\n acp: {\\n enabled: true,\\n dispatch: {\\n enabled: true,\\n },\\n backend: 'acpx',\\n defaultAgent: 'codex',\\n allowedAgents: [\\n 'codex',\\n 'gemini',\\n 'deepseek-code',\\n 'claude',\\n 'claude-opus',\\n 'kimi',\\n 'clawrouter',\\n ],\\n maxConcurrentSessions: 8,\\n },\\n models: {\\n mode: 'merge',\\n providers: {\\n 'custom-api-deepseek-com': {\\n baseUrl: 'https://api.deepseek.com',\\n apiKey: '__OPENCLAW_REDACTED__',\\n api: 'openai-completions',\\n models: [\\n {\\n id: 'deepseek-chat',\\n name: 'deepseek-chat (Custom Provider)',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 16000,\\n maxTokens: 4096,\\n },\\n ],\\n },\\n blockrun: {\\n baseUrl: 'http://127.0.0.1:8402/v1',\\n apiKey: '__OPENCLAW_REDACTED__',\\n api: 'openai-completions',\\n models: [\\n {\\n id: 'auto',\\n name: 'Auto (Smart Router - Balanced)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'free',\\n name: 'Free (NVIDIA GPT-OSS-120B only)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 4096,\\n },\\n {\\n id: 'eco',\\n name: 'Eco (Smart Router - Cost Optimized)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'premium',\\n name: 'Premium (Smart Router - Best Quality)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 2000000,\\n maxTokens: 200000,\\n },\\n {\\n id: 'openai/gpt-5.2',\\n name: 'GPT-5.2',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1.75,\\n output: 14,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'openai/gpt-5-mini',\\n name: 'GPT-5 Mini',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.25,\\n output: 2,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'openai/gpt-5-nano',\\n name: 'GPT-5 Nano',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.05,\\n output: 0.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 32768,\\n },\\n {\\n id: 'openai/gpt-5.2-pro',\\n name: 'GPT-5.2 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 21,\\n output: 168,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'openai/gpt-5.4',\\n name: 'GPT-5.4',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'openai/gpt-5.4-pro',\\n name: 'GPT-5.4 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 30,\\n output: 180,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'openai/gpt-5.3',\\n name: 'GPT-5.3',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1.75,\\n output: 14,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16000,\\n },\\n {\\n id: 'openai/gpt-5.3-codex',\\n name: 'GPT-5.3 Codex',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 1.75,\\n output: 14,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'openai/gpt-4.1',\\n name: 'GPT-4.1',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 8,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'openai/gpt-4.1-mini',\\n name: 'GPT-4.1 Mini',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.4,\\n output: 1.6,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'openai/gpt-4.1-nano',\\n name: 'GPT-4.1 Nano',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.1,\\n output: 0.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'openai/gpt-4o',\\n name: 'GPT-4o',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'openai/gpt-4o-mini',\\n name: 'GPT-4o Mini',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.15,\\n output: 0.6,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'openai/o1',\\n name: 'o1',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 15,\\n output: 60,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 100000,\\n },\\n {\\n id: 'openai/o1-mini',\\n name: 'o1-mini',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 1.1,\\n output: 4.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'openai/o3',\\n name: 'o3',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 2,\\n output: 8,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 100000,\\n },\\n {\\n id: 'openai/o3-mini',\\n name: 'o3-mini',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 1.1,\\n output: 4.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'openai/o4-mini',\\n name: 'o4-mini',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 1.1,\\n output: 4.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'anthropic/claude-haiku-4.5',\\n name: 'Claude Haiku 4.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1,\\n output: 5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'anthropic/claude-sonnet-4.6',\\n name: 'Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'anthropic/claude-opus-4.6',\\n name: 'Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'google/gemini-3.1-pro',\\n name: 'Gemini 3.1 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 12,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-3-pro-preview',\\n name: 'Gemini 3 Pro Preview',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 12,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-3-flash-preview',\\n name: 'Gemini 3 Flash Preview',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.5,\\n output: 3,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1000000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-2.5-pro',\\n name: 'Gemini 2.5 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1.25,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-2.5-flash',\\n name: 'Gemini 2.5 Flash',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.3,\\n output: 2.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1000000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-2.5-flash-lite',\\n name: 'Gemini 2.5 Flash Lite',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.1,\\n output: 0.4,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1000000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'deepseek/deepseek-chat',\\n name: 'DeepSeek V3.2 Chat',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.28,\\n output: 0.42,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'deepseek/deepseek-reasoner',\\n name: 'DeepSeek V3.2 Reasoner',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.28,\\n output: 0.42,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'moonshot/kimi-k2.5',\\n name: 'Kimi K2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.6,\\n output: 3,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 262144,\\n maxTokens: 8192,\\n },\\n {\\n id: 'xai/grok-3',\\n name: 'Grok 3',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-3-mini',\\n name: 'Grok 3 Mini',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.3,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-4-fast-reasoning',\\n name: 'Grok 4 Fast Reasoning',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-4-fast-non-reasoning',\\n name: 'Grok 4 Fast',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-4-1-fast-reasoning',\\n name: 'Grok 4.1 Fast Reasoning',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-4-1-fast-non-reasoning',\\n name: 'Grok 4.1 Fast',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-4-0709',\\n name: 'Grok 4 (0709)',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 1.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'xai/grok-2-vision',\\n name: 'Grok 2 Vision',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'minimax/minimax-m2.5',\\n name: 'MiniMax M2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.3,\\n output: 1.2,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 204800,\\n maxTokens: 16384,\\n },\\n {\\n id: 'nvidia/gpt-oss-120b',\\n name: 'NVIDIA GPT-OSS 120B',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'nvidia/kimi-k2.5',\\n name: 'NVIDIA Kimi K2.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.55,\\n output: 2.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 262144,\\n maxTokens: 16384,\\n },\\n {\\n id: 'claude',\\n name: 'claude → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'sonnet',\\n name: 'sonnet → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'sonnet-4',\\n name: 'sonnet-4 → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'sonnet-4.6',\\n name: 'sonnet-4.6 → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'sonnet-4-6',\\n name: 'sonnet-4-6 → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'opus',\\n name: 'opus → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'opus-4',\\n name: 'opus-4 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'opus-4.6',\\n name: 'opus-4.6 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'opus-4-6',\\n name: 'opus-4-6 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'haiku',\\n name: 'haiku → Claude Haiku 4.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1,\\n output: 5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'anthropic/sonnet',\\n name: 'anthropic/sonnet → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'anthropic/opus',\\n name: 'anthropic/opus → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'anthropic/haiku',\\n name: 'anthropic/haiku → Claude Haiku 4.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1,\\n output: 5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'anthropic/claude',\\n name: 'anthropic/claude → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'anthropic/claude-sonnet-4',\\n name: 'anthropic/claude-sonnet-4 → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'anthropic/claude-sonnet-4-6',\\n name: 'anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 64000,\\n },\\n {\\n id: 'anthropic/claude-opus-4',\\n name: 'anthropic/claude-opus-4 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'anthropic/claude-opus-4-6',\\n name: 'anthropic/claude-opus-4-6 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'anthropic/claude-opus-4.5',\\n name: 'anthropic/claude-opus-4.5 → Claude Opus 4.6',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 5,\\n output: 25,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 32000,\\n },\\n {\\n id: 'anthropic/claude-haiku-4',\\n name: 'anthropic/claude-haiku-4 → Claude Haiku 4.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1,\\n output: 5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'anthropic/claude-haiku-4-5',\\n name: 'anthropic/claude-haiku-4-5 → Claude Haiku 4.5',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1,\\n output: 5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'gpt',\\n name: 'gpt → GPT-4o',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'gpt4',\\n name: 'gpt4 → GPT-4o',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'gpt5',\\n name: 'gpt5 → GPT-5.4',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'gpt-5.4',\\n name: 'gpt-5.4 → GPT-5.4',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2.5,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'gpt-5.4-pro',\\n name: 'gpt-5.4-pro → GPT-5.4 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 30,\\n output: 180,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'codex',\\n name: 'codex → GPT-5.3 Codex',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 1.75,\\n output: 14,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 400000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'mini',\\n name: 'mini → GPT-4o Mini',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.15,\\n output: 0.6,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'o1',\\n name: 'o1 → o1',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 15,\\n output: 60,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 100000,\\n },\\n {\\n id: 'o3',\\n name: 'o3 → o3',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 2,\\n output: 8,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 100000,\\n },\\n {\\n id: 'deepseek',\\n name: 'deepseek → DeepSeek V3.2 Chat',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.28,\\n output: 0.42,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'reasoner',\\n name: 'reasoner → DeepSeek V3.2 Reasoner',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.28,\\n output: 0.42,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'kimi',\\n name: 'kimi → Kimi K2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.6,\\n output: 3,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 262144,\\n maxTokens: 8192,\\n },\\n {\\n id: 'moonshot',\\n name: 'moonshot → Kimi K2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.6,\\n output: 3,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 262144,\\n maxTokens: 8192,\\n },\\n {\\n id: 'kimi-k2.5',\\n name: 'kimi-k2.5 → Kimi K2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.6,\\n output: 3,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 262144,\\n maxTokens: 8192,\\n },\\n {\\n id: 'gemini',\\n name: 'gemini → Gemini 2.5 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 1.25,\\n output: 10,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'flash',\\n name: 'flash → Gemini 2.5 Flash',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 0.3,\\n output: 2.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1000000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'gemini-3.1-pro-preview',\\n name: 'gemini-3.1-pro-preview → Gemini 3.1 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 12,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'google/gemini-3.1-pro-preview',\\n name: 'google/gemini-3.1-pro-preview → Gemini 3.1 Pro',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n 'image',\\n ],\\n cost: {\\n input: 2,\\n output: 12,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 65536,\\n },\\n {\\n id: 'grok',\\n name: 'grok → Grok 3',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 3,\\n output: 15,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'grok-fast',\\n name: 'grok-fast → Grok 4 Fast Reasoning',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.2,\\n output: 0.5,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 131072,\\n maxTokens: 16384,\\n },\\n {\\n id: 'grok-code',\\n name: 'grok-code → DeepSeek V3.2 Chat',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.28,\\n output: 0.42,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 8192,\\n },\\n {\\n id: 'nvidia',\\n name: 'nvidia → NVIDIA GPT-OSS 120B',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'gpt-120b',\\n name: 'gpt-120b → NVIDIA GPT-OSS 120B',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 128000,\\n maxTokens: 16384,\\n },\\n {\\n id: 'minimax',\\n name: 'minimax → MiniMax M2.5',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0.3,\\n output: 1.2,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 204800,\\n maxTokens: 16384,\\n },\\n {\\n id: 'auto-router',\\n name: 'auto-router → Auto (Smart Router - Balanced)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 128000,\\n },\\n {\\n id: 'router',\\n name: 'router → Auto (Smart Router - Balanced)',\\n api: 'openai-completions',\\n reasoning: false,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 1050000,\\n maxTokens: 128000,\\n },\\n ],\\n },\\n 'custom-api-moonshot-ai': {\\n baseUrl: 'https://api.moonshot.ai/v1',\\n apiKey: '__OPENCLAW_REDACTED__',\\n api: 'openai-completions',\\n models: [\\n {\\n id: 'kimi-k2.5',\\n name: 'Kimi K2.5 (Moonshot)',\\n api: 'openai-completions',\\n reasoning: true,\\n input: [\\n 'text',\\n ],\\n cost: {\\n input: 0,\\n output: 0,\\n cacheRead: 0,\\n cacheWrite: 0,\\n },\\n contextWindow: 200000,\\n maxTokens: 8192,\\n },\\n ],\\n },\\n },\\n },\\n agents: {\\n defaults: {\\n model: {\\n primary: 'blockrun/auto',\\n fallbacks: [\\n 'custom-api-deepseek-com/deepseek-chat',\\n ],\\n },\\n models: {\\n 'blockrun/auto': {},\\n 'openrouter/anthropic/claude-sonnet-4-6': {\\n alias: 'claude',\\n },\\n 'openai-codex/gpt-5.1': {\\n alias: 'codex-chat',\\n },\\n 'openai-codex/gpt-5.3-codex-spark': {\\n alias: 'codex-spark',\\n },\\n 'openai-codex/gpt-5.3-codex': {\\n alias: 'codex-max',\\n },\\n 'openai-codex/gpt-5.4': {\\n alias: 'gpt-5.4',\\n },\\n 'custom-api-deepseek-com/deepseek-chat': {\\n alias: 'deepseek',\\n },\\n 'claude-sonnet-cli/default': {\\n alias: 'claude-sonnet',\\n },\\n 'claude-opus-cli/default': {\\n alias: 'claude-opus',\\n },\\n 'blockrun/free': {},\\n 'blockrun/eco': {},\\n 'blockrun/premium': {},\\n 'blockrun/anthropic/claude-sonnet-4.6': {},\\n 'blockrun/anthropic/claude-opus-4.6': {},\\n 'blockrun/anthropic/claude-haiku-4.5': {},\\n 'blockrun/openai/gpt-5.2': {},\\n 'blockrun/openai/gpt-4o': {},\\n 'blockrun/openai/o3': {},\\n 'blockrun/google/gemini-3.1-pro': {},\\n 'blockrun/google/gemini-3-flash-preview': {},\\n 'blockrun/deepseek/deepseek-chat': {},\\n 'blockrun/moonshot/kimi-k2.5': {},\\n 'blockrun/xai/grok-3': {},\\n 'blockrun/minimax/minimax-m2.5': {},\\n 'openrouter/openrouter/free': {},\\n 'custom-api-moonshot-ai/kimi-k2.5': {\\n alias: 'kimi',\\n },\\n 'clawrouter/auto': {\\n alias: 'clawrouter',\\n },\\n 'openrouter/openrouter/auto': {},\\n 'blockrun/openai/gpt-5.3': {},\\n },\\n workspace: '/home/ubuntu/.openclaw/workspace',\\n cliBackends: {\\n 'codex-cli': {\\n command: '/home/linuxbrew/.linuxbrew/bin/codex',\\n args: [\\n 'exec',\\n '--json',\\n '--color',\\n 'never',\\n '--sandbox',\\n 'read-only',\\n '--skip-git-repo-check',\\n ],\\n output: 'jsonl',\\n },\\n 'gemini-cli': {\\n command: '/home/ubuntu/.local/bin/gemini-cli-openclaw',\\n output: 'text',\\n },\\n 'deepseek-code': {\\n command: '/home/ubuntu/.local/bin/deepseek-code-openclaw',\\n output: 'text',\\n },\\n 'claude-sonnet-cli': {\\n command: '/home/ubuntu/.local/bin/claude-sonnet-openclaw',\\n output: 'text',\\n },\\n 'claude-opus-cli': {\\n command: '/home/ubuntu/.local/bin/claude-opus-openclaw',\\n output: 'text',\\n },\\n 'kimi-cli': {\\n command: '/home/ubuntu/.local/bin/kimi-openclaw',\\n output: 'text',\\n },\\n },\\n compaction: {\\n mode: 'safeguard',\\n },\\n elevatedDefault: 'off',\\n maxConcurrent: 1,\\n subagents: {\\n maxConcurrent: 4,\\n },\\n },\\n list: [\\n {\\n id: 'pipo',\\n name: 'pipo',\\n workspace: '/home/ubuntu/.openclaw/workspace',\\n model: {\\n primary: 'openai-codex/gpt-5.4',\\n fallbacks: [\\n 'blockrun/auto',\\n 'openrouter/openrouter/free',\\n ],\\n },\\n subagents: {\\n allowAgents: [\\n 'codex',\\n 'gemini',\\n 'claude',\\n 'deepseek-code',\\n 'kimi',\\n 'clawrouter',\\n 'openrouter',\\n ],\\n },\\n },\\n {\\n id: 'codex',\\n name: 'codex',\\n workspace: '/home/ubuntu/.openclaw/workspace-codex',\\n agentDir: '/home/ubuntu/.openclaw/agents/codex/agent',\\n model: 'openai-codex/gpt-5.3-codex',\\n },\\n {\\n id: 'gemini',\\n name: 'gemini',\\n workspace: '/home/ubuntu/.openclaw/workspace-gemini',\\n agentDir: '/home/ubuntu/.openclaw/agents/gemini/agent',\\n model: 'gemini-cli/default',\\n },\\n {\\n id: 'deepseek-code',\\n name: 'deepseek-code',\\n workspace: '/home/ubuntu/.openclaw/workspace-deepseek-code',\\n agentDir: '/home/ubuntu/.openclaw/agents/deepseek-code/agent',\\n model: 'deepseek-code/default',\\n },\\n {\\n id: 'claude',\\n name: 'claude',\\n workspace: '/home/ubuntu/.openclaw/workspace-claude',\\n agentDir: '/home/ubuntu/.openclaw/agents/claude/agent',\\n model: 'claude-sonnet-cli/default',\\n },\\n {\\n id: 'claude-opus',\\n name: 'claude-opus',\\n workspace: '/home/ubuntu/.openclaw/workspace-claude-opus',\\n agentDir: '/home/ubuntu/.openclaw/agents/claude-opus/agent',\\n model: 'claude-opus-cli/default',\\n },\\n {\\n id: 'kimi',\\n name: 'kimi',\\n workspace: '/home/ubuntu/.openclaw/workspace-kimi',\\n agentDir: '/home/ubuntu/.openclaw/agents/kimi/agent',\\n model: 'kimi-cli/default',\\n },\\n {\\n id: 'clawrouter',\\n name: 'ClawRouter',\\n workspace: '/home/ubuntu/.openclaw/workspace',\\n model: {\\n primary: 'blockrun/auto',\\n fallbacks: [\\n 'openrouter/openrouter/free',\\n ],\\n },\\n },\\n {\\n id: 'openrouter',\\n name: 'OpenRouter',\\n workspace: '/home/ubuntu/.openclaw/workspace-openrouter',\\n agentDir: '/home/ubuntu/.openclaw/agents/openrouter/agent',\\n model: {\\n primary: 'openrouter/openrouter/auto',\\n fallbacks: [\\n 'openrouter/openrouter/free',\\n ],\\n },\\n },\\n ],\\n },\\n tools: {\\n sessions: {\\n visibility: 'all',\\n },\\n agentToAgent: {\\n enabled: true,\\n allow: [\\n 'pipo',\\n 'codex',\\n 'gemini',\\n 'deepseek-code',\\n 'claude',\\n 'claude-opus',\\n 'kimi',\\n 'clawrouter',\\n ],\\n },\\n elevated: {\\n enabled: true,\\n allowFrom: {\\n telegram: [\\n 842987156,\\n ],\\n webchat: [],\\n },\\n },\\n exec: {\\n security: 'allowlist',\\n ask: 'on-miss',\\n },\\n },\\n messages: {\\n ackReactionScope: 'group-mentions',\\n },\\n commands: {\\n native: 'auto',\\n nativeSkills: 'auto',\\n restart: true,\\n ownerDisplay: 'raw',\\n },\\n session: {\\n dmScope: 'per-channel-peer',\\n },\\n hooks: {\\n internal: {\\n enabled: true,\\n entries: {\\n 'session-memory': {\\n enabled: true,\\n },\\n 'bootstrap-extra-files': {\\n enabled: true,\\n },\\n 'boot-md': {\\n enabled: true,\\n },\\n },\\n },\\n },\\n channels: {\\n telegram: {\\n enabled: true,\\n dmPolicy: 'allowlist',\\n botToken: '__OPENCLAW_REDACTED__',\\n replyToMode: 'all',\\n allowFrom: [\\n 842987156,\\n ],\\n groupPolicy: 'allowlist',\\n streaming: 'off',\\n mediaMaxMb: 20,\\n timeoutSeconds: 60,\\n retry: {\\n attempts: 6,\\n minDelayMs: 1500,\\n maxDelayMs: 90000,\\n jitter: 0.1,\\n },\\n network: {\\n autoSelectFamily: false,\\n dnsResultOrder: 'ipv4first',\\n },\\n },\\n },\\n gateway: {\\n port: 18789,\\n mode: 'local',\\n bind: 'loopback',\\n controlUi: {\\n allowedOrigins: [\\n 'https://miopenclaw-vnic.tail9799d2.ts.net',\\n 'https://miopenclaw-vnic.tail9799d2.ts.net/',\\n 'http://127.0.0.1:18789',\\n ],\\n },\\n auth: {\\n mode: 'token',\\n token: '__OPENCLAW_REDACTED__',\\n },\\n trustedProxies: [\\n '127.0.0.1/32',\\n '::1/128',\\n ],\\n tailscale: {\\n mode: 'serve',\\n resetOnExit: true,\\n },\\n },\\n skills: {\\n entries: {\\n 'gh-issues': {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n 'nano-banana-pro': {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n notion: {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n 'openai-image-gen': {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n 'openai-whisper-api': {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n sag: {\\n enabled: true,\\n apiKey: '__OPENCLAW_REDACTED__',\\n },\\n },\\n },\\n plugins: {\\n allow: [\\n 'telegram',\\n 'acpx',\\n 'clawrouter',\\n ],\\n entries: {\\n 'qwen-portal-auth': {\\n enabled: true,\\n },\\n acpx: {\\n enabled: true,\\n config: {\\n permissionMode: 'approve-reads',\\n nonInteractivePermissions: 'fail',\\n expectedVersion: '0.1.15',\\n command: '/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx',\\n },\\n },\\n clawrouter: {\\n enabled: true,\\n },\\n },\\n installs: {\\n clawrouter: {\\n source: 'npm',\\n spec: '@blockrun/clawrouter@0.12.43',\\n installPath: '/home/ubuntu/.openclaw/extensions/clawrouter',\\n version: '0.12.43',\\n resolvedName: '@blockrun/clawrouter',\\n resolvedVersion: '0.12.43',\\n resolvedSpec: '@blockrun/clawrouter@0.12.43',\\n integrity: 'sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==',\\n shasum: '3331382e1a46524bee73b8ffa83677950f5bbae5',\\n resolvedAt: '2026-03-15T22:45:46.066Z',\\n installedAt: '2026-03-15T22:46:43.662Z',\\n },\\n },\\n },\\n}\",\n \"parsed\": {\n \"meta\": {\n \"lastTouchedVersion\": \"2026.3.13\",\n \"lastTouchedAt\": \"2026-03-16T01:01:29.186Z\"\n },\n \"env\": {\n \"OPENAI_API_KEY\": \"__OPENCLAW_REDACTED__\"\n },\n \"wizard\": {\n \"lastRunAt\": \"2026-03-15T22:40:03.597Z\",\n \"lastRunVersion\": \"2026.3.13\",\n \"lastRunCommand\": \"doctor\",\n \"lastRunMode\": \"local\"\n },\n \"diagnostics\": {\n \"flags\": [\n \"telegram.http\"\n ]\n },\n \"browser\": {\n \"executablePath\": \"/usr/bin/chromium-browser\",\n \"headless\": true,\n \"noSandbox\": true,\n \"defaultProfile\": \"openclaw\",\n \"profiles\": {\n \"openclaw\": {\n \"cdpPort\": 18800,\n \"cdpUrl\": \"http://127.0.0.1:18800\",\n \"color\": \"#FF4500\"\n }\n }\n },\n \"auth\": {\n \"profiles\": {\n \"openai-codex:default\": {\n \"provider\": \"openai-codex\",\n \"mode\": \"oauth\"\n }\n }\n },\n \"acp\": {\n \"enabled\": true,\n \"dispatch\": {\n \"enabled\": true\n },\n \"backend\": \"acpx\",\n \"defaultAgent\": \"codex\",\n \"allowedAgents\": [\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ],\n \"maxConcurrentSessions\": 8\n },\n \"models\": {\n \"mode\": \"merge\",\n \"providers\": {\n \"custom-api-deepseek-com\": {\n \"baseUrl\": \"https://api.deepseek.com\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"deepseek-chat\",\n \"name\": \"deepseek-chat (Custom Provider)\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 16000,\n \"maxTokens\": 4096\n }\n ]\n },\n \"blockrun\": {\n \"baseUrl\": \"http://127.0.0.1:8402/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"auto\",\n \"name\": \"Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"free\",\n \"name\": \"Free (NVIDIA GPT-OSS-120B only)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 4096\n },\n {\n \"id\": \"eco\",\n \"name\": \"Eco (Smart Router - Cost Optimized)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"premium\",\n \"name\": \"Premium (Smart Router - Best Quality)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 2000000,\n \"maxTokens\": 200000\n },\n {\n \"id\": \"openai/gpt-5.2\",\n \"name\": \"GPT-5.2\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5-mini\",\n \"name\": \"GPT-5 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.25,\n \"output\": 2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/gpt-5-nano\",\n \"name\": \"GPT-5 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.05,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 32768\n },\n {\n \"id\": \"openai/gpt-5.2-pro\",\n \"name\": \"GPT-5.2 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 21,\n \"output\": 168,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4\",\n \"name\": \"GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4-pro\",\n \"name\": \"GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.3\",\n \"name\": \"GPT-5.3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16000\n },\n {\n \"id\": \"openai/gpt-5.3-codex\",\n \"name\": \"GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-4.1\",\n \"name\": \"GPT-4.1\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-mini\",\n \"name\": \"GPT-4.1 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.4,\n \"output\": 1.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-nano\",\n \"name\": \"GPT-4.1 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o\",\n \"name\": \"GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o-mini\",\n \"name\": \"GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/o1\",\n \"name\": \"o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o1-mini\",\n \"name\": \"o1-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o3\",\n \"name\": \"o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o3-mini\",\n \"name\": \"o3-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o4-mini\",\n \"name\": \"o4-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"anthropic/claude-haiku-4.5\",\n \"name\": \"Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-sonnet-4.6\",\n \"name\": \"Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4.6\",\n \"name\": \"Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"google/gemini-3.1-pro\",\n \"name\": \"Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-pro-preview\",\n \"name\": \"Gemini 3 Pro Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-flash-preview\",\n \"name\": \"Gemini 3 Flash Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.5,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-pro\",\n \"name\": \"Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash\",\n \"name\": \"Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash-lite\",\n \"name\": \"Gemini 2.5 Flash Lite\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"deepseek/deepseek-chat\",\n \"name\": \"DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"deepseek/deepseek-reasoner\",\n \"name\": \"DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot/kimi-k2.5\",\n \"name\": \"Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"xai/grok-3\",\n \"name\": \"Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-3-mini\",\n \"name\": \"Grok 3 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-reasoning\",\n \"name\": \"Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-non-reasoning\",\n \"name\": \"Grok 4 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-reasoning\",\n \"name\": \"Grok 4.1 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-non-reasoning\",\n \"name\": \"Grok 4.1 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-0709\",\n \"name\": \"Grok 4 (0709)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 1.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-2-vision\",\n \"name\": \"Grok 2 Vision\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax/minimax-m2.5\",\n \"name\": \"MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/gpt-oss-120b\",\n \"name\": \"NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/kimi-k2.5\",\n \"name\": \"NVIDIA Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.55,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet\",\n \"name\": \"sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4\",\n \"name\": \"sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4.6\",\n \"name\": \"sonnet-4.6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4-6\",\n \"name\": \"sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"opus\",\n \"name\": \"opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4\",\n \"name\": \"opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4.6\",\n \"name\": \"opus-4.6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4-6\",\n \"name\": \"opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"haiku\",\n \"name\": \"haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/sonnet\",\n \"name\": \"anthropic/sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/opus\",\n \"name\": \"anthropic/opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/haiku\",\n \"name\": \"anthropic/haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude\",\n \"name\": \"anthropic/claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4\",\n \"name\": \"anthropic/claude-sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4-6\",\n \"name\": \"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4\",\n \"name\": \"anthropic/claude-opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4-6\",\n \"name\": \"anthropic/claude-opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4.5\",\n \"name\": \"anthropic/claude-opus-4.5 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-haiku-4\",\n \"name\": \"anthropic/claude-haiku-4 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-haiku-4-5\",\n \"name\": \"anthropic/claude-haiku-4-5 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gpt\",\n \"name\": \"gpt → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt4\",\n \"name\": \"gpt4 → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt5\",\n \"name\": \"gpt5 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4\",\n \"name\": \"gpt-5.4 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4-pro\",\n \"name\": \"gpt-5.4-pro → GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex → GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"mini\",\n \"name\": \"mini → GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"o1\",\n \"name\": \"o1 → o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"o3\",\n \"name\": \"o3 → o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"deepseek\",\n \"name\": \"deepseek → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"reasoner\",\n \"name\": \"reasoner → DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot\",\n \"name\": \"moonshot → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"kimi-k2.5 → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini → Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"flash\",\n \"name\": \"flash → Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"gemini-3.1-pro-preview\",\n \"name\": \"gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3.1-pro-preview\",\n \"name\": \"google/gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"grok\",\n \"name\": \"grok → Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-fast\",\n \"name\": \"grok-fast → Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-code\",\n \"name\": \"grok-code → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"nvidia\",\n \"name\": \"nvidia → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt-120b\",\n \"name\": \"gpt-120b → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax\",\n \"name\": \"minimax → MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"auto-router\",\n \"name\": \"auto-router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"router\",\n \"name\": \"router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n }\n ]\n },\n \"custom-api-moonshot-ai\": {\n \"baseUrl\": \"https://api.moonshot.ai/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"Kimi K2.5 (Moonshot)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n }\n ]\n }\n }\n },\n \"agents\": {\n \"defaults\": {\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"custom-api-deepseek-com/deepseek-chat\"\n ]\n },\n \"models\": {\n \"blockrun/auto\": {},\n \"openrouter/anthropic/claude-sonnet-4-6\": {\n \"alias\": \"claude\"\n },\n \"openai-codex/gpt-5.1\": {\n \"alias\": \"codex-chat\"\n },\n \"openai-codex/gpt-5.3-codex-spark\": {\n \"alias\": \"codex-spark\"\n },\n \"openai-codex/gpt-5.3-codex\": {\n \"alias\": \"codex-max\"\n },\n \"openai-codex/gpt-5.4\": {\n \"alias\": \"gpt-5.4\"\n },\n \"custom-api-deepseek-com/deepseek-chat\": {\n \"alias\": \"deepseek\"\n },\n \"claude-sonnet-cli/default\": {\n \"alias\": \"claude-sonnet\"\n },\n \"claude-opus-cli/default\": {\n \"alias\": \"claude-opus\"\n },\n \"blockrun/free\": {},\n \"blockrun/eco\": {},\n \"blockrun/premium\": {},\n \"blockrun/anthropic/claude-sonnet-4.6\": {},\n \"blockrun/anthropic/claude-opus-4.6\": {},\n \"blockrun/anthropic/claude-haiku-4.5\": {},\n \"blockrun/openai/gpt-5.2\": {},\n \"blockrun/openai/gpt-4o\": {},\n \"blockrun/openai/o3\": {},\n \"blockrun/google/gemini-3.1-pro\": {},\n \"blockrun/google/gemini-3-flash-preview\": {},\n \"blockrun/deepseek/deepseek-chat\": {},\n \"blockrun/moonshot/kimi-k2.5\": {},\n \"blockrun/xai/grok-3\": {},\n \"blockrun/minimax/minimax-m2.5\": {},\n \"openrouter/openrouter/free\": {},\n \"custom-api-moonshot-ai/kimi-k2.5\": {\n \"alias\": \"kimi\"\n },\n \"clawrouter/auto\": {\n \"alias\": \"clawrouter\"\n },\n \"openrouter/openrouter/auto\": {},\n \"blockrun/openai/gpt-5.3\": {}\n },\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"cliBackends\": {\n \"codex-cli\": {\n \"command\": \"/home/linuxbrew/.linuxbrew/bin/codex\",\n \"args\": [\n \"exec\",\n \"--json\",\n \"--color\",\n \"never\",\n \"--sandbox\",\n \"read-only\",\n \"--skip-git-repo-check\"\n ],\n \"output\": \"jsonl\"\n },\n \"gemini-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/gemini-cli-openclaw\",\n \"output\": \"text\"\n },\n \"deepseek-code\": {\n \"command\": \"/home/ubuntu/.local/bin/deepseek-code-openclaw\",\n \"output\": \"text\"\n },\n \"claude-sonnet-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-sonnet-openclaw\",\n \"output\": \"text\"\n },\n \"claude-opus-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-opus-openclaw\",\n \"output\": \"text\"\n },\n \"kimi-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/kimi-openclaw\",\n \"output\": \"text\"\n }\n },\n \"compaction\": {\n \"mode\": \"safeguard\"\n },\n \"elevatedDefault\": \"off\",\n \"maxConcurrent\": 1,\n \"subagents\": {\n \"maxConcurrent\": 4\n }\n },\n \"list\": [\n {\n \"id\": \"pipo\",\n \"name\": \"pipo\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"openai-codex/gpt-5.4\",\n \"fallbacks\": [\n \"blockrun/auto\",\n \"openrouter/openrouter/free\"\n ]\n },\n \"subagents\": {\n \"allowAgents\": [\n \"codex\",\n \"gemini\",\n \"claude\",\n \"deepseek-code\",\n \"kimi\",\n \"clawrouter\",\n \"openrouter\"\n ]\n }\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-codex\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/codex/agent\",\n \"model\": \"openai-codex/gpt-5.3-codex\"\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-gemini\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/gemini/agent\",\n \"model\": \"gemini-cli/default\"\n },\n {\n \"id\": \"deepseek-code\",\n \"name\": \"deepseek-code\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-deepseek-code\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/deepseek-code/agent\",\n \"model\": \"deepseek-code/default\"\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude/agent\",\n \"model\": \"claude-sonnet-cli/default\"\n },\n {\n \"id\": \"claude-opus\",\n \"name\": \"claude-opus\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude-opus\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude-opus/agent\",\n \"model\": \"claude-opus-cli/default\"\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-kimi\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/kimi/agent\",\n \"model\": \"kimi-cli/default\"\n },\n {\n \"id\": \"clawrouter\",\n \"name\": \"ClawRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n },\n {\n \"id\": \"openrouter\",\n \"name\": \"OpenRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-openrouter\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/openrouter/agent\",\n \"model\": {\n \"primary\": \"openrouter/openrouter/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n }\n ]\n },\n \"tools\": {\n \"sessions\": {\n \"visibility\": \"all\"\n },\n \"agentToAgent\": {\n \"enabled\": true,\n \"allow\": [\n \"pipo\",\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ]\n },\n \"elevated\": {\n \"enabled\": true,\n \"allowFrom\": {\n \"telegram\": [\n 842987156\n ],\n \"webchat\": []\n }\n },\n \"exec\": {\n \"security\": \"allowlist\",\n \"ask\": \"on-miss\"\n }\n },\n \"messages\": {\n \"ackReactionScope\": \"group-mentions\"\n },\n \"commands\": {\n \"native\": \"auto\",\n \"nativeSkills\": \"auto\",\n \"restart\": true,\n \"ownerDisplay\": \"raw\"\n },\n \"session\": {\n \"dmScope\": \"per-channel-peer\"\n },\n \"hooks\": {\n \"internal\": {\n \"enabled\": true,\n \"entries\": {\n \"session-memory\": {\n \"enabled\": true\n },\n \"bootstrap-extra-files\": {\n \"enabled\": true\n },\n \"boot-md\": {\n \"enabled\": true\n }\n }\n }\n },\n \"channels\": {\n \"telegram\": {\n \"enabled\": true,\n \"dmPolicy\": \"allowlist\",\n \"botToken\": \"__OPENCLAW_REDACTED__\",\n \"replyToMode\": \"all\",\n \"allowFrom\": [\n 842987156\n ],\n \"groupPolicy\": \"allowlist\",\n \"streaming\": \"off\",\n \"mediaMaxMb\": 20,\n \"timeoutSeconds\": 60,\n \"retry\": {\n \"attempts\": 6,\n \"minDelayMs\": 1500,\n \"maxDelayMs\": 90000,\n \"jitter\": 0.1\n },\n \"network\": {\n \"autoSelectFamily\": false,\n \"dnsResultOrder\": \"ipv4first\"\n }\n }\n },\n \"gateway\": {\n \"port\": 18789,\n \"mode\": \"local\",\n \"bind\": \"loopback\",\n \"controlUi\": {\n \"allowedOrigins\": [\n \"https://miopenclaw-vnic.tail9799d2.ts.net\",\n \"https://miopenclaw-vnic.tail9799d2.ts.net/\",\n \"http://127.0.0.1:18789\"\n ]\n },\n \"auth\": {\n \"mode\": \"token\",\n \"token\": \"__OPENCLAW_REDACTED__\"\n },\n \"trustedProxies\": [\n \"127.0.0.1/32\",\n \"::1/128\"\n ],\n \"tailscale\": {\n \"mode\": \"serve\",\n \"resetOnExit\": true\n }\n },\n \"skills\": {\n \"entries\": {\n \"gh-issues\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"nano-banana-pro\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"notion\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-image-gen\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-whisper-api\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"sag\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n }\n }\n },\n \"plugins\": {\n \"allow\": [\n \"telegram\",\n \"acpx\",\n \"clawrouter\"\n ],\n \"entries\": {\n \"qwen-portal-auth\": {\n \"enabled\": true\n },\n \"acpx\": {\n \"enabled\": true,\n \"config\": {\n \"permissionMode\": \"approve-reads\",\n \"nonInteractivePermissions\": \"fail\",\n \"expectedVersion\": \"0.1.15\",\n \"command\": \"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx\"\n }\n },\n \"clawrouter\": {\n \"enabled\": true\n }\n },\n \"installs\": {\n \"clawrouter\": {\n \"source\": \"npm\",\n \"spec\": \"@blockrun/clawrouter@0.12.43\",\n \"installPath\": \"/home/ubuntu/.openclaw/extensions/clawrouter\",\n \"version\": \"0.12.43\",\n \"resolvedName\": \"@blockrun/clawrouter\",\n \"resolvedVersion\": \"0.12.43\",\n \"resolvedSpec\": \"@blockrun/clawrouter@0.12.43\",\n \"integrity\": \"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==\",\n \"shasum\": \"3331382e1a46524bee73b8ffa83677950f5bbae5\",\n \"resolvedAt\": \"2026-03-15T22:45:46.066Z\",\n \"installedAt\": \"2026-03-15T22:46:43.662Z\"\n }\n }\n }\n },\n \"resolved\": {\n \"meta\": {\n \"lastTouchedVersion\": \"2026.3.13\",\n \"lastTouchedAt\": \"2026-03-16T01:01:29.186Z\"\n },\n \"env\": {\n \"OPENAI_API_KEY\": \"__OPENCLAW_REDACTED__\"\n },\n \"wizard\": {\n \"lastRunAt\": \"2026-03-15T22:40:03.597Z\",\n \"lastRunVersion\": \"2026.3.13\",\n \"lastRunCommand\": \"doctor\",\n \"lastRunMode\": \"local\"\n },\n \"diagnostics\": {\n \"flags\": [\n \"telegram.http\"\n ]\n },\n \"browser\": {\n \"executablePath\": \"/usr/bin/chromium-browser\",\n \"headless\": true,\n \"noSandbox\": true,\n \"defaultProfile\": \"openclaw\",\n \"profiles\": {\n \"openclaw\": {\n \"cdpPort\": 18800,\n \"cdpUrl\": \"http://127.0.0.1:18800\",\n \"color\": \"#FF4500\"\n }\n }\n },\n \"auth\": {\n \"profiles\": {\n \"openai-codex:default\": {\n \"provider\": \"openai-codex\",\n \"mode\": \"oauth\"\n }\n }\n },\n \"acp\": {\n \"enabled\": true,\n \"dispatch\": {\n \"enabled\": true\n },\n \"backend\": \"acpx\",\n \"defaultAgent\": \"codex\",\n \"allowedAgents\": [\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ],\n \"maxConcurrentSessions\": 8\n },\n \"models\": {\n \"mode\": \"merge\",\n \"providers\": {\n \"custom-api-deepseek-com\": {\n \"baseUrl\": \"https://api.deepseek.com\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"deepseek-chat\",\n \"name\": \"deepseek-chat (Custom Provider)\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 16000,\n \"maxTokens\": 4096\n }\n ]\n },\n \"blockrun\": {\n \"baseUrl\": \"http://127.0.0.1:8402/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"auto\",\n \"name\": \"Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"free\",\n \"name\": \"Free (NVIDIA GPT-OSS-120B only)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 4096\n },\n {\n \"id\": \"eco\",\n \"name\": \"Eco (Smart Router - Cost Optimized)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"premium\",\n \"name\": \"Premium (Smart Router - Best Quality)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 2000000,\n \"maxTokens\": 200000\n },\n {\n \"id\": \"openai/gpt-5.2\",\n \"name\": \"GPT-5.2\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5-mini\",\n \"name\": \"GPT-5 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.25,\n \"output\": 2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/gpt-5-nano\",\n \"name\": \"GPT-5 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.05,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 32768\n },\n {\n \"id\": \"openai/gpt-5.2-pro\",\n \"name\": \"GPT-5.2 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 21,\n \"output\": 168,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4\",\n \"name\": \"GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4-pro\",\n \"name\": \"GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.3\",\n \"name\": \"GPT-5.3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16000\n },\n {\n \"id\": \"openai/gpt-5.3-codex\",\n \"name\": \"GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-4.1\",\n \"name\": \"GPT-4.1\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-mini\",\n \"name\": \"GPT-4.1 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.4,\n \"output\": 1.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-nano\",\n \"name\": \"GPT-4.1 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o\",\n \"name\": \"GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o-mini\",\n \"name\": \"GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/o1\",\n \"name\": \"o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o1-mini\",\n \"name\": \"o1-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o3\",\n \"name\": \"o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o3-mini\",\n \"name\": \"o3-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o4-mini\",\n \"name\": \"o4-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"anthropic/claude-haiku-4.5\",\n \"name\": \"Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-sonnet-4.6\",\n \"name\": \"Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4.6\",\n \"name\": \"Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"google/gemini-3.1-pro\",\n \"name\": \"Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-pro-preview\",\n \"name\": \"Gemini 3 Pro Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-flash-preview\",\n \"name\": \"Gemini 3 Flash Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.5,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-pro\",\n \"name\": \"Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash\",\n \"name\": \"Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash-lite\",\n \"name\": \"Gemini 2.5 Flash Lite\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"deepseek/deepseek-chat\",\n \"name\": \"DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"deepseek/deepseek-reasoner\",\n \"name\": \"DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot/kimi-k2.5\",\n \"name\": \"Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"xai/grok-3\",\n \"name\": \"Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-3-mini\",\n \"name\": \"Grok 3 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-reasoning\",\n \"name\": \"Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-non-reasoning\",\n \"name\": \"Grok 4 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-reasoning\",\n \"name\": \"Grok 4.1 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-non-reasoning\",\n \"name\": \"Grok 4.1 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-0709\",\n \"name\": \"Grok 4 (0709)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 1.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-2-vision\",\n \"name\": \"Grok 2 Vision\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax/minimax-m2.5\",\n \"name\": \"MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/gpt-oss-120b\",\n \"name\": \"NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/kimi-k2.5\",\n \"name\": \"NVIDIA Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.55,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet\",\n \"name\": \"sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4\",\n \"name\": \"sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4.6\",\n \"name\": \"sonnet-4.6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4-6\",\n \"name\": \"sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"opus\",\n \"name\": \"opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4\",\n \"name\": \"opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4.6\",\n \"name\": \"opus-4.6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4-6\",\n \"name\": \"opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"haiku\",\n \"name\": \"haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/sonnet\",\n \"name\": \"anthropic/sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/opus\",\n \"name\": \"anthropic/opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/haiku\",\n \"name\": \"anthropic/haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude\",\n \"name\": \"anthropic/claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4\",\n \"name\": \"anthropic/claude-sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4-6\",\n \"name\": \"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4\",\n \"name\": \"anthropic/claude-opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4-6\",\n \"name\": \"anthropic/claude-opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4.5\",\n \"name\": \"anthropic/claude-opus-4.5 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-haiku-4\",\n \"name\": \"anthropic/claude-haiku-4 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-haiku-4-5\",\n \"name\": \"anthropic/claude-haiku-4-5 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gpt\",\n \"name\": \"gpt → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt4\",\n \"name\": \"gpt4 → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt5\",\n \"name\": \"gpt5 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4\",\n \"name\": \"gpt-5.4 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4-pro\",\n \"name\": \"gpt-5.4-pro → GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex → GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"mini\",\n \"name\": \"mini → GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"o1\",\n \"name\": \"o1 → o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"o3\",\n \"name\": \"o3 → o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"deepseek\",\n \"name\": \"deepseek → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"reasoner\",\n \"name\": \"reasoner → DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot\",\n \"name\": \"moonshot → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"kimi-k2.5 → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini → Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"flash\",\n \"name\": \"flash → Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"gemini-3.1-pro-preview\",\n \"name\": \"gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3.1-pro-preview\",\n \"name\": \"google/gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"grok\",\n \"name\": \"grok → Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-fast\",\n \"name\": \"grok-fast → Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-code\",\n \"name\": \"grok-code → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"nvidia\",\n \"name\": \"nvidia → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt-120b\",\n \"name\": \"gpt-120b → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax\",\n \"name\": \"minimax → MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"auto-router\",\n \"name\": \"auto-router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"router\",\n \"name\": \"router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n }\n ]\n },\n \"custom-api-moonshot-ai\": {\n \"baseUrl\": \"https://api.moonshot.ai/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"Kimi K2.5 (Moonshot)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n }\n ]\n }\n }\n },\n \"agents\": {\n \"defaults\": {\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"custom-api-deepseek-com/deepseek-chat\"\n ]\n },\n \"models\": {\n \"blockrun/auto\": {},\n \"openrouter/anthropic/claude-sonnet-4-6\": {\n \"alias\": \"claude\"\n },\n \"openai-codex/gpt-5.1\": {\n \"alias\": \"codex-chat\"\n },\n \"openai-codex/gpt-5.3-codex-spark\": {\n \"alias\": \"codex-spark\"\n },\n \"openai-codex/gpt-5.3-codex\": {\n \"alias\": \"codex-max\"\n },\n \"openai-codex/gpt-5.4\": {\n \"alias\": \"gpt-5.4\"\n },\n \"custom-api-deepseek-com/deepseek-chat\": {\n \"alias\": \"deepseek\"\n },\n \"claude-sonnet-cli/default\": {\n \"alias\": \"claude-sonnet\"\n },\n \"claude-opus-cli/default\": {\n \"alias\": \"claude-opus\"\n },\n \"blockrun/free\": {},\n \"blockrun/eco\": {},\n \"blockrun/premium\": {},\n \"blockrun/anthropic/claude-sonnet-4.6\": {},\n \"blockrun/anthropic/claude-opus-4.6\": {},\n \"blockrun/anthropic/claude-haiku-4.5\": {},\n \"blockrun/openai/gpt-5.2\": {},\n \"blockrun/openai/gpt-4o\": {},\n \"blockrun/openai/o3\": {},\n \"blockrun/google/gemini-3.1-pro\": {},\n \"blockrun/google/gemini-3-flash-preview\": {},\n \"blockrun/deepseek/deepseek-chat\": {},\n \"blockrun/moonshot/kimi-k2.5\": {},\n \"blockrun/xai/grok-3\": {},\n \"blockrun/minimax/minimax-m2.5\": {},\n \"openrouter/openrouter/free\": {},\n \"custom-api-moonshot-ai/kimi-k2.5\": {\n \"alias\": \"kimi\"\n },\n \"clawrouter/auto\": {\n \"alias\": \"clawrouter\"\n },\n \"openrouter/openrouter/auto\": {},\n \"blockrun/openai/gpt-5.3\": {}\n },\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"cliBackends\": {\n \"codex-cli\": {\n \"command\": \"/home/linuxbrew/.linuxbrew/bin/codex\",\n \"args\": [\n \"exec\",\n \"--json\",\n \"--color\",\n \"never\",\n \"--sandbox\",\n \"read-only\",\n \"--skip-git-repo-check\"\n ],\n \"output\": \"jsonl\"\n },\n \"gemini-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/gemini-cli-openclaw\",\n \"output\": \"text\"\n },\n \"deepseek-code\": {\n \"command\": \"/home/ubuntu/.local/bin/deepseek-code-openclaw\",\n \"output\": \"text\"\n },\n \"claude-sonnet-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-sonnet-openclaw\",\n \"output\": \"text\"\n },\n \"claude-opus-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-opus-openclaw\",\n \"output\": \"text\"\n },\n \"kimi-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/kimi-openclaw\",\n \"output\": \"text\"\n }\n },\n \"compaction\": {\n \"mode\": \"safeguard\"\n },\n \"elevatedDefault\": \"off\",\n \"maxConcurrent\": 1,\n \"subagents\": {\n \"maxConcurrent\": 4\n }\n },\n \"list\": [\n {\n \"id\": \"pipo\",\n \"name\": \"pipo\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"openai-codex/gpt-5.4\",\n \"fallbacks\": [\n \"blockrun/auto\",\n \"openrouter/openrouter/free\"\n ]\n },\n \"subagents\": {\n \"allowAgents\": [\n \"codex\",\n \"gemini\",\n \"claude\",\n \"deepseek-code\",\n \"kimi\",\n \"clawrouter\",\n \"openrouter\"\n ]\n }\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-codex\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/codex/agent\",\n \"model\": \"openai-codex/gpt-5.3-codex\"\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-gemini\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/gemini/agent\",\n \"model\": \"gemini-cli/default\"\n },\n {\n \"id\": \"deepseek-code\",\n \"name\": \"deepseek-code\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-deepseek-code\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/deepseek-code/agent\",\n \"model\": \"deepseek-code/default\"\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude/agent\",\n \"model\": \"claude-sonnet-cli/default\"\n },\n {\n \"id\": \"claude-opus\",\n \"name\": \"claude-opus\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude-opus\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude-opus/agent\",\n \"model\": \"claude-opus-cli/default\"\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-kimi\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/kimi/agent\",\n \"model\": \"kimi-cli/default\"\n },\n {\n \"id\": \"clawrouter\",\n \"name\": \"ClawRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n },\n {\n \"id\": \"openrouter\",\n \"name\": \"OpenRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-openrouter\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/openrouter/agent\",\n \"model\": {\n \"primary\": \"openrouter/openrouter/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n }\n ]\n },\n \"tools\": {\n \"sessions\": {\n \"visibility\": \"all\"\n },\n \"agentToAgent\": {\n \"enabled\": true,\n \"allow\": [\n \"pipo\",\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ]\n },\n \"elevated\": {\n \"enabled\": true,\n \"allowFrom\": {\n \"telegram\": [\n 842987156\n ],\n \"webchat\": []\n }\n },\n \"exec\": {\n \"security\": \"allowlist\",\n \"ask\": \"on-miss\"\n }\n },\n \"messages\": {\n \"ackReactionScope\": \"group-mentions\"\n },\n \"commands\": {\n \"native\": \"auto\",\n \"nativeSkills\": \"auto\",\n \"restart\": true,\n \"ownerDisplay\": \"raw\"\n },\n \"session\": {\n \"dmScope\": \"per-channel-peer\"\n },\n \"hooks\": {\n \"internal\": {\n \"enabled\": true,\n \"entries\": {\n \"session-memory\": {\n \"enabled\": true\n },\n \"bootstrap-extra-files\": {\n \"enabled\": true\n },\n \"boot-md\": {\n \"enabled\": true\n }\n }\n }\n },\n \"channels\": {\n \"telegram\": {\n \"enabled\": true,\n \"dmPolicy\": \"allowlist\",\n \"botToken\": \"__OPENCLAW_REDACTED__\",\n \"replyToMode\": \"all\",\n \"allowFrom\": [\n 842987156\n ],\n \"groupPolicy\": \"allowlist\",\n \"streaming\": \"off\",\n \"mediaMaxMb\": 20,\n \"timeoutSeconds\": 60,\n \"retry\": {\n \"attempts\": 6,\n \"minDelayMs\": 1500,\n \"maxDelayMs\": 90000,\n \"jitter\": 0.1\n },\n \"network\": {\n \"autoSelectFamily\": false,\n \"dnsResultOrder\": \"ipv4first\"\n }\n }\n },\n \"gateway\": {\n \"port\": 18789,\n \"mode\": \"local\",\n \"bind\": \"loopback\",\n \"controlUi\": {\n \"allowedOrigins\": [\n \"https://miopenclaw-vnic.tail9799d2.ts.net\",\n \"https://miopenclaw-vnic.tail9799d2.ts.net/\",\n \"http://127.0.0.1:18789\"\n ]\n },\n \"auth\": {\n \"mode\": \"token\",\n \"token\": \"__OPENCLAW_REDACTED__\"\n },\n \"trustedProxies\": [\n \"127.0.0.1/32\",\n \"::1/128\"\n ],\n \"tailscale\": {\n \"mode\": \"serve\",\n \"resetOnExit\": true\n }\n },\n \"skills\": {\n \"entries\": {\n \"gh-issues\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"nano-banana-pro\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"notion\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-image-gen\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-whisper-api\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"sag\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n }\n }\n },\n \"plugins\": {\n \"allow\": [\n \"telegram\",\n \"acpx\",\n \"clawrouter\"\n ],\n \"entries\": {\n \"qwen-portal-auth\": {\n \"enabled\": true\n },\n \"acpx\": {\n \"enabled\": true,\n \"config\": {\n \"permissionMode\": \"approve-reads\",\n \"nonInteractivePermissions\": \"fail\",\n \"expectedVersion\": \"0.1.15\",\n \"command\": \"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx\"\n }\n },\n \"clawrouter\": {\n \"enabled\": true\n }\n },\n \"installs\": {\n \"clawrouter\": {\n \"source\": \"npm\",\n \"spec\": \"@blockrun/clawrouter@0.12.43\",\n \"installPath\": \"/home/ubuntu/.openclaw/extensions/clawrouter\",\n \"version\": \"0.12.43\",\n \"resolvedName\": \"@blockrun/clawrouter\",\n \"resolvedVersion\": \"0.12.43\",\n \"resolvedSpec\": \"@blockrun/clawrouter@0.12.43\",\n \"integrity\": \"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==\",\n \"shasum\": \"3331382e1a46524bee73b8ffa83677950f5bbae5\",\n \"resolvedAt\": \"2026-03-15T22:45:46.066Z\",\n \"installedAt\": \"2026-03-15T22:46:43.662Z\"\n }\n }\n }\n },\n \"valid\": true,\n \"config\": {\n \"meta\": {\n \"lastTouchedVersion\": \"2026.3.13\",\n \"lastTouchedAt\": \"2026-03-16T01:01:29.186Z\"\n },\n \"env\": {\n \"OPENAI_API_KEY\": \"__OPENCLAW_REDACTED__\"\n },\n \"wizard\": {\n \"lastRunAt\": \"2026-03-15T22:40:03.597Z\",\n \"lastRunVersion\": \"2026.3.13\",\n \"lastRunCommand\": \"doctor\",\n \"lastRunMode\": \"local\"\n },\n \"diagnostics\": {\n \"flags\": [\n \"telegram.http\"\n ]\n },\n \"browser\": {\n \"executablePath\": \"/usr/bin/chromium-browser\",\n \"headless\": true,\n \"noSandbox\": true,\n \"defaultProfile\": \"openclaw\",\n \"profiles\": {\n \"openclaw\": {\n \"cdpPort\": 18800,\n \"cdpUrl\": \"http://127.0.0.1:18800\",\n \"color\": \"#FF4500\"\n }\n }\n },\n \"auth\": {\n \"profiles\": {\n \"openai-codex:default\": {\n \"provider\": \"openai-codex\",\n \"mode\": \"oauth\"\n }\n }\n },\n \"acp\": {\n \"enabled\": true,\n \"dispatch\": {\n \"enabled\": true\n },\n \"backend\": \"acpx\",\n \"defaultAgent\": \"codex\",\n \"allowedAgents\": [\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ],\n \"maxConcurrentSessions\": 8\n },\n \"models\": {\n \"mode\": \"merge\",\n \"providers\": {\n \"custom-api-deepseek-com\": {\n \"baseUrl\": \"https://api.deepseek.com\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"deepseek-chat\",\n \"name\": \"deepseek-chat (Custom Provider)\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 16000,\n \"maxTokens\": 4096,\n \"api\": \"openai-completions\"\n }\n ]\n },\n \"blockrun\": {\n \"baseUrl\": \"http://127.0.0.1:8402/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"auto\",\n \"name\": \"Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"free\",\n \"name\": \"Free (NVIDIA GPT-OSS-120B only)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 4096\n },\n {\n \"id\": \"eco\",\n \"name\": \"Eco (Smart Router - Cost Optimized)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"premium\",\n \"name\": \"Premium (Smart Router - Best Quality)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 2000000,\n \"maxTokens\": 200000\n },\n {\n \"id\": \"openai/gpt-5.2\",\n \"name\": \"GPT-5.2\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5-mini\",\n \"name\": \"GPT-5 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.25,\n \"output\": 2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/gpt-5-nano\",\n \"name\": \"GPT-5 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.05,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 32768\n },\n {\n \"id\": \"openai/gpt-5.2-pro\",\n \"name\": \"GPT-5.2 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 21,\n \"output\": 168,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4\",\n \"name\": \"GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.4-pro\",\n \"name\": \"GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-5.3\",\n \"name\": \"GPT-5.3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16000\n },\n {\n \"id\": \"openai/gpt-5.3-codex\",\n \"name\": \"GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"openai/gpt-4.1\",\n \"name\": \"GPT-4.1\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-mini\",\n \"name\": \"GPT-4.1 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.4,\n \"output\": 1.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4.1-nano\",\n \"name\": \"GPT-4.1 Nano\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o\",\n \"name\": \"GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/gpt-4o-mini\",\n \"name\": \"GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"openai/o1\",\n \"name\": \"o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o1-mini\",\n \"name\": \"o1-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o3\",\n \"name\": \"o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"openai/o3-mini\",\n \"name\": \"o3-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"openai/o4-mini\",\n \"name\": \"o4-mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.1,\n \"output\": 4.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"anthropic/claude-haiku-4.5\",\n \"name\": \"Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-sonnet-4.6\",\n \"name\": \"Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4.6\",\n \"name\": \"Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"google/gemini-3.1-pro\",\n \"name\": \"Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-pro-preview\",\n \"name\": \"Gemini 3 Pro Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3-flash-preview\",\n \"name\": \"Gemini 3 Flash Preview\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.5,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-pro\",\n \"name\": \"Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash\",\n \"name\": \"Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-2.5-flash-lite\",\n \"name\": \"Gemini 2.5 Flash Lite\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"deepseek/deepseek-chat\",\n \"name\": \"DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"deepseek/deepseek-reasoner\",\n \"name\": \"DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot/kimi-k2.5\",\n \"name\": \"Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"xai/grok-3\",\n \"name\": \"Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-3-mini\",\n \"name\": \"Grok 3 Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-reasoning\",\n \"name\": \"Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-fast-non-reasoning\",\n \"name\": \"Grok 4 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-reasoning\",\n \"name\": \"Grok 4.1 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-1-fast-non-reasoning\",\n \"name\": \"Grok 4.1 Fast\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-4-0709\",\n \"name\": \"Grok 4 (0709)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 1.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"xai/grok-2-vision\",\n \"name\": \"Grok 2 Vision\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax/minimax-m2.5\",\n \"name\": \"MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/gpt-oss-120b\",\n \"name\": \"NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"nvidia/kimi-k2.5\",\n \"name\": \"NVIDIA Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.55,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet\",\n \"name\": \"sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4\",\n \"name\": \"sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4.6\",\n \"name\": \"sonnet-4.6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"sonnet-4-6\",\n \"name\": \"sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"opus\",\n \"name\": \"opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4\",\n \"name\": \"opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4.6\",\n \"name\": \"opus-4.6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"opus-4-6\",\n \"name\": \"opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"haiku\",\n \"name\": \"haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/sonnet\",\n \"name\": \"anthropic/sonnet → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/opus\",\n \"name\": \"anthropic/opus → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/haiku\",\n \"name\": \"anthropic/haiku → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude\",\n \"name\": \"anthropic/claude → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4\",\n \"name\": \"anthropic/claude-sonnet-4 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-sonnet-4-6\",\n \"name\": \"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 64000\n },\n {\n \"id\": \"anthropic/claude-opus-4\",\n \"name\": \"anthropic/claude-opus-4 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4-6\",\n \"name\": \"anthropic/claude-opus-4-6 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-opus-4.5\",\n \"name\": \"anthropic/claude-opus-4.5 → Claude Opus 4.6\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 32000\n },\n {\n \"id\": \"anthropic/claude-haiku-4\",\n \"name\": \"anthropic/claude-haiku-4 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"anthropic/claude-haiku-4-5\",\n \"name\": \"anthropic/claude-haiku-4-5 → Claude Haiku 4.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gpt\",\n \"name\": \"gpt → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt4\",\n \"name\": \"gpt4 → GPT-4o\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt5\",\n \"name\": \"gpt5 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4\",\n \"name\": \"gpt-5.4 → GPT-5.4\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2.5,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"gpt-5.4-pro\",\n \"name\": \"gpt-5.4-pro → GPT-5.4 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 30,\n \"output\": 180,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex → GPT-5.3 Codex\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 1.75,\n \"output\": 14,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 400000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"mini\",\n \"name\": \"mini → GPT-4o Mini\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"o1\",\n \"name\": \"o1 → o1\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"o3\",\n \"name\": \"o3 → o3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 100000\n },\n {\n \"id\": \"deepseek\",\n \"name\": \"deepseek → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"reasoner\",\n \"name\": \"reasoner → DeepSeek V3.2 Reasoner\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"moonshot\",\n \"name\": \"moonshot → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"kimi-k2.5 → Kimi K2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.6,\n \"output\": 3,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 262144,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini → Gemini 2.5 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"flash\",\n \"name\": \"flash → Gemini 2.5 Flash\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 2.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1000000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"gemini-3.1-pro-preview\",\n \"name\": \"gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"google/gemini-3.1-pro-preview\",\n \"name\": \"google/gemini-3.1-pro-preview → Gemini 3.1 Pro\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\",\n \"image\"\n ],\n \"cost\": {\n \"input\": 2,\n \"output\": 12,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 65536\n },\n {\n \"id\": \"grok\",\n \"name\": \"grok → Grok 3\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-fast\",\n \"name\": \"grok-fast → Grok 4 Fast Reasoning\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.2,\n \"output\": 0.5,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 131072,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"grok-code\",\n \"name\": \"grok-code → DeepSeek V3.2 Chat\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.28,\n \"output\": 0.42,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 8192\n },\n {\n \"id\": \"nvidia\",\n \"name\": \"nvidia → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"gpt-120b\",\n \"name\": \"gpt-120b → NVIDIA GPT-OSS 120B\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 128000,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"minimax\",\n \"name\": \"minimax → MiniMax M2.5\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0.3,\n \"output\": 1.2,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 204800,\n \"maxTokens\": 16384\n },\n {\n \"id\": \"auto-router\",\n \"name\": \"auto-router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n },\n {\n \"id\": \"router\",\n \"name\": \"router → Auto (Smart Router - Balanced)\",\n \"api\": \"openai-completions\",\n \"reasoning\": false,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 1050000,\n \"maxTokens\": 128000\n }\n ]\n },\n \"custom-api-moonshot-ai\": {\n \"baseUrl\": \"https://api.moonshot.ai/v1\",\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"api\": \"openai-completions\",\n \"models\": [\n {\n \"id\": \"kimi-k2.5\",\n \"name\": \"Kimi K2.5 (Moonshot)\",\n \"api\": \"openai-completions\",\n \"reasoning\": true,\n \"input\": [\n \"text\"\n ],\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cacheRead\": 0,\n \"cacheWrite\": 0\n },\n \"contextWindow\": 200000,\n \"maxTokens\": 8192\n }\n ]\n }\n }\n },\n \"agents\": {\n \"defaults\": {\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"custom-api-deepseek-com/deepseek-chat\"\n ]\n },\n \"models\": {\n \"blockrun/auto\": {},\n \"openrouter/anthropic/claude-sonnet-4-6\": {\n \"alias\": \"claude\"\n },\n \"openai-codex/gpt-5.1\": {\n \"alias\": \"codex-chat\"\n },\n \"openai-codex/gpt-5.3-codex-spark\": {\n \"alias\": \"codex-spark\"\n },\n \"openai-codex/gpt-5.3-codex\": {\n \"alias\": \"codex-max\"\n },\n \"openai-codex/gpt-5.4\": {\n \"alias\": \"gpt-5.4\"\n },\n \"custom-api-deepseek-com/deepseek-chat\": {\n \"alias\": \"deepseek\"\n },\n \"claude-sonnet-cli/default\": {\n \"alias\": \"claude-sonnet\"\n },\n \"claude-opus-cli/default\": {\n \"alias\": \"claude-opus\"\n },\n \"blockrun/free\": {},\n \"blockrun/eco\": {},\n \"blockrun/premium\": {},\n \"blockrun/anthropic/claude-sonnet-4.6\": {},\n \"blockrun/anthropic/claude-opus-4.6\": {},\n \"blockrun/anthropic/claude-haiku-4.5\": {},\n \"blockrun/openai/gpt-5.2\": {},\n \"blockrun/openai/gpt-4o\": {},\n \"blockrun/openai/o3\": {},\n \"blockrun/google/gemini-3.1-pro\": {},\n \"blockrun/google/gemini-3-flash-preview\": {},\n \"blockrun/deepseek/deepseek-chat\": {},\n \"blockrun/moonshot/kimi-k2.5\": {},\n \"blockrun/xai/grok-3\": {},\n \"blockrun/minimax/minimax-m2.5\": {},\n \"openrouter/openrouter/free\": {},\n \"custom-api-moonshot-ai/kimi-k2.5\": {\n \"alias\": \"kimi\"\n },\n \"clawrouter/auto\": {\n \"alias\": \"clawrouter\"\n },\n \"openrouter/openrouter/auto\": {},\n \"blockrun/openai/gpt-5.3\": {}\n },\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"cliBackends\": {\n \"codex-cli\": {\n \"command\": \"/home/linuxbrew/.linuxbrew/bin/codex\",\n \"args\": [\n \"exec\",\n \"--json\",\n \"--color\",\n \"never\",\n \"--sandbox\",\n \"read-only\",\n \"--skip-git-repo-check\"\n ],\n \"output\": \"jsonl\"\n },\n \"gemini-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/gemini-cli-openclaw\",\n \"output\": \"text\"\n },\n \"deepseek-code\": {\n \"command\": \"/home/ubuntu/.local/bin/deepseek-code-openclaw\",\n \"output\": \"text\"\n },\n \"claude-sonnet-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-sonnet-openclaw\",\n \"output\": \"text\"\n },\n \"claude-opus-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/claude-opus-openclaw\",\n \"output\": \"text\"\n },\n \"kimi-cli\": {\n \"command\": \"/home/ubuntu/.local/bin/kimi-openclaw\",\n \"output\": \"text\"\n }\n },\n \"compaction\": {\n \"mode\": \"safeguard\"\n },\n \"elevatedDefault\": \"off\",\n \"maxConcurrent\": 1,\n \"subagents\": {\n \"maxConcurrent\": 4\n }\n },\n \"list\": [\n {\n \"id\": \"pipo\",\n \"name\": \"pipo\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"openai-codex/gpt-5.4\",\n \"fallbacks\": [\n \"blockrun/auto\",\n \"openrouter/openrouter/free\"\n ]\n },\n \"subagents\": {\n \"allowAgents\": [\n \"codex\",\n \"gemini\",\n \"claude\",\n \"deepseek-code\",\n \"kimi\",\n \"clawrouter\",\n \"openrouter\"\n ]\n }\n },\n {\n \"id\": \"codex\",\n \"name\": \"codex\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-codex\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/codex/agent\",\n \"model\": \"openai-codex/gpt-5.3-codex\"\n },\n {\n \"id\": \"gemini\",\n \"name\": \"gemini\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-gemini\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/gemini/agent\",\n \"model\": \"gemini-cli/default\"\n },\n {\n \"id\": \"deepseek-code\",\n \"name\": \"deepseek-code\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-deepseek-code\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/deepseek-code/agent\",\n \"model\": \"deepseek-code/default\"\n },\n {\n \"id\": \"claude\",\n \"name\": \"claude\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude/agent\",\n \"model\": \"claude-sonnet-cli/default\"\n },\n {\n \"id\": \"claude-opus\",\n \"name\": \"claude-opus\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-claude-opus\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/claude-opus/agent\",\n \"model\": \"claude-opus-cli/default\"\n },\n {\n \"id\": \"kimi\",\n \"name\": \"kimi\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-kimi\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/kimi/agent\",\n \"model\": \"kimi-cli/default\"\n },\n {\n \"id\": \"clawrouter\",\n \"name\": \"ClawRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace\",\n \"model\": {\n \"primary\": \"blockrun/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n },\n {\n \"id\": \"openrouter\",\n \"name\": \"OpenRouter\",\n \"workspace\": \"/home/ubuntu/.openclaw/workspace-openrouter\",\n \"agentDir\": \"/home/ubuntu/.openclaw/agents/openrouter/agent\",\n \"model\": {\n \"primary\": \"openrouter/openrouter/auto\",\n \"fallbacks\": [\n \"openrouter/openrouter/free\"\n ]\n }\n }\n ]\n },\n \"tools\": {\n \"sessions\": {\n \"visibility\": \"all\"\n },\n \"agentToAgent\": {\n \"enabled\": true,\n \"allow\": [\n \"pipo\",\n \"codex\",\n \"gemini\",\n \"deepseek-code\",\n \"claude\",\n \"claude-opus\",\n \"kimi\",\n \"clawrouter\"\n ]\n },\n \"elevated\": {\n \"enabled\": true,\n \"allowFrom\": {\n \"telegram\": [\n 842987156\n ],\n \"webchat\": []\n }\n },\n \"exec\": {\n \"security\": \"allowlist\",\n \"ask\": \"on-miss\"\n }\n },\n \"messages\": {\n \"ackReactionScope\": \"group-mentions\"\n },\n \"commands\": {\n \"native\": \"auto\",\n \"nativeSkills\": \"auto\",\n \"restart\": true,\n \"ownerDisplay\": \"raw\"\n },\n \"session\": {\n \"dmScope\": \"per-channel-peer\"\n },\n \"hooks\": {\n \"internal\": {\n \"enabled\": true,\n \"entries\": {\n \"session-memory\": {\n \"enabled\": true\n },\n \"bootstrap-extra-files\": {\n \"enabled\": true\n },\n \"boot-md\": {\n \"enabled\": true\n }\n }\n }\n },\n \"channels\": {\n \"telegram\": {\n \"enabled\": true,\n \"dmPolicy\": \"allowlist\",\n \"botToken\": \"__OPENCLAW_REDACTED__\",\n \"replyToMode\": \"all\",\n \"allowFrom\": [\n 842987156\n ],\n \"groupPolicy\": \"allowlist\",\n \"streaming\": \"off\",\n \"mediaMaxMb\": 20,\n \"timeoutSeconds\": 60,\n \"retry\": {\n \"attempts\": 6,\n \"minDelayMs\": 1500,\n \"maxDelayMs\": 90000,\n \"jitter\": 0.1\n },\n \"network\": {\n \"autoSelectFamily\": false,\n \"dnsResultOrder\": \"ipv4first\"\n }\n }\n },\n \"gateway\": {\n \"port\": 18789,\n \"mode\": \"local\",\n \"bind\": \"loopback\",\n \"controlUi\": {\n \"allowedOrigins\": [\n \"https://miopenclaw-vnic.tail9799d2.ts.net\",\n \"https://miopenclaw-vnic.tail9799d2.ts.net/\",\n \"http://127.0.0.1:18789\"\n ]\n },\n \"auth\": {\n \"mode\": \"token\",\n \"token\": \"__OPENCLAW_REDACTED__\"\n },\n \"trustedProxies\": [\n \"127.0.0.1/32\",\n \"::1/128\"\n ],\n \"tailscale\": {\n \"mode\": \"serve\",\n \"resetOnExit\": true\n }\n },\n \"skills\": {\n \"entries\": {\n \"gh-issues\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"nano-banana-pro\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"notion\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-image-gen\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"openai-whisper-api\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n },\n \"sag\": {\n \"enabled\": true,\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n }\n }\n },\n \"plugins\": {\n \"allow\": [\n \"telegram\",\n \"acpx\",\n \"clawrouter\"\n ],\n \"entries\": {\n \"qwen-portal-auth\": {\n \"enabled\": true\n },\n \"acpx\": {\n \"enabled\": true,\n \"config\": {\n \"permissionMode\": \"approve-reads\",\n \"nonInteractivePermissions\": \"fail\",\n \"expectedVersion\": \"0.1.15\",\n \"command\": \"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx\"\n }\n },\n \"clawrouter\": {\n \"enabled\": true\n }\n },\n \"installs\": {\n \"clawrouter\": {\n \"source\": \"npm\",\n \"spec\": \"@blockrun/clawrouter@0.12.43\",\n \"installPath\": \"/home/ubuntu/.openclaw/extensions/clawrouter\",\n \"version\": \"0.12.43\",\n \"resolvedName\": \"@blockrun/clawrouter\",\n \"resolvedVersion\": \"0.12.43\",\n \"resolvedSpec\": \"@blockrun/clawrouter@0.12.43\",\n \"integrity\": \"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==\",\n \"shasum\": \"3331382e1a46524bee73b8ffa83677950f5bbae5\",\n \"resolvedAt\": \"2026-03-15T22:45:46.066Z\",\n \"installedAt\": \"2026-03-15T22:46:43.662Z\"\n }\n }\n },\n \"talk\": {\n \"apiKey\": \"__OPENCLAW_REDACTED__\",\n \"provider\": \"elevenlabs\",\n \"providers\": {\n \"elevenlabs\": {\n \"apiKey\": \"__OPENCLAW_REDACTED__\"\n }\n }\n }\n },\n \"hash\": \"0c0d0115ae610484c9c4d9c77903a011e094c9860783839ba06034d8034d7210\",\n \"issues\": [],\n \"warnings\": [],\n \"legacyIssues\": []\n }\n}"}],"details":{"ok":true,"result":{"path":"/home/ubuntu/.openclaw/openclaw.json","exists":true,"raw":"{\n meta: {\n lastTouchedVersion: '2026.3.13',\n lastTouchedAt: '2026-03-16T01:01:29.186Z',\n },\n env: {\n OPENAI_API_KEY: '__OPENCLAW_REDACTED__',\n },\n wizard: {\n lastRunAt: '2026-03-15T22:40:03.597Z',\n lastRunVersion: '2026.3.13',\n lastRunCommand: 'doctor',\n lastRunMode: 'local',\n },\n diagnostics: {\n flags: [\n 'telegram.http',\n ],\n },\n browser: {\n executablePath: '/usr/bin/chromium-browser',\n headless: true,\n noSandbox: true,\n defaultProfile: 'openclaw',\n profiles: {\n openclaw: {\n cdpPort: 18800,\n cdpUrl: 'http://127.0.0.1:18800',\n color: '#FF4500',\n },\n },\n },\n auth: {\n profiles: {\n 'openai-codex:default': {\n provider: 'openai-codex',\n mode: 'oauth',\n },\n },\n },\n acp: {\n enabled: true,\n dispatch: {\n enabled: true,\n },\n backend: 'acpx',\n defaultAgent: 'codex',\n allowedAgents: [\n 'codex',\n 'gemini',\n 'deepseek-code',\n 'claude',\n 'claude-opus',\n 'kimi',\n 'clawrouter',\n ],\n maxConcurrentSessions: 8,\n },\n models: {\n mode: 'merge',\n providers: {\n 'custom-api-deepseek-com': {\n baseUrl: 'https://api.deepseek.com',\n apiKey: '__OPENCLAW_REDACTED__',\n api: 'openai-completions',\n models: [\n {\n id: 'deepseek-chat',\n name: 'deepseek-chat (Custom Provider)',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 16000,\n maxTokens: 4096,\n },\n ],\n },\n blockrun: {\n baseUrl: 'http://127.0.0.1:8402/v1',\n apiKey: '__OPENCLAW_REDACTED__',\n api: 'openai-completions',\n models: [\n {\n id: 'auto',\n name: 'Auto (Smart Router - Balanced)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 128000,\n },\n {\n id: 'free',\n name: 'Free (NVIDIA GPT-OSS-120B only)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 4096,\n },\n {\n id: 'eco',\n name: 'Eco (Smart Router - Cost Optimized)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 128000,\n },\n {\n id: 'premium',\n name: 'Premium (Smart Router - Best Quality)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 2000000,\n maxTokens: 200000,\n },\n {\n id: 'openai/gpt-5.2',\n name: 'GPT-5.2',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1.75,\n output: 14,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'openai/gpt-5-mini',\n name: 'GPT-5 Mini',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.25,\n output: 2,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 65536,\n },\n {\n id: 'openai/gpt-5-nano',\n name: 'GPT-5 Nano',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.05,\n output: 0.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 32768,\n },\n {\n id: 'openai/gpt-5.2-pro',\n name: 'GPT-5.2 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 21,\n output: 168,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'openai/gpt-5.4',\n name: 'GPT-5.4',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'openai/gpt-5.4-pro',\n name: 'GPT-5.4 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 30,\n output: 180,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'openai/gpt-5.3',\n name: 'GPT-5.3',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1.75,\n output: 14,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16000,\n },\n {\n id: 'openai/gpt-5.3-codex',\n name: 'GPT-5.3 Codex',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 1.75,\n output: 14,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'openai/gpt-4.1',\n name: 'GPT-4.1',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 8,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'openai/gpt-4.1-mini',\n name: 'GPT-4.1 Mini',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.4,\n output: 1.6,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'openai/gpt-4.1-nano',\n name: 'GPT-4.1 Nano',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.1,\n output: 0.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'openai/gpt-4o',\n name: 'GPT-4o',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'openai/gpt-4o-mini',\n name: 'GPT-4o Mini',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.15,\n output: 0.6,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'openai/o1',\n name: 'o1',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 15,\n output: 60,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 100000,\n },\n {\n id: 'openai/o1-mini',\n name: 'o1-mini',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 1.1,\n output: 4.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 65536,\n },\n {\n id: 'openai/o3',\n name: 'o3',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 2,\n output: 8,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 100000,\n },\n {\n id: 'openai/o3-mini',\n name: 'o3-mini',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 1.1,\n output: 4.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 65536,\n },\n {\n id: 'openai/o4-mini',\n name: 'o4-mini',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 1.1,\n output: 4.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 65536,\n },\n {\n id: 'anthropic/claude-haiku-4.5',\n name: 'Claude Haiku 4.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1,\n output: 5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n {\n id: 'anthropic/claude-sonnet-4.6',\n name: 'Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'anthropic/claude-opus-4.6',\n name: 'Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'google/gemini-3.1-pro',\n name: 'Gemini 3.1 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 12,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-3-pro-preview',\n name: 'Gemini 3 Pro Preview',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 12,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-3-flash-preview',\n name: 'Gemini 3 Flash Preview',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.5,\n output: 3,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1000000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-2.5-pro',\n name: 'Gemini 2.5 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1.25,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-2.5-flash',\n name: 'Gemini 2.5 Flash',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.3,\n output: 2.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1000000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-2.5-flash-lite',\n name: 'Gemini 2.5 Flash Lite',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.1,\n output: 0.4,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1000000,\n maxTokens: 65536,\n },\n {\n id: 'deepseek/deepseek-chat',\n name: 'DeepSeek V3.2 Chat',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.28,\n output: 0.42,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 8192,\n },\n {\n id: 'deepseek/deepseek-reasoner',\n name: 'DeepSeek V3.2 Reasoner',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.28,\n output: 0.42,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 8192,\n },\n {\n id: 'moonshot/kimi-k2.5',\n name: 'Kimi K2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.6,\n output: 3,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 262144,\n maxTokens: 8192,\n },\n {\n id: 'xai/grok-3',\n name: 'Grok 3',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-3-mini',\n name: 'Grok 3 Mini',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.3,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-4-fast-reasoning',\n name: 'Grok 4 Fast Reasoning',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-4-fast-non-reasoning',\n name: 'Grok 4 Fast',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-4-1-fast-reasoning',\n name: 'Grok 4.1 Fast Reasoning',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-4-1-fast-non-reasoning',\n name: 'Grok 4.1 Fast',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-4-0709',\n name: 'Grok 4 (0709)',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 1.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'xai/grok-2-vision',\n name: 'Grok 2 Vision',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'minimax/minimax-m2.5',\n name: 'MiniMax M2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.3,\n output: 1.2,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 204800,\n maxTokens: 16384,\n },\n {\n id: 'nvidia/gpt-oss-120b',\n name: 'NVIDIA GPT-OSS 120B',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'nvidia/kimi-k2.5',\n name: 'NVIDIA Kimi K2.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.55,\n output: 2.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 262144,\n maxTokens: 16384,\n },\n {\n id: 'claude',\n name: 'claude → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'sonnet',\n name: 'sonnet → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'sonnet-4',\n name: 'sonnet-4 → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'sonnet-4.6',\n name: 'sonnet-4.6 → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'sonnet-4-6',\n name: 'sonnet-4-6 → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'opus',\n name: 'opus → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'opus-4',\n name: 'opus-4 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'opus-4.6',\n name: 'opus-4.6 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'opus-4-6',\n name: 'opus-4-6 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'haiku',\n name: 'haiku → Claude Haiku 4.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1,\n output: 5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n {\n id: 'anthropic/sonnet',\n name: 'anthropic/sonnet → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'anthropic/opus',\n name: 'anthropic/opus → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'anthropic/haiku',\n name: 'anthropic/haiku → Claude Haiku 4.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1,\n output: 5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n {\n id: 'anthropic/claude',\n name: 'anthropic/claude → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'anthropic/claude-sonnet-4',\n name: 'anthropic/claude-sonnet-4 → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'anthropic/claude-sonnet-4-6',\n name: 'anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 64000,\n },\n {\n id: 'anthropic/claude-opus-4',\n name: 'anthropic/claude-opus-4 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'anthropic/claude-opus-4-6',\n name: 'anthropic/claude-opus-4-6 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'anthropic/claude-opus-4.5',\n name: 'anthropic/claude-opus-4.5 → Claude Opus 4.6',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 5,\n output: 25,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 32000,\n },\n {\n id: 'anthropic/claude-haiku-4',\n name: 'anthropic/claude-haiku-4 → Claude Haiku 4.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1,\n output: 5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n {\n id: 'anthropic/claude-haiku-4-5',\n name: 'anthropic/claude-haiku-4-5 → Claude Haiku 4.5',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1,\n output: 5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n {\n id: 'gpt',\n name: 'gpt → GPT-4o',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'gpt4',\n name: 'gpt4 → GPT-4o',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'gpt5',\n name: 'gpt5 → GPT-5.4',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'gpt-5.4',\n name: 'gpt-5.4 → GPT-5.4',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2.5,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'gpt-5.4-pro',\n name: 'gpt-5.4-pro → GPT-5.4 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 30,\n output: 180,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'codex',\n name: 'codex → GPT-5.3 Codex',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 1.75,\n output: 14,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 400000,\n maxTokens: 128000,\n },\n {\n id: 'mini',\n name: 'mini → GPT-4o Mini',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.15,\n output: 0.6,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'o1',\n name: 'o1 → o1',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 15,\n output: 60,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 100000,\n },\n {\n id: 'o3',\n name: 'o3 → o3',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 2,\n output: 8,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 100000,\n },\n {\n id: 'deepseek',\n name: 'deepseek → DeepSeek V3.2 Chat',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.28,\n output: 0.42,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 8192,\n },\n {\n id: 'reasoner',\n name: 'reasoner → DeepSeek V3.2 Reasoner',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.28,\n output: 0.42,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 8192,\n },\n {\n id: 'kimi',\n name: 'kimi → Kimi K2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.6,\n output: 3,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 262144,\n maxTokens: 8192,\n },\n {\n id: 'moonshot',\n name: 'moonshot → Kimi K2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.6,\n output: 3,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 262144,\n maxTokens: 8192,\n },\n {\n id: 'kimi-k2.5',\n name: 'kimi-k2.5 → Kimi K2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.6,\n output: 3,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 262144,\n maxTokens: 8192,\n },\n {\n id: 'gemini',\n name: 'gemini → Gemini 2.5 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 1.25,\n output: 10,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'flash',\n name: 'flash → Gemini 2.5 Flash',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 0.3,\n output: 2.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1000000,\n maxTokens: 65536,\n },\n {\n id: 'gemini-3.1-pro-preview',\n name: 'gemini-3.1-pro-preview → Gemini 3.1 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 12,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'google/gemini-3.1-pro-preview',\n name: 'google/gemini-3.1-pro-preview → Gemini 3.1 Pro',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n 'image',\n ],\n cost: {\n input: 2,\n output: 12,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 65536,\n },\n {\n id: 'grok',\n name: 'grok → Grok 3',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 3,\n output: 15,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'grok-fast',\n name: 'grok-fast → Grok 4 Fast Reasoning',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.2,\n output: 0.5,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 131072,\n maxTokens: 16384,\n },\n {\n id: 'grok-code',\n name: 'grok-code → DeepSeek V3.2 Chat',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0.28,\n output: 0.42,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 8192,\n },\n {\n id: 'nvidia',\n name: 'nvidia → NVIDIA GPT-OSS 120B',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'gpt-120b',\n name: 'gpt-120b → NVIDIA GPT-OSS 120B',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 128000,\n maxTokens: 16384,\n },\n {\n id: 'minimax',\n name: 'minimax → MiniMax M2.5',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0.3,\n output: 1.2,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 204800,\n maxTokens: 16384,\n },\n {\n id: 'auto-router',\n name: 'auto-router → Auto (Smart Router - Balanced)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 128000,\n },\n {\n id: 'router',\n name: 'router → Auto (Smart Router - Balanced)',\n api: 'openai-completions',\n reasoning: false,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 1050000,\n maxTokens: 128000,\n },\n ],\n },\n 'custom-api-moonshot-ai': {\n baseUrl: 'https://api.moonshot.ai/v1',\n apiKey: '__OPENCLAW_REDACTED__',\n api: 'openai-completions',\n models: [\n {\n id: 'kimi-k2.5',\n name: 'Kimi K2.5 (Moonshot)',\n api: 'openai-completions',\n reasoning: true,\n input: [\n 'text',\n ],\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n contextWindow: 200000,\n maxTokens: 8192,\n },\n ],\n },\n },\n },\n agents: {\n defaults: {\n model: {\n primary: 'blockrun/auto',\n fallbacks: [\n 'custom-api-deepseek-com/deepseek-chat',\n ],\n },\n models: {\n 'blockrun/auto': {},\n 'openrouter/anthropic/claude-sonnet-4-6': {\n alias: 'claude',\n },\n 'openai-codex/gpt-5.1': {\n alias: 'codex-chat',\n },\n 'openai-codex/gpt-5.3-codex-spark': {\n alias: 'codex-spark',\n },\n 'openai-codex/gpt-5.3-codex': {\n alias: 'codex-max',\n },\n 'openai-codex/gpt-5.4': {\n alias: 'gpt-5.4',\n },\n 'custom-api-deepseek-com/deepseek-chat': {\n alias: 'deepseek',\n },\n 'claude-sonnet-cli/default': {\n alias: 'claude-sonnet',\n },\n 'claude-opus-cli/default': {\n alias: 'claude-opus',\n },\n 'blockrun/free': {},\n 'blockrun/eco': {},\n 'blockrun/premium': {},\n 'blockrun/anthropic/claude-sonnet-4.6': {},\n 'blockrun/anthropic/claude-opus-4.6': {},\n 'blockrun/anthropic/claude-haiku-4.5': {},\n 'blockrun/openai/gpt-5.2': {},\n 'blockrun/openai/gpt-4o': {},\n 'blockrun/openai/o3': {},\n 'blockrun/google/gemini-3.1-pro': {},\n 'blockrun/google/gemini-3-flash-preview': {},\n 'blockrun/deepseek/deepseek-chat': {},\n 'blockrun/moonshot/kimi-k2.5': {},\n 'blockrun/xai/grok-3': {},\n 'blockrun/minimax/minimax-m2.5': {},\n 'openrouter/openrouter/free': {},\n 'custom-api-moonshot-ai/kimi-k2.5': {\n alias: 'kimi',\n },\n 'clawrouter/auto': {\n alias: 'clawrouter',\n },\n 'openrouter/openrouter/auto': {},\n 'blockrun/openai/gpt-5.3': {},\n },\n workspace: '/home/ubuntu/.openclaw/workspace',\n cliBackends: {\n 'codex-cli': {\n command: '/home/linuxbrew/.linuxbrew/bin/codex',\n args: [\n 'exec',\n '--json',\n '--color',\n 'never',\n '--sandbox',\n 'read-only',\n '--skip-git-repo-check',\n ],\n output: 'jsonl',\n },\n 'gemini-cli': {\n command: '/home/ubuntu/.local/bin/gemini-cli-openclaw',\n output: 'text',\n },\n 'deepseek-code': {\n command: '/home/ubuntu/.local/bin/deepseek-code-openclaw',\n output: 'text',\n },\n 'claude-sonnet-cli': {\n command: '/home/ubuntu/.local/bin/claude-sonnet-openclaw',\n output: 'text',\n },\n 'claude-opus-cli': {\n command: '/home/ubuntu/.local/bin/claude-opus-openclaw',\n output: 'text',\n },\n 'kimi-cli': {\n command: '/home/ubuntu/.local/bin/kimi-openclaw',\n output: 'text',\n },\n },\n compaction: {\n mode: 'safeguard',\n },\n elevatedDefault: 'off',\n maxConcurrent: 1,\n subagents: {\n maxConcurrent: 4,\n },\n },\n list: [\n {\n id: 'pipo',\n name: 'pipo',\n workspace: '/home/ubuntu/.openclaw/workspace',\n model: {\n primary: 'openai-codex/gpt-5.4',\n fallbacks: [\n 'blockrun/auto',\n 'openrouter/openrouter/free',\n ],\n },\n subagents: {\n allowAgents: [\n 'codex',\n 'gemini',\n 'claude',\n 'deepseek-code',\n 'kimi',\n 'clawrouter',\n 'openrouter',\n ],\n },\n },\n {\n id: 'codex',\n name: 'codex',\n workspace: '/home/ubuntu/.openclaw/workspace-codex',\n agentDir: '/home/ubuntu/.openclaw/agents/codex/agent',\n model: 'openai-codex/gpt-5.3-codex',\n },\n {\n id: 'gemini',\n name: 'gemini',\n workspace: '/home/ubuntu/.openclaw/workspace-gemini',\n agentDir: '/home/ubuntu/.openclaw/agents/gemini/agent',\n model: 'gemini-cli/default',\n },\n {\n id: 'deepseek-code',\n name: 'deepseek-code',\n workspace: '/home/ubuntu/.openclaw/workspace-deepseek-code',\n agentDir: '/home/ubuntu/.openclaw/agents/deepseek-code/agent',\n model: 'deepseek-code/default',\n },\n {\n id: 'claude',\n name: 'claude',\n workspace: '/home/ubuntu/.openclaw/workspace-claude',\n agentDir: '/home/ubuntu/.openclaw/agents/claude/agent',\n model: 'claude-sonnet-cli/default',\n },\n {\n id: 'claude-opus',\n name: 'claude-opus',\n workspace: '/home/ubuntu/.openclaw/workspace-claude-opus',\n agentDir: '/home/ubuntu/.openclaw/agents/claude-opus/agent',\n model: 'claude-opus-cli/default',\n },\n {\n id: 'kimi',\n name: 'kimi',\n workspace: '/home/ubuntu/.openclaw/workspace-kimi',\n agentDir: '/home/ubuntu/.openclaw/agents/kimi/agent',\n model: 'kimi-cli/default',\n },\n {\n id: 'clawrouter',\n name: 'ClawRouter',\n workspace: '/home/ubuntu/.openclaw/workspace',\n model: {\n primary: 'blockrun/auto',\n fallbacks: [\n 'openrouter/openrouter/free',\n ],\n },\n },\n {\n id: 'openrouter',\n name: 'OpenRouter',\n workspace: '/home/ubuntu/.openclaw/workspace-openrouter',\n agentDir: '/home/ubuntu/.openclaw/agents/openrouter/agent',\n model: {\n primary: 'openrouter/openrouter/auto',\n fallbacks: [\n 'openrouter/openrouter/free',\n ],\n },\n },\n ],\n },\n tools: {\n sessions: {\n visibility: 'all',\n },\n agentToAgent: {\n enabled: true,\n allow: [\n 'pipo',\n 'codex',\n 'gemini',\n 'deepseek-code',\n 'claude',\n 'claude-opus',\n 'kimi',\n 'clawrouter',\n ],\n },\n elevated: {\n enabled: true,\n allowFrom: {\n telegram: [\n 842987156,\n ],\n webchat: [],\n },\n },\n exec: {\n security: 'allowlist',\n ask: 'on-miss',\n },\n },\n messages: {\n ackReactionScope: 'group-mentions',\n },\n commands: {\n native: 'auto',\n nativeSkills: 'auto',\n restart: true,\n ownerDisplay: 'raw',\n },\n session: {\n dmScope: 'per-channel-peer',\n },\n hooks: {\n internal: {\n enabled: true,\n entries: {\n 'session-memory': {\n enabled: true,\n },\n 'bootstrap-extra-files': {\n enabled: true,\n },\n 'boot-md': {\n enabled: true,\n },\n },\n },\n },\n channels: {\n telegram: {\n enabled: true,\n dmPolicy: 'allowlist',\n botToken: '__OPENCLAW_REDACTED__',\n replyToMode: 'all',\n allowFrom: [\n 842987156,\n ],\n groupPolicy: 'allowlist',\n streaming: 'off',\n mediaMaxMb: 20,\n timeoutSeconds: 60,\n retry: {\n attempts: 6,\n minDelayMs: 1500,\n maxDelayMs: 90000,\n jitter: 0.1,\n },\n network: {\n autoSelectFamily: false,\n dnsResultOrder: 'ipv4first',\n },\n },\n },\n gateway: {\n port: 18789,\n mode: 'local',\n bind: 'loopback',\n controlUi: {\n allowedOrigins: [\n 'https://miopenclaw-vnic.tail9799d2.ts.net',\n 'https://miopenclaw-vnic.tail9799d2.ts.net/',\n 'http://127.0.0.1:18789',\n ],\n },\n auth: {\n mode: 'token',\n token: '__OPENCLAW_REDACTED__',\n },\n trustedProxies: [\n '127.0.0.1/32',\n '::1/128',\n ],\n tailscale: {\n mode: 'serve',\n resetOnExit: true,\n },\n },\n skills: {\n entries: {\n 'gh-issues': {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n 'nano-banana-pro': {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n notion: {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n 'openai-image-gen': {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n 'openai-whisper-api': {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n sag: {\n enabled: true,\n apiKey: '__OPENCLAW_REDACTED__',\n },\n },\n },\n plugins: {\n allow: [\n 'telegram',\n 'acpx',\n 'clawrouter',\n ],\n entries: {\n 'qwen-portal-auth': {\n enabled: true,\n },\n acpx: {\n enabled: true,\n config: {\n permissionMode: 'approve-reads',\n nonInteractivePermissions: 'fail',\n expectedVersion: '0.1.15',\n command: '/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx',\n },\n },\n clawrouter: {\n enabled: true,\n },\n },\n installs: {\n clawrouter: {\n source: 'npm',\n spec: '@blockrun/clawrouter@0.12.43',\n installPath: '/home/ubuntu/.openclaw/extensions/clawrouter',\n version: '0.12.43',\n resolvedName: '@blockrun/clawrouter',\n resolvedVersion: '0.12.43',\n resolvedSpec: '@blockrun/clawrouter@0.12.43',\n integrity: 'sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==',\n shasum: '3331382e1a46524bee73b8ffa83677950f5bbae5',\n resolvedAt: '2026-03-15T22:45:46.066Z',\n installedAt: '2026-03-15T22:46:43.662Z',\n },\n },\n },\n}","parsed":{"meta":{"lastTouchedVersion":"2026.3.13","lastTouchedAt":"2026-03-16T01:01:29.186Z"},"env":{"OPENAI_API_KEY":"__OPENCLAW_REDACTED__"},"wizard":{"lastRunAt":"2026-03-15T22:40:03.597Z","lastRunVersion":"2026.3.13","lastRunCommand":"doctor","lastRunMode":"local"},"diagnostics":{"flags":["telegram.http"]},"browser":{"executablePath":"/usr/bin/chromium-browser","headless":true,"noSandbox":true,"defaultProfile":"openclaw","profiles":{"openclaw":{"cdpPort":18800,"cdpUrl":"http://127.0.0.1:18800","color":"#FF4500"}}},"auth":{"profiles":{"openai-codex:default":{"provider":"openai-codex","mode":"oauth"}}},"acp":{"enabled":true,"dispatch":{"enabled":true},"backend":"acpx","defaultAgent":"codex","allowedAgents":["codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"],"maxConcurrentSessions":8},"models":{"mode":"merge","providers":{"custom-api-deepseek-com":{"baseUrl":"https://api.deepseek.com","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"deepseek-chat","name":"deepseek-chat (Custom Provider)","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":16000,"maxTokens":4096}]},"blockrun":{"baseUrl":"http://127.0.0.1:8402/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"auto","name":"Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"free","name":"Free (NVIDIA GPT-OSS-120B only)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":4096},{"id":"eco","name":"Eco (Smart Router - Cost Optimized)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"premium","name":"Premium (Smart Router - Best Quality)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":2000000,"maxTokens":200000},{"id":"openai/gpt-5.2","name":"GPT-5.2","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.25,"output":2,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":65536},{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.05,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":32768},{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":21,"output":168,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4","name":"GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.3","name":"GPT-5.3","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16000},{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-4.1","name":"GPT-4.1","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":1.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o","name":"GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o-mini","name":"GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/o1","name":"o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o1-mini","name":"o1-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o3","name":"o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o3-mini","name":"o3-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o4-mini","name":"o4-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"google/gemini-3.1-pro","name":"Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-pro-preview","name":"Gemini 3 Pro Preview","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"deepseek/deepseek-chat","name":"DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"deepseek/deepseek-reasoner","name":"DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"moonshot/kimi-k2.5","name":"Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"xai/grok-3","name":"Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-3-mini","name":"Grok 3 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-reasoning","name":"Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-non-reasoning","name":"Grok 4 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-reasoning","name":"Grok 4.1 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-non-reasoning","name":"Grok 4.1 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-0709","name":"Grok 4 (0709)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":1.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-2-vision","name":"Grok 2 Vision","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"nvidia/gpt-oss-120b","name":"NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"nvidia/kimi-k2.5","name":"NVIDIA Kimi K2.5","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.55,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":16384},{"id":"claude","name":"claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet","name":"sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4","name":"sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4.6","name":"sonnet-4.6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4-6","name":"sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"opus","name":"opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4","name":"opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4.6","name":"opus-4.6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4-6","name":"opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"haiku","name":"haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/sonnet","name":"anthropic/sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/opus","name":"anthropic/opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/haiku","name":"anthropic/haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude","name":"anthropic/claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4-6","name":"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4-6","name":"anthropic/claude-opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-haiku-4","name":"anthropic/claude-haiku-4 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-haiku-4-5","name":"anthropic/claude-haiku-4-5 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"gpt","name":"gpt → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt4","name":"gpt4 → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt5","name":"gpt5 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4","name":"gpt-5.4 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4-pro","name":"gpt-5.4-pro → GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"codex","name":"codex → GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"mini","name":"mini → GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"o1","name":"o1 → o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"o3","name":"o3 → o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"deepseek","name":"deepseek → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"reasoner","name":"reasoner → DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"kimi","name":"kimi → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"moonshot","name":"moonshot → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"kimi-k2.5","name":"kimi-k2.5 → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"gemini","name":"gemini → Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"flash","name":"flash → Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"gemini-3.1-pro-preview","name":"gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"grok","name":"grok → Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-fast","name":"grok-fast → Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-code","name":"grok-code → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"nvidia","name":"nvidia → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt-120b","name":"gpt-120b → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"minimax","name":"minimax → MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"auto-router","name":"auto-router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"router","name":"router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000}]},"custom-api-moonshot-ai":{"baseUrl":"https://api.moonshot.ai/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"kimi-k2.5","name":"Kimi K2.5 (Moonshot)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192}]}}},"agents":{"defaults":{"model":{"primary":"blockrun/auto","fallbacks":["custom-api-deepseek-com/deepseek-chat"]},"models":{"blockrun/auto":{},"openrouter/anthropic/claude-sonnet-4-6":{"alias":"claude"},"openai-codex/gpt-5.1":{"alias":"codex-chat"},"openai-codex/gpt-5.3-codex-spark":{"alias":"codex-spark"},"openai-codex/gpt-5.3-codex":{"alias":"codex-max"},"openai-codex/gpt-5.4":{"alias":"gpt-5.4"},"custom-api-deepseek-com/deepseek-chat":{"alias":"deepseek"},"claude-sonnet-cli/default":{"alias":"claude-sonnet"},"claude-opus-cli/default":{"alias":"claude-opus"},"blockrun/free":{},"blockrun/eco":{},"blockrun/premium":{},"blockrun/anthropic/claude-sonnet-4.6":{},"blockrun/anthropic/claude-opus-4.6":{},"blockrun/anthropic/claude-haiku-4.5":{},"blockrun/openai/gpt-5.2":{},"blockrun/openai/gpt-4o":{},"blockrun/openai/o3":{},"blockrun/google/gemini-3.1-pro":{},"blockrun/google/gemini-3-flash-preview":{},"blockrun/deepseek/deepseek-chat":{},"blockrun/moonshot/kimi-k2.5":{},"blockrun/xai/grok-3":{},"blockrun/minimax/minimax-m2.5":{},"openrouter/openrouter/free":{},"custom-api-moonshot-ai/kimi-k2.5":{"alias":"kimi"},"clawrouter/auto":{"alias":"clawrouter"},"openrouter/openrouter/auto":{},"blockrun/openai/gpt-5.3":{}},"workspace":"/home/ubuntu/.openclaw/workspace","cliBackends":{"codex-cli":{"command":"/home/linuxbrew/.linuxbrew/bin/codex","args":["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"],"output":"jsonl"},"gemini-cli":{"command":"/home/ubuntu/.local/bin/gemini-cli-openclaw","output":"text"},"deepseek-code":{"command":"/home/ubuntu/.local/bin/deepseek-code-openclaw","output":"text"},"claude-sonnet-cli":{"command":"/home/ubuntu/.local/bin/claude-sonnet-openclaw","output":"text"},"claude-opus-cli":{"command":"/home/ubuntu/.local/bin/claude-opus-openclaw","output":"text"},"kimi-cli":{"command":"/home/ubuntu/.local/bin/kimi-openclaw","output":"text"}},"compaction":{"mode":"safeguard"},"elevatedDefault":"off","maxConcurrent":1,"subagents":{"maxConcurrent":4}},"list":[{"id":"pipo","name":"pipo","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"openai-codex/gpt-5.4","fallbacks":["blockrun/auto","openrouter/openrouter/free"]},"subagents":{"allowAgents":["codex","gemini","claude","deepseek-code","kimi","clawrouter","openrouter"]}},{"id":"codex","name":"codex","workspace":"/home/ubuntu/.openclaw/workspace-codex","agentDir":"/home/ubuntu/.openclaw/agents/codex/agent","model":"openai-codex/gpt-5.3-codex"},{"id":"gemini","name":"gemini","workspace":"/home/ubuntu/.openclaw/workspace-gemini","agentDir":"/home/ubuntu/.openclaw/agents/gemini/agent","model":"gemini-cli/default"},{"id":"deepseek-code","name":"deepseek-code","workspace":"/home/ubuntu/.openclaw/workspace-deepseek-code","agentDir":"/home/ubuntu/.openclaw/agents/deepseek-code/agent","model":"deepseek-code/default"},{"id":"claude","name":"claude","workspace":"/home/ubuntu/.openclaw/workspace-claude","agentDir":"/home/ubuntu/.openclaw/agents/claude/agent","model":"claude-sonnet-cli/default"},{"id":"claude-opus","name":"claude-opus","workspace":"/home/ubuntu/.openclaw/workspace-claude-opus","agentDir":"/home/ubuntu/.openclaw/agents/claude-opus/agent","model":"claude-opus-cli/default"},{"id":"kimi","name":"kimi","workspace":"/home/ubuntu/.openclaw/workspace-kimi","agentDir":"/home/ubuntu/.openclaw/agents/kimi/agent","model":"kimi-cli/default"},{"id":"clawrouter","name":"ClawRouter","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"blockrun/auto","fallbacks":["openrouter/openrouter/free"]}},{"id":"openrouter","name":"OpenRouter","workspace":"/home/ubuntu/.openclaw/workspace-openrouter","agentDir":"/home/ubuntu/.openclaw/agents/openrouter/agent","model":{"primary":"openrouter/openrouter/auto","fallbacks":["openrouter/openrouter/free"]}}]},"tools":{"sessions":{"visibility":"all"},"agentToAgent":{"enabled":true,"allow":["pipo","codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"]},"elevated":{"enabled":true,"allowFrom":{"telegram":[842987156],"webchat":[]}},"exec":{"security":"allowlist","ask":"on-miss"}},"messages":{"ackReactionScope":"group-mentions"},"commands":{"native":"auto","nativeSkills":"auto","restart":true,"ownerDisplay":"raw"},"session":{"dmScope":"per-channel-peer"},"hooks":{"internal":{"enabled":true,"entries":{"session-memory":{"enabled":true},"bootstrap-extra-files":{"enabled":true},"boot-md":{"enabled":true}}}},"channels":{"telegram":{"enabled":true,"dmPolicy":"allowlist","botToken":"__OPENCLAW_REDACTED__","replyToMode":"all","allowFrom":[842987156],"groupPolicy":"allowlist","streaming":"off","mediaMaxMb":20,"timeoutSeconds":60,"retry":{"attempts":6,"minDelayMs":1500,"maxDelayMs":90000,"jitter":0.1},"network":{"autoSelectFamily":false,"dnsResultOrder":"ipv4first"}}},"gateway":{"port":18789,"mode":"local","bind":"loopback","controlUi":{"allowedOrigins":["https://miopenclaw-vnic.tail9799d2.ts.net","https://miopenclaw-vnic.tail9799d2.ts.net/","http://127.0.0.1:18789"]},"auth":{"mode":"token","token":"__OPENCLAW_REDACTED__"},"trustedProxies":["127.0.0.1/32","::1/128"],"tailscale":{"mode":"serve","resetOnExit":true}},"skills":{"entries":{"gh-issues":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"nano-banana-pro":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"notion":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-image-gen":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-whisper-api":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"sag":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"}}},"plugins":{"allow":["telegram","acpx","clawrouter"],"entries":{"qwen-portal-auth":{"enabled":true},"acpx":{"enabled":true,"config":{"permissionMode":"approve-reads","nonInteractivePermissions":"fail","expectedVersion":"0.1.15","command":"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx"}},"clawrouter":{"enabled":true}},"installs":{"clawrouter":{"source":"npm","spec":"@blockrun/clawrouter@0.12.43","installPath":"/home/ubuntu/.openclaw/extensions/clawrouter","version":"0.12.43","resolvedName":"@blockrun/clawrouter","resolvedVersion":"0.12.43","resolvedSpec":"@blockrun/clawrouter@0.12.43","integrity":"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==","shasum":"3331382e1a46524bee73b8ffa83677950f5bbae5","resolvedAt":"2026-03-15T22:45:46.066Z","installedAt":"2026-03-15T22:46:43.662Z"}}}},"resolved":{"meta":{"lastTouchedVersion":"2026.3.13","lastTouchedAt":"2026-03-16T01:01:29.186Z"},"env":{"OPENAI_API_KEY":"__OPENCLAW_REDACTED__"},"wizard":{"lastRunAt":"2026-03-15T22:40:03.597Z","lastRunVersion":"2026.3.13","lastRunCommand":"doctor","lastRunMode":"local"},"diagnostics":{"flags":["telegram.http"]},"browser":{"executablePath":"/usr/bin/chromium-browser","headless":true,"noSandbox":true,"defaultProfile":"openclaw","profiles":{"openclaw":{"cdpPort":18800,"cdpUrl":"http://127.0.0.1:18800","color":"#FF4500"}}},"auth":{"profiles":{"openai-codex:default":{"provider":"openai-codex","mode":"oauth"}}},"acp":{"enabled":true,"dispatch":{"enabled":true},"backend":"acpx","defaultAgent":"codex","allowedAgents":["codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"],"maxConcurrentSessions":8},"models":{"mode":"merge","providers":{"custom-api-deepseek-com":{"baseUrl":"https://api.deepseek.com","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"deepseek-chat","name":"deepseek-chat (Custom Provider)","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":16000,"maxTokens":4096}]},"blockrun":{"baseUrl":"http://127.0.0.1:8402/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"auto","name":"Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"free","name":"Free (NVIDIA GPT-OSS-120B only)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":4096},{"id":"eco","name":"Eco (Smart Router - Cost Optimized)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"premium","name":"Premium (Smart Router - Best Quality)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":2000000,"maxTokens":200000},{"id":"openai/gpt-5.2","name":"GPT-5.2","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.25,"output":2,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":65536},{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.05,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":32768},{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":21,"output":168,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4","name":"GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.3","name":"GPT-5.3","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16000},{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-4.1","name":"GPT-4.1","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":1.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o","name":"GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o-mini","name":"GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/o1","name":"o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o1-mini","name":"o1-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o3","name":"o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o3-mini","name":"o3-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o4-mini","name":"o4-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"google/gemini-3.1-pro","name":"Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-pro-preview","name":"Gemini 3 Pro Preview","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"deepseek/deepseek-chat","name":"DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"deepseek/deepseek-reasoner","name":"DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"moonshot/kimi-k2.5","name":"Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"xai/grok-3","name":"Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-3-mini","name":"Grok 3 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-reasoning","name":"Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-non-reasoning","name":"Grok 4 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-reasoning","name":"Grok 4.1 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-non-reasoning","name":"Grok 4.1 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-0709","name":"Grok 4 (0709)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":1.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-2-vision","name":"Grok 2 Vision","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"nvidia/gpt-oss-120b","name":"NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"nvidia/kimi-k2.5","name":"NVIDIA Kimi K2.5","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.55,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":16384},{"id":"claude","name":"claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet","name":"sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4","name":"sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4.6","name":"sonnet-4.6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4-6","name":"sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"opus","name":"opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4","name":"opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4.6","name":"opus-4.6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4-6","name":"opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"haiku","name":"haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/sonnet","name":"anthropic/sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/opus","name":"anthropic/opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/haiku","name":"anthropic/haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude","name":"anthropic/claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4-6","name":"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4-6","name":"anthropic/claude-opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-haiku-4","name":"anthropic/claude-haiku-4 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-haiku-4-5","name":"anthropic/claude-haiku-4-5 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"gpt","name":"gpt → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt4","name":"gpt4 → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt5","name":"gpt5 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4","name":"gpt-5.4 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4-pro","name":"gpt-5.4-pro → GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"codex","name":"codex → GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"mini","name":"mini → GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"o1","name":"o1 → o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"o3","name":"o3 → o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"deepseek","name":"deepseek → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"reasoner","name":"reasoner → DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"kimi","name":"kimi → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"moonshot","name":"moonshot → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"kimi-k2.5","name":"kimi-k2.5 → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"gemini","name":"gemini → Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"flash","name":"flash → Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"gemini-3.1-pro-preview","name":"gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"grok","name":"grok → Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-fast","name":"grok-fast → Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-code","name":"grok-code → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"nvidia","name":"nvidia → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt-120b","name":"gpt-120b → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"minimax","name":"minimax → MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"auto-router","name":"auto-router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"router","name":"router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000}]},"custom-api-moonshot-ai":{"baseUrl":"https://api.moonshot.ai/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"kimi-k2.5","name":"Kimi K2.5 (Moonshot)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192}]}}},"agents":{"defaults":{"model":{"primary":"blockrun/auto","fallbacks":["custom-api-deepseek-com/deepseek-chat"]},"models":{"blockrun/auto":{},"openrouter/anthropic/claude-sonnet-4-6":{"alias":"claude"},"openai-codex/gpt-5.1":{"alias":"codex-chat"},"openai-codex/gpt-5.3-codex-spark":{"alias":"codex-spark"},"openai-codex/gpt-5.3-codex":{"alias":"codex-max"},"openai-codex/gpt-5.4":{"alias":"gpt-5.4"},"custom-api-deepseek-com/deepseek-chat":{"alias":"deepseek"},"claude-sonnet-cli/default":{"alias":"claude-sonnet"},"claude-opus-cli/default":{"alias":"claude-opus"},"blockrun/free":{},"blockrun/eco":{},"blockrun/premium":{},"blockrun/anthropic/claude-sonnet-4.6":{},"blockrun/anthropic/claude-opus-4.6":{},"blockrun/anthropic/claude-haiku-4.5":{},"blockrun/openai/gpt-5.2":{},"blockrun/openai/gpt-4o":{},"blockrun/openai/o3":{},"blockrun/google/gemini-3.1-pro":{},"blockrun/google/gemini-3-flash-preview":{},"blockrun/deepseek/deepseek-chat":{},"blockrun/moonshot/kimi-k2.5":{},"blockrun/xai/grok-3":{},"blockrun/minimax/minimax-m2.5":{},"openrouter/openrouter/free":{},"custom-api-moonshot-ai/kimi-k2.5":{"alias":"kimi"},"clawrouter/auto":{"alias":"clawrouter"},"openrouter/openrouter/auto":{},"blockrun/openai/gpt-5.3":{}},"workspace":"/home/ubuntu/.openclaw/workspace","cliBackends":{"codex-cli":{"command":"/home/linuxbrew/.linuxbrew/bin/codex","args":["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"],"output":"jsonl"},"gemini-cli":{"command":"/home/ubuntu/.local/bin/gemini-cli-openclaw","output":"text"},"deepseek-code":{"command":"/home/ubuntu/.local/bin/deepseek-code-openclaw","output":"text"},"claude-sonnet-cli":{"command":"/home/ubuntu/.local/bin/claude-sonnet-openclaw","output":"text"},"claude-opus-cli":{"command":"/home/ubuntu/.local/bin/claude-opus-openclaw","output":"text"},"kimi-cli":{"command":"/home/ubuntu/.local/bin/kimi-openclaw","output":"text"}},"compaction":{"mode":"safeguard"},"elevatedDefault":"off","maxConcurrent":1,"subagents":{"maxConcurrent":4}},"list":[{"id":"pipo","name":"pipo","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"openai-codex/gpt-5.4","fallbacks":["blockrun/auto","openrouter/openrouter/free"]},"subagents":{"allowAgents":["codex","gemini","claude","deepseek-code","kimi","clawrouter","openrouter"]}},{"id":"codex","name":"codex","workspace":"/home/ubuntu/.openclaw/workspace-codex","agentDir":"/home/ubuntu/.openclaw/agents/codex/agent","model":"openai-codex/gpt-5.3-codex"},{"id":"gemini","name":"gemini","workspace":"/home/ubuntu/.openclaw/workspace-gemini","agentDir":"/home/ubuntu/.openclaw/agents/gemini/agent","model":"gemini-cli/default"},{"id":"deepseek-code","name":"deepseek-code","workspace":"/home/ubuntu/.openclaw/workspace-deepseek-code","agentDir":"/home/ubuntu/.openclaw/agents/deepseek-code/agent","model":"deepseek-code/default"},{"id":"claude","name":"claude","workspace":"/home/ubuntu/.openclaw/workspace-claude","agentDir":"/home/ubuntu/.openclaw/agents/claude/agent","model":"claude-sonnet-cli/default"},{"id":"claude-opus","name":"claude-opus","workspace":"/home/ubuntu/.openclaw/workspace-claude-opus","agentDir":"/home/ubuntu/.openclaw/agents/claude-opus/agent","model":"claude-opus-cli/default"},{"id":"kimi","name":"kimi","workspace":"/home/ubuntu/.openclaw/workspace-kimi","agentDir":"/home/ubuntu/.openclaw/agents/kimi/agent","model":"kimi-cli/default"},{"id":"clawrouter","name":"ClawRouter","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"blockrun/auto","fallbacks":["openrouter/openrouter/free"]}},{"id":"openrouter","name":"OpenRouter","workspace":"/home/ubuntu/.openclaw/workspace-openrouter","agentDir":"/home/ubuntu/.openclaw/agents/openrouter/agent","model":{"primary":"openrouter/openrouter/auto","fallbacks":["openrouter/openrouter/free"]}}]},"tools":{"sessions":{"visibility":"all"},"agentToAgent":{"enabled":true,"allow":["pipo","codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"]},"elevated":{"enabled":true,"allowFrom":{"telegram":[842987156],"webchat":[]}},"exec":{"security":"allowlist","ask":"on-miss"}},"messages":{"ackReactionScope":"group-mentions"},"commands":{"native":"auto","nativeSkills":"auto","restart":true,"ownerDisplay":"raw"},"session":{"dmScope":"per-channel-peer"},"hooks":{"internal":{"enabled":true,"entries":{"session-memory":{"enabled":true},"bootstrap-extra-files":{"enabled":true},"boot-md":{"enabled":true}}}},"channels":{"telegram":{"enabled":true,"dmPolicy":"allowlist","botToken":"__OPENCLAW_REDACTED__","replyToMode":"all","allowFrom":[842987156],"groupPolicy":"allowlist","streaming":"off","mediaMaxMb":20,"timeoutSeconds":60,"retry":{"attempts":6,"minDelayMs":1500,"maxDelayMs":90000,"jitter":0.1},"network":{"autoSelectFamily":false,"dnsResultOrder":"ipv4first"}}},"gateway":{"port":18789,"mode":"local","bind":"loopback","controlUi":{"allowedOrigins":["https://miopenclaw-vnic.tail9799d2.ts.net","https://miopenclaw-vnic.tail9799d2.ts.net/","http://127.0.0.1:18789"]},"auth":{"mode":"token","token":"__OPENCLAW_REDACTED__"},"trustedProxies":["127.0.0.1/32","::1/128"],"tailscale":{"mode":"serve","resetOnExit":true}},"skills":{"entries":{"gh-issues":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"nano-banana-pro":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"notion":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-image-gen":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-whisper-api":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"sag":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"}}},"plugins":{"allow":["telegram","acpx","clawrouter"],"entries":{"qwen-portal-auth":{"enabled":true},"acpx":{"enabled":true,"config":{"permissionMode":"approve-reads","nonInteractivePermissions":"fail","expectedVersion":"0.1.15","command":"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx"}},"clawrouter":{"enabled":true}},"installs":{"clawrouter":{"source":"npm","spec":"@blockrun/clawrouter@0.12.43","installPath":"/home/ubuntu/.openclaw/extensions/clawrouter","version":"0.12.43","resolvedName":"@blockrun/clawrouter","resolvedVersion":"0.12.43","resolvedSpec":"@blockrun/clawrouter@0.12.43","integrity":"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==","shasum":"3331382e1a46524bee73b8ffa83677950f5bbae5","resolvedAt":"2026-03-15T22:45:46.066Z","installedAt":"2026-03-15T22:46:43.662Z"}}}},"valid":true,"config":{"meta":{"lastTouchedVersion":"2026.3.13","lastTouchedAt":"2026-03-16T01:01:29.186Z"},"env":{"OPENAI_API_KEY":"__OPENCLAW_REDACTED__"},"wizard":{"lastRunAt":"2026-03-15T22:40:03.597Z","lastRunVersion":"2026.3.13","lastRunCommand":"doctor","lastRunMode":"local"},"diagnostics":{"flags":["telegram.http"]},"browser":{"executablePath":"/usr/bin/chromium-browser","headless":true,"noSandbox":true,"defaultProfile":"openclaw","profiles":{"openclaw":{"cdpPort":18800,"cdpUrl":"http://127.0.0.1:18800","color":"#FF4500"}}},"auth":{"profiles":{"openai-codex:default":{"provider":"openai-codex","mode":"oauth"}}},"acp":{"enabled":true,"dispatch":{"enabled":true},"backend":"acpx","defaultAgent":"codex","allowedAgents":["codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"],"maxConcurrentSessions":8},"models":{"mode":"merge","providers":{"custom-api-deepseek-com":{"baseUrl":"https://api.deepseek.com","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"deepseek-chat","name":"deepseek-chat (Custom Provider)","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":16000,"maxTokens":4096,"api":"openai-completions"}]},"blockrun":{"baseUrl":"http://127.0.0.1:8402/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"auto","name":"Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"free","name":"Free (NVIDIA GPT-OSS-120B only)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":4096},{"id":"eco","name":"Eco (Smart Router - Cost Optimized)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"premium","name":"Premium (Smart Router - Best Quality)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":2000000,"maxTokens":200000},{"id":"openai/gpt-5.2","name":"GPT-5.2","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.25,"output":2,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":65536},{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.05,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":32768},{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":21,"output":168,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4","name":"GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-5.3","name":"GPT-5.3","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16000},{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"openai/gpt-4.1","name":"GPT-4.1","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.4,"output":1.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 Nano","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o","name":"GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/gpt-4o-mini","name":"GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"openai/o1","name":"o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o1-mini","name":"o1-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o3","name":"o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"openai/o3-mini","name":"o3-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"openai/o4-mini","name":"o4-mini","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":1.1,"output":4.4,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":65536},{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"google/gemini-3.1-pro","name":"Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-pro-preview","name":"Gemini 3 Pro Preview","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.1,"output":0.4,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"deepseek/deepseek-chat","name":"DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"deepseek/deepseek-reasoner","name":"DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"moonshot/kimi-k2.5","name":"Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"xai/grok-3","name":"Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-3-mini","name":"Grok 3 Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-reasoning","name":"Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-fast-non-reasoning","name":"Grok 4 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-reasoning","name":"Grok 4.1 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-1-fast-non-reasoning","name":"Grok 4.1 Fast","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-4-0709","name":"Grok 4 (0709)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":1.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"xai/grok-2-vision","name":"Grok 2 Vision","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"nvidia/gpt-oss-120b","name":"NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"nvidia/kimi-k2.5","name":"NVIDIA Kimi K2.5","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.55,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":16384},{"id":"claude","name":"claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet","name":"sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4","name":"sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4.6","name":"sonnet-4.6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"sonnet-4-6","name":"sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"opus","name":"opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4","name":"opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4.6","name":"opus-4.6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"opus-4-6","name":"opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"haiku","name":"haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/sonnet","name":"anthropic/sonnet → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/opus","name":"anthropic/opus → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/haiku","name":"anthropic/haiku → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude","name":"anthropic/claude → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4","name":"anthropic/claude-sonnet-4 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-sonnet-4-6","name":"anthropic/claude-sonnet-4-6 → Claude Sonnet 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":64000},{"id":"anthropic/claude-opus-4","name":"anthropic/claude-opus-4 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4-6","name":"anthropic/claude-opus-4-6 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-opus-4.5","name":"anthropic/claude-opus-4.5 → Claude Opus 4.6","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":5,"output":25,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":32000},{"id":"anthropic/claude-haiku-4","name":"anthropic/claude-haiku-4 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"anthropic/claude-haiku-4-5","name":"anthropic/claude-haiku-4-5 → Claude Haiku 4.5","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":1,"output":5,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192},{"id":"gpt","name":"gpt → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt4","name":"gpt4 → GPT-4o","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":2.5,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt5","name":"gpt5 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4","name":"gpt-5.4 → GPT-5.4","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2.5,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"gpt-5.4-pro","name":"gpt-5.4-pro → GPT-5.4 Pro","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":30,"output":180,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"codex","name":"codex → GPT-5.3 Codex","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":1.75,"output":14,"cacheRead":0,"cacheWrite":0},"contextWindow":400000,"maxTokens":128000},{"id":"mini","name":"mini → GPT-4o Mini","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"o1","name":"o1 → o1","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":15,"output":60,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"o3","name":"o3 → o3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":2,"output":8,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":100000},{"id":"deepseek","name":"deepseek → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"reasoner","name":"reasoner → DeepSeek V3.2 Reasoner","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"kimi","name":"kimi → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"moonshot","name":"moonshot → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"kimi-k2.5","name":"kimi-k2.5 → Kimi K2.5","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":8192},{"id":"gemini","name":"gemini → Gemini 2.5 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"flash","name":"flash → Gemini 2.5 Flash","api":"openai-completions","reasoning":false,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},{"id":"gemini-3.1-pro-preview","name":"gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"google/gemini-3.1-pro-preview","name":"google/gemini-3.1-pro-preview → Gemini 3.1 Pro","api":"openai-completions","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":65536},{"id":"grok","name":"grok → Grok 3","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":3,"output":15,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-fast","name":"grok-fast → Grok 4 Fast Reasoning","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.2,"output":0.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384},{"id":"grok-code","name":"grok-code → DeepSeek V3.2 Chat","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0.28,"output":0.42,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":8192},{"id":"nvidia","name":"nvidia → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"gpt-120b","name":"gpt-120b → NVIDIA GPT-OSS 120B","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":128000,"maxTokens":16384},{"id":"minimax","name":"minimax → MiniMax M2.5","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0,"cacheWrite":0},"contextWindow":204800,"maxTokens":16384},{"id":"auto-router","name":"auto-router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000},{"id":"router","name":"router → Auto (Smart Router - Balanced)","api":"openai-completions","reasoning":false,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1050000,"maxTokens":128000}]},"custom-api-moonshot-ai":{"baseUrl":"https://api.moonshot.ai/v1","apiKey":"__OPENCLAW_REDACTED__","api":"openai-completions","models":[{"id":"kimi-k2.5","name":"Kimi K2.5 (Moonshot)","api":"openai-completions","reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":200000,"maxTokens":8192}]}}},"agents":{"defaults":{"model":{"primary":"blockrun/auto","fallbacks":["custom-api-deepseek-com/deepseek-chat"]},"models":{"blockrun/auto":{},"openrouter/anthropic/claude-sonnet-4-6":{"alias":"claude"},"openai-codex/gpt-5.1":{"alias":"codex-chat"},"openai-codex/gpt-5.3-codex-spark":{"alias":"codex-spark"},"openai-codex/gpt-5.3-codex":{"alias":"codex-max"},"openai-codex/gpt-5.4":{"alias":"gpt-5.4"},"custom-api-deepseek-com/deepseek-chat":{"alias":"deepseek"},"claude-sonnet-cli/default":{"alias":"claude-sonnet"},"claude-opus-cli/default":{"alias":"claude-opus"},"blockrun/free":{},"blockrun/eco":{},"blockrun/premium":{},"blockrun/anthropic/claude-sonnet-4.6":{},"blockrun/anthropic/claude-opus-4.6":{},"blockrun/anthropic/claude-haiku-4.5":{},"blockrun/openai/gpt-5.2":{},"blockrun/openai/gpt-4o":{},"blockrun/openai/o3":{},"blockrun/google/gemini-3.1-pro":{},"blockrun/google/gemini-3-flash-preview":{},"blockrun/deepseek/deepseek-chat":{},"blockrun/moonshot/kimi-k2.5":{},"blockrun/xai/grok-3":{},"blockrun/minimax/minimax-m2.5":{},"openrouter/openrouter/free":{},"custom-api-moonshot-ai/kimi-k2.5":{"alias":"kimi"},"clawrouter/auto":{"alias":"clawrouter"},"openrouter/openrouter/auto":{},"blockrun/openai/gpt-5.3":{}},"workspace":"/home/ubuntu/.openclaw/workspace","cliBackends":{"codex-cli":{"command":"/home/linuxbrew/.linuxbrew/bin/codex","args":["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"],"output":"jsonl"},"gemini-cli":{"command":"/home/ubuntu/.local/bin/gemini-cli-openclaw","output":"text"},"deepseek-code":{"command":"/home/ubuntu/.local/bin/deepseek-code-openclaw","output":"text"},"claude-sonnet-cli":{"command":"/home/ubuntu/.local/bin/claude-sonnet-openclaw","output":"text"},"claude-opus-cli":{"command":"/home/ubuntu/.local/bin/claude-opus-openclaw","output":"text"},"kimi-cli":{"command":"/home/ubuntu/.local/bin/kimi-openclaw","output":"text"}},"compaction":{"mode":"safeguard"},"elevatedDefault":"off","maxConcurrent":1,"subagents":{"maxConcurrent":4}},"list":[{"id":"pipo","name":"pipo","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"openai-codex/gpt-5.4","fallbacks":["blockrun/auto","openrouter/openrouter/free"]},"subagents":{"allowAgents":["codex","gemini","claude","deepseek-code","kimi","clawrouter","openrouter"]}},{"id":"codex","name":"codex","workspace":"/home/ubuntu/.openclaw/workspace-codex","agentDir":"/home/ubuntu/.openclaw/agents/codex/agent","model":"openai-codex/gpt-5.3-codex"},{"id":"gemini","name":"gemini","workspace":"/home/ubuntu/.openclaw/workspace-gemini","agentDir":"/home/ubuntu/.openclaw/agents/gemini/agent","model":"gemini-cli/default"},{"id":"deepseek-code","name":"deepseek-code","workspace":"/home/ubuntu/.openclaw/workspace-deepseek-code","agentDir":"/home/ubuntu/.openclaw/agents/deepseek-code/agent","model":"deepseek-code/default"},{"id":"claude","name":"claude","workspace":"/home/ubuntu/.openclaw/workspace-claude","agentDir":"/home/ubuntu/.openclaw/agents/claude/agent","model":"claude-sonnet-cli/default"},{"id":"claude-opus","name":"claude-opus","workspace":"/home/ubuntu/.openclaw/workspace-claude-opus","agentDir":"/home/ubuntu/.openclaw/agents/claude-opus/agent","model":"claude-opus-cli/default"},{"id":"kimi","name":"kimi","workspace":"/home/ubuntu/.openclaw/workspace-kimi","agentDir":"/home/ubuntu/.openclaw/agents/kimi/agent","model":"kimi-cli/default"},{"id":"clawrouter","name":"ClawRouter","workspace":"/home/ubuntu/.openclaw/workspace","model":{"primary":"blockrun/auto","fallbacks":["openrouter/openrouter/free"]}},{"id":"openrouter","name":"OpenRouter","workspace":"/home/ubuntu/.openclaw/workspace-openrouter","agentDir":"/home/ubuntu/.openclaw/agents/openrouter/agent","model":{"primary":"openrouter/openrouter/auto","fallbacks":["openrouter/openrouter/free"]}}]},"tools":{"sessions":{"visibility":"all"},"agentToAgent":{"enabled":true,"allow":["pipo","codex","gemini","deepseek-code","claude","claude-opus","kimi","clawrouter"]},"elevated":{"enabled":true,"allowFrom":{"telegram":[842987156],"webchat":[]}},"exec":{"security":"allowlist","ask":"on-miss"}},"messages":{"ackReactionScope":"group-mentions"},"commands":{"native":"auto","nativeSkills":"auto","restart":true,"ownerDisplay":"raw"},"session":{"dmScope":"per-channel-peer"},"hooks":{"internal":{"enabled":true,"entries":{"session-memory":{"enabled":true},"bootstrap-extra-files":{"enabled":true},"boot-md":{"enabled":true}}}},"channels":{"telegram":{"enabled":true,"dmPolicy":"allowlist","botToken":"__OPENCLAW_REDACTED__","replyToMode":"all","allowFrom":[842987156],"groupPolicy":"allowlist","streaming":"off","mediaMaxMb":20,"timeoutSeconds":60,"retry":{"attempts":6,"minDelayMs":1500,"maxDelayMs":90000,"jitter":0.1},"network":{"autoSelectFamily":false,"dnsResultOrder":"ipv4first"}}},"gateway":{"port":18789,"mode":"local","bind":"loopback","controlUi":{"allowedOrigins":["https://miopenclaw-vnic.tail9799d2.ts.net","https://miopenclaw-vnic.tail9799d2.ts.net/","http://127.0.0.1:18789"]},"auth":{"mode":"token","token":"__OPENCLAW_REDACTED__"},"trustedProxies":["127.0.0.1/32","::1/128"],"tailscale":{"mode":"serve","resetOnExit":true}},"skills":{"entries":{"gh-issues":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"nano-banana-pro":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"notion":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-image-gen":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"openai-whisper-api":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"},"sag":{"enabled":true,"apiKey":"__OPENCLAW_REDACTED__"}}},"plugins":{"allow":["telegram","acpx","clawrouter"],"entries":{"qwen-portal-auth":{"enabled":true},"acpx":{"enabled":true,"config":{"permissionMode":"approve-reads","nonInteractivePermissions":"fail","expectedVersion":"0.1.15","command":"/home/ubuntu/.openclaw/workspace/.acpx/node_modules/.bin/acpx"}},"clawrouter":{"enabled":true}},"installs":{"clawrouter":{"source":"npm","spec":"@blockrun/clawrouter@0.12.43","installPath":"/home/ubuntu/.openclaw/extensions/clawrouter","version":"0.12.43","resolvedName":"@blockrun/clawrouter","resolvedVersion":"0.12.43","resolvedSpec":"@blockrun/clawrouter@0.12.43","integrity":"sha512-Hgwr1csbN5YVhuD34NCnTigzS+/MWp9qpXni10nDINvmB5cHgxfYgjlK7q8mXcQ7SQwF5UYcRyC/RZmojB0OIw==","shasum":"3331382e1a46524bee73b8ffa83677950f5bbae5","resolvedAt":"2026-03-15T22:45:46.066Z","installedAt":"2026-03-15T22:46:43.662Z"}}},"talk":{"apiKey":"__OPENCLAW_REDACTED__","provider":"elevenlabs","providers":{"elevenlabs":{"apiKey":"__OPENCLAW_REDACTED__"}}}},"hash":"0c0d0115ae610484c9c4d9c77903a011e094c9860783839ba06034d8034d7210","issues":[],"warnings":[],"legacyIssues":[]}},"isError":false,"timestamp":1773622899068}} {"type":"message","id":"87b3c990","parentId":"b1e5870d","timestamp":"2026-03-16T01:01:39.098Z","message":{"role":"toolResult","toolCallId":"call_yGxrNXaWHefYSqjh323pLEaj|fc_0776d4d0ce7a6f6b0169b75672290081908ad10fdc12e9c28d","toolName":"read","content":[{"type":"text","text":"#!/usr/bin/env node\n/**\n * Asana OAuth (OOB/manual code paste) helper.\n *\n * Usage:\n * node asana/scripts/oauth_oob.mjs authorize\n * node asana/scripts/oauth_oob.mjs token --code \"...\"\n *\n * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json.\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst AUTH_URL = 'https://app.asana.com/-/oauth_authorize';\nconst TOKEN_URL = 'https://app.asana.com/-/oauth_token';\nconst REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob';\n\nfunction die(msg) {\n\n[126 more lines in file. Use offset=21 to continue.]"}],"isError":false,"timestamp":1773622899080}} {"type":"message","id":"99ca865e","parentId":"87b3c990","timestamp":"2026-03-16T01:01:39.123Z","message":{"role":"toolResult","toolCallId":"call_QQWdfoAjZcsEAvzABOc13juN|fc_0776d4d0ce7a6f6b0169b7567229088190b98b853b54c74da2","toolName":"read","content":[{"type":"text","text":"#!/usr/bin/env node\n/**\n * Minimal Asana API CLI with OAuth refresh.\n *\n * Reads token from ~/.clawdbot/asana/token.json\n * Reads OAuth client credentials from ~/.clawdbot/asana/credentials.json for refresh.\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\n\n[375 more lines in file. Use offset=13 to continue.]"}],"isError":false,"timestamp":1773622899098}} {"type":"message","id":"9f239c78","parentId":"99ca865e","timestamp":"2026-03-16T01:02:11.098Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Considering configuration changes**\n\nI need to decide if we should fix things by patching aliases or agents since we've already restarted and locked down exec. There’s a possibility to patch the `agents.list` for the claude models to meet audit requirements, but doing so could impact costs and behavior. The user has asked for changes, but I should also consider the effects of switching to BlockRun/API rather than local CLI subscriptions. The health check suggests discussing any significant changes first, so it might be better to stay transparent and not make changes right now.\n\n**Evaluating user requests**\n\nThe user asked me to take action on everything, but I should mention that two warnings weren't auto-flipped because they'd change billing and execution for the Claude workers. The probe scope is informational, so not satisfying the user may not be ideal. I could offer a follow-up if they want, rather than having silent breakages. Yet, I want to prioritize safety and suggest a rollback if needed. I might also consider granting operator.read for the probe scope, but the gateway auth mode may not support this. In the end, some actions might be non-actionable.","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b75678457c81909dc46a555d2b0227\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1aKIJKt9UkTFrqc8Q0hYGXJl0B1fhlzhHTVMmFMas4YavveyAHGSfynoUuh5zVBFMkeE_jdR3HzvajoLhnUdHmbsqoimW-3ck8B1Q10k2gkD9Tvbun-QCq6RLDmugPGgaNGzQm6079DyAf3AVqcg_soM1h4ce2RA7ycjj1mrZudNJPq7DPrGG_AcVGlztvaMwR89tDmtqTAQUP77X-zh43DVyhlj-vfLKgIonD1XNNoj6OymavZWI92xR26-zPpayfzKEWvwUFsJ7lnIreSerix2QsdMurxYUJEAh_EEgpnEPU5bLLeCdE5M9-JLwt3P-cR84zdmqxL49e9cq7LBu9dRAtwmtrxIgFtSfXz7Ao3FepxSC_XH_VMKlXSNMQE4hDQigg46AnD8Kz_I-czwn97rahvIKVr48ESJVMW1ul3wz1-oaq8UfQUOx53I84UIMUme5H8rnR7LljpWsm24q3s5m67JIxYNLRL13fOVHzsQn3vhSh6cLNRwroWfZSWHVkXPOXVPqfVVL3kj2riY5a8o4had_UvEgXnpOy1H3z-ph9sjanHS3wXdZh5fId_c5cbCBOlvB7GGaMlgmJo7rP3MsZluaPUu27ew3sT106M8qPskcPeKWcFWgDKwAtUGAdTI99kw1E_2o8tBsrdK7H9tiLOVPEuKhtyj_F_HoOgZGniBeuXF1dG2IbYTplD8D3UWJrX0PsiMYyq3PMBZ03my1rsLrOw6mvA7pJLTvvdc43zoU1VvAFjbAIYxiHN9w8GSF9zRUAIGYhilCrVvbkJ91sAWJB8TKCowMxpgC2Xn0ljf_G5_1MetnOdhDYzw1A0ZY6mflG12qNlDI0yIuElmFFjDCgVrrC-HV6lAjdKVMp2CqkR_N2FQ8zEwF18AmQ85vavGQEUtPS-38ad-hGS7C2qU0KjUdKiHBs7hoVTakZuQ_RWk3NRSLjZxCmiHcIlVOQlpsnJAhLwFTMLTUyRzf4BaT72cOs1WzJlrA8zi0O1-tiU7QAKpWUtK-S1HJ8UQzw9IKr6Q0xNhkaC4dbmDoT4-MM7tHepbRVCGaMNP3_7Q9rNONbbfeRLVsGYfsVV7BWRvte9zIboj-kiwDQiRJnz24PcfkBugfZArWhxtK5YLqmrJ25Lee0GDKlxBLw8MNPJaPfLmqTSBL8vlocvGPzwVsPAg28TbdbdMQKtDFbsyjGwAY9yRw0oWdRlNARK3FC2X2JVFpqBzwtTZT9LVY_Noluka1PARIBRb_9p3yaqKsmKnrUOPxZ93VPRrXDAO4jdhQtou3Askg0-aibRuyE_1aii_AmFpr8cIATYPOL5030bTm05UWlZaxm5Yy9yCzWahqDYcNS8LPhaAOPcGUydlYH347OG_iDNwfxeV5-JVjkbE_-YJGgxyElCf8GpuN854UbRhPt0RcWdScQA1z2yxjpTJh61B7a5-MIIYXIQp2qpsuHw0e5AWnJzQgy1VXdL9pfLOrw1IwRxLg7zkfR8akSA_cFNk-DzwE67Eccet7EeVQj2C8VZo0rMsnHFfIZhmA8Y9QHnAEi_qpWZSa7wY3ICJCA4w55CQ7bnqkwuyg8ivMJRqoQ9poMCR4qeGBSPtl4b3z2rp3MLG3pa9BX5ZiTiMtTBUj69weYFdgKsuY1T_DR6R9bw7N6Nbk6fCfyDTar_4wW-9qWszMzS4ipddIPk_ffAuTjGr7bdV4nEgpMfZyFlyzlceQ4RA2wm2ICjTIohEsLGBQ_5iJ-DAUXSq63VynPOTZat_Q9-IZmQPW-U1BQOqdE147cWibeCcN-UcksLD-ssMzFglvB6jDjHVymFM_8zeR8HXRec9rP3I9PGKsnQup_Dojy0ciyUOK7YI_A8dFCMgM-K5mGlrfLIxNUwFj-me9Cgc9LbEc7x2ULuMkwSSv8CBXUKXLMz7gF6suThmX_76QIxg-mEMoWnDeCliJYOg-srmhrfyvFHKjv0zODsavk1UniRRKLROzFIbIY_hxq6T9mEtKbd_8cqNqRSgZO1EArSWKQBNmNhqjWij52vSJXLaCs0ofrm-gwYQIwJqwRtOkxvAUNHt3U4Btlc2CIsjqNLNqnUaO1mavX7UdiMbkZnvE-Os9jgSR0FotL8VwIPyopYKJMq8IQ7ohUpcTc5ZEbz8YBp7kQBLf8o3yqnFI5OdgugwdxRfhRta1506SYI3BGZ_1a4HIf8h7ObeUqb7fHIWvcxIp6OApZJIfJLsJgkPJSJ6t4Tx0g1kEW3rj7tes2NpwWRwglg-ljchFHikmlLL_rq1LYctaN8FmGVH3rY1YFpTc2PdzIFTe7Vu2RPKUVs_pQczBjapx1reniuhGVQGy2GMLD8XthyDFg_KkcPy-FuvrEaCE7OZ7_I1gwU3iX78x3K-Xn23ipnGq5nL9GXjspKWXtpYPzne0xeueZBanW7ddTNZXizHpfoQIU4Eqol0S4vdQUsdoxFt2G8Q4SJchWu3en_I93aoUmvJpViVXxTRElXLZFgCfxURuqx91uGNn74LYEch8nr8w5zTqxqeECjxwS7WCoN1vdaibt_etFIH0FZ58WgJ-rDq8q3BXIBhtvvw6KVdNa6jYyAjYgMJG7R4Vt75IrkpQvJQdZ2M1efvyWszLqLmgv9vVSpdTpC4cZFlXeF16tdWQukn376c0YcS3b6I7tX_HaffFHN3zHEXrI_1zsSobwL6l5_tWa6YTRpDARVfa36OyNLpAsMtMd05RzbyWuwrPT5c8JFO1DHJR2O2cgdOUJET6uTdw6MbkJocQcfYsWYs8J_FXLjfZOzwWiQGZlKH84SOyMo8Hud5zMORlHlImsQovnPtBSb_T853nEivWFJBSvO1k8V90xsMyiAh6LTpdcRPuIdrvj_QCwZnH-N9yu19-0l5wb8q_IqafrA323A8Qx6SkIMsa_UZ3FbAWFmnkaVua5BYQZ9kj21WffgObEvuFB8x-1ToaiwgnP7dwTYIjempE9S5yqUDSS2A-g1Ha_3bPRfRHLRWymi7HJIsdRrmrrUcT11FqwFseSsF71Z3SRd9yIxNGU3kjFqvNS3u8vRtLbUHJFplmmTNP2FnXL49U6YX30Cl_5vovktpLcmN05PMiZ9gvKyEv0Xei7k4rywAmR3e2warl8oe1VNdeodUSuD77l3vJgcnIzLX49REdRTqTzhhH967koXCjL0rgl14t_vfxfkpQbuwowJQnkIOckfWNYnWzheqNuMaZjzX2by1v_fDc8tlzne_aWZCO9RaIJPdBDSMWqsqR0oSlfZNHsqWl69GH_W9ZVwPZ5RZwcm9AWAjS3dPJZ_31xVsJt1GCzcellq2HIItAveBCDt5GafDTIRtC6VIQqi6eWAJU-b27coT1xIRlqOzd3e1s_OK_6Ylu3erWVO-KT9uStrJZNiMl4oYpISQOuqfsQMDpokbxkmcLVrVInptwNzvpddqCAW0pNoLdJ6FnX2ay2LHj666kVR4P4a_5tiMnKsPDrsfO4-1avxqSqL74lmi8yepfqJYUZYUCFGS-wn1vQWEAdO8a0BYi4kAnF2d2DrJSZ2eNYgIc_i4JBOaDa0iis83uvkIEgUm7YWBVL3JQ2JGWH-MO1-38a8aa70Hg9E4kK0Pq3VVWRBgazgg_Sv1LTfGGmoCqLKd6ncahoOUEo4Dn9z4OD3hZddB_L9RPxYLcus-l5bh7et-M0PVwlOFGmhWnimHg1gAUfzl19N2L3GW9t8dHxFSNGNo1pP10Ml6v0m2u-tfQjz1XIz-TFTKsO0odNmeBoi3y0_TxVOrDK_WGlMjGffLlBn3GXIM1ZXlXKAfUSKjPOpr1ho4-w8LjGCKb3zK2-fWrcESXJgfBO_vn_CHSUELEd9ctU79w-SIFxKye8_NdttUjkJy5blHVylRiq7cKLEqh_lBnAaWbOxvxck0IbfbR2jCfzBs7t_TjZ0Gh1Zw1-hU-EtQtN-5NoopjStRtG9QYhShVYEQKwDaMS4-jxhXvNeBhUJFhbKu_5vPMwvfg4B8O_F6gG8EH3Fcfz0YlQlmrr-V1_pB-Shbz0MhcFwGjU5EUlLOnojuzo2XvNpcGsbdQ0ia6p7LpMFrETZ8ASK9ANtwVeaWu-XL3RFo3sy6mCoy1q2tlDPt9GiDn6BvMSdLkykuDYDq2gU9I3aglrYYmIR7zvmaHEDESiVD1Nf5brNi1h5K4fzq12tkBQtLb-h-H6-MFeCOwYsl19ebI9rStUku7k9Hw_mxrxsPYvAHxD1_t_65ynZ7iXdm1M6RUmA5rIEVddDAOZJGG4kNI8yPTUafiPNrN6ktHfZ-rN593DzGteAhkJ-SC2nkNrRPG7_vgPbvztqXmfqaISLS-pylGjJc4x37_p5JjoIDMTf3C46pUEbLwCM1KEQBKPXgp6JP-eYmY1bI7J9SrByyBvynAlAEtkMgFbCjK-P8WKa8xnsIsz1xY9fAK9WODQU85NZCTYo2Gm-Ewgrpiufshh1XbhEk5843oatSpLKtE7XEiFZh_iwFeq-Y1CROwgAy99RaT1EVT6D69_3XW-9a7Dn1ITBaYNlRLvuG_zY-epjReT2wMr2S4IHTeW4idJinJdpN_LWBExfWtInfY4hbN5kduPxfGVAB8fzIh36D4_GOBR9DdQhOwwDgTo8C0HDKdzDKFsB724JkzjaEzGUSljdTQw8QPaML9OahYFJBIrQcucWOcl8jWh4XsAhfU-LufjQHxCwNoL-z8MCv4FdwCVHZPPplD3lfLxWfQYqsMcbOChpkIVM-JHFSfwU3bjVR6Oj9o3vFrYqWReITuB-p_1IzWvyY6RNlMSKxBx5glBlPPmiM8feim7pKUZMHc-Mf3Kl2vyhyYQMOQ4ETlCYHUbqN85CzG-Go_qjr1-UVHdr_YrSrt8jy0lZjVmwHELgHob71RVS5AfZIwkoKaTuaF5aopm8n_vw_xkBkFEJdyHor37zKgdkEpfZ-pD3G3A5V6ggSd0J0bb--wix1Bf4mBpcU4DncUVAwI1WDup_lphrJKFFF0GlGOFXj651285arYZaTawDBaGQ8i4sJGc6-QQM0Vdkwc9_Av0Lybpa3qRWrc_uXMtKrrShC9SkFPf3GbRhqHgxx_YUalXqU_hftRLG8nX9plZFVjuDZCFRm3OqsGUyTeU-2Xuko5acKzXavBTYxDLYCuH6cs2gI4aUEgnwSeHCCsKosz1q0mXc6UQVfVq5L1Q_cT5Fftsovs9TdM2ZDBGQhZ3RppIhh4qXP5yvmsugBdVod8p-7gtZ507MNSbYM4kZ7fbJfcpZoA6XAE0nSk0-WQDvHE8kgeKdZYffjSE8tXnAk6RlQWpw8Csf4IH-66W7MwyGYT9S-yp8vhpFy29IE069Ttb0wg4lbvRON3pY7JiTRtgPN5d8FG9E4tiQi8zgYcs4KL5XOa6EZBCROfZfwW7UgJ3JMo5BkV1NBRYwP4A_YC8X46bZulgSs06hZo5FYMK7HCCVmpV-efPcnu-DJqCUY_R49bJ8F6LM8Y3CVPAITfji4rurIVwkKAtfHoXvg1LplC5rDpkWRB1CTsW_x91z4t7d5H9MC-WtpwhpMAR-8Kmvwlii8kopZYogTEcjMffwDD6GnVzniCtoBCO1bbm8O2zc2FjK3kGcy9szaurfToRO0ER5m6Cibf3eS9bQHpez53QYqn1xb-khf6A-hm2z25Z_V-4Vgg2szsSzemab2MJPKAW4Pu9TRQ7zl2VpOECrbmAAkZaynTbtPVO6M8omS0TehR9ZqWS40zu7RVH_7c77102DAAZz8DejnE9_KsBxI-WkmaI3_TLoZ4VduGlJp0Nz2hyOT_lTdM-CMaMdjODZqxXbz25UUkAXeOc2L5ARF_kXIJtFnbEs7cmhzldft102lnGhobOT0QYi6FOpsNRww0M-ek03rabMnxqInBvBDVY5LAC8HwMJI9e0JMQYzZqwMNR5m6mU1t6TAJDCrn6AT2Cpa_M76eP7tHZG5DVGuOCZVvOkUKBZxNHFe6kKJzKxns91ODKF3M6ps9AP8Fy_zLTMaOCBmj1ZEFYtPiNGTCXxTl-cEzVcXiq-jAz64sI3Ss-2XJMusDrCtdQdLK6mI4zUKn_dgFOzXxJxeqHYl86J-TGlfoAqA1d2TwYpM-3xrfyqfyy8rNdx8BfHRgwmImG2k-wZtLm4kJLhbHBqxQ2xxawTGqh4KjSbwxaSflNIZGV4Y89MlMyXA5AhuLhbkm10aKxfR-WguzPbnwqwHYaQO3ZWFC3Ot4A2gNh4cBQP1E_BfpELnSjJ6rS-rqXN783bqKKXUd1WoIyfaYRWtTFAVIz9CZaO9SFLv6TEeURZ_AlnhVYDa4rbPIeaKjSQXOB2yCfyXhKJinMkVtddMOJDqrnH_D8BkbBWJ6xNJIXMUvQ85v-B3fen-Jj2OQIw9i5lx91Grm3VF1_ef-WVbEzM8kgKxaE5HCmLf4tXW_vDu99O23xnyyaHnwe2RI2Sp-bh3l7bUVWe37I9jdp1xoRKaWuooTfna8ys9t7Zr1M0xtf7ApDwhs2rpFRvRBpXEwlEbAyKg3UBUhhAiFZvyAuZ4Kn5tDEGIUz6-Bg1-lUbwHAnpqy1yIQAAcclWBrUFUVEIiRj12oK_wRZiS_8-Yli4qkuICtLAajbYnmjx9_sPDFJBVHgDa21EOIGkkYYyJon6TVy7sdqMhRHCoonxuwILxWzx4Jvgh8sdEDJzc8xGhWJIqrwcSzcRsb-PItMdYdROlh58mntvpF-Jyy59jcHpMXk5Ltt79tqWHcbHh1i_HN4lY9K8Uf8_xPxWnLRgkk0yAUXFa6Mog5Yw0y-z6VH7fYNsBRRQtVRoa26utzk2jo57-dP_b-iMtn4w4CYR7z047K9Mt0d85ZiN5CTIJGV8R7lxNIt9EV0-rOcqsCqTmPvbdpV6hjP7gw4Vi46piNS03FbkUXP1_-LXQmx3zgSeNNPyxLadd64s4NDAj7OR6Rq_SCdZ8FJwidB19PmiIHbN3A6e_HuGB8jroFC4o7yVgZpVgX1AC6zYFBUKt9ql7cAxzsL2sLvzK76jq7X5vqjH_plBOPIxAqqZBzu-GA0pvuDzt1FTjm8GjP6tlb7m6XRDHEjt6HDFnYVmIrUmSkL6fKBu78kIVCAyMBby5ZnElFN5yAwkLyb0OlPUfnK3HcqbKVgIxcmrmqXm55BVRa6ObSBvjJFNQ1-qvHat1mZqz7M-twvGcnHHfO6QJJFRXtWhmkDTn0LqOfUFu0NXsz3s0npz3MRwaEWetqM-nApeuJv9gErOVMN_6s7UljiMMouPs5laH6y0TbvbrhSC7cNbal9FFzP_ifc_6E6kqU3tp0XDyZ1eP5TOC2eFCyZ03BmBhW4Zhy0X30k9L2NFO42ZCwqOHM6dCxMLISzeTTv7739suDdG03gzqEhzglDQtW4QZN3BU76BDc17qveU6-NcgY8lfvBwaPN4vfwvki85rHIKTdAzfQW9m5F6oJZcwktKgLhBjiJs1B6U79ebhACXuMWkvF8sr3AbCm0X308-d5qrQvAX41mNj8uM9o1swkxi1DYtLSocsS8gB9VjKr8V_KMp0YGu7F0Y7S5BGKbCTDaOggAlWPVyPQ8KtqfLEhOPfcK6Z6iWM1a3veRKPidaIC-YpteufTStu-IzB8inCurD3sjDvzPYqIL4aD7rPbsgTDAOffB0Bj7k7lokoTsSoFBhtwBSzisQjq3k5doTL-bEIM8sg1dwlMmCV6ye6IdZJukkasj24ivAbX4DB9dmJA7yMvc5TFP7NyJNaz4WRrDUhKOhSIneg4eXweKJTmFiDU1jtfi_fDoLmxuCsj1s8TR0bu8rg2FLykEdMX6RCItQI_u7wa9sUXuGTeniM-xHXveBZ3J\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Considering configuration changes**\\n\\nI need to decide if we should fix things by patching aliases or agents since we've already restarted and locked down exec. There’s a possibility to patch the `agents.list` for the claude models to meet audit requirements, but doing so could impact costs and behavior. The user has asked for changes, but I should also consider the effects of switching to BlockRun/API rather than local CLI subscriptions. The health check suggests discussing any significant changes first, so it might be better to stay transparent and not make changes right now.\"},{\"type\":\"summary_text\",\"text\":\"**Evaluating user requests**\\n\\nThe user asked me to take action on everything, but I should mention that two warnings weren't auto-flipped because they'd change billing and execution for the Claude workers. The probe scope is informational, so not satisfying the user may not be ideal. I could offer a follow-up if they want, rather than having silent breakages. Yet, I want to prioritize safety and suggest a rollback if needed. I might also consider granting operator.read for the probe scope, but the gateway auth mode may not support this. In the end, some actions might be non-actionable.\"}]}"},{"type":"text","text":"[[reply_to_current]] Listo: dejé **corregido todo lo accionable sin romperte acceso**.\n\n**Qué cambié**\n- **Pinned `clawrouter`** a `@blockrun/clawrouter@0.12.43`\n- **Pinned `acpx`** con `expectedVersion: 0.1.15`\n- **Endurecí exec**:\n - `tools.exec.security = allowlist`\n - `tools.exec.ask = on-miss`\n- **Endurecí ACPX**:\n - `permissionMode = approve-reads` \n (antes estaba autoaprobando más de la cuenta)\n- **Limpié la skill `asana`**:\n - ya **no toma credenciales desde variables de entorno**\n - ahora usa solo `~/.clawdbot/asana/credentials.json`\n - corregí scripts/docs para que queden consistentes\n\n**Estado**\n- El gateway reinició bien\n- La config quedó **válida**, sin warnings de validación\n- Telegram siguió vivo, así que no te corté el canal\n\n**Efecto visible de la hardening**\n- Desde ahora, `exec` desde chat quedó bastante más cerrado. De hecho, al revalidar, `openclaw status` ya me devolvió **allowlist miss** — o sea, el endurecimiento quedó aplicado de verdad.\n\n**Lo que no forcé**\n- El warning de `operator.read` / probe no lo toqué porque el servicio real está sano y cambiar auth/scopes ahí era más riesgoso que útil.\n- Los warnings de `claude` / `claude-opus` tampoco los forcé, porque “arreglarlos” implicaría **cambiar de backend/modelo** y posiblemente pasarte de wrappers CLI/suscripción a gasto por API.\n\nSi querés, hago un **segundo pase opcional** solo para esos workers de Claude y te dejo también eso “audit-clean”, pero ahí sí cambia comportamiento/costo.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b7568ad9248190ac2a6072252c4027\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":98137,"output":1458,"cacheRead":24064,"cacheWrite":0,"totalTokens":123659,"cost":{"input":0.24534250000000002,"output":0.02187,"cacheRead":0.006016,"cacheWrite":0,"total":0.27322850000000004}},"stopReason":"stop","timestamp":1773622899121}} {"type":"message","id":"1258747e","parentId":"9f239c78","timestamp":"2026-03-16T01:02:11.541Z","message":{"role":"user","content":[{"type":"text","text":"[Mon 2026-03-16 00:59 UTC] An async command the user already approved has completed.\nDo not run the command again.\n\nExact completion details:\nExec denied (gateway id=5898c074-0427-47f8-934d-8dadd554f2c8, approval-timeout): openclaw security audit --deep\n\nReply to the user in a helpful way.\nIf it succeeded, share the relevant output.\nIf it failed, explain what went wrong."}],"timestamp":1773622931521}} {"type":"message","id":"be60c8be","parentId":"1258747e","timestamp":"2026-03-16T01:03:05.183Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b75697197c81908e23b8418fbf17db\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1bEsVo28NikF4iEj17SzsdmiMydqIOLLpkkgFWB3tLqvCWs7ysnyqeyx7GKdl-KHsLwjkFz86UjY9a4fV4hi5uKsdeGtt-elJDRadbaD_UUo5ACicS900WM-QLLfBrwfAihNZxFE5iJq8IVNexQ-cuEa3MqsZQHrKX9IjdVgIPByjY2sXD30lVVY1nkR5k8CGXziNgYRSUaxC8kbcHfObC5htNwFBjCC6axDfnD92M3hVLc6ZVE2e5tateU46v0AgMpxIAwLD8QBvWS5PA7KdFTmR9LbG5UY1lPBguAAjD0U7TjF6Mwsu-ONezPA-r0KjGs_Lg7ZUF2qLNrXTqjbCAcOnRfsbwtJOOfK7AeB9D0M8x2_D_jjJMSu_496SJ6UZmdEyv7rUSf9Uj6e8ANOzpU1lGUkEHjB9P0iqiN1ckr0dOhnf9DA2WhdZkw6NGYJuPL1SCfAzXC6JQ4xkYuj8s65bNK3nI_8pkh8qiWa0bBAClbmO01ZkOQ129HKZai8C65NxNmLwQrxEcv9klhbcHrYDF0ZTrGerHAh-xGxs1msv-5DxPoRasS8FkdC2-y4YKVeTfsgoTdnVeBQ4JNzWSlcLGMvtb5KhhUwXSGXtl_hrrco-ewUJ8LRn0frS0t9vDrdbilsqeZJ_4FD-8jLSQtMDyG_NmcvFX0rfGu1a1_cXwBnpY6HT0on50R-vqewWGTnU8AqH3qhFJIGGeYQf6JsUmN9RO5Joi8C1rW-TqkbSTocPGPRD78zng7fBpJvmu-7XVy4WA6ITNn2BqYkMqd0dVhdDHq5TFZudCTkNaVYNJaXk68mGY4XDN_ALw-M6C4tubcFlbsSeu19bfubmHtm2D9AuKRSVPvxNFYvyxtV0th78M80lkmhg-f_fmHUsubZ2Ws21J0uxZd9Ekluegk8-SBLMm8dU5ZqCrc36UkaONBZg45GKE11d56mO8yzcSZVS9YwE_is68bbB81hQKJkS2a_3jo8CkQkSdir6C6mCV5BTPbo0Fqe8I1LXwpZDTv9RjW4mj1R3BQ3WkV-kqIO2ftWvBMlFmwKrudibyTr1Uq0r083G4ct-_dZ_UqYfKe0ynTHmcNpUSR8EgDuZzJQGEh0-pdQOfS684oX_CmZHknJJ-51fx97Hg2KUmkJ1ow_TZ-NaXSMTX1tbX0Vx9liiGDwvUygMcyAbK4baehTH8TWHU5WYUBwfXv-ay9QE01U4eHj9YjQIH0cZp5yL03QGpvjAR6Z_37Cx7HF6-s16cCTrcHVZ4bVh_u1fGsyfkauhnFm2MFgnPWcN_Mmgf5mdUDwOxcLOob_5F3Rcf-ZAsmzemN3nFv3JwPkQT7ex3YYi6NgwEz96LyZV4ZTGnm9s6btc57EcmXktGqPQaTVOxyeprGQl6c8KDfnTG1XYidwGNb2GcCEhIwmhaeOlvAZEHFmaXYx82xac0vXbs6-DkRlzFPmApZTiziYNaf7nlQcx_Q4yNDpi6wlcEHTfr_PkzuR9FtonacicjMIWhWshO_28xosqxXEseyxSmAFnZs5lYOPqbkoupFQf21BYeLhlpQM-vivI1xq1RPBrmKoqO0FIQNHZYfbFqthhovOZryD03m6K5K0NvipHXNXbKLu64PR1rk_KqsqU7GkN1_UF-AAhh5Y2zRNrDwSMit4SVAvkLUwA-K0qxfeRrvpQUWQYw7vp7myaM9WQre-Tf4XgGICVM7KR7KlwyY9ZLJhsYijcoDfkpMQDYkzd8H1InDmfLQopanjNtNV4SHNrYzR6YFD8yum1l3JQsk3FItpx4Ljj2sYkxBSE8Ce6WCqB0HRmPQAkMxnndZHNmA6fpLHks8JJpekpcWT5pi1yMNkstO9USjS67bFY5sBtqjteW8niXpSiu477nwElITp9WAb6jGfaw8Xn7ewPLsxgbwRx2JSF20TsZN_lcandAYt82CNLwCu___YMvwgnIu8aRb50kTHDyJ4Cq6ysT_zBrBfyjHxfglbBUP2pZFDOmUHf3iqyaFTH7lkIZJeO9i8dcboKuIVjxM4PruVP7yRsLGufDebXkdT7eCrdbKl-QsT_38HAGW1Ypa50ebUE4ZS1Jp1yat1cYJE_KScM9OCu8VSB9x8DO_rMDuJrVu5piFtB2k7s4U9BekgsbnEDI9n_Mn3rq6Pn6Eh-mKWJcESCZi8LWHIVTfPnf30db1b-j7PBMMjNy6TNK3WrGeFI1a1xqmfMZE0oRXIQpTPvv9iYk_ydJF5MeUw4OtgHOnZCaB_-NKz16hkdLTUQPu2v3sQ3gscQxrw2qtWOFx9rqrlkDSVyRhgRmIpVjJgaI_GaYD5PQ34psfhaDYs5vNV8A6BEfQndO9sCcKjdMWzX96ss34I2CCYaQ3HWkkgmNg7EB9URLNBTN1MBQai1fOS4qRJ4JpoqJtANihPrS2P_mQ3brjhMLT5B3wVBn7KGvtquy1xIK_mScxFNmt8QB-d9jyr3wxVRVa-hp_ginUV-oTSIcyoLTQuMmLyQkyM-doe3VySa8C7dI-eqEz-ruJrVfKPg27vdswwaIJfrYCNCu4bK3AXuPi4ljX58rcTw1bNmJ1PczwjKQTpm9xSY2p0j3vqiAk-LmVripBxWSq3Y1IgyqaRiAc18WrF7w8R5UCyQA5IBOPcasw7ec7fOamS1bnJ6zHJXiEqGGnTQ_MWaRec3yrof3RVbf2MtxmZOugpX7xrpLxw9rHKpyEPdHwHLwtHN4zuWQ_CsMmy9_-GfL3MFrx0AqBCLLGbaPd4YbNI1YPtpUwoKJoKkbf-smzCeYpgka5vCHNZNlZeQk5Cs_g6bh5kn8fAzP4VsnuqtI41bh5eM7W0WBKppOmgf2Os3R90vI2_XWMR-CUZnebp54LZg6P7_Favg9-qWGTFp7o_yj7LRa6iOlMOo4rjaw4HsI4V_v8fcnkQ87DVJZUnNhMekKEWYMaXXSUU52LKmpVUnyqE9KPsnxOkQl4shPCKY0pVEpQLiFoILFhJTdGqNkyCOGPncauZU8hCPmZLuCg-T_LWNGelLvZ0yUIyQy_g5C7ZOj_ayjqD5VVMlT1lN1b8z4xfLONcrbmpYxCjQLkcKp2c1_OYG9Qh48nM0uNV1yCYVe9StIIk5-nM6hOBiQSuYNwr1FCsNGwCsQzMvMvBX6fLuEWp752bmIw4BVf6vTCSTlH5nmnMsKN0FUWGbkXO-ogbPo5WnVmHSea-CT_uifc0a5S-8BbMXmSElxmHAv63MVAzDvfwEVO5v7NVDCoeF-0eeCALYfDUnfO3sHJ4wCscnpDzWNOgd4wA96huyP-rtdct3uJi0IhNyCLQdev4X4urPyb6pgPGJAt8lbaTL2KLzEFMHJWzw75YISbVdR1j9DOjxNuf-85a9wsfACBsZOtZdIOE6GMuk7wxziTd5pI4061fl6o1LeIRYwkzBOL7t848-OfQ8Kp_wvoYb2uF7rJGjVB2LNrHOKICQM3afMTwe8vDEJMok9TA_xxoaJSSwTYojI7flfjAHMnG4E8fPxuLpLTyd1fC5_usJe18n7M0YMRpzpLvJAWIjD57pA3G5RdLCdCYcdxPI2x_VB9A7WTkZrBPEp7K88oPnf3gLy6sd5wyhGHCAAeIseC7uwSXnoMcZ2-8IMPDFXqGPX13MeUAwiUouXzx7wuNy3P_OkMbPII6Ql2AuYgUHN66i3UuArVsja7omU9RuZlw_hDjBgAaY9PsekpT4p4imMMssBMau1a60e1m7GHIT6gKsLHXKjYeFRfm4tODSChxbLHr9DR_eFUkX2Ky72R4w5EMhMLW9PRVyiK0lM7oJM58OfSJ-VzprzzspMsxwbVPvpEPhMJ0C2a3ruInSpDg71TioZhU9KYT2TSWzh0XgNQTYfmtxBL3q_w5uvGk1SmLqgWaK8ly_ktegNbVIeMGdOzECxXqBRE_4cep3EFGkeRfs5EC3uFts7u8QKq3AXnsogNzlJ6u60Rfhd3ul8kQvC0uas2qaSZ5bvQOkOanbGpG2fjPvjLsSeupbvKzg8-Xd62h4CMdL32MUxDTejVyPjZFtzkcd5kByM54xgRaywOkjF_IAIFfI0V6B1z2ImmoyH45AX6lRyeNrtnjNA4w_Ets9ESrZXK5KNa9VqaC5YxZ0euBEttLs5rPR2uYHRFkajgbF_K0dwOZZdZVXjvuHx9oYya36aQCck44jW6KO7MfLw4ZgT_48d1nTOXoGnTlzsSqagNGwURuVHm0YpmEqKh1XCA1DQEO_dPn77vKbCP0jXx1R15ECX2dMznZwVJ_hWjX5adpbsil5UXp2DGODHKYhv5FUcgJN45oQkyha2_-0O-RtFFUAx_lYrpzAVCzCZbEa5To07s0MQFNEtRWzXwe_cbbId1e--OJtoVgy0Ykl7t48pa4dwqoKYYyh8qo04CXRF0Uz5QbGNUGpUwXrRBrkX8W55Q9PMEbOJNwhBDe1XY_L0I2n_53zLxbSdUzRuvnRk78PGcpovBpVaPJcJO-oVyaEZ5P0F95CxAppKta_ZwJedL6ezwuqVg8zF-M-efa5mQJuRcmGMoqQf0qYhkbeOZeI9nbrJSD7LHFVeJngXQMzI8glBX4JuAeeV0dd42k1Iz0wMvfNNevTDEefzX9ooBsjIcc5EPZmMDFL0tHfPfXamCPKmgvrZRjsioJox7bigs21kvFSk40IBWdrgprMcIIpce-SWAo6EDEe9NwumoSjNXl2nEgicY0GHCqKEdlXWhNPDt1FBX0E3kR1BYh0lrgX95PD0FA6kOgT5dXCn6gLbn2oyiqD_JlXYcEeL0x8bfHLBktFDFn5tteXjOtihWFmn6Ix5h3SHYCvtfdB1dGVAgseofKrey2rp4duALBhmKCf4ui_N9QNlL47A2UBi6pSgE7jjHzy5cMrtoJhuwqdiW2v-CmZY5jq3TFMdOdwJePD491FdvpE9R0NrIln8pzg72OZ1UeWdNgQ3ql-xpjoLc20l2WGa85yFxe_wgU2ZiUivuTUJKUCuzG9mjb1GA_s8268iz5122iHkcaJGOHWaTQYTwhoEotex8EYEycWjmi8stgjs0ioKq8VZU4qPNtgQWt6GtS2jJNNXOD7eWNWUvj-oqgXDY_f289YWhfLJh4dPpMxrL6Xbur3U-haRTZg4u0wx5zAdJVe-VmyxzrEowSOpz38wl6KuPsqoYo_zfrSKaXMIokIbhyy2sqikzUzBPkvmn6jr4TRK6H3a9a0ZyDnUYlB6RDNYQw6XmGe6iHPzE4X9FM-q0RlhGVE8atOwK4uv3RwzAQ0FE6Y9Gvz6jxmy6ixNjogEjL6dUoT158lAbFxAorAxSfqnx3PwSiOynpML26Iz80lGVevtWh7j6BCSPEhPTHoIJO5YWzKDW-Nv5fZKW1S2b146G2VwTQv2u59EcXFdBLPbv2Am3laZdeMZ4lVQhjwQ4NHlysFyacqyODz0TIS-ztErAuumVJXYrQnBBGR4QF4fI0FBiw_rr12m2rHiDD0YUAWt9lUQUKxkMl-Mw2uh2Uc9de-rbYO5TUzA62a5860WpmbPSGWn3VSJkXgArJ03rU_jYOPNb3vkaYUS7Txn3N67FAA9NFcjBmgtTXWnd9-ZHUyotjBxfb4HocEksferaWhVQk3WkzrLJqzOZ3wLCuBRqYgEiVOE7NL0RXeRsSM1VyuAoieJbq2Sk1B_xi2qqTgv-aNPAfXdeuhDH4s4peW2fR3hI9FTAaXpsjGIysHszJJHEffkjQ5-JgUX4d-lIfbdiR0nQyn0A1e0YCuwibKIv80Vp1jr1dZda63G-NGqfS3-t5ssLdLw1gca8qQGa_4ZiHjDeK_l2oLH712n5mDM4qIg2sGelJYytFrc2P5qZhl8p__QIKgQ_6Lt0BNQQSd1C8NvwHXC5SMV47uxCQZu6yHj8voMW6tqq7sJz2RFCSGcINORePQ_1qiTJow-xdV5kblYDOPJAnb7wVYw_VNALTteooDY3hjWs5ZlObFB48qJ4NFqgM_x1bhVtdOo7bWHk47qDac2sGSQmzzjwV-ftz_1RAkQBQ4TxogEQdBQDAidEmCgej4GLjaocF9-IfHclUFu9g2-b3uL9Bs8Zf9kzPoBSBIH3kuevJ-ehlJ2L-d47Hexia6eGRzh57lWoMgZzKIU-d2auHoB9Ci9uUrCBpi0sqbUVfn3goMeqdmyh5qeSfpH1KoEVoy4_3DfVNKsuJxFUsq2a-V_cEL9jkOmRFtZBKSmKPRAwow985iHX4B-ffSoGqSRkf-eYvheEt6gtKYMJ2sre0hwrDmRqKKz7gqgSImGepP5oZ9JLnmv_XCe2IwgfFmJ8UFlIgs1KMM0PKKzhnCwynKKJLUb40b5lE_JftV9Ft-Jl_o-ztVGphTwAHh_yqRyWlgi2VXA_E11qEwuFK4T1-IULUk4HOoHDBt5AlR4Lwf_QLaTV8-rYIN0_XxF1ALNi74wcew5zoXnBqNYAi9mpHlXhpuxRio3iXI1R-_2SoeWfs2bVoTYCKvzG_Wxslorc70Q52Cui8IiQo0RIWXVJvqz_SGNjgu4azdNv9ZGxdjVqdjS00tnLGP0VI-c3zc4y0dHq30xb86uOzTt2gqrnBtaiWtE0kBNx3NpbrVAkVJnQQbD3QC17dUwwGEMpj2FX2OnUqdXBWok-vVE5uqNc_1zvzKEGHdkM0GiLwRY_RIFAYFOJsYTHfy1jQshj_TX11nMtkzLzAaNMM5_fNWpubZ_Wv9IrLIinnm8TOC_pKoz-6p-6DlYnztRqEqZR1CDXNqMSPpDrLk77JzABPUqAAaCPLCry6enCgPMG6jtu2DcmbOMdGN16Dpa0uJumB0z-xpaDOinHVrqej0o-pxliBPKxVLAdLs0EvQWCFM8IHt8p4fj9ufZRqfUqqyX6tzpD7xnsLxpjHowZ_UAS5GMDgwMGsC_hF-8bvfsSYipDNibnR_R_VQQhsZYPZb5k8dr-eYkjnAQVjXIvrHRyw5LDnRcCLPpJWHSyp7k9r-9UYGPi8MSjor4R81cCG-k8SZyzD2eM1ZVQqHndBpPuuWlop0gh1bWh9F9OM4fcIWxyBKm_rxxfFUQh3Qw_ZEPOgjNXsisGyYGT5dpw5Qi8-qSVNHyWIYl-HVbfhxxkEpFVyiCC7X79fMZvUeTn2d_HKST0FFrogBH0YyjT6pcwRSUnM3uQVJYBLD7mwDw-TO28KeUE5Bi2_7WkeOHTZ_d_se4M8D47GQA37-WrMje29sZ12Fe5kmPY0rmN61G_dOZarsYxifFAeedvmmOo30Q3xnWtx5qJ8CYHRRJpv6RvSqDcf-RWii0F53yd8eZSIqxXZ9q1FsNABpqV0GxtMc5dy59W01nn14CeLcxDFTJ-P2lfa_CysODLEke_RAfCLFnlQ4AdQqbkI5GPw8M75HZFt4NjzRjqXuulHNQtyHQNU0YD_YWvxdYyWpzuB7ZY8v64TWIBIitra2SoeLsc5ittSc8tbRE3fkNXd11hPRTk5rJNLNUXpUQZJLUeiFJPBQqupDNrUwXR5PFsYBSA1ayzvnOJU_O9QQmY2RIyj1UZ9rbDMtoGxoi_4ClZ83dfE1p3oYg-7y-qoW4X-mWcujicHmU0tRcAsSOnDIAryXkIfkS_LxASB9IdgTuZXWD80pC4Y_XpR3uqNTYpHHb9vuf2F8iR0pGlNL48PQuuKtMLJMcvsmQRZBCEv2Y8TL3YkQc0fcFh03IHKMeT4zaCT_Rbrtl8LQbNyTP65yTrbAGfrvMXWvfImFT3viJMiHxPbvgRTK7Q-Hiy7NY_Iq5Bmj-WN9SERQILZkVkK3WXeM8YtKC-FuQRYz2KaVda4pQdcPVLq1z21jHlX-VL1Hs1s0cTNYjdMzS81UpuPJ4gKu3sJH5mIeVBBl1VCXC7k99UN95_Nm2H5Il4GytXTMZt1pI0ge4S6g_dGEziLntj2Po5sNBoVQxSZKtQxDOtKW7moKrzl_jaQs-tUQo2rB45-0OgyHzhuCj6lRl82We3lZgkYBUYi_1WGyfK8z94EmjL7CnejI23ohbSWUCNEkERmwAH1geQRM_-KVOfDKnQyS-i3JFLZ6NO3GN62rnnYlFINSVbS21gULNvvBIDj2-SkYoSBBsLzoA0Th_HHJ1aotP0shqj7-z2Dynb3yI5OTaQYlKc2_6WVx7Jp6AfPfJ0rKKv4VHVWqnf1mfUXmS4WuOfumdkjS20KrT7SlE8l1eljlhfgwaDuAabgH1LG2IU2QBG7apYM5jCgZWLpGW6N9p5V-r5SGwY2GPsyU31213A58UT9WWL_uDQfYA6ZM8-aHgp4kWYVDmkXl-lyA4CVnzTFJY_2ITsv99TTkkqO6iZMJ6vGNmQ34MW3e6RIS7GmscgbGXxTTUV2ai9sI3Vexkw7Y-Fv-vXvi9mNSfnT3SuSRfJk_vZi1C6qEWSPXNpnKvFf3WyefXfLjYmvkBj59pu5NfNQzDfRpKFa1Ijhs7t6Fc3lPviXaQl-y7bhU6oQ6L8aMEbt5UItjQngsmGWjaMxdt-TVwmuFVLpfN5GdJOPM-05rQL0oHIqx_9T--M-uUac8LgJOYTREvIgkvujW0fQE-6ZZPUTv49WGLdZWSNBdJ4E9BoT_tjIvy9OPFy53at85HW8pOFMMEpRLUxI_Iory6RWaVLfT07ILZaKBnA2ehIGq9R4VwbTKjeEH-VEoRsklvHne7gRuBM98XXXvpmeWU0-baSi_Nzaujm_RI6q5hHoCnFSMBarbg55J8Owqxxqtct4q9s8gVGO9C19GCfD9ZFeLTBi7KLLy1JTIIPL2znnwnGdbDSzObdD0_u5TYKffrjhBDnHj5d58fujHAfFOHEK20uTDGvaV0vK1UOF2zfBNAvE-f-wnBOwfRCcPk1RgNQSBurlhaRlMTI6io2mfq_gUqUBbu5KdyeUDPJckETt-urb48RgY-ZGvUs7VoUvjB_CwkyTkplrBivzskgnp1EyCuzCTJjWbpXCqU6qiOA1XBBN7if1YCqro8b8KDmZ5i_dKYL5dPfRa2uB8t96domsIA3htfh5sA2aK304Kz4AyjNySzqIl0zOLLMfPkxjt5cPL-08vcT6P-JERl-1HeMaUzivaKJf7IZhbf4e8fkLOYw-addD1yJWiKMkWBFUxY6TZ_dIGnApG5_wz_SlH4bbO_lKVGxb9oL1BRKlkQRWT6sCHahjmgytec5mm0JMe25BDB2ggFto4sYAURX4NITX98rYMJjN2LpxFV9eBLFr5l26NW2xQh3VWb5k-oK59siC-itATdM91-IbhtO-_UdJeFlJt4W-T0QujvVUV_ytoUvteh-vqVjFwNjRIDmPaT6-HBKGefkDDP_pP4_hbagNhQWp3x5BwT-VPX1py6qalk28oFJmPW4CoX2MCoH16jnGj-hf_BcL_U7J1XEdrd2B2K3wCGe7PWUBGaMxuc_XZZYDe-fP8IXI2pVumV9meBiclJZRbPjp7e0VpzU8V-t2pbRFyd023SgbpsXTTiIsHpiPWe5PzrZ4JSYsCsx82Q8UW1_fVQWJccyjfqD6WRXWS2NtK1l3dIMnOsOhlbJ_Vfom2NQAuwayxhVqPvzsSFyAwjG-6UxAPf7uK9RXQjWjSrGIxg2Cly31Luu4NAVGLz5VyG2qzBz3cDigPMCuXxsLcatsQA5JUigOOnz8Jw94zUFXgrpgG1gQZLGosDqoMLKuEZnE-69XHIq4JiZwhCTiDC39l1vnNMMg2d2egrqqZgLHqJ7JrXAtVzzdh7mQ29dJ7A7vKuvbx5Jk8vidQqohGjBrv1VtbmnCl9DvDA51OHvdvxNI8_Z-NahV0ZmMNm_4dC1NAEaFUKnw0VrC9pGyYdK9-dGyJQxxaLbcqA3uFTwSefKYXHRiiCLZeEoIhkk3Cky0genOy_DaZxF7PIhWuasJHLol3rHmxJynoj6sHH3qoe2J4q50hk9nLMZLRX8-Fc8jwy-AQOhVKvDvbMfn_42zWEJQNqFLPRATL7NSsBmZ-fA5BckkjR87ePYrWqIf5z5WNyrNKbuzKoulmocOmQve-VGDq6ETK4dcv9h1FjsqZycwzRsHjV6xKg8pGQw0C0D-C8T-yVVlgi_Jk7Mdx8501f6Zlw1d7x7H_PSmRuXaBfxaWzL6wmmvRzPWimUd6lS7fKGqwnGioDj1GUiIMshvr86yEwakwhHAj6mHZcESWA1k4ujYTdi-rC0dv1fMV3cikwTuJXvR6NoPL1PVdPeZK7LxF5kzoDUPPr3XD3eNSFU567vWW7xGWS6lxzceudPplCBzh1PJHcQllwfGmMTHo0xxEelNL9I5UVLihipDCoE22kLRSgaB0tColHy4NZii0yni2jXMF41m3nIfG3Y1nuhJS_UbUvIzVZsP67xw2MZ_Jvj4R24f29MQUZseb6hqd_EQoIER0KnbamPFeVZFIcvIxlxrKnzqp1Y4SvlOL9Wn43em8uDCmn8etcZSIsYibpVxQgZwnzKKZzAU8iIPmdgkTv0GBat0nqkHWTNaIBGCEXYEtCNDPuPWTtENu3DizbA0TU_DtvX9OBTCUWdpCdVUtgQCSLgtJnBwpojWJCpcprTWhtZJdv2yyzWvmyFATyL8demT-kbioI6ElDvywDWdh0kKGbe55vkvYABRgqUExyUyOHi9FfODFQ68PLJ5jN8KyEpVKhg9P72RfBVLczKA-cRL6U2PxyCc9V3_gN0j1q5GfxD8bF09qt7usztUGo617Iai3lm4d7ylPP6H3_3pPKilyOyjjOw7-f0YW7EPbAmZS42G69S5Co_81YLdgl5e8M5OvKBo1z5lsa--caUpqVvdhefgJpWOMGtXKoC8Q95EuG3zjYusxuA7ZeUl-zlVaO067LiWnFiAg4NFLqsQRiqoOiOXUgB8qQYIMw-zT7wA6M1gsSZe-YjZLxc1FhoeM42qzAoPfUebGs2AUerCUt1oF3_KTMiGZfhIglLQPzi3jsE_3BH9dikjb6nNsM8ooxoehakoOlDAyLDnUIX_Tphf0FWQCYYjMt6zH39pxplzhbDjtr6xh6CcU1Res4QwmFoAcQQFPLIJtZ4R6QlSl-KfQb4gguonjV7Snap0P1mwAb5C6zWhS_eJL1JSjY3kttAL0Lpckc0R9c7xd6lo3I_hv4smhBBjwpTSP6M0H9p2IG1H3keFxFO9iAIBzzPzjjafQg4XO5-rI_ZsbgbMF0GaoArQ5hzjq7y-NXJEPpvaH1n4iaIIMnu9U9hVxOoaz2ywgfZr-b0C_ZQA-m5_hsEYXrXxhr4iUn1mePQ3atsKNNffyIM7EQlrjSy78tH1pYp-kyct-IfULYCdsjX6QgcGCToJyrRCfEMisohmqYk_mt2I5OOlE7u7hOi10i-l_-PXpdX_BrEND3XI8WOHSc14r6LQ82HJVsGmkywwnrAaF97XVRvqTHFJQAIWZZOQrlF2VK4NFT-gISwh39nmHGzRXexhJXplTwT3JGhVCuH_1adQCuDwVMuuQ1u-snvY-HzwCfXnDGVhCbTpvmIvSsNKA9hq8ixGfwb6jriAAuFxFzvWjoDl-b2G6BN3W9rEvzr7putQ-Wtza-bvJiEIRI4fiKwiC61W37UkUbPNFbUTa6c-TzFMoQj9DuW0yJQf3th7iHAqnI12nH2OhxG1aSEFRXqLvFOZrs99kzhxaVlWruVsNuhVuauxAlfWy67iIOY554gSJl8Rew2mckQFmcAsWxBQ4tDtAr07kqvDDzqzCUzjzAf8BnKutSxYIVOS3386LNYKWeHkxGRsBtfLp1ieBdpJVy1mF0etW6_f2cPI-GqYsj21CVrqIcCU3OZ5RXpb3SoN_Y8h8106MD4km1DPsSQtOr1kxGGn7rymKXGj-SVwYq6VjOFglhQXmgWVSt2sAMib3zWeYSK4nbZQVX_KBJmJOSNg-dP3DV2WT8PLpLU_Z6jLbqnplklKNE0b0LoXl2JVnHR8Qg8ClSeSlS8KolQlA4VG1ZkLV2zpvtSkKOOsholapNjYlhGZoCnDBdyUdu-7aXlKGJ0OR3X8RwxyCV0mt1xzPgyeNqBY_FKDT9r5YMqeGU8D-d64ty3Qqhi3am1OusYAtPiE1LoqnWqDjlhiZ46F07CDw4j5OK9e2yqaqvRsP-xz6RJNwHIfYAhV3xYqF3pcKkS9Ou-Pgq2loNodH5iosURMxxOr73y8xkwi1e7CD4ivBxTtGlNhv3yckM6Lk2G8gSS7lPNPa2JCsSHvX4lnPpUifHCZryg4YjFYTFMqDGZjHXbYXWZONBzElXqSh0YiGeNGykSx2ABXX_zDbIqwa9k3VS6dWzszvLQ8oGdT8biX2XQGKxnC28WjgKkmneHL0HwVvIkO-4IPiu6yZbnnNA7c_VkLaH6trSZX6_BTcZnwicDxtXUtDMN_N6_WyCBf-rFtQ7MM57esIlETH4Tz7OvV0as9N3gJgxJrQIgPz0cnkUjZXmvod-TanjNLY6O8IXtfUGNDeCrUwdOe2v607bGDpOtNvAKWiHv3oV_kFLQ4sw8dR5lgDm8MdAZ4cK5RQIpi8htjp61ydcdMP0oBgbxQ_3WB4FWceO9P7qZLrJFFjGnd71LwRbLTl8utbFjlzPXhjVVm1jD2An-Jal1RkKFiSBYkm3Je11xXB96NxCjjrQYqMCHPJ6QRnnya65jnZVUSgRmqiC2SQpoYlOwvY_7dcrhmpw4M64o5ofz5Q6t3A2sHmrrv4g6PZQHQ1gRBlhIWvpBu-3XQZvFsgpoR80-4ozj80zjeUVYmba8QnGYwdc6Q9-Ko-w64RFZYYF4-rOrDPxrIj5f_zW-iJSF8bXbRb5miz7bohyTrm5i4yUKwESqBJ5Z43kSt_hqJdWCp8oEndnPn6oZ69XZzv66FQqTCQTIAxYRnawG2h27Bn5m5H_bopqRG0A2DYW8F2BLPLM5a2qkvuuUL6mkXnl1nK47CA82sdX9peJptNLc6Rxrq57QmslbG0evzy-VIChxfKP1CXa80mpG96-Dj1tBmmSXNv9nOIbXfm35cgcD2HbAfY_QkjMZr0qfSuUw8lDVHtRIBI4VJEVCAX-sAUr1qkweNsDmaj29wNmW1RN-8QF_EebMi2ZKwlPjwA3vUsKAKBZIpiBP97T4IRaMK55eHBDJeTMzfcA2CVcMcMKFSlpdqadMVAdlgsjhMuBP_dzZ5SMH6MiQ4hu0W4kE9SpUWHNOt0UhdpGE2fPz3k6yhkJOWg1RHvYiji44YNI8dmlpvWo6SCbyrHmSxHCdOczVWhMf_5XH23UTF5Lxme0NNMcR6qzUr1W10SxNPdOE4h4AjyWGDTpX2ucWCoF5H7eA1Zno16HbzF1bQ_f1eempRDKkU4g7hmoGQY5k57Bo7OtZsp0VYLKJ5UygJbuc-KFtVWldVJwYfhOlZQ45Xtrg9GrN2e1gaZ6tPseY-2SEvsOrljvc9wUuLQ3TN7IZPjtUKEp3CXR7bKczextGG2lNQU9GhrNwzz8ON60lvWxAM3e30QdNUxNCHtf6DwvfUdLJ0xAPwUM83UerBXQq8vPHfwDTLv4frEG2EX5emgnWFupZ9IoiNYcerHZ3HN5K0FOimTMRUcq6hA6yHVTs6mEMLdPF2y4WHY6YuLLs1Lj-N99X0liYmDvkZC_JCcRZ29WYLU-lGr5w32ct0_4fk6lgu8qbzHn03EOIxVNgs5Da7oHZzsCGdZx4JrLKEzEjjAGReB-9C_t2KUHx6jiselgs0Gn9UNt5K1L2Fm1oHbGTg054wLOEiBywXUNQ1qRVxsb41SCdwoMu3JAOoSWs747gJuEK_A7mwc7J8Moneklfd0-J_aokDLAxpstt0ySqwMmVJUNPZQlgSRajNZnVm5NWtOC5YcQXDsSj0c7MpKXcFtJToQ0Fp_w3Fe_qkiACyZFecuAmHaJc-mhqcmvz7Ea994f9m2i4WlePauDuAg7XtAjGpJwwDvmt_dQgNehAier-Z3LhANub1lBAg_LIaipTjLYmuFyoHrz6-BYnbzv_W9m3xNbp0wxMcQtieVkIlNP0GdiFNKc4vI_afxgcKXJ56jLYghkFEjTj8z5wfwrtZdsARiqSAsxZF9iDaN8d7EHXp4IKBBgb6-R7HmjDGWyailC7R-T7IKLwuJIM1GMqIdek7I9OqyFgP6BgMMm29nx9Yn8Lxpa1ms-BaiS9Fq1VNBbtN9U4G28KYAOJIVDIpdcCvWqQP9r8JhD0tOzHokVg1oLMd3IeGd7hsG6xWCojoPid6pkpAj9xyCDa-12XCE4Yv6G-J6QqpqmTX5SiYbZdQ7OyWekFYIlMCAjUvNX-0tqvlZRT-wKzYAm6KKe848aQ2l72l_3W0IaZn9R2kIEQYYWvS6V81YBUR0vSEQK3CgW_b5nmBLJdNEXYkz68maIspISC8JvgCNiTBZcsMgB8hv7fSAMoM82o_cXErQ3KBdaJ_0SDB1YWXVjHF9bgSVAkhM-rt-WfLL3In6WUG-CRbyiRp0rZBGNm4a5bc_dz_KaOAsX_BMMuGJ4Lt8iPkAA0z_HrR3zi774H3ojHkeFTlzvMoGnyne9sGAlu2tQ7EQ2cWY_a0RIC9lLDqlI66h5KyHcinW1nHrAvZRtkowxHz13KhzcWamdpnpp9vLRmYZbHdA6_aIoNI1GepTmmAUcCwXLCHFddNdKUl23dxFRDaUAWZcaww2rs-wkD8mKWIHG__1wLmr4h3npNyM0sRXEIJbPYxGOUijYzC08xASIaLpvaPNBc_04EUvvZUkFTdVBjypgx-smUHG6SThf4SeSKkQEEdP36O8CEMInH4_OYi-fmmRK6ZojQhbnmXOzs-ySqV5ngDucyuTs25fF6Jmil4IWIZ1FRRXSb509aExPfwS3ABtvcFtCzCeTRjD1EmXCi0D2PQv1M1yt6NZZjpM_8X6YhFOvYwFEhhE8kFxF0xp5TUdTDm9eYkYs4Fo8WRYQmfdnBaeAijgopNgLmFLlNkIw6T455JU2hpxxQ9RKpmmqWiKrOT_fUudxGIWHXAaVFW8Yh2mVVdSN-w-GWmn_gdkH0Tiv1vZ5Rt6Y3pB8TNYhk76mfQmCd_WiQNDD5GjF47Jjqmzdtvka1l5JmjwRNi4y3oSN3pH7MMYLUO_WqiDRIdPNLSy3Z6ovT_1RKd5zNaUo8w0kraPRnwTD2-lekUSOB57i4Z4uCFAiduW8Pd3OYiP_nmK-sduGofNrRqlJziiTiJ7ocu-8HBvsCCiUK6hWDAZ80PJwnkOf4m4B_akUq_aGM-8urDvWuc797TR4URfYNmykJdR7LkT6RAsDTYcj0PkltGavUmc7VfnObN_iOeytnYt1e4FTkWAUDyJ9b3w2COUARXVw-xIflFWz2S5qYcZUoOQzpg-HR7M_StDgCMNS5wQhzWbhzHxIpjxFpwNwxnS2rGqq_JVxA0x8HzXSroGe_mbjqlSEUEWF8y_P5ztXLC7puxdhDtO_SiWSfhnV6jRZPAtVUpo1CDOWOQaS2r0Rt5x0x2-gCxMeNwmQFuH9SOSBoThTTegbHeghi_vBERTCsO7VbJwZM_7pbgsvBfSKqBwXe0nq-c-LFwt55hF5M8BEZPLyubVdP__UcHSxrLzZXjc8aG-hO9eyGtSfLhb4krL_jjHEkqcE24qw-FakiNQQjeI1DlVPGdiuN_VTOITvcfZUcihpljplKhdC6nySZW5drEOodfDfNehvNiDT6Hq54jwX4YLAS8TLRh2attHJkAS5FlgbNajnU9p0Okse7otbsFtLel54mmMF7Djl-HPnHxUZj-ZWUqWzY-TjDeQY-Y0DX-27rBRW8S0Fx_PwwSil3luXWtae7UAaM9p2o0ppM20VgztJ3AKdvZbOah8dJC1m-04e7gypUYAekMWsZd1FGiDY-8_Lk4DhuJS5dnNl0nIKN0-WtP9AoeIrG6q7x0hdGVTlw9HI__AGmrbHi7MSebfxZXBHBxj5ddwpZlBIvP3B5d5fu4Lyqoa8O4YetUz04xpjyfC0mAmFS7KrZ1ZZp61ccNeBdnk5HDs0ltovm8snXG0BPXPbgbvcOHVjRMkhBsvidzeTkJ4S7lmP6KmYVlNtVs4Dko_Sp8APZDrIKS50MBrJGrmtK82rFClQaR0PBjIpVVwa6KGAY25gM78FrNRKKtpau7Rsl2nPdpXzyLo88cW2vKZQ6WTcokMOxjR-o6jjpS7HetZq3fJaIfUwC95MXw8oSPFiNGlG_i3Lx7BFJvy_ojGYcw6ZY_oqjcdn8zb1AXZC3J2FfEKiwUc-1cYSTb0Q-LpRC6_zaM0OwwrCGZ0lUWfCTyGFlXiivyKUTen3_09WvWNEK_PqG-9YDVWoK-Sf5RWeyCsOoCiKMZ1iUauGL4SdwsD8oqzbQmj4qo0VYW1usSeVcskG21K_n0laylluOob4mfiA0AA057l0lkyzYE7U807ofUEIhPw-IBdKrcYY4HclTCz6qMAHL3PIxrVQhSwoEsGgqxWp_1Awv3iTNtWAWkvT--6ZMjV_rCwpHXlBQ3MACMvGXcq5PlQDQa-FwDhg7-TSo7PWHaU-OQioTxFPW4lpHjF7aMuBL7DQlz8mDp_SkxzPo_aCBsY8CL1xwm6cmWv_pVNaNDxrGyg882GbUDGtI_6WFRqtgehn_gEzJmsbYG7xpr637lUPmLRH9-dMZUdNWd49gxCKle7vv0wcGnXsJt2ijxOoJzYIgfKxmS1jm5jpNKCs68dl4cF9xtCs7Lg9rCKFsKPj7Mt4s1VncpxYeFIrGUIYox-vY_ocrSz0cw7WzQ-grsptMP-NN4CwFRfRibHTMrYYLW5ST3mlc4AEc6xb1rg0Q6hWweboo9dNyQEImHSBfL-RyCYa877z2fTdXynZhoWCIUgvGAl8SY-Msvm_OBn7vppnxVzu-Is1-yStZjRBrScjOVhe3f60KkcBH6x9v6NxoiOT106mtoQATrNiEwKNMM8KbIF81bThWlILeqL7aKHxTrcGZFUeg5lvIygGZ95ytunuRXP4nPRVOAFPeYs-swo97krq8jmVSS6CRYRAETINMktzD6QNcchzkXSywYKzMyueRUkoXvNhojlSmU8LXgNZDWnjHK-lkgTAey3iOsijyRDgsGxNebuS2ffXVmZNKZAiRDXQnbhu31AaZNS3l0ptNfQHxwbnFfRMTw-CxUbV4NmK9GL9KoxCb8lSgfJ-yE_cdTMqb9ykNQPKUrtaKrkR_dMxnToMLo3fjc9pAe2wnRCRIniQDjEhTcHjLo80RJNipSgd-DDJzEW9n78g30H0EpKAnEGgqbyS1_Y9D9bTPg6WDicwbU2_ZiSJYGu4u73kv-L74uk5zv1h8UK4BcN8EYPAt9mcCT_i_VRAFjZ6jN1HdPS2kQCuu0-j4QgeW2quL1jF3Bxdj7_4Ww-HYHC70myDisScwQKloOTkWCOkfQl4tAkTraeGUuI3yGbysYg7KfqJfE96gw2roGaueaQ5AFmLSe8dQrvCMcIX7gIFtUnh85E3oA99qnJi75sFtxYCMfHcHNOo1dS9H1F7B6nvPibKklnFTdLZbcfB0Q9Hs7CLkLPKOz40HSH4IOJvcE0yAf2S64m9CvI55-_6dSvJsEtNdFtRzyOHn9MRi-EEtXDoE3DrCyTuiQphEbpVF5kF4miWKl8VhL3JZ4UVJTJxpiPi_2urLqo_KqmVyWvM201Xal8gLOFvUt9FjyufHwotcIHtUKb4-Qek0fXlWym8vN4TBL4bPoyjcoAZWgUcRcsXgsh-5ZyYOGEYJY7gnAalEe0w2aYLnmX8u8GXkgD7GF68Jn3OdvtjItI2_kxw3d7HWGwWJoEA57xO0vZCs-N8-SGF34FuO_4c8bQvTxD3BI9mPHUfvn3qACeQqe6L5erWEWSUnZZHZyTFG6MN1LEPBuwhGJGm_5BQ14Ksln1njRqsNv1rUrpMv-czVt6pWm47qE-m7993BLI9-EIxJZ-QUi3vVDjCpOMZ1RcMisd4jEM8ka159UUO_sb0i0e7WhL4c\",\"summary\":[]}"},{"type":"text","text":"[[reply_to_current]] actualizo el estado real del intento bloqueado y separo lo hecho de lo pendiente. El re-chequeo profundo **no llegó a ejecutarse**: el gateway lo rechazó por **approval-timeout** para este comando:\n\n`openclaw security audit --deep`\n\nO sea, ese paso **no hizo cambios**; simplemente venció la ventana de aprobación. En este chat de Telegram no quedaron habilitadas las approvals para ese exec, por eso se cayó.\n\nY te corrijo algo importante: lo que **sí** alcancé a cambiar fue la limpieza de la skill local **Asana** para que no lea credenciales desde variables de entorno; pero los cambios **host-side de OpenClaw** que quería cerrar después de la auditoría profunda **quedaron pendientes**, no verificados.\n\nSi querés seguir, hay 3 caminos:\n1. Corrés vos en terminal `openclaw security audit --deep` y me pegás la salida \n2. Lo retomamos desde Web UI/terminal con approvals habilitados \n3. Te preparo el diff/manual exacto de los cambios pendientes para aplicarlos sin improvisar","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b756c4bd6481908910c29caed0eadb\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":81164,"output":2784,"cacheRead":0,"cacheWrite":0,"totalTokens":83948,"cost":{"input":0.20291,"output":0.04176,"cacheRead":0,"cacheWrite":0,"total":0.24467}},"stopReason":"stop","timestamp":1773622931539}} {"type":"message","id":"9816c864","parentId":"be60c8be","timestamp":"2026-03-16T01:03:23.320Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4003\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 01:03 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY?"}],"timestamp":1773623003294}} {"type":"message","id":"cea6007f","parentId":"9816c864","timestamp":"2026-03-16T01:03:40.257Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Evaluating instructions and context**\n\nI’m wondering if I need to re-read something before I reply since the instructions say to do so. But, if I've read it before, maybe it isn't necessary? Still, to play it safe, I might read it for my skill. I’ve noticed in the previous messages, I may have over-corrected myself. Now, I need to be clear and concise for the user. Checking the current actual state shows that the config has indeed changed and commands are blocked.\n\n**Clarifying command issues**\n\nI’m looking at the async message regarding the exec denied error. It specifically refers to one command, `openclaw security audit --deep`, which timed out but doesn't affect the config.patch from the gateway tool. I see that my previous note about pending host-side changes was a bit misleading. I should clarify the exact state. To verify the current files and config, I could use gateway config.get or even memory_search to track what happened last. That seems like a solid plan!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b756df21208190ab7893438dc3c4f9\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1brIQlaDdN4zIMAEumMQnhiHiaQRBZAaj3n8RarQHk2o0y1BuW6gz96iYon_Y_--8McBvAWTW5IFW5MFc82oH4R8TxSUVIaDl5PR9vRmAA1HNzu0ESDrLumoE2YW7JVnuONct6c9rlhvAnxFNfwrfZmROu165a2Ta3ka4JIG2Gd1x_TIh1NPqmUgEQebGLHLAHPJFHmAIfkPbKZ28xVOR00FmxCiWRPLqNoe8SR2opaCxxTBqc5Lw2QIvMOe68CHk2y1bFTF23e22ie7OseEmyIVw6nwlJqmnqBaFsQ4bD9Oos2M_BJg8Tjdf_NFNUzbTNp7w5UPjythT-8nUOeXjPKe8_LCKKJvMF-aL3hVAhAlhTkosh_vG7T7Td_0CkAEKpmhNYJtxR4VXAFaXPBGx9ZJZFLyqbOTIZDBd1f_ou0rkC9WU9h3p_96C5Pxilci5if3EpywxInRIzo1IQtvoMGTnn6wjLFB5FXhyAyms-mYj5ZfV_15HSUuw9mT7K4vXSNIgyeXyKmJZKy9u_aq91okFbO4sChShKUp-xjK8NZrsENtwkB919XqeeyzkerWtYEjGVGOwAXpAAnnE_AbjKbnaMXHHIqn5YtBp9bEJFGBak7W9qiAbibj8cXX6r0KCWtULGBrxzw7bRM6To2xBZC0kLgHzH197WvJFz9SwrpxQSFaGrMm7ZhNhEyHuQHTSCfmkaNyWBJn7c4tNAJEYoK4aHdYm1oq6dE0HQH-Fd0VHR2qMV8NSzi96qS7V5oPUisT9OBejlsxo_dhpXMHy1gMPbTcoTIuhwSEB1Qw8OgtD7uzYXRz5R2XHOU0wXHMmwAeBrbfCfkgYRWVg28YQ2G1gqIEssI9wMOjJnoJ0fzOzNVcadnXhSinnkslmm_r7U8u6SBj3bgF8nwLjkIPygV2HFkBfbYvw30idaiUPlXe2rsimgH4fOA9OAYxeF77c4iq4Iqm11HH4wKsSIFcmhMwpVc_BYs9EZabSVfdUtQD2scNM_Zdd3Ymrtjp7LZ3rMu7whZvgL5gQcYKLb1YgeyugEFC777yocE17tYTrQW9FLvrCmq5LixqN80j9VxHcp3bTAV3oAzXb5Aj_kNGuC2JrboSIdfZaU9LIM3FJCNKwPgSfQ3FJCg-qSynMwat1Lv6Oeyz1vaImzsHChlzFbdtnRdL4z15CJ1iodjtkhlmWdSNVv_qgUJrOSmj_Aigmb0W-52gN7t8MkJlop5ZbDVNhyAYWk_-sw8ymg71vcMrDJtRXsjfe-Pibv9jpShjiH7x_WZ5_cpNL6rpYLNe5cyInsetsSfUGGr2lIlSNO6XKs7i40YXzM5IoNU6XRI_bnSkf0YB435QQCDL_FOGNEUMSE5r1mJ1aq0mxUkvPJt9JrAQnPsBPQ70M2ulisC4I2Cv0iGJdouPQw6YDkG9_gJGZM7c7t-JE4VX4YqO9TRyuzv8cTyV3ZqnD9axzISIDxCL3dLvYD1_V8K_ovWW9bRgEhNPCslR-Z-1O4npzqpT1xnq6gIWRo-Nwu7tCNG9iQWM8oFCVaYOiuYVX1ODNvUBg1fl42N-9BeeK1Cthsu65VtCBcgFhzH-y6Svm9o_eGb7zEXDrSXOt3mDsfI41lXgkvSa1HKLbxQCBKip4al8zdt-N_nrZRTVg5Z-Q_9689XJftV3mx40HslcPLBPghcVg4POFkkjCc4XqWEgh-dZrSiaLSf6CrQHAq6Vop7PcTy36IAJbkm3Dv75WFoLy2D7ut3X9GWvql2eBZroMwgUXsnpEPuu305faGERjLK2ffZUz7bBvxTi7N07Yx_fp_Q4VNADN1GX9Sb9YOXOeqvf4vWT8w0eaMqp-1k6aZsBYK5bzY0s3L_dY47qnEU_Wp8r2uwTfb8OeLrpnNvb6UmosQuVPS3ncNSu0N9MyrXrOzHsz6o0mYVEek1j-oGjjQLam_2rq5wjX1DfVrn7vKLBKcSHlP8a8LIrAJbYDfrzgVjFikKcMSPBvvVD_fGFT3eHSLBnFW0JjvHJ8ie5YGoBq5shECRRM9OfA4GON-Lmr-KurNF1i9VGMOpVxJTkXuQsXtcwqMpS328ZnKvUcQ1Qtc56zEKeRk4UkuB0O-8OdAr1loKMUAWZaAq4zz8xC4nFSlX3xeog2F8HdrCXwsF4AMGR-gQS6lVu92vZlmWOHDmsmSa9DVaW3xNIUYj2Tl6zK5qOCdiIChE9jJQ24h83t1bFJQl6cC6-wjfvUh_ZdFYalAXU3nrOwgDVmy-aKd3VcU2Iex3t3ghabTgmzL8x35DaXuV6UgLYBMsImN61UVwJTdfBgzLpTa90oPcCr2q8ucX9H5DeqrHztTqgRnKz2NxiG9XgFTNdGB1KeiDkvwqpaPg-_8Lt3q8KAAAtqIqo7Ec7LEeufDLzm3pKW8NjbCHXlfaIz_vl0Bzx5HZYXzt25fCm_eQeGM5A1y13Qi9SapxPA5Nu_n4VQEZU9-jVjdeKeueFN8VnbTkbwPR8VfZXYKDhWewVhqrx9UR1Zy-iTHTBG1WO20zEjLYFPJSYSoEvCgK8RmwRi12D-PWXMhzNI_T6-XEOKayT4JgQlyA43Rn-_RVtxrUTCOEHJQm2YIg3v89bcFAD0K4DRWrO42Qz3ySn8MWuGeYowil-47C2ZIiNU2e0qvbI-rGJ0F7uHg4alfyC-TUpUeBsfUb2e0NJKVpj9psbLGJguG_NQgO5EOk9MfU3Y6ScHSRv5Nxl-D8h_RFLFXK1YOHCtRsBuZT27vK5NvJOKhfVaz9xrz3oft9FlcQRHZD6qpzrCY7ZRs78IIkDg-hanrqgRinmIZuoTCJN3XwIwaqZnWXpgj4naSlzdBqg6k5ExOPKV-UcYY0NxvuXwotfnrMe7dXrygSTebZXKmPvSDhqxb6p32vrxwmwl5c8rtWstKfOvqQBEy4euk_o5DWyMgco61AIBt4Y1K3Cl2u8F1r3SvN70-GalqaxHElxRlwvMABdc_C4c7VF5GdYFULcQJVtkMeJIiVazTBR3vmRV5CkQtJ_CaQC6yMyKsWRtp9Xn70qJjrViAh09Iley4aq2xILMujOT2_eO7EqpBWXbMRHFe6kjY3hzsqwdA_tNBgx6xRvL70yf3_W0sTubFYIw9ichQrFd82BSEtWEhjmDx-d1MThCy0RgQyOCJ-FtRYNFeCLzQ4t5iGNzXtpMT_vDxMDFv7LB0bNcsAeuJpYEblct2V6SuaygXrekRkpAarUXqKma18u2toMVKD1Gw2Z0avcpBSftE87uM6WJd7qe5hqWL1brFkK1wnRJLHDEDxXJPzzfJBriJNt6P2kNK8vgJ5LCQas8TfaOrVKQ_9pOsdGgcqLg9g6YHD3FQjQvCgEnjaaz8HwDP82mK-dVipz2um0uR90IQCPT2kaNN06XCPU8XjqhP_iqMJLGrbIGVEVGL0tPkUgaYXzafiGcrJKb2s3xhn5L5vpMdRQxGqQpAZyU_P3kbRN9RiyW-jisidES24ZPRgfp-EOAy8xYRbsUDq5Ophlg32V-fisCn5ZeDUbTr9_kEHnEu8sTxbooaz8GaO8v4m_rzXTgT6mVQBB0FUTI4ARx6IRiUrgVer0_byUPh1cQuvMFMgCn3tIhUei1sQmgbUrLfkYSif4W6Dsg54ZBoWoT5a0th14DASlUCQEX0EM0ZTUXpPezqrfn23TuBLPTc_CUN6TDGROaG18evgy9kcMAROycXM9Ze0wZOvywskjHwcJp3QvB-ba7XXQIwiLr6WUS8pE9NpZlGNeSGrZPcUtbJn1PvCDiu2PvZNoO7ycLV4mZY0cUCZuNruEixf09DktPmBSPjFv09EZyztjbaEWfvUTHlwWqGjOeb3IWosPcSVXETCHGxw4S4FAjYULFFYHpf14Hfp5R5wPOgLQ3Xx31Uzt-qzQretcePUuzyeDUpOS8RJ-G5QZoXmoOPrCdqQtfhY5jKnDq2Or7ywpbh6rUVtRZjhkCIpv7nEkZ9Dxq4YiSWjtA3bYCiJx-fajyNj1MXiBkTtOBgTgl3KjTUmhX3_TafXzt5yDquzRPoHSnqnh8AFbQ5uHEkuXqyHU5E0t6boQqToFVA8rwO_EfrXha7Ms8I7gvvw8g-NN31LlVnA489sVVfyJxA1xjcOAL-0RzK9pxqdrTYIbPVRAEls6uu9t6dJ7ciPvHVW_xeORR0qhw93oy3t0dnrybvoa1lMFm34mVVca5ZM4YYI1REXnmk-pcxDtieFDjF2kTBN_MHhYsk5weGh2Ec1cc2TwM--bc170Eldl0Fr8piNlL1qyv5VNJQE685QeyDzflxyjd9acw==\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Evaluating instructions and context**\\n\\nI’m wondering if I need to re-read something before I reply since the instructions say to do so. But, if I've read it before, maybe it isn't necessary? Still, to play it safe, I might read it for my skill. I’ve noticed in the previous messages, I may have over-corrected myself. Now, I need to be clear and concise for the user. Checking the current actual state shows that the config has indeed changed and commands are blocked.\"},{\"type\":\"summary_text\",\"text\":\"**Clarifying command issues**\\n\\nI’m looking at the async message regarding the exec denied error. It specifically refers to one command, `openclaw security audit --deep`, which timed out but doesn't affect the config.patch from the gateway tool. I see that my previous note about pending host-side changes was a bit misleading. I should clarify the exact state. To verify the current files and config, I could use gateway config.get or even memory_search to track what happened last. That seems like a solid plan!\"}]}"},{"type":"toolCall","id":"call_PidS5Pssv0H6YkjKdjeAPxtb|fc_0776d4d0ce7a6f6b0169b756ebefc081909c235753d92306d2","name":"memory_search","arguments":{"query":"recent work on OpenClaw hardening, security audit, asana skill cleanup, clawrouter pin, acpx config, exec allowlist","maxResults":5},"partialJson":"{\"query\":\"recent work on OpenClaw hardening, security audit, asana skill cleanup, clawrouter pin, acpx config, exec allowlist\", \"maxResults\": 5}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":93330,"output":570,"cacheRead":21632,"cacheWrite":0,"totalTokens":115532,"cost":{"input":0.23332500000000003,"output":0.00855,"cacheRead":0.005408,"cacheWrite":0,"total":0.24728300000000003}},"stopReason":"toolUse","timestamp":1773623003314}} {"type":"message","id":"fae2d695","parentId":"cea6007f","timestamp":"2026-03-16T01:03:42.332Z","message":{"role":"toolResult","toolCallId":"call_PidS5Pssv0H6YkjKdjeAPxtb|fc_0776d4d0ce7a6f6b0169b756ebefc081909c235753d92306d2","toolName":"memory_search","content":[{"type":"text","text":"{\n \"results\": [\n {\n \"path\": \"memory/2026-03-01.md\",\n \"startLine\": 23,\n \"endLine\": 34,\n \"score\": 0.36707267463207244,\n \"snippet\": \"- Claves (Gemini/OpenAI/GitHub) se inyectan desde `~/.openclaw/openclaw.json` al abrir shell.\\n - Contexto principal de trabajo: `~/.openclaw/workspace/ops/docker-cli-stack`.\\n - Si aparece “API Key missing”: `source ~/.bashrc && bw-sync`.\\n- Se validó estado “Maxxxed Out”:\\n - Archivo de referencia encontrado en `~/.openclaw/workspace/MEMORIES.md` (el path informado sin `.openclaw` no existe).\\n - Nuevas directivas de despliegue: usar `pipo-deploy ` con puertos 3001-3010 para exponer servicios en `https://miopenclaw-vnic.tail9799d2.ts.net`.\\n - Modo de trabajo esperado: no solo codear, también levantar y mostrar resultados en vivo cuando aplique.\\n- Proyecto “Coto Reverse” Fase 1 ej\\n\\nSource: memory/2026-03-01.md#L23-L34\",\n \"source\": \"memory\",\n \"citation\": \"memory/2026-03-01.md#L23-L34\"\n }\n ],\n \"provider\": \"openai\",\n \"model\": \"text-embedding-3-small\",\n \"citations\": \"auto\",\n \"mode\": \"hybrid\"\n}"}],"details":{"results":[{"path":"memory/2026-03-01.md","startLine":23,"endLine":34,"score":0.36707267463207244,"snippet":"- Claves (Gemini/OpenAI/GitHub) se inyectan desde `~/.openclaw/openclaw.json` al abrir shell.\n - Contexto principal de trabajo: `~/.openclaw/workspace/ops/docker-cli-stack`.\n - Si aparece “API Key missing”: `source ~/.bashrc && bw-sync`.\n- Se validó estado “Maxxxed Out”:\n - Archivo de referencia encontrado en `~/.openclaw/workspace/MEMORIES.md` (el path informado sin `.openclaw` no existe).\n - Nuevas directivas de despliegue: usar `pipo-deploy ` con puertos 3001-3010 para exponer servicios en `https://miopenclaw-vnic.tail9799d2.ts.net`.\n - Modo de trabajo esperado: no solo codear, también levantar y mostrar resultados en vivo cuando aplique.\n- Proyecto “Coto Reverse” Fase 1 ej\n\nSource: memory/2026-03-01.md#L23-L34","source":"memory","citation":"memory/2026-03-01.md#L23-L34"}],"provider":"openai","model":"text-embedding-3-small","citations":"auto","mode":"hybrid"},"isError":false,"timestamp":1773623022319}} {"type":"message","id":"a3288746","parentId":"fae2d695","timestamp":"2026-03-16T01:04:16.271Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Evaluating configurations**\n\nI need to consider whether I should mention that there's no need to rerun an already approved command since the system indicated not to do that again. Let’s think about the OpenCLAW config patch, like setting \"permissionMode=approve-reads.\" Are those settings sufficient to assert that \"hardening has been applied\"? I believe so. It sounds like a straightforward conclusion, but I want to ensure everything aligns correctly before finalizing my thoughts!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b756f0d500819092e35370a316f4b4\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1cLhIBOBSdi7lv_OPcoF5ApEJ2khUEH94fvPfc17aQRUg-auftxhkOggyGxhj012U_DirKMey7nzpPfTbBWRj6MUkc67nTkTD8jUX6G7tp2_BMGTsPSjMy5m5l5eJsi7WcfxJ00RXV5WEe8A9YKePuj8fBHNTfSXhyN3EdGfK3X6wGiLnxClPGbqjnRVACH_WHFInQsJFsd125SK5kg-frv1JukyIL1H7jxajwnImntuY9OO3ys7Md6e04guZRimrXjsGdqs5ZwkWTHpbb6W9KzbeHfbvm57sdlIzSwPRDj7ZX41jaMe8ivEZqXQhKMlixA9xIg1pgskP19R6tuVGrdqoTNDeDZpjsqrBUNMzjRTIAlx-UFM4wQ9SrWmFhS1St1x2Fq5pECzMkbZIjAWD0O-LfMR7zb5F-ljFHpM7po7nAXj12L9qapELt2MApMluLsYVUOri6BPbFjHLL17zeLx6iFKcA-ixeoLdRPsHlcsKUo7Xt8ZLVHDN8eSi9qzM6Uwe2pDrZ7CInkNIQl-4tuu_S4VLfJZVBFryCysNAEHuQy8rLiRpmsROSD4Hnr1M4IhmjzmpugEvc-NdA6KEXzJUcKu6ByJjVYQXym4uLWTSwIwzfsy7303i4Fyr-4xlX8SiqN7Mw_Mty4nxM2NoTFv8SXYF_eBq2a6sSWj27y7KukwFYR5yAXvQarwMTJvbhy_2e-fH48t8tddNtVWwrzThSHiVqwl4vAVWO-zP9VEEgamINqxZgC9AfJH8t6JAUEpPcRlIotPz5xXN9zYuVVyASXYhjc8Us8DMHjbLDrOgozu-xWE58YcQ-dFXSSIa0_sfIfJ3U7pGiNLNGjGy4GQ68xfR0ZSyc_pgbiY_y5Qzkce32HhHW_wKv2YH5SzMQYeQBceqBizIf37PPw8yvsuVfMzTgjfYcCS3DCSOHGV_K9tvxarUH1O0sCDNPX7OJvyYlqsAYtE1RdmoB-G1QRC6TSw1Az8t57zCINUnoYD8peGwQ_spgvla7PkcoPcFFf7srbGj4U9ycVtxCSPET5zFzLlVvZ9hM0_pO_lMVxEtZmNkAhg1TEkqZZq1sZ4rhzfPmyXMoBxRJaZnLdDXetxryTkeTU1U6Gj3YCNkfJ-BSkRPsq_Zo3-9_bsVbFVrjmIGQfMUwCtbkZdkPQB5hEp9fHUJw3erMLYjWigAnPB8bSq--ermuHAweoh0jnn4lw166YohsD82UETwS0I-xO8UtizvrEnEetjxKC0HM_VS0ykUrDlugyZsnZtzG3Ir5HAyierz2wfmL1R6uq5rYlP5qAxT9MtwNpeeftAWhhb3E_cckhJGsAgIYneN92BosfelszsomxX-WNJ0Rqg64nqEGXGKni25k5M8JOeZ0Y-naOglbYInCN7-IcNX0cwavJ_-XyrB-DCkTh3W04EA2ZNfCu-MsjgHS9xOfmcisYxNvyfzD3HnomT2ZBRUco3od9bbTgFh3foQoqiYYc5jYCN4DLV2iJTXNfzJmadV2Kc0XlErwbmlt-kAtpS7XayDQ9BPWg1TPJumFRIAj5K6W4ZOLuvEvzT712fNopZ9gqBavOPjfRWY1Iz5rGQP4FEWVpKy53-JipXm1YDH3-z93HfBvb-XlM6gyagpIJZonBfZP5e_1wQBvxXWdtLxcwaHXdxlxgTpmPcURrqFF7Mms036Oo4SmZMsjDOqE6mOg1Nu2yBPuOREL67mlmn1u8Xsr47_Jeq94Qbb87lv4YNa55JN79Up2-HneuGKpcEtgyNQQP5tnpHGo8gAk-sFs_ayadJaUWo4MltRkGOxS-4Dw3LKAO4F2TLmQeG3RzWzQ7gbE5Mj8RnXw6jlE6pJ5oo2a4btTLMbmoxSATHHoerXHM-xli0d8H96E30Sw__KHYQI8JUFcXiRVXA4-_Kk_Dgg1uD03H3pVlK-z1Px2ypd9f1M2AXjJmweK1vcdBBQXMAr6hitNz3JOAzcZXhGaLifi6DmmdJdTBpIyA8WxL2Q9-8wMJEqXmG1iGpKr0op4g8qKg4sYw6pb3qZQW0DIHmEnZI9bk1XBn4exFWEXgcaKQjxuyf62EvT9YB1SmGviTdbe_D-MzF6uhOOsjbufeEHn6o1f5zlDVTlOB6V2NztoPDNdrAtt1vMoQIa4fyMUWM9EVH1U5wfiB7bkdVhcKMoPWnPOZnpJbaWiTV83cV_3-fYRCTzNQUAJESoa04jU3KMe2G1H2F3QVKkPhc_DMUKtROnUGUTs7w6cS4EF0O62kJM2mwA4Ipl1VD7_wBCMzkbUhsAz6WGjPrap6ZspZzy1mNodVtuRPLBEoh39ZEHheQsk59z0yt9bYmpOyl_fYjzNzgX4U8YiC67pKmqVPqRaaq1CHsp6CiCtjRB4hW2LTwB7pUruswrIRAApsHJUI-i5lOmgu9qCYKHEPsAPwhQ97-HguHwOETE9NFs0EJjmEw5P1eghwgoUY36IIctUpcg5xPMrpnbnYEK8BN2sfy6se-61Br9wMxsoaATGyW_WYGycCoBkjwtpxlKfECKx4yvWFyYgNE81Arrm2zu0YwdUrfvWLfX03_7sDotR79MC26MEXYkpZtFQedZ0Ie6323Zh7m3ClKlg-KgoIvREaz_wmheeHHCXd67uSo8dkcC0zcRcK14qt1KuQ5KQ6MWC6hRGw7-BPO-xBuAp05xkKfKxroeAikR2Tb7UHaTiLwgB0vl8P4I4uIgjCriTKY6NAEdrVrBMyc6d8iTIL_bPDrEV2CP5PRSs0qtP7wExCYkFIijOo-Nb4yHs_7F6zymWxLgDc49KBUMmPCTxx2GqWve6-rIh5IK2VZBp--J1GPy7U0_IpNjWhYDOxbgw6ncL4u90kVNFKgSewXszKnQohwrO_L64gWg_wVop0f3K8JCHVEPWCqY7zg-CtPhjSCd9gE1zNFAJvZLeoi-quplOTgttTKzl4fO4GWRpUSPxyxXvKZk5pKvMLd7kXxpG8OWrHDHUqqieFM_N9iHF9fdVllykfJBjUpu8xj7k2sNJUQA72z5kiyYoAJVJp00A4IqfHUwRvLMTo9EfIfeNdnQr3KQinw11U7geF9k2kd6j8DzW-0WaygBkb9yjeihk6kwK2tP4Gaff7LAns_Vqzb3gw6VmLoWf6QGcx7Qz_lCbNogpwJIIrl4npVczFNKLHG_fulZqdeoa3SyM65rQFYMuonGH0i2lI7LIvAgS0nc2FD5ObkcvfCr0JCgQpZXpx-3bqGso8CJnuJf-bv7ocW1c1rxiFLfIXR5CCbGcL5IbNc7jjZRFsuGQboIQ5YgRtrcxzgwUMhClqMrdlxfVSChR95mlmOco3dklEIeIjYAnTqW72OTQFbg-czxrhO86_Uem7GtlLQVFWGwiX5CRAsBhybQb1IXSPt35wWwccmwiOL7HM4gyJN82B7kxApu4BZhd6z9KY8SCavsRwasZfQ8G--qf7x5TD9lDAgYf-y2haayz85LwBfwKk9qRjCDAaB0Q5tlZPVl88cRWZFdmhSvkXOpmJArQRLpc925z9QNRWdaFI8_e3SkE_5jLkF-KsC0_sJHDRboggkxLrcgBvvDMIHZSy8yp8IQkTrRspvqcBEI0yFFL49p3KAQ59HF8sdh7n3ztv6BxGVWiiVUzgE5PeJQNqNH0sqAJrqdD0_DeAiaNHr02yglOIkxKWF-sBDYX02Eu3pcBcuiwPercEh_hNcRSrB6MtWAwRtUxR_Cu3K8i_Qqd4gFq_zmyR_gD__rs-LOfxVxnUjF7kZb59ivBAC2WDTI3BPliOYngfNQ-nLbLzOwkthxTagQzIrnGmqYZc2opUZGac5QAU_-eXptJd0R5QyEQCo-J0z2rCTsVCheMyRPmSp4ED3w1OJH33a1yfpmFBwTWHljn9mGXNnWulUycG40k0IueFQspXbI-5WUlxOFRtwirEUTWBXFW3cEz-RHRJ__FlfvGsnCOrp13BJw39SJ1tu1YRug94_d3HFHwILjA-PkPi-vF2g2OGtGpvX2y3gw2JEUx8u9dIlhROcIj8qt6ZaH3Hk2fnjp948UL_Ojg8J9KpfIPlDNp6jmiJMOb3zR1xNLUPBCnW1xQMrgOUB7RLIXAu6Eg4MUN13hkwdreNRK3Ykyy-k9UlHS3CNPJUO4i1XK27mkmPDzM9xDPELbWB4dz-tMt1ABCf-LVHq7VKWxStxYd2eHtuA6laB5OcfCb9iIO9scwcU-Q_PKACWWEFFnaM98ZHuIczUVPMLdDbEc2sQIsUArsTtAyebWnNJFyd17EqmAKAXcaPf-Pkdylp-wGW2VTKLzn3cMyQ0b7qTMgSkyzgFM5iRHYGOxKtjRn20oKDdSEY-yRrr9gVzEfMxiQpHXP7aUXtHe_2A2LprmaOURLMe5wiCh7N0PBxbbbwcRQvn4DDJS-epn5_yDO_BZ6SMv4HVnRpLajlyS3VH4RrekuIIGZNSbTWGGMuuw9D2jCM5iqvhUmAFmpUC93PwOhNTMB9AdXeVNhGuoPhROQ3xCx0GFmtRuJeWsod6KRYd4EJehUlTSmGuCC49rNQYwGHUbshY1nXhbNVmTd4Z_LiceF1UjWTNixty4tpQEPbIMeJSA22G3I_NEbIRcYI-vnlkio87A1m-cVCIfEKNsPl3qcq_kN1lfDecS62ThLC0PE2xSNrhBiEaICe-qs8mPZM95UWbLVT0bkUst5fWvv7tHg-30nxsAO9kFVkduG1HFv0tiN99LQTtcZwa5byX6xsvgNsYTajqTfOo6lIzoNUekkYaWpRov1U6qW4nBtc_lBn2lGfpQkfpPeIcxSngBgXQ4m_JdvSdQC7jEtafLsaKi5FOYUoKBKsjRNNC3OewAE20HmM5u_-K1h2lJZHfg-8uJkEw_ijlGLafNutG2fJGilNLyzre25BxhWpmPAhSsekpUKLr9AIEvVnxaxcoqMvhxOpY9hJ8AvvbE4ZYA51iotDul4PmmXmpykOvLpXz3yPWqYy_dvvjnucbpjKPQLDv1IGZy8bAGNXkCUgg5T8oZDZxs0kMBXnvgHWutQsxi8p6TfHnht-QSIMh24-EVNR-1eU2tdvrZWLLCcgPs9MpCrh79_4GLTfDWA3BDP8C6G9J_ERw6vbPVdPAMqSLrDjf6JeL4X6wpZnI8smuoPyzphwnzRaVYcghAVM6Co9NkrWFSFm21scg1r44Ku28-61qdHeKdr72yqDWvzfdd5xUV4DGpxZg4fRAINyu6ShBqddky4Rhu9EW5xuQJ-Uir-mtPX2zMRlPo9kLuM081RFc3fgIOMUHNXakRbGR-vZ7xcUSXgwVuFxa-Nf07PZMGxzRtqvACCxKceRgCa625iFCOfvY0zGRwGKoVylIRIWUF1XQpnqOAy54XnVADzFHmDZX9IjCTw8C1KYDjpsVZTu0J1ZTr07AlgFA_lhPRAUNeMsmmVOOlDJIlVPc-pQWWTmibVPMhzANDzmj-JH-QNI0DM0BEJ7JDpKO7Da9qvB6TupLHxT2YiGYGYENDtQr0RWIk9LFyVn2845sY9CGmvwNkZnkbCeqGo88XnfrnaZthAqaEBpGKc9HDyjzGrN5mqXs0l95Ng4Q1sXjY_mNkVRXjlF4ysR8FQCq49UW7Ua-UqOaYozfA3xHW8n4U1eC8zF1aSNsp9UeucyNhMvJTRSSDwgWd26wM9sLlch4rMR14HpwrD8plfz1EATsCLiySlkBf6xivCE5HLCGF5uBW-wF3OE2WkVxeyBjL2bbEilrl0HPr3hQByMTJB2dCa-QCsBhIXiX0c7NvCDp5g7agdBud7rC_bd1OPIY5u-dKn9ycEWpnVIiT8kIwSvQnlvM7NZecGHXNleNl9C_ER1TJxZVSAZ1CanfG10YMHfA8YUDbq9gxj2jYuQhJHfr8IxSRxNYRPu6lZfgZvxz59UHoKk9gq9ZY1kknBTL7WSmFU9i1YDJy70Zblv92ZFhaYyAfEHb-ZNcrD3u-OocTL5_hBvAHWZHSKlNp4riGYYdUmx3zUlaCeNZQY0iM1rDI7ibHRwHTpyub8sjIQo7EzWE1yQyDOs90phjsYWXanTLWVxsWubsb_E7kXS7A-_ZZC8TnfTIjUYE6hYoEzJgsHmXEWxe3ZHiGzYRxNvGuO_bTVIa2JG0VNOjBNMSTVBGZ9BZmhtIEg0Pe2Xap5_yXGal2XKDo6ihxNgp_YAtM5pPfITTdEqR2SzxFgLcd4xT7osPpZTGdw1j5Po1KXhZE-S-QJMlECYT0Tfl4Wt_t56yzSzD8CM4wroVgpXiV_82dGJrw1Fe1tPmtdFFaGhaPuurn_HcH7V8d_6ImjRy0M-naEiVQgr4wY_UuRxyCKJ509m1mADrwYWTHBY7cwqX5gOYDeQWv4uvvNhfZDT08GDiz12YjlbjcaPWO1X9cnbMj-iWpIOU7jbOL7KsEqF3NSiX9LLhvGxtnHBcj8zC_qFmAWGxbSUvhWnYGPKPOEFQI8KWEfPTKd8qLvnl0Mxk_ry3qcffgpUcaVnfEClKTM4HbB5skBMs_GUukN6bSeZcaqLgApND_k0DSle-HPAD8Hxx5sFwkm_7TyCkC9nUedknZm6PAWukLiMvOb5rh2MM3LqRkJqtzsPzNXXfc1091MYsKldrhjzz4UAOArH9-xCXi2N9XW5TUWTnzw3R0_g8qQCr8CLdUxIamsrNWAsr9CaT8m1fsTgYXfFN2oZGt_0kN_ejXIvKeZGSIEGXUQqRzZE3WlEXxYzzAUYNs4N4Ho0ZIsrSYzuejylyKYHG3R1pSkB_JUXPwwENCw7gS4U0OMyLhJUguVmRBR_ZdJuEFhiuvnCWTYiSGniCTHcQyGo1TnUijy4J3-z08jUJ0IT-CYL0KSekxVmdVOztC8Np0EoTqWhKUHyb4Fl2LgElGHxinWzstFP5toEQJpHoxmR7JR9VBxMyb-fItyE0XR5AzT6uqrYidE5PWLAldiHdcCUPF5Ps3DNmWHnflpPKrFwL78H3n0a9UlTqR4ZPy7TlaJzy24vht8YRnEZf26G2kV-g3WbA4-lOeq97iIZa-KCqO5WjvgzggKbxYXjINx2yLXWKCwuhjc-Nwkb9WXlUWpxnjz3H2lmzBYr9rzYzpGFAbhJsADod2qC0UkejzcvLXmay74KmJUUUscLCxJz1o1MCS5t4QdBMVe0FaZZ6C4RRbw9MTbwV6sZ9MwiEkzdNVWS8SM587YjXbeynCCkjSqPcs9HnTluZumcYCM5dQeBtOkSsB5oM0x8a5j7vAxJUqt_4Cjk5k4xMffLHJ6geLuI_oVuzK1zHpKCXz2Is5bf81FsyZmuFRxe84z7SXAoJWrQgMdO7gZ5LfjDblRUbeudVQkTZ8Z6nMQ5LLPfftnFOLd2gcZJBOrjJcxwoDT4juu2qiDR8LYkaRdIm9kwt27yxk-njoTDS_Fi2VGo7UjTeFQvyVKFktdKUGuYracfV9N1wiGU6chJwmR9TfcfDTGErubd2EmtD3EMlK-63IjpTLUgRIuvWvlPEVVX8obQOOObo_KTNEwCrL74V6tIWWp4O4JxjMvbcrjiZHbyEQwXvGLDeqTF8gZtuuprPK14lpJT-g9JK_h4TCCtbD12VrRBfZzbr-ARcUm2-jN3TcGUHxlM4fyYK9WYsoLUnogYSbfDnA-eLDYf4-gaOc3WQ-uZkEzZKf--y_Cn6_cAidd570YaMLcDUg48ELC0beE8d2KtF8ZAbVEXP3-9dt2h-9o5FthoUcOZV3kaUNOvN3VNPMaayKhIk_Dk5OlZ1vAY__dtbk4sjnkIVfQmRNIPfr50kopl6MgmzO89ZIaVyfxwVQ_DbNJC2j7f-vMFdIx2Z8_-dGOzMzgwU0ZX_G4yOMSA6GUB4x1j4kutIeChazrWxrYAxDLbxVDrmudRCB1wGLVTPCkn5c4pNiId5Ciiu-MkopYYoi_-LYGeqdzNvLV9NZnUNz6DphfiEPWAu6ieAKH89NCjI3sK-eWumJK_eN2NNl3JmlBrUvtN8tMTTJFzXiNejDg3MKGs_lAndeLvfSGbnnl8t6XZQfnIQA73wHZvW3Z4cigOqVOFR5ZQ0DvMt0uOZvTZONufYOnTTbBcm5F3UUVi_Pnqrsz_rbP3Ut7Dl_wrMkjjVjgmxMBMm_h2lc6v9i9wYhu5bddfyc2H7nzBNhmnU774Zl7vQFb6tEAVVk6_Dvs3OuRznLyK7gocCC7gX88L0o3Ka7MVbGX6CXCuDX9tUo5zPyET1GbUDwBD1AJcGfD7fu9cxF3ecp41NLTGcOlYzgqr685M48z-B4kihbOffCs9AudIKBQdtDuSibPYB1cG0ByUVrsxPgnKXGEz7lfnpuW-t7MubV2z7z4jcVZ9wqJ11IRt6yAMHUZbKtJzQ9y_kTNM-oSLek2rtGcjkhYlgrb9I-e7WQMiwrigmugOJBBuYiMgEUf_LnrEghLnNfTsyWbppC5XHu8JQo5mzIetYWWtnznFB3mUAbtwlSntyYe5D1u3Mhn0tENnB8C3PGSx_fGggtsfjYXjG94IFg2B2C2dOUeAcCFOD5pRO8HuIiudVsuA4t9YwDwmxrXLF_RvRoptNxzIwjPN---JtILd-EhVrxELvXgYC3VJbTPXhnYOqxZuI3HsKLRVUKUqY2rwLt0flCRiE03zfcAal5TYMEAzV9kp6ZYLId19X_xZEvceE53W1Rsmuql3rYWYAMThspOGb_zIgf7TJdDntPTqiwNRDvyAlg4nRDlFZRdEqz2GmCnCZZQrXztgl19hG4QIVXZJ-gMEAz3ZeqD0IQcvXLrCgwWANlfMybncplZ5untrXXz-YoHJ-4L2zdHb4OY-9h0r-NLp4br66jDBLI-iKgPrEUe8um_ZfnD1XTA2PLVhzuEqsomNKkAWB1GwTi-rM4xWL5JkUl038nXBfQiq-bmFbAdDZtCitB4xacU3lFZD42iQ3jl2gx33c2c7MnlBjahQ4zcvd2woZD6e89VKqalUSqatKTj4DDHeSva11Wu75s3_Wg2sOFt1GDE9AM6OV8aH-1HbU7eKDd1QrNm4b7UvKo8fJOXHzQBmgWIHGZKqs2Uth9TtV6dprnX2b-MpNZshQrxFpVZzHAhBe5ObSDTlS_Joz5It-BNpXdiB4rNm-VF5nTG02-Kr4B1VlSMjGlKkSsoz7yNXppyOJkTRuNNqP2_f-hsfGLI49NojzAeoLLhFhHcq6dO__WiED6jD3oUvYJCUrktUk8kgJIREQMLYYBoR5CAsGDB8CvKMs52bLKqM0Z7ok9HckC2qfNqGIr5Yxy_uXG4A2acfy7RYsOWMgHClVsAXC-TSUQUJjagzZX4n6zkTvHgZFDSQKBz9WU4KIpH5QjOJzCqgqPjv-dDDSukotQjNqOx93_TIMarNkD0qOapqZfPAUXI_USlXmBC4apxY_fmBc1acN8M2WLlS3OpvJNmU891jtBq7e6BeoxMWcV6vsbsyBe553gJqYIEDq-JujDwGzaplHzQwewZyzm99HRhWyaeBhLdv0LneKYgxpHlpa9jYtzOfoR2AvckIPMv9clmVftMyTnJoGleqAtSoSudo_KTt70tyXvbGfuhmSm5irARb3yhinX6BgoqmVsUpLd-taDUMhgZ3KLieVY4hRLD554N663br3yrvroTqIL8mZoukI2d7Uximij7ToHn-AkbkcUKkuPcv7U7Wgoway9m329lMUvOkqqidVdWaYCtUUfcyMgxX_FZr5LBSONtFrMLpZlOg1ejMJIqJHKjyRkKLNefA06KUQpCla9aoixwsXo1E7dFp_hEGtnhzwdZBC4WhEbOn3_buKg-817lU285Rs4ldX77s6SppHeDTmFiRHp3BwjMIpG7cbwrANif6N4dlDaAUigoR3FkgD4pPBbsvZXWTqJ8zL3-5bZ6qhaJiomTwTQROCdAf8qAqgwWIN6OUlziWOzLdkQ9dcubLjef4EsgPH8kWvmY2Tl3phAiw7-6FHnRcRvYksnuYEnaCSrIdDS3uDhzIJ12F8kN6IW_mu-aZ1LrmLmNRGL5kpWgQJcRsdt2PjkHPuztYcEQhD1K79cHjkan0BHm7xsus2OKRgb0zLdxeUsb6nz_VyDW3qeN8GdQsmyyRujswh6nt6BDlj68DyS3BLx5Jg8wDx2g_cMVOpC_KUfllw2qm_nRq5Cj66qePtP7IESi0pwIUuSptDS9FSdlAgnSCzX1gT1ff1nSrXs41UOSYqfgTxtk8b8kpLpgwT_50u2NmaXV_hxfLZLPW-1_3-2tsMGvmzHhI1RdgCT6Lix4R5cnExd3EDzxtUrFh_UjpgXWfClO9C3Pk6AUe4PSkdW7gMjVhTekbqfGhbeLJCg_7zOunfxs35o4=\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Evaluating configurations**\\n\\nI need to consider whether I should mention that there's no need to rerun an already approved command since the system indicated not to do that again. Let’s think about the OpenCLAW config patch, like setting \\\"permissionMode=approve-reads.\\\" Are those settings sufficient to assert that \\\"hardening has been applied\\\"? I believe so. It sounds like a straightforward conclusion, but I want to ensure everything aligns correctly before finalizing my thoughts!\"}]}"},{"type":"text","text":"[[reply_to_current]] te aclaro el estado real, sin humo. Me expresé mal antes: **el `openclaw security audit --deep` no llegó a correr**, pero **los cambios de hardening sí se aplicaron** por otra vía.\n\n**Estado real ahora**\n- ✅ `clawrouter` quedó pinneado a `@blockrun/clawrouter@0.12.43`\n- ✅ `acpx.expectedVersion = 0.1.15`\n- ✅ `acpx.permissionMode = approve-reads`\n- ✅ `tools.exec.security = allowlist`\n- ✅ `tools.exec.ask = on-miss`\n- ✅ la skill `asana` ya no lee credenciales desde variables de entorno; ahora usa solo `~/.clawdbot/asana/credentials.json`\n- ✅ de hecho el endurecimiento está activo: mis `exec` posteriores ya rebotan con `allowlist miss`\n\n**Lo único que quedó pendiente**\n- ⏳ correr un **audit profundo nuevo** para verificar si, después de estos cambios, quedó algún warning o hallazgo más. Ese fue el comando que venció por timeout de aprobación.\n\nSi querés cerrar eso del todo, corré:\n`openclaw security audit --deep`\n\ny pegáme la salida. Ahí te digo exactamente si quedó algo más por arreglar.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b7570b23e081908917225d48c21c8f\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":700,"output":1730,"cacheRead":115200,"cacheWrite":0,"totalTokens":117630,"cost":{"input":0.00175,"output":0.02595,"cacheRead":0.0288,"cacheWrite":0,"total":0.0565}},"stopReason":"stop","timestamp":1773623022338}} {"type":"message","id":"b64f14c9","parentId":"a3288746","timestamp":"2026-03-16T01:05:35.264Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4009\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 01:05 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nDale"}],"timestamp":1773623135243}} {"type":"message","id":"79c1873f","parentId":"b64f14c9","timestamp":"2026-03-16T01:06:18.141Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b757653d80819083a65247b36942b7\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1eJLLK-GTP1Owf9yUF4AplklccC3BDfCB59lOIaL3jK8CzEpFzov--QBQg9LrrU6nK_q4rOEhww5gfoOjhlH0Pi_ThpIcGZvKfCQIBdPvihdIO5IWpQs_SU3JLYwnJw9xHxJaX21rg19xjMohdiLnyeK41ceHCTQan5kOvG4CK41JX1nmgwoE-zkZ33WlpIFHCRgHDPdLF7w7RxZDA6MYkCZne1IpsRsKT8dwcfG2uQ0djC47ma3AkyCTS_O-8jGpdGe8MpTg0jejuSQbU0cNQ_qPc-zMntyfOzqCJz0LaFYGAWG_aMJS3fOBkn3NncaglEWc-k6ThMrKO0f98R8cGWg9xVLYIb8ID0qNsEbUOahXD_9RwGsXtF1tkzMutk5d2f0HL9piUWoaBOBmJZnW36cdq-81RqCKdIh-9OfxEvJu-RVV584-hDFJEePKWV_XO_zi79cAcfNVsSVCg-IKvcRFbN_jO_8xauMlz9_Bg8sEwkZfUU0ywRROuxVVotp7cx7yrQ1hksQlCncW1HW72bXR_sQn7B9HFIY8Hwj3CEjbVcYA13DTvO4nPEcIrEVFP6ENTEeBS56zKeTtMn49pKSb4O_WJfzBWA54Eu76OuxCKjlJOo_OfH7t9RnXxrwJKW-iUTVLOp24utMlhg6O0iyjkvkSfnF4dvJQvQqXXqunBgj9snztTv-oJZkkQfitLysR3Efw-70R1X2adjz_GBSH6As5gyjg1wu26W-slhe67pn6H7CiBHCwyPw2PyIqOa8NRnltXRddReTOtRJEmhPq1CpDaudrILDrZSTx5mke9oiZRxFhffxyX5DcQV67flUsOwrzEg9gQlCmivUTIyxDcSHOyIk2j9-zTBGylZvw_DbeIuTKL7ehes3WruXLaglxihJfzGNCMAGLmqgwBD5IKSQMvSGd89ix3uM1YoXt6hgO_QzguCtGPEYf4s7urxZd8js2Z7SLOVolFFd_Dd3irCXUvYT-ZKtIPvTtaktIhCravPziHmQmyuR_4CdWT4-ggpGTaG3ybxmtkTlUdX0U-bSh7waYkLolg9-ChxdizhdGDsCXWvTBI-KPrx65FgxVjs1a_ntbKnM-QXD_80Pik5TD_eZ4jNn3QAoOzyOCrMjaWddBwH05LuLpyVq_mtHxPMaeAobaqW7NBkPrb72svZ9PRjhwTAu81GwbmkNSMCzRcBKiktwYujDl8lxPBw9H3HGq4bFDZ5_e0nlxVWRJw89O3gYUk9CW616_luXfJ7mPRqkZ5S7m4NOKS_gs_ZZnpx7yHQfv8GDlw9ODagZH_gW46hJwCmlfCIP1D3UaB5QlQG3ohbiFQtBnUcFSb7f-yps3QIFCI9tZQvygK3A-DeqVjz452s8gC1SdzFI2M2Ztgnhn1IW5ZD5cUqUiAe1_MgAzNOuncmKn4eoxeY0sq1idRdroZQDg4wp4yyDVhb3RjzxcakIuh_rBNAwPp4b7t19kjp-BkSUpZjhmgQAxg6CoaPDmIPpzeruvO4h0_2od-yWTIxzWiH1B6pa_edsWCceT84z8UsfJp9CQEf5RuSZRbODBQncFCEvj9n0JpSvndmZcvTDUeH7xtubpB9TkQ-6SqoarWweF--kcHzwj3s5eSB3A5cJwfelAd-WRKHmQqdOOL06b8n6o17wLTzTSdCBh_jzDbHQpSXTNEIK8IuUgZZ7u-PDeVTD6Qvnc7UB_dqmYXqZq5sY3RNv-dPSSfaRCU5a0izByYmOnQ1BsdaNYNCteIpjKaRJf2qzpZ_90yrW_VjIN6EWlkwTHlQW1B7jpzXK4hKjx8_RTUsr6c9Ps2ljZyJj_sxt6AL9lNKOpNrKbWifRgyfd_YF9y3JfZeGv1XNvnTeZd7gUX-_QYSPItMOlKKEt21h_Bsh1_v-Obw5QgEqhibpF7T12AErTpVZJJlWBCNWMsqHeJxMVqMJOgioYhDW_KSL60edngYzQocYyahgzt3733W-lJigNS8q1YMM9BalRNStlbj4Yur3WYU4BfCrYEV_pjfkxorlGrHy4pKbTh2q4obZ7BhQMSJM8Bn9RCYY2k3tAaGHrVp5ZMIXhD7VvBW2DckCef-_n9vVToWFRIhr8AiKgc8TMn2sQPbqJnbl14nZIo75kFc1XH7Ryjpnx7m9jqX2zo15kRsh2KeznjcZwSEqcw_5WDJEPtK64CsGWVPiDbTYiGEZxNMIEiMMQJdCKnpd2ne6b9hd9Jt6N_rDqJOwL-6jMdxpaEUZCJU0xZBR60h7jOkQBaW72-HU0tNYRxWaglAvp4rh2Y_R0eX6G6PzgBwQWBPre61RVJdIGlzJc6vWgPNCopFkqwvASSr-vIvImyIHhcZKfth8phApvaH-ZRvO98fPT_gWYYXprE3RFTb_sno8lDmuq1g7OdPjbqLS-x0nB87mrVjXPhJdOei4H9EfqQV8vd4pyB2QpMXkuSOWTdxwZatf6_c4faSccTgadjYRGAyP5qHsMXBzvLu2EXzkMZXSuOR0pB7gKQHr2qP8IWVOWTgjkNPMI7kmnbl0utMoL6yYgyeNszXyQQMpyWFObp2JV2WzyMWpa0O5uLZGeEQiMQK9BfT4BH-1hSKQcpEqAp0v-dNavXGwxpy7Njqjx9V9SymkAHzkCq_44u7ZJ80r300ZRuM2R864apQXAgek2nU58Rq95hqTUHsXhotS6w550mTGvdhMZEQ1Wj59Tpzvfh_nrJixjXnBiSMsqLanfBTtovpjAxBvwsoEgoSzzo-fFlZjkLtuwRcoRHBkuOwjM5mJAUPXgIbAn2EAzwtk44yjFi_GmnCtyAcy_W4sNfzn7oVtE38SgBOcIVZ02NzfMY9nWIiYWZbLZu5vwGv4O1iImcLA7F_N10Sg5CWXJQSjlZh38aJml2WDMiXalRKk36Sfe8ANrMbM4N2tG26j1cQleV0Dd89Lq7Ywbrhx6OqgSGBpwKZscHZV8g1k3rU-g2kLTw5LRILH5OGKJbOjuZSnxkKULIDXz9Uhuncroec1jAbP_nQuQ-BDfGy0cNsX4k4ZzXBtq-vrp0t7R-FoOwKCXDyDqd_c-B3USEmXbpDzpZDijMYtREM9HblcpdMptth7YDLc5OTcVZCJo-DpWIitE4e-L6aQ4_16fnIpT6QOkNhWP9mI1brY7nVN3paCI5tcom4m6xJ5c8xykVhCCOQZ5ZyR7m_pLd4PbV8BWP8WF5zI7jHBZOQB8e4udv39ZVNcpVY3sPX2xBgkFyDxYYKQM5MuxSVObtK6Siithx4bCRrapMAFUoxgumKSGWzoA6FEYBrbJFUacj7x51BShdJz2OtLQOIWtHvDApnBxJT14lYk1IxEtHhlaCfA_aTaNnxaFq8q0siscmVLGhNHAOEtlrMiG_ikR1nlayvD9OQf9qJ-RSEg0B-ks4aTgaoZ4E_WBA1dIjpGrreCty1-QAd7DCsfNxknRkAkTsTTK_ElHlF2pK4D8ceGjl3ndc0qVozf3bmY8io7YhLEP_X9AaiIV1QoGEU-ysGzIPR0GOXqujcfuweuYeu4ot03CvkeqagrNgAVVWW2r2YuFUaejYBz8khWtoDyN0m6DTwtmnSfR_TvDubNC6BvQMIDrx2gNTqdP1EBvFSKlbau6ttoJfKQn5kJe8sMdEnqKK7g_XvDRc_QoyRvmmMY2ZlBT6t9KQ2jbEdJhrRO_G-BQN4pinnN6RLohx_0l9C5gYRkjbyq6kfd0RJw-JAxXyuwqO-gu227yHHDHQPlqtmlevS4KRpeEdP_iJFsqk0RT6EbDl_NyzjO36FkNTTDYYJKQIzqK4pI9BZjBAshDRHvitO91MHXzP2zjgvs-jAim5iKcx-710EL4hVeyZlJw456CwUDQjVYgqUE3r1JEzg8KZkhQmp1MUEGee-RCbxDJrcBroTR4banWJsJ9wjNg5TrZMorf5GNNYFhUP_6muHTsX-NM5OfSBZs3-Yy3Mu3nDUJ8ZZvJBJPR5emSTOor5dPBSbnJixuPVD2_UzIEpYVrId1lS6jKBqN8Df-ml8T8yggCR-DAF6GPjDGCJ6woIdIOzgFCJWdOwt7NTT0cZFpq_To7cOY90XlGBA9ImqFhkMWoZaBajYcVW9qJ9Shpsrt1l0Z-6Fvm1-LvyJ2JZn3HxIQYOL2T1weng3f7lvAmZe4t0sMCOmdvfu9i40_bh20hYVvhqFm6orgwbMLReMGYW_0dZf5-RaoLoRJlfkwuZIy_H1PrGqeumsVFhZZIi8WlPp_rErXl3NbnNGYYbNEXvze1_Dhv_0kLCncBBKJv7mLYajF-pKP7Xhk9MAvRnAEYOwT4MJp2ffED6f1ywOI-ZsafnRR--uZklHhhkS6sX0EoWEtlPtj-ZaxpT8V6LeJbmRddDp9tojxOUzxkbczEAXs7LVw32gZESdj0yRpov-EMPPSXE_yWrctuJftkmeCGbq20qF4tQmpfKLnP2KmFU0_1Ijyleqfgly7D76xKXZQSwN-CIu8z-3yA3L9RCtUXJYrK4TsP4pPbalC0UCk09ps3pJK9813YdJyFUadNwDOAorLzU4WNJ9HA8Uub6llBzr-E1J0JquEIPFHFobCb78bo5CDKoLb5dSsqhVMebYvmftHZszUbbB5NIr7-7ROSv8r1U4FikXOtF1ejYYv6RPpYQNtJdouOBUyupi_OpfvOoQgfFoZONhs7NGXetQOCf1S3Yshe-3dGRBB50VLCas64QMMFNXcX-0dXyYHpxMJVFSXnszwTdaiD04dMlEslfTAcR0fmXrHDXU7tPEjo5P9P4FGFzy5qoNdn518iebQ_Jd627r6s8y4JCJU-T2SejZQXAgYkRqwboNVM96s4VJcIE60rO4ONcsc-d2xfK0bAP7e3JpPCZYQO_3kgo-aG2fDRAoTc6eRddPb5NAJEwh-C1FGO-SWzOGcNmzsmg6Uf6w_HgB5x00RjN8g32x0g7B62oFvr-axwUpsG5z5Mq28MrSVeLQMHXpkCgfiqFkOwWrWr1x7ZebG9WEaz9BEO7VGAJI5dMCOxIY2w6asbW7q3QphBRxS3RTVYw8gKobXT9uwtP_xsF7plGcG106VGj0Fp5NM_vcHZrKb1mLStpz4nO9IxM0Q4vszWTuFcrN5yFi914MLNigSNwVmS3TjNWhXpyaAT-IDU3P2bkNom6INHe1GDX_SfYHRcdAJaH-jPMfqcyBDCtfwhAWdCtzr83z833vGf-gz29OTyJv_tMZVEkGUMkiAWtS9K6JsFcQ4DlWRRKNa4Qeew_exshgGxXdIc2Y46RguvHrlvrhXmhBSe6TnQlnuvaufCrUZKP6Z5eBu8_mKOrP-VWpFF23zWEnkyrVCTjLurWRLDsMMNtljMdWB4L6dxr_ERCdSErMJKqWT1iKE7LnMM2aXgisLHxKorRDNSd64oRCJS-C1PbWmWeP0f3TPwLIEPrZZrl7aBrLv8ZaXF7-agd018u59Xpp4QkJxSZsIGkoBE74TYymaXYfaVfUnF3FtXq6mh4MuZ2CwkV0m6nUC2VxneBO8ci31GhU2RbL13EonV5HqNJJtJAdwUJT7L-R0C7M9NPwR1R8DDxm1KP2lzua6l6HXjMSeXwT1SmEENku-9uerphtOnmQIomqnlZoUmfXQcN2qQm59uv--l1KzZiCrnJQbUebXHU_CWOYLmuNBlL9aFeC4mWtj4DL23ZiEI9shkha5GoeLAgNYJtaLmwUIGcFRDAeptzMW26An-D9WvUSXiE_x5pcGglNdjeDlnCD6I6C8wO3i-Rtqe4GgFShrX8-CCgWExqKlbmB6dev_x4Yk-4CDK9ma8472vORZxzom0THqmmi9KCehau2YK501Dfq8szqVvt5WhowIHytZNZSa3NjHEwgoTnyU8Bpd2qwI4ZizUH-Kgy0EBfu0B40_uSgpoigj0pIwVJj8NXGZ8T2GO24dsTvG3ZZvt2AQ3dfZ_lbcgZ9UZVoZiH68UT66r0LOG6JjTmEbJFZ00HLEEvgTh1LxZDwXsMv3TuheYW3109vC1mpTtX7EXXW-cLBiyR3YhJG2Rtay_hzSXCejnd2i9T1IwAieEZF26ByeS-aqfqC-vn1wSP5QYI0Gmq330FojhEmGxwwdDlo-wkuxCihF9NzNxMqeamWG91JtFkEyK1DGkogGg2cnLw_AFnBRv3av4TM3noWqAB2uPvE6CrxD7d_WModS644Klxc5WWjKB8wh7mhIrIMgYsqHwwga1McCSqOqnCOYZ18SdU6AWSLCUW16NfhZK3dF53wqjTg295pwMJ04Y74PUbawupw8QrPDWjI89u4xYRsliWqTYRgVNMrosom_hrxTcu3WaI-VlUtwr-KsMDfawGNH68qm6u3hnnycY9Ns9x18TIlwGZmFqzUeMGg_100KmK8tW64s3COMma6MCwF1rtUAtz8UFrQq68Q9e55C1q1A0Mt_JB_Z-bBqHH9nLtOdVHqLkDrYNDt_pE56opeIVKkWR9I8nPVlPs25mj0RdKbryRqdT64exBUVRr0-pN8Y_ur82-8iZj3E_calXzXjGcDT3s_BJWaqZKjL5-8kwXMS2GD9TMi59XRWvb5AEkk7Qp5OJhmXRbxcpJvCVUfofemJrSE_6-n1ebwhmv9ogMXYLCLBuvdj3iMB-jR451khFbCLReRabVZ9PpFXkrJtpL1_i0IezjIiX5eHzHEdNgBT3UHlEhykiU02xl0Zsnqs_6u0tbwqs64M9-OcNQqNHRgbVSWGFIBpVhzaUsYCCBJr3tksnwijNtt50ALtsgLN7IKmpyAV7mhr505wz91xH14-EuWvl74fvgICLeIua9Z16L0LqHDiIR3zCktMoPsNdh-784XfB6VjpdGaJ60Zb5wr-_nICgX1fyLsu_6rTYftUpTbZAMlsPGfPl752n07vMu7Lhomf33aQe0Z5pDf5Cxylgj7m645Y48u6EGbZxGIw64nIknTUQTtLJdZ3pokP-FOdepyVxKTRtUKpFDBv7Cx5IC7_CsJqNYADftkBPylG6IvwdEG5hM49zTmwtlbX-Y5vuCYVbKTyNtRnyZrscVJY0m6X-CwBLl-h_CWY0tFlWJqTZhMasZ2ZhkxVJp3Ch3HH-UKquXPzBpoEEIkoGPl67UGnApIYQl6-kx9snk599hindEzo4KxisMa0Zc_KNqzbVLIUrUonQbZym0Z9csGTSqGgWOTygqqNKhvGaTCtTLytcqGmpBQN-Bu62qZiLQJ4gOjN8RTGKaENhImawyvAgLkptqcDcAMfcxX5v1ipCZ7EVoXOQGVMtOql8ZWf_VaAspNSfMggX0wgXyXQGl6YTTvxFHL2SdlawmtS5WNkUvuw58kleMJXK4EJhVE1PKpMhHtl4CxmKgJYLbA3b4OjNg7JziGrFg8NJLKrhEmfTcWskF9xJFHhEtnNjaiWph7MIrynUTc4z5mIbyMbkEMeXuoua4Rdt07AIEet5DPCRDLHi6c_wuaXnKrR6QwNo8sgDzjr40ughi8-17V5309KHjwdcpnPBn2hl0ZBRdNlY1tZNCSqTra4iBTYHhZXjf25vsDH20n1tseCPvyeGsJRSTSWefYmxs9Xx8Vy9lw8gN_YW6_d04oQ005GxjaPUk7mOsEgJipcADy3_9rrGB2O-BwYGPLn_rAKo9x33ALpWYPFyeOuBt2p1VDWPmSFZJp0LpbphTzpKW1a7Tl3Tifj4_5yhgVzBvwmYIdHmu4c8l8nZrwypTc_vnmxxCHXbvbecF9JebuNrAcGpb26TFlPDA0uUMif-5uQnyhyr64_jIX5jsZg5l9ATXHjplWCb4p470lkFJVtw7_L2v5PWN-09QsUtZPLPMptVQsisfh4rzv8g7FX_wBa7pIOof32cUO-fdmm5y06eH_PehQPjcPj6H0HaHuHXJxKC1Avvy7dnot6uhv-ooeWsHse20zul-hVUOHQHYcvyL8JIdevSo8fPK737sC12zG-mXpEBNVTAUlbpGG5TNuWBMTjjaFkGXAXmj3bQA9WWwW3D51YzEf0Qg_JNTfpmWeIQNyqMg_t1JVTsnJ6ziqA1jUwXXfBExNvbl3KWbSWHAI4g2312KeJ61oeBOoAK1wARN8boaDDQc95YRx9ljKM6CVbkfHkFI1kgT6iW-Zw3qpjzs8uhNPerbw3_t3o77mCowFWzOi5GjMqzai4mF6rBnPMuJ_4I2bm8yeAR1dI_Wo-nwjsEP1r7zKdMJQcYXuSHNKBgQPo2_qAig104nt2zXS_Dn5qzSASVWBwN0T12rUwRyoy5M1e5RTJhUyHmMVv-naTySULWEbNwU6CQRwWUfL7UfXpISShqIw9FZWdOgZYyqNZ60-WbbafPr_k_ZImwehyF_ylvQfUSsM8eAk8NrTxYXhed_m2a2UHZeeWWskSPMjm610mi_uHNvPQwrjHPq_-x8MtGPBKY6Dv0fXBP9sOQAPW0xWB_-trXafDlNc1xf8OIU2oubSSlPRMnWUheagyGb3zhNotZ8iN4pIsoMssV_OZXDnqFOJ6HlgNSnqlgLtp0JX1QPZnmPOLebk96IlPq6UN5Avapx9aCv6WQG-SfSWJV8QdDsLxLwbL3W289nrf4NBvA0Mno75BY85OUNFlcOaUcRn-65pfPcVZKAVt4OOoY5IabSvxTL2FfACpArQLrihVqz7-4_V2WLO5AW87QX1ET-bMuDTGvFhkcMrC8QP3-TU40PQlh3Gx6cnWcZVlY_XkHGWGmDE1mM4pgXqxhoSm7C6MO03Hjx_uz19C_Olty_oqNrcQFHPb0Eko2HpO69rjS2l9uQqUChlqjh1kL16OSwYvNBk4ehweAPX7DDsnaZT5HzsoiibY24DxnE3W8wxjJiepgwM35av8Ir6o_uJNLMz3Rj-fpsfPUQ4ikq1vfcTppjY0pUzwQ8Uoi7rM16uwDkEOjiOcuFPmkhbf-5IYKWBg6McQis_dIIeemi9hXdxnf_vCDwDE9mAvT9HoF4mxZHLPFa7yqeS9XEuKkGkm1IGAv-Fbs0hzJwtMRR7Z-J4ewWQ5Ga1AZqa50Smd3Y1YXfxH2FrNBvyZntWAF9pkTF3YAxN_ABOWzxeizmG7De6To65MMKb92C1UBsU_bg7hwVnJbVjVJ0Gzm2DIFDD2Dgcubmogy8vVxczC9ZU7U4LYUvOD33FA2-W-81do3IqljjZCOLJIkduFQUuWo-SF8WORtGlo4VXAXknyv4Q3zME2IMLUHI7x_-Sauj0UIqoBlYp40coPC_mCZ68N1N0ABx9KikcLJmhEFKl8f-ah62aufXvL40HrhDae19r0icf7iQZMDLCx9KvmsN1TzjegkXrCC06iYWuCN8MyGYHNnGX7ivMInz4HRms_URJMbUYIzG-IJM_LanyX3Rj8xRU9dxOPDhvyf9of1xPMnXf5BYfjMSUY-J9JoG6o9N7tSwQrJg50O4y6KCyVdi5zSqmBSl1mwXfG_z3W-KJaUKkNfpAwymrPd6b4xFYX-ylfY2vpP7KBCukNMhCewx5Hka8KkUlTSXcJcSTyko3PNikLGObNNWbZfjp-JtUekbPaFJWn065OHbBKuyivDX9Wn-3fC0GWoUEzqDRSlvy2mZQ1LZsm3BOk2w1ZrqHDHBNqATsAy_gsL2gETnbOrhOYzJ1kU3DO3zLyG44JHE5Vhbho0aeBNBogBSLPUd9XbOtPA3QxnUot2C7U00Q8olJ6ZyNQFDW86qb0Kf6NIADLaA4dt_FK-tcFcVYi5FiuXz-FSyAlRGhKWR4i679CPQpkeKK250gzApZBDMbTWP7JF2zNOlCsxxL8O6QZ4wx4mEWKxECmbcC1o4YaB0int6eUHzDaC6Kme0ShJgvw36D0rO3x_9Q_vh6d4mFw0vcH_TVhWYDiek1xmawbmlIAFs5-LoXGWW78QTRCg-XRra9CR-_EWlw-Jm-bzBzOzbwVEN1ygVgMvmGhWnkmrMrWAiTgEfYcwlEghDVxWEL8SMCghLdSUnZnd59SON3fBljryW20NOR4H3GO_3sbUdM4Z0PejlMqj8s_JSuSM5k1U9uX4uyy8sHuVMQXBAg35mxgl9-MDTY74Zz4tKQEB2FGp36numCI1e8O4o2ziBRtBc0i7aOw15HXtoyUpSUnOQaTc_jK0CNz4f25g2DjF8zOejw8vWYUkioBuLeW0JVx3YKnCuc6DTII1kjhoHhyyZq3NZjKkMqaL-w0rjLbHAx1IizpmJ13gFkBSnNQNEELgO7f-mWB86hbTkpijbHKXgqK_uqaz2o-yCivRBQ-7Ghz6h2sNDx_Ve3gj6x5hXdutKq3WQTKnGCb4HApg91cqbLtgMWHAHNH_Rc5aHIxF-UFf3uHiPl8MX0OX3mf2Jvk9BZXd8Cr9MaGaoc-rPHATzruwaA35-T_xW63yoB-xNT-OVPNIx3gWCa_AhTxI3iSm2efrxdnn2vEcmiViMANFGCCtAyQDdEHUqOlSW52c-nX52BgODKFv1dIjje1THYJQO6M-cgAj3DJFTMmNYYYObph_Ebtlob11tuvhCyVHLJde-zCbWBvEWOlJt-T46l90Q5THpc6JktRlML4caBe3DQCkEu_b8c0i1hhYRBKyZtSJuVPBojAA8sVhCPP8lynIIWoRPn53_mWMSH7G-0InYh0k15XRcThGGwaJehi3uIgsITHs-y48App0jDKi3dd0q-q-j_yxjGlhZxrD7uJuHNOIwIIig0WfTfgyQlB88yaOHyxHlwiNh7fHgx7OpcVVzChAmV8t5TOXKkQso5MNAuvDl4l0cR_BafJMp17qT0iMre9gCQnCqFwCzNw-zYERni9BHQLmY0vu339q68beHuabr6iGSqsmLWbZbHYC58gA6gG9hbKPsRmeFeAkNVvKEVjKJ8iCnstW0Y4sF1oUSGRWgOtgAOZBNYPZiJa_5j5NAZsT_Co4Pyv7whvM9NylY-2D29JbrKnV426EtFWxwZTGR6HG1uIJlmjvAjig5XGOVE4TNIjMPw7fmgClMzDU7UU5CVRMDCYW0QE5JyKw-NBiECCqViCvgMSc-9hfv7Y_xk9Pvql5a18y7tWkfQr9FpctV2MLd39kxoedlXuu8pErXHVzMPF8nuYbwb86ncSYgJCFk-5esVpe36GAkHjp9F5a8O893AVGo4ufSlkRh1UzfGE9eLtbAwznOhWD0WUHrDFx4iSdoWEcVJ_7YjWTxlskzuwVCve8vwr4I9zH8UFqwE2t5MdNOk0whsafimZ5RElOtsCyAoul-ww6j6r4dauwKSzSSnCXsdRseR09gvesMtWF8Su9mHv8JFY8EN2cjdeKw_djaHBofjD5YxdzXf6R2DQms4885UDgU-ad9QhMWYbsJSyMqycK5WTONKHhNSdiWlcM-Mu-kKonS70gIYdRwbFfNAUOZno_xQVBvhHMV28uumEEPCoARciYgQKtn7lVb0TskBuFpKSh0j21BL8aI7ogR1NoQlnnc2IJE2NFfFj854kbOP0zJ1pNZ_hoOqniaaypIsZgXy6q4Fu7eoCE_Lx2E_B6I-OLaST5-wDh2WyqQNxIH8VDdcTQFqg51CFqQJRqQVrRiXfJurEIl47QrzIK6JCabDWt0szFbprHmducf5mNzI1HSePHUodahvnzTu8CouQN2EJ5EKzqdOZumoN4Pv0T4RIrnM-WJpH5A_p6VXrLZb0QfCRc06f6bpKDx44cqrp7s6hw28_qajOgod5nEtrKCosQvga_jCZr8l7UV_uVGtLeW8PpNFn3eT6XIc1wMV38wyG_9sU3jHLmHe0E-oA-xgx_no7aH9ZR1JYiDRs6Zbs3y6OKtwy_t3excXVgkXvRBLrlSlbxcui8rAh19WjXMwMnfimkaPLO1GHMJ9aLOEXwz5McLnmELCC_8pqQzhy0XS4ls6JkWT3WrDrhHEBPJMkiOfAETN3QAriMaZX-RwfOudy20H4tOtJomQFH4t5edWqRPJEX0LQ0Do3H3MlsZhdzytiTmBUCK2aLexb9BriQzbffVbdmc-3datsVuI1wq3BDoydgeUh6_hJBuFCz3B2_kMXXJ1fL1vlHX8O-7ZPpe2T7FWm1OWiMp2zfCSJNMLwtEm7jopDc3wC4E_Xa-7Hi-YLjTjxaBACnmAfVFtuaU5fouuUoPjm686BrIW7cRXunQi7vsUj0ECfqR0uoMFtImfaAvkBOVSqFRl9RdpAtAP59Gh5eRjvYAA5MyBf4ephXbGVPPWU6U37ncIFDVqnzDZJELkQtQn5Rxrhlbh681oP07YRPr7OaRQ5Qo-7-MXHfbgmONXiHZ2HKMRAM5lHU28ln9buwbtRDxn0Ftl230X9ZadRW_rSlZO2HqLPw_x--haGPPm6ynByqQDYlKE8VMXAVS5iPMkJBa5qRHN0q_2ExNxRDKKJpPPcXGOvFWQfg=\",\"summary\":[]}"},{"type":"text","text":"Voy a relanzar la auditoría profunda. Si el host pide aprobación, te paso el comando exacto para aprobarlo.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b75789327c81908932a44f35b14d92\",\"phase\":\"commentary\"}"},{"type":"toolCall","id":"call_fpx2D7jFsHIo4ftVIZ43mCek|fc_0776d4d0ce7a6f6b0169b7578952ec8190b3f92d47b9f30d99","name":"exec","arguments":{"command":"openclaw security audit --deep --json","workdir":"/home/ubuntu/.openclaw/workspace","yieldMs":1000,"timeout":120,"elevated":true,"ask":"on-miss"},"partialJson":"{\"command\":\"openclaw security audit --deep --json\",\"workdir\":\"/home/ubuntu/.openclaw/workspace\",\"yieldMs\":1000,\"timeout\":120,\"elevated\":true,\"ask\":\"on-miss\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":971,"output":1786,"cacheRead":114816,"cacheWrite":0,"totalTokens":117573,"cost":{"input":0.0024275000000000004,"output":0.02679,"cacheRead":0.028704,"cacheWrite":0,"total":0.0579215}},"stopReason":"toolUse","timestamp":1773623135258}} {"type":"message","id":"f5b44d2a","parentId":"79c1873f","timestamp":"2026-03-16T01:06:18.343Z","message":{"role":"toolResult","toolCallId":"call_fpx2D7jFsHIo4ftVIZ43mCek|fc_0776d4d0ce7a6f6b0169b7578952ec8190b3f92d47b9f30d99","toolName":"exec","content":[{"type":"text","text":"Exec approval is required, but chat exec approvals are not enabled on Telegram.\n\nApprove it from the Web UI or terminal UI, or from Discord or Telegram if those approval clients are enabled."}],"details":{"status":"approval-unavailable","reason":"initiating-platform-disabled","channelLabel":"Telegram","sentApproverDms":false,"host":"gateway","command":"openclaw security audit --deep --json","cwd":"/home/ubuntu/.openclaw/workspace","warningText":""},"isError":false,"timestamp":1773623178331}} {"type":"message","id":"a7a9e5cb","parentId":"f5b44d2a","timestamp":"2026-03-16T01:06:30.393Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7578c900081908568a3b9c7aae3a0\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1eU9jt5rRAoQh-VqsGvWko0TcGT713HcjSdyFGrYkmwaoqXSFy0KGVsE5XWL-hu5GD00QvuQVehnwKPuhAMz0arFi_wSsyF8T-cPt36hogF2YtD_JWmL42KzWP6xFCgp0NLeoCsMWO7IE2Fx3B8caJinHimDV4HLh1cTvfIUFXVv3gfaxbHydOEESZ7HpKOVPyOi1vvuVKfaqygwm-taC73Kyi1ykwbFrNG_iX3tGyhAxOp45wTuLDSrjRJgsdcVRQ3fqQgmw3oSjP3rqUOrFFQDHK6GVVVwlZCKruPYheFbMeumC-1IMbxt4jArNXPra-sQ4ua_f5o4ry0oefFiqeJQI4QRvfnwdZ_vrzUP8L9Px5RfE1Vtmkt9hH-wMCkVjv5ZLrElwf0QgvBDBk2OOGmsKB_jDEVBiiOJ3Kn09_egkL30wHdH9M1X9B9tKqVmle3jS_XUsGcxQ67gJIDRDvkHvPq5vPN0i_E_DTNkG-zzyYRHFcBhcRsVBBfhTS3WUiwvHuv1GKaBJbDMCZRXX2jYW3x3JqDCfTsnq3DMNPi8e15524GsWB1nkUhS7DjxIvV17xB1B6VKNzOyljTw53u9XRphdWYV1Lszz2uMDnX00vLNCuvyBoaH1UiEzk7URnL73cgEJHaRodQ8NszKUqyAsnPgkXcoDCmiS3-bGXZmCsVCJfk6ULmyH_8kRbsoySyvFb8rwVEaxY8VsMuhj21STH6HGuZ3iQkBKanTAYE71W2_cNTPq_Yn9PP-0IOozMIukggYlgCaDhiAeHrlasTq-HknS4XlYo2MvdVF6z2mCOAOfHqHXVtzsB-5ctbEEqZAFND_mZTHo_cyIaEM-8L3Q7s_zbBdP0uJNTSYzASTVRgcryNoJcQFuwVtPXZri9hNRMnyDccDqx3g5mR3nb5mOhEfTuaGQ_uRaKihQy0WEV0jkytaUwRElvKGpFAtp6OOKd5uRb4EJD7KvfBtGPJIEIVXI8krZambbaLP00MWW_19fQDbj-8jLvpiGkbNG4NKZqYz76msGUCwkk0k-e1A_FGx6svgN-17lyZSqpg6MEqHvBvJRw1zbQ3DLtMd-qJ-AO58Sb-7uJJTBd29nD_5Ez8GL59K72Xr3kQUplbUYetP-GYUDlHMs9E2dVyZnUh1SwgzVbxMgDkZImRVMFuNETOZ0Fbk-b3Gd74ksmugcRY3v47mkuIinU3fL936i6bo9CGW_2NXzf8nOPP8nMuhAPDGFo8XyI9T4OvnaVmMKTeBOmO0-pB0mrCSs__n9qjSAu86_OUaoBTz1iThxO4DfG9cAg750cZsFGGJ8D1gOrTEpQ1Acq3NbGvN4jVXJhc3bzvNhl3vrDb8GLrqNOgyUjWasrmqQFEJng5TMf2nKAggIs9eIwtrdXpT5XakzQ0ZSlbS4xJhPvUn8U4blUNPUZ-9za0o6rvE_ALjOtf9_5IXZEz2CG1WJYRPL4swLjP_rTGUm523yfTuexgb7Nhr3qo9_7_-XBHyl20VzENyTP2gmWNO-AiUe0lLEdk58GNEHhB48hh_uCcH6783bXE69Bi-jkuWkV0qwA3raABC5jPNjPQ59-9h1yupLBE96MD72vd3Fb_g9Bl09h0AxnfOTEgjJwVJcvrMyt1xID7NLj4jOT6RzzOJPLBkCZRIW8IkyUHhY7d0o2_iFzatzxP2EGk1otnfHjz7In5wKHit5WRspkkiDC5kVB1mEzSzph4ZVXNJDpbUzKX8yMgg4sO-VRFCUXeOXi8WhAyCHeOAq3QFLZbwCuZdVUKqbbiCCWpYPE9jduEczYImq6zr__MB_Y_pYZXOtHkW0v56oO_FN1MlFNUzRINommr3vAOjrORfNnMLOErAV-pw7WhbMBFFcnHuF5-Gmb2MiTO9dJaeoTLaXHfWqcnFctk7W30LgzI611MYhr0QtP_St117CGqS7uNhvI3ycfTAk-0Bxcw0whrqTiR3jlZyyADmjAp3WekzrE4WwWCQDywA7-0cU9PjAiN4Ko83DWSBmXrq7x5h3upPOiS5WudT_cd8guroC4G7mvJLKmc6KB62RqkQeMEdB6_qtq_5Djhf6RT65z0GZ7TQ9yk1QJkHl8JSisGcAv903TNLkmmoRH-f02cJ24ZKZIpHH03nfcMD7W44I_VCmjJkQVQGACYIMBxGXtk2640zWisl_ku57gmSmQ1TZVYMm-KcLIe4nFgHz4NSssk75JRmfYYkAidW3WYiMziygpVI0q0C42BvTnS1EsVozK_-K1vxV0LX4rfXYZzEXJzERlK1aWJw8zsN-ofGWj0HKaF5ql1ce617SyimDfZmW3EnaS9kIuNfly046wmBBpO3vWuML1UYMgy6SXwu2Vq_WUiXqOCAJUpkVHNmkz6prS_Ql2GTg0i2Wp_l2alU9kY6Y7Bipxg2WqnNVdSWJWM5cxUBdldBKhRHp0bmwZpgz4kvBaghhDLjGFLGVon3AWBMD8NS2iiynTrRQyizawEHgl7tuBY454qcKxgwrolI4OOrCXtZctzuxm_mhFF9gvDmOshXbJpXNwYZp6ChE3HgR1xOFcq4fQvQLVnrk44PW73Nc-l6qRUXyaZN1eI1hmPSE6qmqnKeTW2XtDjp6rHC7sLy5txZYJQcYe62uo2wv6j9dug3c6GQM2ntnVA6G-Ao1gHIDqQONOD_X6nGMs-93pA164-rL8zVhqsCtNMs4mXFex1jTGOuPOp6LT-fE1Nc3KIljGylwwoQ4oo1GRtTIj4WEv-dTioYaqzAazmcp2olh1kD-1w29zO-5Z0TLiQZa3I--0GP2zG7irh_5A-XX5Ox7FLIAdsjNNy97RBp4HHTTUfTA8CI60og0QqFk5eiMvnfElSrwlhwEdqTdo5d3z6-q4DSD8YhO20nh5COXhUj9KplElhJT1a1DjJiPyhF3VrD-iy5jx3P8VAmslxwhAEiWNLUFCZMJV7lUAHaCyCCf0Yur_2pXebEnhSH9_pNrDX7C_R1DvgYPrrx_UhFc1VGdqmOLYGngXZ5E6ZMAZ_AjBF9vGWrNHLLZWKm_bpN9QRsnEMKrRY7UxNqpSDfvEnWwd0tSPLILyu2w9Seill189N4L4QQROYSLRYswToGZvjtCbLqHGbvegvrfR79W9K8jA0zE2njgEhvSiRwWEdSmT0RF4KgNTun60ef3zX-gM=\",\"summary\":[]}"},{"type":"text","text":"[[reply_to_current]] Intenté correrlo ya, pero **desde este chat de Telegram no están habilitadas las approvals para exec host**, así que quedó frenado antes de ejecutar nada.\n\nCorré **exactamente** esto en la terminal/Web UI y pegáme la salida:\n```bash\nopenclaw security audit --deep --json\n```\n\nCon eso te digo enseguida:\n- qué quedó limpio,\n- qué sigue en warning/critical,\n- y si conviene tocar algo más o ya dejarlo así.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b75794766081908e67304410428166\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":244,"output":503,"cacheRead":117376,"cacheWrite":0,"totalTokens":118123,"cost":{"input":0.0006100000000000001,"output":0.0075450000000000005,"cacheRead":0.029344,"cacheWrite":0,"total":0.037499}},"stopReason":"stop","timestamp":1773623178353}} {"type":"message","id":"8536676f","parentId":"a7a9e5cb","timestamp":"2026-03-16T01:08:18.797Z","message":{"role":"user","content":[{"type":"text","text":"[Mon 2026-03-16 01:08 UTC] An async command the user already approved has completed.\nDo not run the command again.\n\nExact completion details:\nExec denied (gateway id=b39c5daf-c212-484b-9094-9af22ee5e1fd, approval-timeout): openclaw security audit --deep --json\n\nReply to the user in a helpful way.\nIf it succeeded, share the relevant output.\nIf it failed, explain what went wrong."}],"timestamp":1773623298780}} {"type":"message","id":"cd74c345","parentId":"8536676f","timestamp":"2026-03-16T01:08:32.164Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b75804c418819098b6a6ccc2e74022\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt1gOJfQSUmGDOPmEa-aoFhIdrinQyyPDh5VJhYPXeeQpNeNYsQ_Wa4JclAUM6Onwh8bfFRKw0F1MDsvOiw9sR1lnAzZXy-A759JL0poDKw3uEpPT3uvFJwzbY4M4p6heGDbuGO0wJkYPY_f3kLayrCsKY3j4pss8nIPreIJbi4BFs6Dw9vX_mJPvi1ywNGAcVtmZbalTOwJr-KCGQsTuEMbwFuzo3PbXe-lZFaoYIvL0UUyHAUTG4CdPLB0-KDdgrPsQOmFV8WdwpXTyB-Izcpo_oUPt0snRgbN8kPzzMsDsw-SUf6OlCcgNKVIdbPOl-T1TGQUGzb__2PDWHpgCGnFWu7nYFi0QlYX9jg6BAOvF1RWou5WAlfOvAaHN4kb19hXq8fXl0xWjy_g_qqT0SV7OhxPGbe_11Go64gYeq8AJpnCNYxuVrxTVv4yf3xw7PIk-xswwTe-9PkAqLBoPVHfA3KHFaxj_-RbPq9-X8cqRid0mqT1Anyw-t61h4eAFIsHtmGoTskDMKv-PpdJsX3fexgi2V4JxJDgmiLm5Y5ObnQ6LaRJBJQawbnvz1x0jpS3a4uZ1827771hUm4Qfw81VcO6W85_zgZ5T111qe0Oy0BJx7K_A70Uu2eufaq5JLx5kc7tIvvHT1Vp68oIZr3_hqTOelG0j8awmJeP-WETt9RKJBt3EAPume9aTnPk4kchMRTwQh0iGE17hCAmLMDfHXRDKKneuvpOVytgAc6d7pQCmQV5_q6eNfX1aB1k31xrXWXz2j8qRjrxYw-TCv6-8hju2eC1saxvp_lnxsckRBIiTSYGAjAgPuM1O3CUOfh_2SAZPdB0-J9cKu4yCTpMWotYw7O8wfsN8I95xo1xMMxTa_6O3V-gmWeExc8aqsKopUOuaWtfpjeIXn_vA0VBM_Yf5JbLZy9Z169Ty4yivmEG-f88zMcg8Kx0hRX4uwquqTbnRDLROfBdUwo8a_xx0dpuseaxw7wWNfkHJaJJrudY9vg6OkPig9GYoFhFmRQJnHmRuTHbY-zNNdyBhypN3dkV8WeTb0Tw2clOl66yuRU-ivg9IdPdxhq9vrPU-Uvq3r2DB-M_lVYa2ZQfC4vftpGbSUXiizWzGCWANaAxAtYfDSEJbDcanC1QdXkx7t9MngSWikrpZkdi0xSd8GRXYGOVJkkmmzXkNXuSU0GG2-Roj4kqkDEWvU0z2EBXLuOUXXQoYNRI5bXoHWTZonNzmKAVnXz4PmvlCyYHvzmaQ1qxFaIWvTdR1VyKmAAvwNyFjDHKCbyefnQWFvaC-5WjnrIOyvQjoUEJ1P1KZ7VAK3e4MWvgBv-rkVVCll6eEjklL3FmwDMfsNn9m8GwDbdrwCg3s6-QOnEGynyEiQV3UvLc3aeddZ6ixIz-fjDsJUbGlDa2hzLjvP6aD81GZ2jCzV4-M_0Ob5fnfZdWVne-WGvtmRInm2Oa3Wz3u7o4fTpPnWQfwyRmHeRRMr62PWW0pPd-Lf-TbDsGcUyWRHKsTwe-PLFqzZ-jK_xby44YpzENP_A-IoMzAkggT-RtgsAZBnLonPtNjLP0PXY5wZQjjV8habKoASPj6NghNTw82TAQly-bmOdvKyhz6Wn6FW-Qi2kPzIBB78vKyzgHtpmhDLJ-x104XzabfjhvkjVQlZf6KpTMbx3vFVG6uFuYF0aqwWDTVnVx_XJQ3Zk_dMOqwZEaCSVWPEAanquRFvgZ-cK7WfgF-zIGZyjgwVHKNURYjYdtrKmlbfU7nXXJztBCTi-oZiQibiXV_vdOHR8FOyjqKPn_E1pbiwO69UUiKKI2HgbqhJDQQN_uefSSO7iChn_kSRWbGHrNoOei4G562wjLrOcTMIqy7xL1ub_gCzKR4PFC1yCA6BpqEfcd1kbJvuhXd59kxEDk4iR9DpjyvbXqgQVn6CkCVM6dD3mP1hyDrsXMF_1EAb6fOZ9p4z8M5jeh0uaYMyQrWNgaYt--DvytBrQIr4lQAhzPBZga8AIRartyZGahgMw-KFF9TYbpGzlPNwpcZtlsM9HuORa1zEwB1qStxhqzKI0lmvHvHQT7fYQZfmdmHzmp_fnFEJFtJ3uY_FdtYKYYK0TI3kmAOGrFpbf3EfBh1qijxw4zpm8VzqAvaw0dfqMjNnF07OXeaQz4Cl2QRZH8Kil_5w_1UmjlVCa22BDfT_ioH5TZTiFcRdS0TdLgyeWEfB81-mDFFX-qN4U8j90eD3x4jmXR_r1SuOZh0UgMsIdmrSgEJ2hJOZ5mlv_e7hfIAP1IJJjrJcBrj6u_O9-gwY_VCbbWxBPfGG-4guffgb4fL5V4gAJFqJUuHJmn2jyhkW168QJhtOmqneF6z--n9QXpAZN5eFs6Y6RfDCGCxlyjLIaxTDkJ-YW2MeyprYb8PgdddSy4_4CieqGac3QXDT1FKLfK-TCyvXWlCLoYKsm3wYRbq2_rJcaAMad80YHFAPoWmOF0eG9bV0A57ib_hcQRFMvr0c2aex70X31xUo9y6h-0_3C1YEEwrXm55aGDGerRO-tGzs95jMO2V5yFvD4yo4naobn7qzjaQ_KsPepBsZi811hIi6n5-e0f6a8_y9AyABE38C4C9IDJWLCXXqz7PYnMm1ovrHT5vDHpH3aWKcyNklse_foW9fasIhaxQH1Xmzf3LhcPAe6hM6KC4Rtk5bx8F99V1paHr7klaGPqyhgL3GjXO6I94q71W7e6TmUgcPyG9nI3uH6QkivEoDAVurRaZXsYQ7b9M00akGhJmXSwMuMxBfqjvDWQLJKTfhrj34Pc98fjPehpCvOt-Z2R0qL_K9zRbSgEmOaz7-aCOtFhE2jtuOfDXKVExtH8WWMguaCTVHoayYRvkpPyxdr0uiDHECc1QPjO6sFw_suwgKEvhzWOs9CHihQ1FQqEzdjYSlWt9v5nPetuQkRw-k3R5IV8BdVfAo23y8v9cbeUdIPhHZH6YJ1IZApTLZh1TDWDOzCkFuCnF6VfLJFeWcnTtq_N9n1WdF7hqkZ0GRKUdIuxqxZ1-1pxHgxGd7zHsdrqyt21TthHXYk9roGT1Kj6g-CpHbh-obMpG5yx0lQHXQFVh3WBJ6B0Z48D4MP8B6Pai3XN6FNOpLLRyBs7IUbf2uN0PHMPaBvSEhF6FbTrP0XM_QBO5rrWpR3rMP51nqGKHFxiJUXenJc-0Bf0c68IdHFKbpGg7yCvDjmRFVWuroPkLpgFQAqvzEfhY5QlpsOSr5OWjAdQMgJAgeANd31XGRC08YOPBUhpQRRiS_MlROzZ4zhsPQncUqaqzd8CpXXn_EhOZXZh1Yg30K6CZTCLGbvOzk8yTQB1G2CwVWE1TFLFVXjkF_Wb0jEI499Q6pQA0BmrT8SCA1OdPjepzRtOxqCBPuvgABocMS8VfM1RZ-1Dk8mETFs18maBnaNwoVhTEXp66IDWHGnHqY6FmgglyFkBMZOoU38FQpi6mgKtGEaGDrQ6sCQUL6HJKCTdLQG5EwVzCAoOGqRoolikcZlXRpmsxqUnsJPu3QaZKVKVEg4vf5dSzZaKS2bGxRrA6sVMwdEqcKIQ-xqKgaq-b3B4AnkQ-zzVCWED4JsQNNkT41k955NVPntnrl2h1Va-siECRfFqbqTW743dKreuxOXHXf5gL3S4ZIorCI6eSWW4gENuXC7kJTro2A7A-nNXxOgPkCDB-8r1iU2HKrya4hgzo9Fib8CMwCDNXVaHeSm67Zx2GNG5rh5SoNWJl7Ei56v4sHZQyUna7diy_-2RDa27byLqutzzIF2D5yY-2ZlRk9f4Z5hN9XqsOYis-nYIOYEQv3iRbMXl0OmE61CWUouCPfk4bw5zSM3M8FMk8ZG9-V7RDE22KBow83Nt5PJ4diUPmFDQPDfrGFyWsDvQTMBTVnXhxwUJ9FJgM_vADL9M9azXQKw9M3XGyWEN24lDWIFgO_snoa2TNNlEggeO8Xk14rVqnF95KMMOvpEtl-zOUn_1uGFfPTA==\",\"summary\":[]}"},{"type":"text","text":"[[reply_to_current]] falló de nuevo por timeout de aprobación; aclaro estado y siguiente paso. Se volvió a caer: **no llegó a ejecutarse** porque venció la aprobación del gateway (`approval-timeout`) para este comando:\n\n```bash\nopenclaw security audit --deep --json\n```\n\nAsí que **no hay salida nueva** y **este intento no hizo cambios**. \nPara cerrarlo de una vez, hacelo desde la **terminal o Web UI**, copiame la salida, y yo te digo en 1 mensaje si quedó algo pendiente o si ya está limpio.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b7580e06588190b513232291a9bfa8\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":1694,"output":614,"cacheRead":81024,"cacheWrite":0,"totalTokens":83332,"cost":{"input":0.004235,"output":0.00921,"cacheRead":0.020256,"cacheWrite":0,"total":0.033700999999999995}},"stopReason":"stop","timestamp":1773623298795}} {"type":"message","id":"d6990ce3","parentId":"cd74c345","timestamp":"2026-03-16T01:54:07.017Z","message":{"role":"user","content":[{"type":"text","text":"System: [2026-03-16 01:53:49 UTC] Elevated FULL — exec runs on host with auto-approval.\n\nConversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4017\",\n \"reply_to_id\": \"4013\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 01:54 UTC\",\n \"has_reply_context\": true\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nReplied message (untrusted, for context):\n```json\n{\n \"sender_label\": \"pipo\",\n \"body\": \"Se volvió a caer: no llegó a ejecutarse porque venció la aprobación del gateway (approval-timeout) para este comando:\\n\\nopenclaw security audit --deep --json\\n\\nAsí que no hay salida nueva y este intento no hizo cambios.\\nPara cerrarlo de una vez, hacelo desde la terminal o Web UI, copiame la salida, y yo te digo en 1 mensaje si quedó algo pendiente o si ya está limpio.\"\n}\n```\n\nFijate si lo podes hacer vos ahora que tenes full elevated permissions"}],"timestamp":1773626046989}} {"type":"message","id":"b15f8700","parentId":"d6990ce3","timestamp":"2026-03-16T01:54:24.335Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b762c506a08190b21d9a8a4d807e04\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt2LP9Vz5G_vexkahUv8vdaQ1XUI4B71aCFEIMozE8VCaHuqsjyUP-gOqTXAV7S_wIRQQILZivYdiEe6nft1C-fBVbaR_GjTzmtUizO9FUQbfjLYGz7ALtD4jDyUwYkDrd9VG4JDNaTB7L5iA__VH2iYSOucSVjfSM36QmtM7YvdzpC5etijJv2Dki7keaIikb-28nBvevoKYWFFVAPUuzjcw-C7VvFAzCWInbsABr8Bg0bcE_3Wrlj6fEVh9AMMdc4yz5aPTjKV5HuXVANxf2ODcKj3jSawRPgs72jR4cgW6H7vw7wRX0MTUmUt18ofTDE5Yt99Jd4iZK7K05hGoWcIKjpXsSZJLKOrPqDIaZnGvtnOmo1UtpOq3bE8ZtmWHC938EcwEJcPvOKF0CpkwRK-y6F5jb_KM8dWSyufOjncdRDOXl9vhy8GdTvoAg5HWCQ1DrpBjSkOvaTi99VvQdrQL4KqFZzUioqPMFqz54PtNOj5zE_j_Abs00WmzAQI_zOHt3i_VntJDzn0bhR-axtrGQT2tnuxa0S7_DB19px6I-egln9Dt2jopg1ApUKxs70CP6jGt2IpZaQTTLUUyvSatY31mtH6FZfv9im5dEHblysyUoDBwx9K7oMEEvNrH1YsjTRLZiKGlV_9gAp2xjWAWeKZPcAQ8D0W0NYjFTdjuxBT3xTMZq9sexLhDwatKrTSZVGnu6_MRWVlPZQP2TucNajyQz8sI3bg5Yu91o5SxDLae5RUke-UgAtdkFK_b3wrSzWN5WTUjukmeLQ2MzpGE5r8M-cJpwIpkw1bam-G3TthnT9anoqpmcM9hyW8lpimn5YYAuZ4GHqVVbIa2qmSMLF0fCZckc9OB_SBxScKTgxe9e4oBoprjzwUjUXSQqGSkOnkd_a0DkCm18WQ5YfSPEnkxMe8_hWc44gJj3PIZsv3V7n2E9NcXyPXwMJ0oAvTJphxLd9R4130rkP7ipCGq_yitG0iW28-Oy95rqLvvUGMRSw1lazDJBXd967sf3n0WtCJlW7-K92kSxsITfH1PZUCdg4USj8N2kIic7459VpRpIPhIKFNZ15lsAHGLYR6BMEYYHQ9hAklSywkxyjgW-OULpNbp4iRXZvUCZaqfNx9aafe8P55U8J06jtoAQLc4UGM3WPSNkDankCLgd2rPEpfNxEwLtJYWL37mpUVC80hHTkMDPCP_OJP1JfCvJ2MFtHnsiA7YTx6EcbnZ10aTfANhJS3I4PSm9D1NXhna-N7AfGKqOxoL0DUWLCnKSkKMnGs1p0lZr1b-Esx0mjb7rLZC8JHiquD-oAscJt_mUg8Gf8NuYB_EKbsmZ4b2AXbLge-1KdqySMtkAn9Plg2UysiKjaVYJJ0zu2l7c2_UHETYP3YZ1mcf224_I8og_2C1EUocrxqD63yV8SEE3r3SYOrbIsneL4LjjN_BxJ3nCTldcOKVBLjFljy7xdjfMgB3XtunJAGZOlWu_8Y9wRUPEGMkK1PFJ3AN-BsA-2KwExY81hmrZIETPD-84yNBTDWJTqJQUBjU0cxjW3gSX0cO3BTHt0WR5OG06-_CDOnQZvCfvBpfJ0Crpw1tWTuS4wIYqevca9yuhd0ZT2tBiL4LWbMl07UkDJ1-XJMh9cnK612IQKqwBIMp07rPPQFnHx21Xbdm6cpRmW95FlGYGX3BTB50dSGlXigtpIqR3MeGO0uLvwBQptz90mDiOy0wpM7AWiHwO6v8EPkB94pt3XU1GnxItprNDGUZXlWlCisWhYGiqokrCr9HSn3wjaU-BN2V4EtUxjLPnZeAlEDf1oYOjOT1U5iDLjWm1ufmr2pFTu_9HjLaePI5yN1EHUN7pmIQPdDbDg0tG2WMyFpl2jzGklzj_LKI3VG6uJWyybYmmDGEcAZII3qjSR_VkZbRluCSQC6c5Xp4WFCfwhnfm-yDfFJMU86onVL3AM7HaL8m3y0OSgxKjYTEfzSkxGxjRr8lPVglTCaGeulCWQULcldnoBbPhocefr2qCPGS1RG4ZPX0raqrtVeWeGKWXOy-aegcZ7C7ga3kmS1KlxVad4eqgPxj_J1VL44ju90ThrjVBSjCgIGuHqWvF0myPb-9ViM6zdVlXPUGSd8kUo0wNyq3Mj0vEctQdH8OyubsNa0pevIs14Finjlxl2s2ViM8qaq0kSe8_BqtYejT8FzxnXBuSICUZvKzk09PV5h6QhIXZQDLhfqskKaGocMylFg-lz9tm4iYtj565UnmoLce8oX5ZCPu6pbwOrD_VBFU5wvkZEkxbKPziPJ3KAeN3Vl0PuOUCdQX_PC3bF2iyx4b0uCYsLDM9fsRKGfZbeF_Gml3RfgBwv9HuWLrwjBB6wX8tysxuAC_h_42l3wuaSxDaGiccEx_Eukn9kHEPUmvq99DGQGbxz7kHGLnqkOvhT2MZhBpOhC9-rvIYHkQ9bKVuYUHsZARd0CeN5pNhBiIgFP5ZsMs1XQphpV2hDSL_Cd65X-IutNPhFfseX24QBIZebuDAiEM5rxI0mfMWtwbu26RCwpPYV7zEvSZ07Fzg3CREFMsyfcDQplIVbHpPI6P51dN3q_K0XGuzs1EhpIe_ElOlDl-FaBpIkOMAEXDkPbnDQSIG9LEVmS48WYjJsyTpv7fbDMBmNQRZ26R7PEyS3SKaMTTDNlGnJFcD94xtcGQ1oGD-5QCcGtS4XRHlojaZSgKoicsrdjdQ2w9fbzafSqDUjysLmQOY_plm56vx_IYJvUk_uiDgXbAu6In892TdkUnZuv47xrx9-MYXz6178ntq-DMK5Lj9Lk2OGamicDtNjIeZIUYErDnwhJZIasvmZCntb651pz7VTAPmHwaQIkke6VHtFlV5PTwjZ-qiaWBb-ZJz9m3fyYmpwhlQA0mLcIx6U6V9Wgu1aPUPt_spWP-FkihLPpSy4M3ZsH_siO4FCNXzEh8YSXdM501MGRF8VnNkJmRHJ9pTOU98wqLURykJF3oiMqwXq1zwIJxAbGZ-Ta1JTRME9HzDLIuPOTMIAUmX-O9QyLzV1jj3j58qCnk6pXCgcVPOPa8WTIw2oTdsOKzs90VW0UMvqENbdd7VX8hzt7gnxwdD8vceOjIzc6IqIEyiSmZtELTvN--lnqVYA3wD5PTtLILYY2QgxUXKAenTmSlZLkQWIQxFG_LyPM_Vyz_lhl6JngOZRbvnWGv7lhi1rsaNnzYPex-a15gmVQ6SO9WWdTq_-O53SyusD2qVpELCzea3haKclFRJkdJQE_Eypv_Fmh4Eq9x0nx6xmbh4No3-C_v5ZWcNjpFN4vQNirqc87KTDomd-IVi1nDyjluwcTd9Hi56BeCvE6ER4LQX8CKXAMN47M1fxnpUMIDi31kKafz7H-SESqD4KrslGlhKkVTkooRkOO0HawzuLEVSXCGE1YUsjkyJZA_y6_8N6u6a2i3TcwHRFjauuwINYdaaJC5B2OmfzhFDn5U0YJ9ZBuxKjXZsyJtoOpcT4fC7NVzHwCsV3K__1r0EodOPCBpcTZQlrHqN15uDEl_bG1CkuD889mWr8U06uTI0jK_WKeemd5GYAh4B_77wWRTxOuQDAZSGbRd77Z7Q-H9-jbG_1ZY1OP_lpG_bXTzHJvAseY_prZ9VqGnKQqGh7GYKaIJ7HBW98Q_AEeX4Fqrc4xaR8-P3SP_gU4ysl23gEI6ySVsvBbY4wT29djK_Lw0CMHn4U4JDE-PslAhVmMdZ8ZND9RKG0wIBhTQlnPdqV6B5vuoAW6klVFZEOi6wCB2xskyTJHqrcY4ecuvfE4K9LPAmPCEkP26PGTbNuKbrxX9a6qYayj0fEkSHcbPxNCw4rYi7GJpL6fdLivYJi0i1TUTUS37pxw6GKL5qQHwtAi1ghckGDdquPYci3ccA3DE1ygsipNLhDiLhQr1KMqEdKkWhbq22YSB6z-keOM0oBZA6zx1w4J0z-DzhcznLajnzujtShTq3d2clU-QmucCq-Ay9euIjuAXmIraoRUl-K2OtA7hRP52WEgh52f-fp3l7XFJ\",\"summary\":[]}"},{"type":"toolCall","id":"call_gGumE2riregrv97iqujM8BiW|fc_0776d4d0ce7a6f6b0169b762cff070819093dccbf80333348f","name":"read","arguments":{"file_path":"/usr/lib/node_modules/openclaw/skills/healthcheck/SKILL.md"},"partialJson":"{\"file_path\":\"/usr/lib/node_modules/openclaw/skills/healthcheck/SKILL.md\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":116584,"output":540,"cacheRead":0,"cacheWrite":0,"totalTokens":117124,"cost":{"input":0.29146,"output":0.0081,"cacheRead":0,"cacheWrite":0,"total":0.29956}},"stopReason":"toolUse","timestamp":1773626047014}} {"type":"message","id":"7a2b1dee","parentId":"b15f8700","timestamp":"2026-03-16T01:54:24.380Z","message":{"role":"toolResult","toolCallId":"call_gGumE2riregrv97iqujM8BiW|fc_0776d4d0ce7a6f6b0169b762cff070819093dccbf80333348f","toolName":"read","content":[{"type":"text","text":"---\nname: healthcheck\ndescription: Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).\n---\n\n# OpenClaw Host Hardening\n\n## Overview\n\nAssess and harden the host running OpenClaw, then align it to a user-defined risk tolerance without breaking access. Use OpenClaw security tooling as a first-class signal, but treat OS hardening as a separate, explicit set of steps.\n\n## Core rules\n\n- Recommend running this skill with a state-of-the-art model (e.g., Opus 4.5, GPT 5.2+). The agent should self-check the current model and suggest switching if below that level; do not block execution.\n- Require explicit approval before any state-changing action.\n- Do not modify remote access settings without confirming how the user connects.\n- Prefer reversible, staged changes with a rollback plan.\n- Never claim OpenClaw changes the host firewall, SSH, or OS updates; it does not.\n- If role/identity is unknown, provide recommendations only.\n- Formatting: every set of user choices must be numbered so the user can reply with a single digit.\n- System-level backups are recommended; try to verify status.\n\n## Workflow (follow in order)\n\n### 0) Model self-check (non-blocking)\n\nBefore starting, check the current model. If it is below state-of-the-art (e.g., Opus 4.5, GPT 5.2+), recommend switching. Do not block execution.\n\n### 1) Establish context (read-only)\n\nTry to infer 1–5 from the environment before asking. Prefer simple, non-technical questions if you need confirmation.\n\nDetermine (in order):\n\n1. OS and version (Linux/macOS/Windows), container vs host.\n2. Privilege level (root/admin vs user).\n3. Access path (local console, SSH, RDP, tailnet).\n4. Network exposure (public IP, reverse proxy, tunnel).\n5. OpenClaw gateway status and bind address.\n6. Backup system and status (e.g., Time Machine, system images, snapshots).\n7. Deployment context (local mac app, headless gateway host, remote gateway, container/CI).\n8. Disk encryption status (FileVault/LUKS/BitLocker).\n9. OS automatic security updates status.\n Note: these are not blocking items, but are highly recommended, especially if OpenClaw can access sensitive data.\n10. Usage mode for a personal assistant with full access (local workstation vs headless/remote vs other).\n\nFirst ask once for permission to run read-only checks. If granted, run them by default and only ask questions for items you cannot infer or verify. Do not ask for information already visible in runtime or command output. Keep the permission ask as a single sentence, and list follow-up info needed as an unordered list (not numbered) unless you are presenting selectable choices.\n\nIf you must ask, use non-technical prompts:\n\n- “Are you using a Mac, Windows PC, or Linux?”\n- “Are you logged in directly on the machine, or connecting from another computer?”\n- “Is this machine reachable from the public internet, or only on your home/network?”\n- “Do you have backups enabled (e.g., Time Machine), and are they current?”\n- “Is disk encryption turned on (FileVault/BitLocker/LUKS)?”\n- “Are automatic security updates enabled?”\n- “How do you use this machine?”\n Examples:\n - Personal machine shared with the assistant\n - Dedicated local machine for the assistant\n - Dedicated remote machine/server accessed remotely (always on)\n - Something else?\n\nOnly ask for the risk profile after system context is known.\n\nIf the user grants read-only permission, run the OS-appropriate checks by default. If not, offer them (numbered). Examples:\n\n1. OS: `uname -a`, `sw_vers`, `cat /etc/os-release`.\n2. Listening ports:\n - Linux: `ss -ltnup` (or `ss -ltnp` if `-u` unsupported).\n - macOS: `lsof -nP -iTCP -sTCP:LISTEN`.\n3. Firewall status:\n - Linux: `ufw status`, `firewall-cmd --state`, `nft list ruleset` (pick what is installed).\n - macOS: `/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate` and `pfctl -s info`.\n4. Backups (macOS): `tmutil status` (if Time Machine is used).\n\n### 2) Run OpenClaw security audits (read-only)\n\nAs part of the default read-only checks, run `openclaw security audit --deep`. Only offer alternatives if the user requests them:\n\n1. `openclaw security audit` (faster, non-probing)\n2. `openclaw security audit --json` (structured output)\n\nOffer to apply OpenClaw safe defaults (numbered):\n\n1. `openclaw security audit --fix`\n\nBe explicit that `--fix` only tightens OpenClaw defaults and file permissions. It does not change host firewall, SSH, or OS update policies.\n\nIf browser control is enabled, recommend that 2FA be enabled on all important accounts, with hardware keys preferred and SMS not sufficient.\n\n### 3) Check OpenClaw version/update status (read-only)\n\nAs part of the default read-only checks, run `openclaw update status`.\n\nReport the current channel and whether an update is available.\n\n### 4) Determine risk tolerance (after system context)\n\nAsk the user to pick or confirm a risk posture and any required open services/ports (numbered choices below).\nDo not pigeonhole into fixed profiles; if the user prefers, capture requirements instead of choosing a profile.\nOffer suggested profiles as optional defaults (numbered). Note that most users pick Home/Workstation Balanced:\n\n1. Home/Workstation Balanced (most common): firewall on with reasonable defaults, remote access restricted to LAN or tailnet.\n2. VPS Hardened: deny-by-default inbound firewall, minimal open ports, key-only SSH, no root login, automatic security updates.\n3. Developer Convenience: more local services allowed, explicit exposure warnings, still audited.\n4. Custom: user-defined constraints (services, exposure, update cadence, access methods).\n\n### 5) Produce a remediation plan\n\nProvide a plan that includes:\n\n- Target profile\n- Current posture summary\n- Gaps vs target\n- Step-by-step remediation with exact commands\n- Access-preservation strategy and rollback\n- Risks and potential lockout scenarios\n- Least-privilege notes (e.g., avoid admin usage, tighten ownership/permissions where safe)\n- Credential hygiene notes (location of OpenClaw creds, prefer disk encryption)\n\nAlways show the plan before any changes.\n\n### 6) Offer execution options\n\nOffer one of these choices (numbered so users can reply with a single digit):\n\n1. Do it for me (guided, step-by-step approvals)\n2. Show plan only\n3. Fix only critical issues\n4. Export commands for later\n\n### 7) Execute with confirmations\n\nFor each step:\n\n- Show the exact command\n- Explain impact and rollback\n- Confirm access will remain available\n- Stop on unexpected output and ask for guidance\n\n### 8) Verify and report\n\nRe-check:\n\n- Firewall status\n- Listening ports\n- Remote access still works\n- OpenClaw security audit (re-run)\n\nDeliver a final posture report and note any deferred items.\n\n## Required confirmations (always)\n\nRequire explicit approval for:\n\n- Firewall rule changes\n- Opening/closing ports\n- SSH/RDP configuration changes\n- Installing/removing packages\n- Enabling/disabling services\n- User/group modifications\n- Scheduling tasks or startup persistence\n- Update policy changes\n- Access to sensitive files or credentials\n\nIf unsure, ask.\n\n## Periodic checks\n\nAfter OpenClaw install or first hardening pass, run at least one baseline audit and version check:\n\n- `openclaw security audit`\n- `openclaw security audit --deep`\n- `openclaw update status`\n\nOngoing monitoring is recommended. Use the OpenClaw cron tool/CLI to schedule periodic audits (Gateway scheduler). Do not create scheduled tasks without explicit approval. Store outputs in a user-approved location and avoid secrets in logs.\nWhen scheduling headless cron runs, include a note in the output that instructs the user to call `healthcheck` so issues can be fixed.\n\n### Required prompt to schedule (always)\n\nAfter any audit or hardening pass, explicitly offer scheduling and require a direct response. Use a short prompt like (numbered):\n\n1. “Do you want me to schedule periodic audits (e.g., daily/weekly) via `openclaw cron add`?”\n\nIf the user says yes, ask for:\n\n- cadence (daily/weekly), preferred time window, and output location\n- whether to also schedule `openclaw update status`\n\nUse a stable cron job name so updates are deterministic. Prefer exact names:\n\n- `healthcheck:security-audit`\n- `healthcheck:update-status`\n\nBefore creating, `openclaw cron list` and match on exact `name`. If found, `openclaw cron edit ...`.\nIf not found, `openclaw cron add --name ...`.\n\nAlso offer a periodic version check so the user can decide when to update (numbered):\n\n1. `openclaw update status` (preferred for source checkouts and channels)\n2. `npm view openclaw version` (published npm version)\n\n## OpenClaw command accuracy\n\nUse only supported commands and flags:\n\n- `openclaw security audit [--deep] [--fix] [--json]`\n- `openclaw status` / `openclaw status --deep`\n- `openclaw health --json`\n- `openclaw update status`\n- `openclaw cron add|list|runs|run`\n\nDo not invent CLI flags or imply OpenClaw enforces host firewall/SSH policies.\n\n## Logging and audit trail\n\nRecord:\n\n- Gateway identity and role\n- Plan ID and timestamp\n- Approved steps and exact commands\n- Exit codes and files modified (best effort)\n\nRedact secrets. Never log tokens or full credential contents.\n\n## Memory writes (conditional)\n\nOnly write to memory files when the user explicitly opts in and the session is a private/local workspace\n(per `docs/reference/templates/AGENTS.md`). Otherwise provide a redacted, paste-ready summary the user can\ndecide to save elsewhere.\n\nFollow the durable-memory prompt format used by OpenClaw compaction:\n\n- Write lasting notes to `memory/YYYY-MM-DD.md`.\n\nAfter each audit/hardening run, if opted-in, append a short, dated summary to `memory/YYYY-MM-DD.md`\n(what was checked, key findings, actions taken, any scheduled cron jobs, key decisions,\nand all commands executed). Append-only: never overwrite existing entries.\nRedact sensitive host details (usernames, hostnames, IPs, serials, service names, tokens).\nIf there are durable preferences or decisions (risk posture, allowed ports, update policy),\nalso update `MEMORY.md` (long-term memory is optional and only used in private sessions).\n\nIf the session cannot write to the workspace, ask for permission or provide exact entries\nthe user can paste into the memory files.\n"}],"isError":false,"timestamp":1773626064367}} {"type":"message","id":"9618b904","parentId":"7a2b1dee","timestamp":"2026-03-16T01:54:41.504Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b762dc6bb0819089b4a649e011c7e0\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt2Lh71Ycq7PHKkXMyjU5BdpQsRJIRJzixOboq4birfRuidOxyMULP5mozcqlxI9nJrATPUhgGSa2m74VwdMalbhx2YgUaWsItzk7ZJVjo1_TfyNuSdnJsQ9VMELLC0YOkrLBqHh1SyrnphsgWV7AgUXsCS3fvPOSdRf-l1ytjljmsG4SyxvNtZeD-ibBaQ4eG1JcAEFguulf6ifkOJNulTuiR6W200LTJUiW9Y-tKL6J2JbR523clDbuiiE5tNt1ETqiUvVY-oAIoWeIvK091uTV7GVl_xiGnTgkqtU0B7dx-w7f0FdllRDfZ3zD4izccm6SPHOTEf0lQXPcihb1c-gZ_xGIIHjWLe7WjaBRrkTqUKu5HzupomZkqYer3NvCMOsKGFAaVd5XpN3oox9y6ddelKAl7KZSDbejQ1kZYj22IVliDoxlRFR8Shb886HZPs3_I5rVgJ50HMF0mbSE6HOxmqP49Dqgms94WQMrnEC5LJpt4cEZBSEGcTEe6HefGihd64BjL0rrsyePP8Cadd9kJXBftWJRIJUCLILyJ8DtrxfDymTSMIdS9H_9X1h2LSJe-ryLT-smfGGjjvAXreYbLQrv5y_0np6oPvPU0CxtB-dt8sMKgK2Dr5uWDl5bnRXUIWI2Pitp41YX5HgzlBT8O0mGbEFFmLl5WHlsp8P4basIBCY_UlQ95ScFvLhYTqo3ydcLPWnU3kX6Ay3D5o0lzeBivs3T0-OXzw3iWXCnYPBKFDml3bUbNLUnJ6aCzJMZJTqQkeGYBz9n3UaJb0CcaN_FAGxl81MqfzQP08Md2s1XUynbgT9RXPAUyg4STiq70uB_A4GKjfNyjcDtVBxBpB99ivI7va9FFhPKQw5P9d8zyLLRXKB3qSIkMqYMaRGH_oBeEFKZevxjg5wGI8G-56QUXG3y0RM_YTYUF5VtMlpPEqv8lsnOFtxeHFOLvMwzzq5gIsf4jIVlFeybHu8s63g7jHTgFjWT0Y6FesUiX-1cmNIcJcKbfYUWpVcJ-Lj1eOu2admzUgWCJT_WyxTjnL7-ySrqSqvE4PPmnygH0yu0BNcJD41oUbAWc32tKbrcpqpuDXuWT0PRvS-nfSJROeow8mxGbMxP64yu8v7f8nGAUWAdeepztj1A0qemoVWDt-daQYbv6DT1EyfnjVaMvlRrWR8YALreVxBg4_XPosDSu9D1nGwM2wdGL_auUEovkT9Xh2V-MbdJ6GQpF_oeKr69lCZQxLs27_vViLjcMMNFU7z6-WNmM2Vj7g7iKibdoSiWB8c-5kCYU5c1K1GAs8a5YDd4a0xArxtBPOufZp_W5SJlJazKZBiJSqpIdTXLgh7xoWFnIhA3ihj0IgEEVCycYgRmWlezb4-3R2Eo_k9zyb5MT-9_LdAA10FjHytg2K4d7M1trt8O21PjV2X6oXGFwE7TmrSVeODrlI2FRMc8zzO1oAUDj7NesbjqnSUYH3dRxMM1GIQzVKmUI6LfsR3QgxcS5FVu7sjIQZdZePfZNfLdi6nGSOh_pWyf-5V4QPEBoLcFJZn_iype0UTHWsbHiAZZOCwAUmkfFN301Gfe_0uYqY1WajWAYVcj_D3tN_vRBojb_zR845fspqvKg5BrgBY-2ZvesDiGR4bqM4EeaLbaB-o3raZS9IgnhzNkq6JpcOxDF2nk9Pb2q8o8PRjDJ-389M5ELNMck6QUYCXY7bQ6yPvQ1mUK7KeXQMjAvHfGRnfkkJ8Y12A8FuxDUOvOirbqW8bDyw1ekMs-vz5yaPn0zUxdqLoYQ4q1VWX3BWJYwEOjS92l7ji_0ggoUeJDf5xxiBLUq3WWbRHhVfCAKRX2XzZK2dHZgE9YKHF58tcBqiWXPtgzhBKjW5rU-60S1mPxlQ5gJhXWm7OLiOis-80xtiZ0JBqsELTIFgL-QgQ6CjNki7H-WnRid58p2w==\",\"summary\":[]}"},{"type":"text","text":"Ahora sí: corro la auditoría profunda y te devuelvo el resultado limpio, sin vueltas.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b762e1235c8190bd444cbc8023bfcd\",\"phase\":\"commentary\"}"},{"type":"toolCall","id":"call_OPBodv3cN9xIqYSU0St81UUg|fc_0776d4d0ce7a6f6b0169b762e12c6081909558f10b98483e86","name":"exec","arguments":{"command":"openclaw security audit --deep --json","workdir":"/home/ubuntu/.openclaw/workspace","yieldMs":10000,"timeout":180,"elevated":true,"ask":"always"},"partialJson":"{\"command\":\"openclaw security audit --deep --json\",\"workdir\":\"/home/ubuntu/.openclaw/workspace\",\"yieldMs\":10000,\"timeout\":180,\"elevated\":true,\"ask\":\"always\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":119535,"output":264,"cacheRead":0,"cacheWrite":0,"totalTokens":119799,"cost":{"input":0.29883750000000003,"output":0.00396,"cacheRead":0,"cacheWrite":0,"total":0.30279750000000005}},"stopReason":"toolUse","timestamp":1773626064386}} {"type":"message","id":"e4cdfb65","parentId":"9618b904","timestamp":"2026-03-16T01:54:48.739Z","message":{"role":"toolResult","toolCallId":"call_OPBodv3cN9xIqYSU0St81UUg|fc_0776d4d0ce7a6f6b0169b762e12c6081909558f10b98483e86","toolName":"exec","content":[{"type":"text","text":"[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n{\n \"ts\": 1773626088518,\n \"summary\": {\n \"critical\": 0,\n \"warn\": 5,\n \"info\": 2\n },\n \"findings\": [\n {\n \"checkId\": \"summary.attack_surface\",\n \"severity\": \"info\",\n \"title\": \"Attack surface summary\",\n \"detail\": \"groups: open=0, allowlist=1\\ntools.elevated: enabled\\nhooks.webhooks: disabled\\nhooks.internal: enabled\\nbrowser control: enabled\\ntrust model: personal assistant (one trusted operator boundary), not hostile multi-tenant on one shared gateway\"\n },\n {\n \"checkId\": \"gateway.tailscale_serve\",\n \"severity\": \"info\",\n \"title\": \"Tailscale Serve exposure enabled\",\n \"detail\": \"gateway.tailscale.mode=\\\"serve\\\" exposes the Gateway to your tailnet (loopback behind Tailscale).\"\n },\n {\n \"checkId\": \"models.weak_tier\",\n \"severity\": \"warn\",\n \"title\": \"Some configured models are below recommended tiers\",\n \"detail\": \"Smaller/older models are generally more susceptible to prompt injection and tool misuse.\\n- claude-sonnet-cli/default (Below Claude 4.5) @ agents.list.claude.model\\n- claude-opus-cli/default (Below Claude 4.5) @ agents.list.claude-opus.model\",\n \"remediation\": \"Use the latest, top-tier model for any bot with tools or untrusted inboxes. Avoid Haiku tiers; prefer GPT-5+ and Claude 4.5+.\"\n },\n {\n \"checkId\": \"plugins.tools_reachable_permissive_policy\",\n \"severity\": \"warn\",\n \"title\": \"Extension plugin tools may be reachable under permissive tool policy\",\n \"detail\": \"Enabled extension plugins: clawrouter.\\nPermissive tool policy contexts:\\n- default\\n- agents.list.pipo\\n- agents.list.codex\\n- agents.list.gemini\\n- agents.list.deepseek-code\\n- agents.list.claude\\n- agents.list.claude-opus\\n- agents.list.kimi\\n- agents.list.clawrouter\\n- agents.list.openrouter\",\n \"remediation\": \"Use restrictive profiles (`minimal`/`coding`) or explicit tool allowlists that exclude plugin tools for agents handling untrusted input.\"\n },\n {\n \"checkId\": \"plugins.code_safety\",\n \"severity\": \"warn\",\n \"title\": \"Plugin \\\"clawrouter\\\" contains suspicious code patterns\",\n \"detail\": \"Found 2 warning(s) in 4 scanned file(s):\\n - [potential-exfiltration] File read combined with network send — possible data exfiltration (dist/index.js:1647)\\n - [potential-exfiltration] File read combined with network send — possible data exfiltration (dist/cli.js:136)\",\n \"remediation\": \"Review the flagged code to ensure it is intentional and safe.\"\n },\n {\n \"checkId\": \"skills.code_safety\",\n \"severity\": \"warn\",\n \"title\": \"Skill \\\"asana\\\" contains suspicious code patterns\",\n \"detail\": \"Found 2 warning(s) in 4 scanned file(s) under /home/ubuntu/.agents/skills/asana:\\n - [potential-exfiltration] File read combined with network send — possible data exfiltration (scripts/asana_api.mjs:33)\\n - [potential-exfiltration] File read combined with network send — possible data exfiltration (scripts/oauth_oob.mjs:91)\",\n \"remediation\": \"Review flagged lines to ensure the behavior is intentional and safe.\"\n },\n {\n \"checkId\": \"gateway.probe_failed\",\n \"severity\": \"warn\",\n \"title\": \"Gateway probe failed (deep)\",\n \"detail\": \"missing scope: operator.read\",\n \"remediation\": \"Run \\\"openclaw status --all\\\" to debug connectivity/auth, then re-run \\\"openclaw security audit --deep\\\".\"\n }\n ],\n \"deep\": {\n \"gateway\": {\n \"attempted\": true,\n \"url\": \"ws://127.0.0.1:18789\",\n \"ok\": false,\n \"error\": \"missing scope: operator.read\",\n \"close\": null\n }\n }\n}"}],"details":{"status":"completed","exitCode":0,"durationMs":7164,"aggregated":"[plugins] BlockRun provider registered (30+ models via x402)\n[plugins] Registered 1 partner tool(s): blockrun_x_users_lookup\n[plugins] Not in gateway mode — proxy will start when gateway runs\n[ClawRouter] ✓ Loaded existing wallet from /home/ubuntu/.openclaw/blockrun/wallet.key\n[plugins] Using saved wallet: 0x1d1776D5543c8a5B8880174d9E12d18Cc96f3fA9\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n[skills] Skipping skill path that resolves outside its configured root.\n{\n \"ts\": 1773626088518,\n \"summary\": {\n \"critical\": 0,\n \"warn\": 5,\n \"info\": 2\n },\n \"findings\": [\n {\n \"checkId\": \"summary.attack_surface\",\n \"severity\": \"info\",\n \"title\": \"Attack surface summary\",\n \"detail\": \"groups: open=0, allowlist=1\\ntools.elevated: enabled\\nhooks.webhooks: disabled\\nhooks.internal: enabled\\nbrowser control: enabled\\ntrust model: personal assistant (one trusted operator boundary), not hostile multi-tenant on one shared gateway\"\n },\n {\n \"checkId\": \"gateway.tailscale_serve\",\n \"severity\": \"info\",\n \"title\": \"Tailscale Serve exposure enabled\",\n \"detail\": \"gateway.tailscale.mode=\\\"serve\\\" exposes the Gateway to your tailnet (loopback behind Tailscale).\"\n },\n {\n \"checkId\": \"models.weak_tier\",\n \"severity\": \"warn\",\n \"title\": \"Some configured models are below recommended tiers\",\n \"detail\": \"Smaller/older models are generally more susceptible to prompt injection and tool misuse.\\n- claude-sonnet-cli/default (Below Claude 4.5) @ agents.list.claude.model\\n- claude-opus-cli/default (Below Claude 4.5) @ agents.list.claude-opus.model\",\n \"remediation\": \"Use the latest, top-tier model for any bot with tools or untrusted inboxes. Avoid Haiku tiers; prefer GPT-5+ and Claude 4.5+.\"\n },\n {\n \"checkId\": \"plugins.tools_reachable_permissive_policy\",\n \"severity\": \"warn\",\n \"title\": \"Extension plugin tools may be reachable under permissive tool policy\",\n \"detail\": \"Enabled extension plugins: clawrouter.\\nPermissive tool policy contexts:\\n- default\\n- agents.list.pipo\\n- agents.list.codex\\n- agents.list.gemini\\n- agents.list.deepseek-code\\n- agents.list.claude\\n- agents.list.claude-opus\\n- agents.list.kimi\\n- agents.list.clawrouter\\n- agents.list.openrouter\",\n \"remediation\": \"Use restrictive profiles (`minimal`/`coding`) or explicit tool allowlists that exclude plugin tools for agents handling untrusted input.\"\n },\n {\n \"checkId\": \"plugins.code_safety\",\n \"severity\": \"warn\",\n \"title\": \"Plugin \\\"clawrouter\\\" contains suspicious code patterns\",\n \"detail\": \"Found 2 warning(s) in 4 scanned file(s):\\n - [potential-exfiltration] File read combined with network send — possible data exfiltration (dist/index.js:1647)\\n - [potential-exfiltration] File read combined with network send — possible data exfiltration (dist/cli.js:136)\",\n \"remediation\": \"Review the flagged code to ensure it is intentional and safe.\"\n },\n {\n \"checkId\": \"skills.code_safety\",\n \"severity\": \"warn\",\n \"title\": \"Skill \\\"asana\\\" contains suspicious code patterns\",\n \"detail\": \"Found 2 warning(s) in 4 scanned file(s) under /home/ubuntu/.agents/skills/asana:\\n - [potential-exfiltration] File read combined with network send — possible data exfiltration (scripts/asana_api.mjs:33)\\n - [potential-exfiltration] File read combined with network send — possible data exfiltration (scripts/oauth_oob.mjs:91)\",\n \"remediation\": \"Review flagged lines to ensure the behavior is intentional and safe.\"\n },\n {\n \"checkId\": \"gateway.probe_failed\",\n \"severity\": \"warn\",\n \"title\": \"Gateway probe failed (deep)\",\n \"detail\": \"missing scope: operator.read\",\n \"remediation\": \"Run \\\"openclaw status --all\\\" to debug connectivity/auth, then re-run \\\"openclaw security audit --deep\\\".\"\n }\n ],\n \"deep\": {\n \"gateway\": {\n \"attempted\": true,\n \"url\": \"ws://127.0.0.1:18789\",\n \"ok\": false,\n \"error\": \"missing scope: operator.read\",\n \"close\": null\n }\n }\n}","cwd":"/home/ubuntu/.openclaw/workspace"},"isError":false,"timestamp":1773626088727}} {"type":"message","id":"86820450","parentId":"e4cdfb65","timestamp":"2026-03-16T01:55:25.217Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b762eb9390819083bec01e854fbb81\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt2MHkngyMNbiBliZkbBhtnnWNMnXjiVop1YfVuy--LMWO81juSvvC0kHaMf5Y2Vy5c4bk_7XZJdYbVctkj0SGkcUxgtnuFJYLnfX6thFJvCvOMm657t8GVdD7w4Nc7dpVdRsMLBqOMbGCAuCGCtXM3fyKN4zJ6Nlq4owrURHinTX_yU_qBk7M219SeOf7er4-zMy4n6JnhNw-mWWJYE5FdXoY8EZcnAMVFcjyWNsPpCgFl5bLlSOuNG54aokhkuEhhOmjbzuSOjYvpnJ6zsI3MQvbWjcc3OnpvQPv7bVNLAfTWc75xNGZQfKeDFHrjq1dZtcpTAOhMQFnhiNln62qixg0jstRRj5UzZyWoo-hzvGHuJ6KxoHK6zFxN_iAwROjyakCtNQtzueeJqpW6MZnCJaGfTYhLGSiCOzyGlIevl2JubXIhNxzh5O2bQcIgcee3IzoOh6b5hsBXRNVXNSa2G_ChDVcXwwqi5ROh8ifQaA15NHqf2JXGFs5h13syJFJCW6gyuw6TzgoyEA6zQ88cdLGRMHRbHRzGYo6Y8dp5Tzft34fQHjeP0PqsO6_jMrUGeMsKRyh0h09tu8WDVKqKz7m6YlM4bu4vCA14zoeGPxI4BALOOrJIofB0XLdFGDVEKXH8TajAmssr-Uhlb1kPNF1pNhsKd6pCQBdgz-eatCUWmY3tsN6wkKf2HWTk9z8Bz47vcHxRZnAbjmUkuMq8nN9HEUTwjB-HhCWrwk0jsTP47iVVxVFqUoyYXCsfewcFWnXhrutaye0NjJB4l_CWLIrGXbXFdAW4a3Ywy5qdvAPoFu97yUL5A2vLvM7yuzrYX5RwmX0z9ysNgPNZsS4KdJtwnoTrt8caVgcq1nrIbgReJCoH1dJ7P7aitGJ7HP5Tm_US9_tLvehXZc6cf8f67p6EoedmSfZrIm7jUlOQemv3bq4uP7Ld47-t14g1txL7pD8G_jocCAASObbNczERHToIvT6Z5PAbBBtLygWLMRsj0Nnn4b7JbO4hyGSbrWF2bg5kjH4-lK_Kv5kouaVctKj0QYLJ1P8FpMgPGsZHR1FaoS3-7V6A3tCMVLuZxPvVxV-_OCXP1B0H99x4tN7k0x4quKROQfPQ5oQbKQoS7Ukal3It_FsZgkt70ATc0QwaPbvGa2PI92fuqsAR-O4sXISJZeNxsKxGghzP2BdImGD6v3TjXDEYeOg0eWmOijXlA4cSOApB06Pcx2B_4V6cV6NBMOmiCNRHCmDI04WHvN0p_BL6YYYsH2OekjegzwqsysSU_3NYq0DbRJpw_Q026CmSafQ0UNaaE87V7U4K-Y-vSiNOBu4HlSr4DA6RW95malrodJrL0QSxUJ-PlwsFpQtgHwlbjd7t0AKphId_vGAC7ljThuxi06Oq0Cm_4d_YdyMDUA3pYZdzymzOHjC6al0lwSbdy3iZ-yhUZ2oq8HvPfbDyxdygScEIpkCSvTtAOJ2BlyV1odwDo50m_bf3139NE8Y3YEpuJGKOXCEbk_FvupRr3iJvukl3y9rGz80QqQkNGDXntQY8bCw7ucz8OqwmrapIvJVfgryapgSGs91hX6Kdl3CzMDRUcw9_4Q8AyoScQlwYoOXl24Tlhnbb6r5Zo9EikGy95PYZhbd1rta46J6rb2vLI7TeAaRQkK1OVye4rgwxpoLl4L2CWf5YualbgIQPm5S7mgcq2tS-U53RdeEq8gckv5LYkitJMkLxxo5s2juPIKDLih7eIQnNMsuXo2p921GS0kmfGuLiyqzr45l8ZuriNpVn6TY8PED9s7y9A64tm7wGRBMhjoaCVlNF5r0OqF7doebSGnGDts6lK-X-iBIfSPKuXo1fK7JAj4bHN8JZsPlYdTg6mBhtqlStqAx5XaWuUIGGi87iCV6buUXOD69t_yIVDbVKOeAMyTJyT0fXV5kEWqN9qPhHaPmPvHjNrK21NywEL7sJkYym8YGTh4H0YeSSj_6Ag6wSFPRIoLjAotUIM1riqDAO4nmJf_qYSG5LQnIv1pHeTXMl2fFdWgVOF33xWqeoj3Yqw-v8iofk3ckmBRoxfHup8cNo8FmfSBkW1n1UfTvEGDoMrJn6PDPpOSHBJXUoFy4wNaE6_ohqahxkTe4w625v0o8XrdP5Rcmu2YS2AZ2eaEWF3zQjtanDNhlU1GBanBZIM7XULngzUwiNkoghvjkrTefYH75O-qLnHs8MDjdTSnKq14VIXlYPy1eD28sL4CawJiWTsudRdHmJEgq480nES1qtYEshkvyBHRkxlp62T9by8cDu1TQcV-PheQZxNqytWQPlWYEvf8XFz1GVbqrzxJxmZiTaKfhqmYPXDELqn1kaJ5RsjVC8iPIDpLUjnjWyJBijHyAazlgtWExO8SWZb_F-UevDafi5yg7algtJtKySfmhVCwrIDgsya7YvjfNTBfofBL-7PJ47aYq28UlzLpQw0bS4adN0wWimDN0J_5ArRZSXpj77RxpTOskiCx1BNL7_akbv0ZyBbzpV7AJaGOyupZMNE3nFFyOmrsvIGJEpH0-xE-eqAlzbIh-vDw2pSxFvkxOo_Ob09Dv0H_NoT_nuo9Y69nejk4isFouC6E65vFg33fpCno2xCqUt4pRCZSH53crW6FSWnztnYnEX0Bqs04tv7k6ZruV_Fb1ThKAKSta4RQ8MhmGu13aFUF4qPoemz0p29mBEiSLGl5as78yu_8WuIWfgBQP6hlhqORXQjWXV6qx8Co8KeeGJzaTSbYKp4Aw3goDgHOWlqBFv3BpQ7TVRkwhqxfyd7_G-5_s5Vwn3QCO27lPSPtHKlO6qBCfWZnQhnSi0Eu6SYbZ7Ty0cxIbnEG-G65B-DzmeOdSEs99WYHUk3X_Hi7ehuwkFAsnBFD1KkOIWG1GiqCH5aPQeuRXR2Dnfr-7HAyNHhMg0itkMV0RZkim2ZcChsO4VtFEi7K2kIep86RyKa-8E_WXgDZ20lHLNajtFnjy8Tp71jJ3n5l2E7XrxV2tbg22i-ArF4aCZ7raaUu50E4oqzkJqjLu9pOerOHvj--ydSnVXAKECvCpTpxhQncZZW0oPgJ5DzEif_7hoF-zYbHMuMupjjdnyHprHwwA8bGY4O7-jDyLz1b81xUYukzPNLbo2-c29cnH_8oF7hMmdxvn-eq2C65d8r8yXuPTWmut2BERYvHmIkf3aoH7CtzLJaUnfFRyf9SjHWcOHBftmxnWtaS1-KoSGvRcWkpsOAAC0A3I43_PWGBKFfDb5DMdiyLc70SrL1ktjT7y9Ss61UkbKngzuHG4VqLYr7Z4WPvBbrqCx56ryjkihTgMg0AYpdP3P8dzE12UQXMjSGKZ-Q9ikpjGOcoLHYNG3og56rvG3FKbtho8qJVuEuGBpsH_1BH9jNwIQGwI2LpQypc2NUfYJ82hko1A6xYzDAN6d7yIe13gfISMgHT5khlDEIda0SJaJ8hHi9UNpJJgrj8hBHNeBiyJO_StYtGTbBWc9cVOjpepC8XkG87Glbio9KqDbAzHdy77Jr8bDuUVWgbjkYSRxexwFk3QRdiwv7CT_Hs0eNyda7QjthDhs4B2nKlmezhisy0CRffu0oPiZIe5_JY6JdTkpob5Rjv7COhKcYWDZf3RZr0dxVh4VrniiB3ZDOICMIuqz5V1mVOjfejMbHzQNrwYM6NgU6WFcBOGllY3JiR5Tq-ydL8Il6vJ8QxYnckRbWynBTIK9da7cXgHwev3sQGbR8Hr0gt3w-fghvevvbp3D44YDL_kMKdueFDcN0w6tZ8iOGCRw-7NGN6MDKjyIZ_USVcEfXm41wMpa2ji_JL9sREk1LI_Yo-rVIDlLXeexeH1XCIGxqWDZ1B34i5fzfyhWtFwkikL1scqCPX1qnqeF-yQbIWyJBWpu1zi4W_HaqyROehUIAxAd46T7BmCcOVa0thJ8JaoXVo1SUThip6BEhAZuVpY6Ksb2kSVaV4p7AnIR6bmtiQFHrF5HR7nwIruBRf253jPKrgMThmSOZnicXG5-a1SVfiW00xDAIOuIeUzev4oNG3bz05XK1pQiFjIPG-ao1u_aT5r4ijNnCeo9HRRbxpiVtS3ZLnu48rVB2WDT1e07FU_CwZv4y6ULZylTMPqcUH-194xOR0PmjVL_FOHwB69GpX56rFzXT94TjPPlDBCzZMllr0XS2WUgenPuVHyIxogFNsAjZ6feSy6lbaXhJSwG7SLHAY7zXU6-u48Sw7GARNh5Zds8Z1z3qYJm5zFvkomHNa2BN38a2BTXUNMTLLDcwfymwGeO8bYvQE63wTz8H6DlUTNrnsjL_bTzO_tYcF-BceC9N7Tn4P63bXXHTGuKqulnLDkFWXJiQdNT2kTurqI2iT90XC3qqwph28N0uFRhyOMVIb7ckMs18Djhz2d9DJPBmBSdr29rqMRoekNg-Ds7XjcJIRvZE0MExh9EgXLsVUI2OJIkqGkh9J_agJyWqdGr3B2I7aGlRF89qaJ6Fc1VQAj4xlMvMKvEJ5IZxrOZtWUMcyqDMqclGH-nfju1bEx1G-6jm4vHH5QFA-fsulIBiOM-Rxpxp9FYDxAQ07pAOyZw8JeWA7tsnpnonhE6xD3Es5WPJ_Wxlb6ZrYfaQopntG3WhYu8RgNrkHtWNDUq-niKgc4Wxw5F1GHgnGzE8qBLatZEci3xT-pA06euypW1dcbwFO4Mws1jWeO52bb-nh-HnSxT0LWzKaQDg4i0jhH8hqa0m25zWoifjtEMli5psdcI9WUYLrBFkTjb9pE4V_3ObUzN_CmE8g-K6V41LH0b9F9yYLA-0UiguRMZYKSbiLdCuxToeAwXFJ-30OD39ghxT_E7UFBp-vXNxuaTpSp9hlW4lwffWIOer8IEfnauIF2aQMJwPO5XNctdEoSaj_1DxMkT7iYnnjNOWXYZ5r7iRcZhFMX6mbisx2KTPcPbD5gr29qCk9y8Ft3J0AbkBnq55TVDjQ4I3vc1QE7MJtLXgHpDMIMZwcUtIC4gutQE92hVi8YaKWBoe7U_cc9SmtFJGWh9NDKG1LVWQrtzhSmA-C1UkWEVwrfibGeZkvmPfCbWkw1QoEsjcchTs5CIRw2ErQx8zOaQOvpFfvjW0wJRumFsZd98zqeMhpRdiujcAuIThYrgZwypNI08t2KZ94rA7v5aKCO0awqVI-q56EP4ot9WsV1Eyw07wq52XBVQeChU88mdFHbnyiEAUDs_B-o1pYaeBcYFcEjR6-tA0vuPk2ACb-pDwuldzp02J2Qmyvjb-sTKgDhCo79adunHXwGEs6unnYvQj8sfr6zir15efCux3j0Ak0Sazoe2DJtoJh0qUWPwLih6DW0WQqJtsnotLNAdXNhl9awdj_b7WI6O2eSkpe6wS9nTEk7tzVKXzNI5hqUGGrC5BTjIMGTf2FTsIADzvoVY2qapJaLLsUAd9JIcWXif8aqlv2OrpeaCcLJ4mVaKo6MaEqb13FPzZ0LD-Wja6GwXBPtafJXsSVMBzuuwp3cgOU3Fy3FX7b1FsKCXIACJ1VPPSjzitboYAvgpgkwIpriS7dX8I7yEqLcPxyRRrdyUsyd9mU5Qfw_l6KbAtnBs_9wWhwsMgfWZOww3L9l4px1aAIsKKc6PCp3F0sseKkFAi0-bAbPfOQb0jTmx9Y6CXcEJOqPlgKWQRjTozO7B3tNPGJiZdnt7_KMAG1VIvbL3iSHO-qAEE5mFycF3zpcMSLvqv40eCZVAqI4QWFIxCAGf2UUUHY_JbjTXm04U0vHHxQxVfCJ-Z47_G5Z7Lh0x_sdYah1fipHLusPlSV7Mo9YaoTus3fVSZonOJEwZvTZztNeMP6UeimgkjrZysN5X7PmpTXfwNr7IVejpah1Rv-UdNl_lX8pMdt9LJ6Qd1uGOttrKUNBxcmf3M98H0tNoQI4g4kBSkj21BTUKjIKQApyFRQ2AsGRHBtxTwbcMFRa_Vo3_VAFakr4eW09cUnsAab3ydY4-VMVgg7HLW7UFvmVuwRJAX0ena4lR4zBxf9q6f7dVdv3VqV_IntEaJVfSAXwub0E1i7s-WZ0wi1STqcREgTh3HFyfQPNGVflos7gwH2KNp_EEzceV_k4yldriCsRznkK7BT3di3l9jchELFQtvcmCRXzqaiw3wIVKHs_TXdiAbwIH_zOWZc61mlOET7wuAR07m9GglilHJTRiJ0BmpnuJxdMEL7xJXfGTkV0WbgfjwekHNxSvZUtQZoN4Xo7gjbUcez_8Rl5SrChbvRNcntArJepKmT8S7j0tk49KwwMKJdTWgIlZgQUx-B-D4BPHvl7oKf1VkwcKwkdlzkcLi6l7e1MIVcsZSsyAoKE-4rnABaU4VaFGzPRDKaKlhRfjcauPzdZaYWBdDQCx54PyI8EPu8OKSSfOc7uvDqT9bB7wBWda6KgrpeY91brlXeMztAXcvSR0FaB5rWZpMy5IM6OAQvc28njWLNUZuDWkE6pLmsrlHkmUks2Hcs1_ZeGfGvhCwyndjFORAKtC3yElMJ4BQrY76FcUyHmGH2mcYeroVY1Yn6dBaVDlxKfKRDdEp6QDAvUHRezC56HXz8sQQmXuQuNVHAdSZ4Ir5RdmoWryGoBlS0D-Op4qI41ylrRvNFKKTDqmEr59VyfRN6nP3Jo55NWFz7lBXY-cideWSBsKchkJVmJGfz3hl7XulqzNzRc-2VjivgQrOW3EU4Rt0YRhVxo3brYWqpWPnzJtL0-VrBZjqQgjWgYvDkZD5kY4hDIz86TaSCglCugSRrKxdmNDNUQzp3IrQFn4BDwleZcOnJsvxSLzqJfIL2PJESXBqxQZwY0dhSgs_QEHQzOg3b930t8v3vXvm4Jb8TJl1WPY7vWGrFzUPY3pw1nm5re6HfTbeVeQZH0v5K-CAL0OOLTRbpIJjQANuN_3Em7Jb3Aah_HyifOmrSTLdmUV0V-Wo1Wfcu7W3v7kVm-UIZG4i9TKuk__vPuqmFxeoPaQiC58t9Uo1eEDM_raOaJmSiOi4acyLDudIv2QPUNvUA6FiEpFIyVxCQxLFExY2bd3pSvmuO6cef9N2Gdmt36tjQQ5lKhhMssr-YS_k1umOiU51UP9t-5rzGOvmucDaL7emq5be_YYTozs_IO2YhL85KshlJJ-F_lXZZJcU0jXGpiqA0O1NNRxLe4bcIRxsECH8Vw8G5aBYkflsBcK20Oc1x0N5cI7Xq_3BopnEyVh0mIDQK5iDbHTkDJQ0P7XgklZuIHPPIRPhsr6tnU1sqrJHAxG5YQaNazbHzAwCZF2EFyy4qKihefByJf4JhLSZBb81TZ7wFn4TsOXD-xB1f0EOvK2rAOiJTgHw0mhl49sR8xo7Ar574wWwRNhL2lL4DPWXFHgRIWCeCiIZsEyqZsc6JEky8AWrgPGzLjCxW35xt2x1sRJo3N-NLf9hquppWPIRHkKrmqtnjECTUHX6MZd2OZEMJl98gxFu_ym3x_pjsmepK18OPKTGXYNlT0ZFxaU_Lx8oTxs975yu5SgVjgyD4iWzFJXgSJwZVe0SfV1S1pITwk7GYQaR9o98u0DE5Ly8-gCzFKg1HAhWzTPkuEPlFKUlZklkJMr5thjDPskLANs8NNB2rCZiPYyv57bgVtJn8gHswsyaZAW8f-0j_Nz8bHQEhn5ViRuhojpnF7UqNCT_SLRdNEKnipbTK9S3sODWeeF60vvLxsFqwjt5L3Dt2IyYPojjJHDd1pE0g4bHerTX4kzLUjurDoOPGuLXCP7fY0-hRuIbP59caJOTQhMO4EKGljqhlHVXqY4v7_8LsQ02SvLv9PjMKowBOVJyQURAcewys_4q5o3ZKImzrbsyh4X8KlGzNtOP2koLww_RnlRQBftEKfU8ccTVu5IJVRkXDZoFtLPKlyRYTu4hLz18_4RGRSAZmGZKrlg79J751V-6T0rbWXWAKBI8JDDqogu4JBRmtWRUjIMmTOFVB0HYUs1HtInGyjDy5VsGJ4F22QrivR2bW09TlfGovXiOwRb0WejtC1tkkDZRgTh9JxkykIA34jCigc9FlNVF70kDFpn31fPBhDKrmMdhWNpx2pyjavNr3hivKhq8pucFma3BdMxWcX5d4hzh9N9YtcCztbdsnOxrhKlaHSJIrs5pIbFSnJ5hN1jJVwQ8P8QU1XxzVMdYsqDPBwW80Abw18eIW59qcQEugJYGgBKixvAWL4UKiXDWwBK93VPCZJB3FQRX5VjS8qCnX13JaWehO0QhNvNm3ldccEfDgClMIJp-YFpfwxK2ODGKldC9DobXU30z5sDMWmsUQa49Nsb8d-XUxc3Lle25yNsAL6scMY92Oce0iontW0SPrgZEmEb9G_bNZz7d1LQNgodhz3E-hxer2RSXcOUv2qXppBjCdI6y_y01P60OTjsEmgSa_ht-wba2qF-2dB2B_YbuZriRZmGxcdU-hKe7eJVvURz_eQR2IiToXK3NyAPGO2PVNECzmk6WSOkG4pis1kg8F9YOxcPPYb2BMMGUqqYRelao1dAwozV3oWVXBRY6gA0jVaMTVGRyxDuu-iwGZo1kZb4tjx7vaJ_sGT1zSlFz_ytDgBoiItaDOMqPEcifJeMHqYfLydYwk4iIgsCDa40tfj4UV70wa5uJVDfF2ASMC6iSGp4Lqomdh_0GwWykgHwpCNAzEhrUiFezl_8Go-v9Lv94SgKC3AAXBDeatFTp_Lrhza3SG5YFCvePv2T5skjP5BmSSvwau3wLs3j9nfZkwf9jOJ5B5Ng7NUN6vvKcQAfZz-1eUUId1Kzhmq5PhivMMwpX70v24DHh-2C4ejKKoAZGHRFwObS86kQfq1AwuxS8ZLycMb83b5cMDnshBQbAhPcibqEoVWqAbhdHkYGUbr7PWwH65RkLnkAgHMpyolC3VtSto5nQZacW8ox6ISCiWsovZGA03vbzV2uTJYEhrvSZU22HUocBxwajjm8t9AZzXZ-ylXf5Zp61m1lfF9Jn9lf869kr7oT5Gh8D3QFFkKmX9gQFb8FnIclh3dzN-0ziFbCNUekYUeAJTgI7khiwJLFk_j_CDB0qlm5IuGc03UCT12JWLjbwu-8iLpFDtslKZjsgJoFCe9iosu1bzIfx54gcmNBiSqURqzaBqMUnsZ_sA_-3tYsQzeQ1mYi4TZuw9XuGDGWcMlMIzdJktaA5YDxKSZ7o2uk6rmP4mQ8_Xb3ttvj58AENpuv70XDwHnywVQ3YmAopPf5GfBrMuuWXcttxMZ4BEzT6Aw9cPKxTK5-jUyQT03Egws5jEHQtntnfpcm-2a-6qwOE5gsSw5F8wLmlK2I4HgAiS9BaQGJBgGyh1QxEC9y530TDS2DztobJCxMAX6Vo6lMn5E6SuLJ4lVooPsw3-H8gTaRl4FoorL-Ng0cybzZ2w_6FRieCZ7Kx7fxTPcR--2pYwUTqejCeOx4KHqmTT98tZEoIdMz-oIQngvnIW0jrS8NUGopwGECyy985FPsDKqH7OHm3PUahn0hTxwGQ5tvYRZnf3zE1SB6lj1NxsWDERBYrHlp9IQol7kWFOQh82R73myLIgniwCXVMcCzOpWFQRfljedfVMYDGxVKPePDu5XYRy7SxL60_-98252Yf8NgB8hni6qT3Ql7a9HlgRHCqk8g2tAdNZT1p9AVoxH9-MkAOvXcuLLRYwpkgkOGlWgM1FTup_JfhGRLUxmoiWmpttebmp82fdsbM6-_whuFge3YHLbVi-oA1tLrjp3NMJ7PchsE4iOE1VgQvxq0i4pB7k5jY9xCzMT5MXMSvtcs3lRn4YFcSAXO_miVm1nRrB7hJCogmdnn7gkiDdEe-CFLFpS84qH1h7nkWidsxWbDrnAm3_nZr_mH5ns-xieNsskMS4PFuy571s5zL_QjjT3gRofc4dGO-4nGeXdy5azbhD0yJM4BO1TTXWilFpy2H09nIF2u-aKHIQZLQ35qgKaU2Im_GnYZOn199iKBOukgHJ-u273-pJFAcSaExh_W3TVTNEioyF2__wOHclNnr28UWWSAhsEbR70cLEtkJy3oJTDBcEqzl-ZXDp7KTznCX65H1eqDp6kZgiOEd6N2GLsWBpgdpRdKKABhbLKgEbYwkQ3SdhY5WnRJbx91IWW31s6-E0L2tjSQUs4gZZ2qdcQkIBEAwC9lH7CPMjCqHXkAU=\",\"summary\":[]}"},{"type":"text","text":"[[reply_to_current]] ya pude correr la auditoría profunda; te resumo lo que importa. Sí, ahora sí pude. **Resultado real:** **0 critical**, **5 warnings**, **2 info**.\n\n**La buena noticia**\n- El hallazgo crítico de antes **desapareció**.\n- O sea: **ya no veo nada grave/urgente** en OpenClaw.\n\n**Lo que quedó**\n- **Claude / Claude Opus workers**: la auditoría los marca como **tiers por debajo de lo recomendado**.\n- **Plugin tools alcanzables**: todavía ve políticas de herramientas demasiado permisivas para varios agentes.\n- **`clawrouter` plugin**: el scanner detecta patrones tipo “leer archivo + mandar red” en 2 archivos. Puede ser legítimo, pero queda como warning hasta revisarlo o deshabilitarlo.\n- **`asana` skill**: ahora ya no lee secretos desde env, pero igual queda warning heurístico porque **lee token/credenciales locales y habla con la API de Asana**. Eso es esperable para esa skill.\n- **Gateway deep probe**: sigue el warning `missing scope: operator.read`.\n\n**Info**\n- Tailscale Serve está activo, exponiendo el gateway **solo al tailnet**.\n- La auditoría resume el setup como **personal assistant / trusted operator boundary**, no multi-tenant hostil.\n\nSi querés, hago la **segunda pasada** y cierro lo que todavía es corregible. Elegí una:\n1. **Endurecer tool policy** de los agentes\n2. **Deshabilitar `clawrouter`** hasta revisarlo\n3. **Deshabilitar `asana`** si no la usás\n4. **Investigar/fijar `operator.read`**\n5. **Dejarlo así** porque ya no hay críticos","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b7630787048190940cb4ed381de0d3\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":1281,"output":1733,"cacheRead":119680,"cacheWrite":0,"totalTokens":122694,"cost":{"input":0.0032025,"output":0.025995,"cacheRead":0.02992,"cacheWrite":0,"total":0.0591175}},"stopReason":"stop","timestamp":1773626088749}} {"type":"message","id":"777ed6dc","parentId":"86820450","timestamp":"2026-03-16T01:57:18.803Z","message":{"role":"user","content":[{"type":"text","text":"Pre-compaction memory flush. Store durable memories only in memory/2026-03-16.md (create memory/ if needed). Treat workspace bootstrap/reference files such as MEMORY.md, SOUL.md, TOOLS.md, and AGENTS.md as read-only during this flush; never overwrite, replace, or edit them. If memory/2026-03-16.md already exists, APPEND new content only and do not overwrite existing entries. Do NOT create timestamped variant files (e.g., 2026-03-16-HHMM.md); always use the canonical 2026-03-16.md filename. If nothing to store, reply with NO_REPLY.\nCurrent time: Monday, March 16th, 2026 — 1:57 AM (UTC) / 2026-03-16 01:57 UTC"}],"timestamp":1773626238784}} {"type":"message","id":"828551ee","parentId":"777ed6dc","timestamp":"2026-03-16T01:57:40.805Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Considering memory updates**\n\nI need to address the pre-compaction memory flush, deciding which memories from our conversation are durable. It looks like I might append notes to memory/2026-03-16.md and maybe read the existing file to do that. The developer's guidance suggests I only create durable memories in that file. I should summarize the OpenClaw hardening actions and mention user preferences, including changes made. It all seems to center on the system configurations, audit status, and decisions made.\n\n**Evaluating operational context**\n\nI'm thinking about the operational context and whether to mention that Telegram chat exec approvals are not enabled, although later there was full elevated system access allowed for host auto-approval. I'm not sure if that information is durable since it might depend on system state or policy, which could be ephemeral. I'll need to append this to memory/2026-03-16.md, and it makes sense to read the current file first before writing my notes.","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b76388a5d48190a16e8b44c371e07c\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt2OUfL3YtMxhw1RYC2-8MSfy5QWFZDDr_acHYy5Koy6WRoZPjoQWGCRg5qEng00vYWhv6zlsTFkvfPX-WWr2XXnLolgT2I9wUtFLXLNFlplE9gQhABk9FshI6W1t3yNSof_V6YDu26y10n9tBb71_gMpXMgZyIiLtIlIaMbnjmrUFwslWktIgJdgMJM9VQrr2EAhCXqdsku6dTTA7rMld8f72Unp1er-S5YECCMeRCNNxKN0jFhDDEiPICF6r2NKdOZs4U6CXKeOvPcDDFKfLjIiIgdIuokh3g3NGiCAOb83vJPFsOJyoDqoA5pCDjTq2j3JrIj2Y30i0bqAw1ZR7KLL6bOyZUT4qYByMg_P2UFoTpGDFIKHZhoGMtNqjIyFhCrBBRRv-i4zrw8FDxzv33ZZ6m0U2x46OLeU2JyhIlddIVC_gjd0QeppeR4lTfPHTLwT-cEGW-n10LlQLhFXyTR1C0Prq7V0iOwTB_vcv5M9BvwSUznT3TW6RUphq_8sXUoHfKrsnrD9IAvGeu3KZrqYz-hy81qTSHejwFlhkIesOmi_TgfyDGcPttJCisUcKLjKrzm-r2TGIsP9TxirwqY5jb8D01P9WERGxWT9HNsdjlP5KnXz2JzEP_6wTq0P_NRPNqqA9QmqyZBxFexvur6iaZoodAfGXYVnWnolknVBDcsw23dNi98ehOfkKwugIIwFR69Dwsa-CGbNSnYfghQM-8Cugfrabd78G8B1SE8OOLzd7J2yfTzWlMHIX9VN2pm_H2-aUl1Ieeo4Qvn2LxkKXgaCPdNhjr7wwvI5NA0ieOhPdG8iCzkjn40BWUCXwKhxp629Suk1W9kBftXXKOeGD19LK7UswSAAfiTRjnBp9UUbzDg04D-rmLdKazvuzCMvA7O6LUH1stkAyzXpceaG9XrbeooSEYxPizq3y2cBbpJ0Lja7L8Il9klJq2-ASrNx133FWVAaffoakATEgyZaAty7FmGrGSQxfgrwqhaKEZ8fXi_8XJ0qnNAGLVUUeNl-4osQcKRwkH9W0w_qwiXJbuVD34eI_peJANJjaB_Xl65tsH1D1wT3DauYmK4Mz_bCcPK0_tCtY1Y4HHagSY8tG7UTM2snMKWz9JpgWyb9zNuZgw8YXDALE1r5pf_EHCyu39BzmaKJFzzirR9t4LHuWfa4h9i3J-VWelInE35NseerSoj6nIvyjyO8Xfobt6XBX9UfUlzKzaL3xT0XHRphWR8iD-9Fp-1_IdiJYipE8bkjU3M2RaaHz_fbFAlQwJnONLZm86bArPVgnWHSG7p6s1Vqk9ItUu4ooCqbFbceuFptr9kCjHMzd146LjQObIHN5P1rhIx4MjCWf5jQx_1viVYTW73qGKF0i3WvFehN7fYOrgVuWQhQFzhfX5vvXXCp0muVtpN_Uxgp5urmy95T8GLKfAUw2BnTN9wgHtcJIsYH3IoylXOuCk_CIlMuudb-JUuur7arXic-77ahefGcq-wOuCPaeRdLPIaA13Z-zKHKPPkmVPW-jITUBPYpSgB7Wqd8xfG80rTwunv_KrGXI_1Ytl11bvUCw06u8u34ilMSsdySSQ7qgXZrmhNbVz3vBIhCXVmjH9F9x4fFibbuME35jRJ52y-FYj0Jpag0P77eGM-FY7R_1GizfHwO7rcw7eRzLP7TexnO3phzfLOWZDjO6AD5erhd3ZvB9l4RRFMwaUjouO6zT39hdpSOCdueovp_yVHS1Tz1XmyLyObgRNBRLQMu36vVGIgtmAALkf1pNVY4tUP8GYGS6l5to6PoAoO8im9CFdepZf9oq7mD2LXRB1x7IUF09sHANORMlslMY8IJ2glUad2UB_4wJRKsoys_xPLOHZhv7HXMHGVXnQ4oCK3QLcV7ZrWFLpbCn2j-xKH2DoVZ_wa0fDPTEHFUd8oBnaSB3xJMIh7urUV4C3pP1jZJ7f6po7fEfYTyDp7kEodIxvit70HLVCy3_fxwdcMpLYyybR1MOm8gPuJBZ58ARZlXHxx8p3urCp9dUy696jGWl7ixEroah3V2N2amyYeCZKzxMq5Eh7BNDroL1h7aTivz5pUUCjGvG8iWP7TkpuavhKeP0rvAi__4yzwmuY2J9TkGsog11vlmypCXTUniRo0FS5YBn3ERUSvoxCkgeZsDZioUL4EEH0P6HGBlzfG8H7AxaZaf3g99RXyUDQB-qSCNHn3NfTVHQKYR6PnCORx2WE4JyTmzAuG0QqUHp4xYU2-9pGRXC7bv9il1Tdw1PKw3JxdpzBayMDq7g2axj-rfMz2P8tnlP8pfwFnnU86bPLcg70TM5sGsKdVnxCVlmoQ4UJeKgFVilDgYk3iMZhn4XXtZr9QJ8fryhUkbPkxdaWAKSwyKB6u19KHAzk4p6Q32GioWvdK-hNZT6OjMAKBtqWEm76e-4lXBwAItrrfP5vFC_p3SLT6Z2r7uUmWr8iupjhyJShHrgzuuLcMdToPZwYoJ6-HRC_0usVBSQAl4QPBT1GkwxFG16WnALGnXNnRiug9sYT8-7479UCi6RPP6t8Atz_dFWF6LcBO4nqqYqrev1aCln4O5ahT9vR17RhWLbfZHKi0gE_M0-9iIRz5x4sbZ1HJ7Ehy7jiGHbMfFCJKImtEk11LWK4GzqRrbRL71PrvYPjQhINzpzG2zVlp9QwsLmmeM7caSwkMak-3BKIpHSF2UrDnyAjLvYnZAfQNgQ5X_M6zRSM9fTBTQzkGqpj99DkyMonQqC3_0\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Considering memory updates**\\n\\nI need to address the pre-compaction memory flush, deciding which memories from our conversation are durable. It looks like I might append notes to memory/2026-03-16.md and maybe read the existing file to do that. The developer's guidance suggests I only create durable memories in that file. I should summarize the OpenClaw hardening actions and mention user preferences, including changes made. It all seems to center on the system configurations, audit status, and decisions made.\"},{\"type\":\"summary_text\",\"text\":\"**Evaluating operational context**\\n\\nI'm thinking about the operational context and whether to mention that Telegram chat exec approvals are not enabled, although later there was full elevated system access allowed for host auto-approval. I'm not sure if that information is durable since it might depend on system state or policy, which could be ephemeral. I'll need to append this to memory/2026-03-16.md, and it makes sense to read the current file first before writing my notes.\"}]}"},{"type":"toolCall","id":"call_xSXf6EUWdbX47Zyw2FgGO6JL|fc_0776d4d0ce7a6f6b0169b763946e0081908c53ad373103d3d6","name":"read","arguments":{"file_path":"/home/ubuntu/.openclaw/workspace/memory/2026-03-16.md"},"partialJson":"{\"file_path\":\"/home/ubuntu/.openclaw/workspace/memory/2026-03-16.md\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":120953,"output":351,"cacheRead":0,"cacheWrite":0,"totalTokens":121304,"cost":{"input":0.3023825,"output":0.005265,"cacheRead":0,"cacheWrite":0,"total":0.3076475}},"stopReason":"toolUse","timestamp":1773626238800}} {"type":"message","id":"21485e20","parentId":"828551ee","timestamp":"2026-03-16T01:57:40.867Z","message":{"role":"toolResult","toolCallId":"call_xSXf6EUWdbX47Zyw2FgGO6JL|fc_0776d4d0ce7a6f6b0169b763946e0081908c53ad373103d3d6","toolName":"read","content":[{"type":"text","text":"{\n \"status\": \"error\",\n \"tool\": \"read\",\n \"error\": \"ENOENT: no such file or directory, access '/home/ubuntu/.openclaw/workspace/memory/2026-03-16.md'\"\n}"}],"details":{"status":"error","tool":"read","error":"ENOENT: no such file or directory, access '/home/ubuntu/.openclaw/workspace/memory/2026-03-16.md'"},"isError":false,"timestamp":1773626260857}} {"type":"message","id":"c314c492","parentId":"21485e20","timestamp":"2026-03-16T01:58:05.179Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Auditing OpenClaw**\n\nI'm outlining the hardening and audit results for OpenClaw. I've updated the configuration for improved security and cleaned up a local skill to use a specific credentials file. My deep audit shows no critical issues but highlights five warnings and two informational notes. The warnings involve old models, plugin tools, and a missing operator. I plan to consider tightening policies and potentially revising a few components. Let's get this finalized!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7639caf48819085c39377d15a455b\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt2OmNZrwZa4YH7oAooyXT4KY8p4LBdoA2eWlv1xEEY7f4hG4UaS11ewQrjmpn-5lj45BFWTiqeX8O_4UhhOiYfvUE5PIZ_eq6gbmuGf3nUPK4Sx6BU7Oj2dNMmKH43LfirrglrWJRk3spvhiTz_JiPr8Rmahu5EZxmURrSmxwSjuztapbKDalTy9aHC67pB2xbixwxOpgP5M1A8SJzz7Kw7LUpvASa98JwjLphDra0u3Nrf6mSOxMfGtikpqWTJBvotd_hMULabkVjt90TozYl6gRmpsyivANidKlrUUUaRuJexck4k2ze2CNw90BxpqlNzhtiA40s30JZlgNrL9SFPxCqKgOUK1-Jp5Iuq4cZzovasX2Ke8Die4il16uemMnEVA8Vc1zJDws6AQIT6MMEsFC-vekjJ-VReFK1iGYE5LD48UxJJEhuGo6j8Eb17u65rXwSPb8xx_AT2C7LKoB3sqJz0Uy93ofAOAmzkoR05Z8wsUnxjlGuNhM3tbLfhUBLj85UlMsLn8slW9rZ1E9Lq-5W7KGgLZP72olKv-XqgG17LAW0V-NJMLZwJmdNN8xe9mRPePh3P9yyRTvBh0OEajquEGlzDBCZZaig6PTarbyuukLJTMoczrWtJ_XiWb-gYbQwdm9FWfW_c5TNmMOH8yQPjwdraeFpYoHpE1xEBKa7jx4Oun8i3gN3N_A8cv5ED1OIVGb_f-NIGC5KQDms694dlyC8PmZ3sdmtcczxP5DWxctZX23o_I4gAiUiWEUowb4Ufk96UQSWiJ4ZkeV_XOrPcPvK4AHBoghVKxKYddmhMOyvuDuuSa69c26oP9iBISoTPxSCs63WmBkpqVkX2pHuKxXJkoteJnOJK8XIpgqaPu8OkkOxYm8fTcizSk771Uqi0QcQBXlFB_5VldrTyz8k7CfGjoTj3QMbOLNjm7dthViDDGawH6RAyyFpWSOHWa7X6D4onL5cpmnTeQ4wWO322PUdz1h-Pp_tSlst2D2REwqePjSbP6arkNG8f6JBCBW8Ez--J_V5DM-hK6B7FS00VGMTjm2ukIx21UowQtOwbtfQC5oVHEYD_qasabSXX8Wm8HJHggqV2jLZru6frDwE5lyqH76-sUxj6KFollAx-j5NbbF8GQ1E95pZVXIuwwab4vklRpst7RulCYZogYcBsVb8Chk13F2MU5H7yv-gpnfZle2uYOPEqNCHaru3TaOLbeTTJ8NcnlqD7GtphJsNmeBBqe3gAXQxgcZRwmzhSKfdkXVXsbvxi_mPEl-ClW1h-SX_MKxwthcrM3EVKIRezbTEXLC5HHz2el44p3bIuhf_ftVdQDW4FLGq5UqXynHcD99NFRbDk7KgFcrFy4CqJa8OOaqti0RYYJ71KQvuutatufg8tD1hBymrI-ImwJvhAhk6AXCzXZ2c3jfkLxPs34xij_5uWoMlRexD-H49wx9rrCEgMctX7TaVoHv0hqOqI-FBwY8fwo7YBKOJzIAruzED8y7kVXP-vSHuUElh21EoNIq0rBS6I4xtGGyqtEFdEzhGvpSd66r1AQCCRBIyTlnPAgEkqhvnroxouqh6t6ziTPrKhoHchKzcMtzFA1iT7c6basnoqIv6LJ3GuX6MC_zZLV0gtUYWmbXqD__dfbmNJHa1BKo6O0cyTIUIpRigmrJNE1IXcYtv0oGlZLHgjeLOeM1lxgmbOox9bFeO7FkaNtwKcTOe0I-LQeTHGvBD2Oop1Ihm9AYr34kASwmEl8UBYhdYk6XhoH4m8xvhjRsc4ShahRexzkV5ukTN-2bJzZZPXhgb0zOMrVEMIbsWE600NCBShomE5xKstJzxVEdiMMqEv220-RKHQ_JWRp0nfF0ZgX9GXmJHzN5OaJJfuYdDwMQC40uVLC-CpQ15BNM_5urBSBSPe4LULUmrFe0VhxirLIoXqKjOfZJcFnavlpzqPuItxUfKPTpBDel2HxVid59yTlJugF-H7zCFFV8rRfj2gVZMjGmTGjitBE8kd4H3zKRanuvBvwZ8OfooOwiprhUuicQTU4oh5KK5MWArK1CUim9b6LzM0KKZYGJfHt7rZtNVjEGO_GS1sby60HZCuQN0hUh7Hisp46cAH5ntfrU_uxFI069PYWCnjN7AVOnf8ABROUb94RXTn5D7_pO4VQsiaDoNFj0LHLtfvbAZvDJX0JC7IYSS_sC9mNLpHbnHYWQuXSo7BuFIqCmvzM4iyv4EZtEAhHCpoL7F46SAM6RcGTEwSLlNnvIwP4A4TMjCW5q8LYUQi4a9Xz-WDJoZdeLjYPig6j3Iz-WEIH3qwr1TXzGXtep-VnlZPAVrgJbfP8eEEpzii33REjmjbfL2g6YtFCydxUkSBqzWP0iu7N3WrzlqOmm30T0g_Fn9ItRxRRw5YYLQQpLOtcqzWvLEDAyxGXywQZbO_23TKYjLeUC-ExYSFgUL1_NDiMNzOZjSp9pLHYf9E7Cetm3iTRAhhx6JZB1HNj3HXsp_pTCxAKAtxCovtNwZ8sr39PTmL_kGlXaOTJKwEcUuNiKTpnryRKQing8yzdsd4tD99odIh_OmyIVG6fDDXtrEqHIzEAIphDMgEVovokzWJHQaR4S98lK2-N6-ejRIHkIA31dF_QGwbHdNFGNw4eRfpNdFotgehi2l7j5Xvu-qsMbr0A3rK0fsfB048Xj3s3QLHv2K3BPXlAQWLI60DtTTftukpQjPRK0jX0G8udKRZW5F2peBtXwGsUCluK6pqG8xv_k96UZw4_Fv0al3S2cI46XLfkm6tIzK5vo3a1IwwbFBMJ2GG0_DBoIDRdRG1GkZU_HAhxAWRotN8aFwnK2360Z9Ioyil3wWH48bApMxqfXYmkVxclaqpwHQYquQOaoO8OD_wEfngepDtdRbrziCfB-j8UzDmCQ8z_yeTOwA3qCFt8uZ_MZJ82U3rNJmxzJ2n_yp6TvI07dDhvgZtRKrE4Ou23oqCPp6Uj-UA1sV8rfwgOVTemsmxaJZp_B9VOp4IA7YvWVDYzONDFThzEgVXnVxpu-lYsGqssxHXVAmSJl6bC_pBkzvzNwrmrmzTdUJNv3k7_OvXCL1UF1jcUcFVM_WAD57mqbOKHUr-wRqfMzAHe5BxpC8bwc9E_w4c_-4H1oVwemN6lP3s5j1EXVFr6MHjgQQn2IyWwphsVFD88A8cgTNO889-9P9PSkhXfcEW8XBKhcOV6wnzMAYQ5M_JnpUblp-ojzbdduaMhZxzPUyRX_IOQprdwl8j2DQcVyIEvwx-TKXHi9vk5xvCbysQHvsKW9_lkZLzgyy7roaLiEXo=\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Auditing OpenClaw**\\n\\nI'm outlining the hardening and audit results for OpenClaw. I've updated the configuration for improved security and cleaned up a local skill to use a specific credentials file. My deep audit shows no critical issues but highlights five warnings and two informational notes. The warnings involve old models, plugin tools, and a missing operator. I plan to consider tightening policies and potentially revising a few components. Let's get this finalized!\"}]}"},{"type":"toolCall","id":"call_pEQpu28CcPUy1uZq3E2207U6|fc_0776d4d0ce7a6f6b0169b763a5ff508190ac6375e07e54948b","name":"write","arguments":{"file_path":"/home/ubuntu/.openclaw/workspace/memory/2026-03-16.md","content":"## OpenClaw hardening + audit\n- Applied reversible OpenClaw hardening changes:\n - `tools.exec.security = allowlist`\n - `tools.exec.ask = on-miss`\n - `plugins.entries.acpx.config.permissionMode = approve-reads`\n - `plugins.entries.acpx.config.expectedVersion = 0.1.15`\n - pinned `plugins.installs.clawrouter.spec` to `@blockrun/clawrouter@0.12.43`\n- Cleaned local `asana` skill so it no longer reads OAuth client credentials from environment variables; it now uses `~/.clawdbot/asana/credentials.json` only.\n- OpenClaw restarted cleanly after config patch; Telegram stayed up.\n- Deep security audit result after changes: **0 critical, 5 warnings, 2 info**.\n - Remaining warnings:\n - Claude/Claude Opus CLI workers are below recommended model tiers.\n - Extension plugin tools are still reachable under permissive tool policy for several agents.\n - `clawrouter` plugin flagged by heuristic scanner for possible exfiltration patterns.\n - `asana` skill still flagged heuristically because it reads local token files and talks to the Asana API.\n - deep gateway probe still warns: missing scope `operator.read`.\n - Info:\n - Tailscale Serve exposure is enabled for the gateway on the tailnet.\n - attack surface summary is otherwise in personal-assistant / trusted-operator mode.\n- Good operational summary to remember: no active critical findings remain; next optional pass would be tightening agent tool policies, disabling/reviewing `clawrouter`, disabling `asana` if unused, or investigating `operator.read` for the deep probe.\n"},"partialJson":"{\"file_path\":\"/home/ubuntu/.openclaw/workspace/memory/2026-03-16.md\",\"content\":\"## OpenClaw hardening + audit\\n- Applied reversible OpenClaw hardening changes:\\n - `tools.exec.security = allowlist`\\n - `tools.exec.ask = on-miss`\\n - `plugins.entries.acpx.config.permissionMode = approve-reads`\\n - `plugins.entries.acpx.config.expectedVersion = 0.1.15`\\n - pinned `plugins.installs.clawrouter.spec` to `@blockrun/clawrouter@0.12.43`\\n- Cleaned local `asana` skill so it no longer reads OAuth client credentials from environment variables; it now uses `~/.clawdbot/asana/credentials.json` only.\\n- OpenClaw restarted cleanly after config patch; Telegram stayed up.\\n- Deep security audit result after changes: **0 critical, 5 warnings, 2 info**.\\n - Remaining warnings:\\n - Claude/Claude Opus CLI workers are below recommended model tiers.\\n - Extension plugin tools are still reachable under permissive tool policy for several agents.\\n - `clawrouter` plugin flagged by heuristic scanner for possible exfiltration patterns.\\n - `asana` skill still flagged heuristically because it reads local token files and talks to the Asana API.\\n - deep gateway probe still warns: missing scope `operator.read`.\\n - Info:\\n - Tailscale Serve exposure is enabled for the gateway on the tailnet.\\n - attack surface summary is otherwise in personal-assistant / trusted-operator mode.\\n- Good operational summary to remember: no active critical findings remain; next optional pass would be tightening agent tool policies, disabling/reviewing `clawrouter`, disabling `asana` if unused, or investigating `operator.read` for the deep probe.\\n\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":150,"output":823,"cacheRead":121216,"cacheWrite":0,"totalTokens":122189,"cost":{"input":0.000375,"output":0.012345,"cacheRead":0.030303999999999998,"cacheWrite":0,"total":0.043024}},"stopReason":"toolUse","timestamp":1773626260873}} {"type":"message","id":"55e5f044","parentId":"c314c492","timestamp":"2026-03-16T01:58:05.209Z","message":{"role":"toolResult","toolCallId":"call_pEQpu28CcPUy1uZq3E2207U6|fc_0776d4d0ce7a6f6b0169b763a5ff508190ac6375e07e54948b","toolName":"write","content":[{"type":"text","text":"Successfully wrote 1551 bytes to /home/ubuntu/.openclaw/workspace/memory/2026-03-16.md"}],"isError":false,"timestamp":1773626285199}} {"type":"message","id":"6b7bcd37","parentId":"55e5f044","timestamp":"2026-03-16T01:58:08.690Z","message":{"role":"assistant","content":[{"type":"text","text":"NO_REPLY","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b763b000948190b4d8a40b1619e32d\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":114,"output":6,"cacheRead":122112,"cacheWrite":0,"totalTokens":122232,"cost":{"input":0.00028500000000000004,"output":0.00009,"cacheRead":0.030528,"cacheWrite":0,"total":0.030903}},"stopReason":"stop","timestamp":1773626285218}} {"type":"message","id":"ac42f36a","parentId":"6b7bcd37","timestamp":"2026-03-16T01:58:09.020Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4020\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 01:57 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY?"}],"timestamp":1773626289005}} {"type":"message","id":"9dea6e20","parentId":"ac42f36a","timestamp":"2026-03-16T01:58:27.226Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Making recommendations**\n\nI think I need to summarize helpful recommendations based on the user's wants. Since there are no critical issues, I might suggest option 1, which is to tighten the tool policy. If the user doesn't use clawrouter, I can also recommend option 2. The safest next step seems to be adjusting the tool policy.\n\nI should confirm the recommendations and ask if they’re okay to proceed. So, I'll say something like: “If it were up to me, I’d do this...” and list out the options.\n\n**Deciding on a response**\n\nThe user might be looking for clarity, perhaps asking, “What’s the verdict?” I could reassure them that “everything is fine, and there's nothing urgent.” \n\nI should present my input in a friendly tone without using the tool since the question is general. It might be worth noting that full elevated permissions are available, but since they only asked about \"Y?\", I shouldn’t act without explicit instructions. It's a little ambiguous, so I should wait for their confirmation.","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b763b4416c81909ee6465ff7619fff\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt2PC0AQmvvO53Lr-l3KEO99j-H3GBGzawoiILtRWaooYdWtOyh8qezK10DMMn2WGKppgh_dvum3VvW6EwqNM-nSwmAjP5qZ3OvfSw38LqILjGBi9pIUTM5E6_Jcp4-eNNUhhkLA9Wu1r0wReYLFEDwhXtKQtkPnnb9kBJsF4M1rvb3jnRMgBTQFYD-4AM9FZ8dcbc1UqX8hExVzG79psdeEZHxUGii36vFJD8RAQju2_iPhs-CbczStMv6-FzGQDPpeWf5lkUQVZLdQxmxhHZ-8VtWNqVZKvkhzw3pul80RRDShidhClR0IY2W7pU32YN_zxewrR-LBPAniD0v-cyPc0_-BXpXTGLBNCQMZAr9QTup2ApiZXJNxZbrATAdp7eMUY4T_ji86Qb6kTQ-yPBKtUOj4WkUuin3luhFuMbMQLd3Xp8Rwj_qpNvX6KiD2PgFkoFk6E38xDuO47qpn8WzdN4Uy98uT1s7ij_U5onnl5h5jo_v2-K4wQOhC_W3EphoMfK1EnOd9YA9bMAoDmca_ZxX0b22N8zpE9XXNDosHCdFZQ9g4-wk98fazuSh83nG18jMGpLDEe0bUvVQM0L0HcSRs-2VgNnaSsbdXbAQ4qfHuuuNBkmLQPMJF6a6yVaeO-XkQi80Zx7Otjhrtgpss7OjaTBRdVRlQ0_3Mtc-FfaL4lcAz12CTgJkrRyy1vixciucy93YZ_Di6mVdLf0apkqBT4WNUVpe7bHAi5YR6EjqVoLXCpdXpWRqXOOp7BkS_h7PqPo1KvhKc25gXhQ6CP2_V_-MTwZowTWX1IWIThhcTe8dxS6are5bOe8JM-wV4xVCmFi8gUL8dvcQXTJx4zRFZObrkLgajT4cwjlboYhPxWMRltpeG1ITnWNd-wQnSncGJCbVCFjsWB-6KqrFhXyRQwgx_AyV1M3l9jv__xpu5RSy8KRjkwBUfYi3gAzJ9dskFcIE8P1Ba-pM_o1BwaHd65soYZbL0IrrX8_qnhqvZJ-VxlzmHhTgbtHgW8c4xPapP9FE5_J2ecN5V6FHNfYCQW9QhMmSb14byDTfO7FFGJrwlDWy6E-3VL4tpo5RtBI7xPMTia7PKCJ4omXoeTG5uQF6sXmjlpjjrkniEdMcUvklwTseLfpz0FHONJe9HqRt32Zm9gGrKRz-MzABxTRKFS_Ekq8uOffBsHwvgf5loq6zHkrClfOeJcwB2L_vSWfNwKXZuxiRveuidpPlbrG8EsYz8i9FvMLK7KToWt3yqQUpqiaCdjpqL9LgJA5TLJi2U_5Rf4LWKxYan1Y5em8pt_Tqo66OFuaXICfJeDjGGd3SP44faBz3jUovC5gBPrHtdmMqgyX_CyrQSJCJWaO1ivQI09MudI_ymuv6DFFEdKrFVn0iOijBtD85rVfOIIcLkuZ7JET-vWhi9Wyr2IhJ3LfPiEOE7aTKiX8Z_0GquTlUumMkDe1b0nHdgK1BRXdEJ-HAuM3DkkF6axdTWs8W9HSoaLgHTVZbg-lhAFA53xtRmEC4Jo1E8vr_qChGwFymGkSVcXqln3SZ0A5FTLOEsxN8ZfflFF8RvJaHu4KIdmj_-_cTQKVkOy1C3RkCbE-lqYdFHLk8xTUKd4wSmCdkq0P8f5QxYU9CKhHKESpZfyxx6_JbD8nGhAausqrryn2IvwmtRpJwtKdNec1ozhvuSPQVzJo3Qb6dMe0XJLnVFsNz3iqwI8d3ATZXNLba2d_rVUhOSNqH8j-RYYPwOUIWiZjFRrkgXowBjAPR3Jh8QQmyvCMrSEcA0k5P9G_kB9Srd1V42lxnUBqpcI88M2ojjDKdH-oQUcXp1sXJyq1zAZ-L_TglHJ080cJ30I6q96x13Ew3SPLsznXvkedh089tWZozi8KyYTDwT0MKsTa_6zjYDG-YDpd7hPTQvcmH5xOhFD7GIcUgKuG_J6Azhq2U17rGb3MSyuHQJo4cEWvtuMyfVcYbO1o_gOzYJOdbTCTWFcZfVDVXi8725yGezdzc5TQk1YzPT12uWs1eDX_9SLruzmsNY2QljT4bBpxRBwSR1Sk2VqjT3x8hf3TUrI-OO4MCV0y1gTPKposaSFK5EdDgf0wNAnDpWa3kSCcd0ph4FCKGkvT1QCVXIphPGnQkJ9lopZ_s7hZ40T8EKvztxqR_K-oT10VGOxDI9Cea8r3Bom3XAkC8ldaD9eBp18mWKTeGu1eahCTumzXZ_zC1Se3J_VdxqOf6_459N2OK08mMCaky-u3RW1Mbds5E1pQrJBFTDCebcYG96FPjShDNFdtBtkfhnIayxshw3L16s1dfRJGleG2SK8K52uZRgY6yrCgxCmODDMLUt_G_vy8mH9urzA2cqbLJVhVS22goY5eZddFN0KYOcMzf_7jTZc19Q57CYc3LyPJYHHVd8iwJJor_1GJfzHKzJDj3cSjcCz3BF9E3IQm8oDtp7inKdC--SZL03cSeVCYOaU0tyYv11kOSyJVhePRYVGkhI7pOTIliODvWhVwSGQG6M1jWVaFM5KIijtxbMHO6kUsT2t5WNIvpSPsbWcEs9NyMA9013GcCpoX6j-t2fWpJAN6L1A-i9ZRsEq8r4DTVpc3SyRwopwhdlAz8AIywXZgSjezd-XdTg3D3zW2AbRy2Bq8u0OW7Hgh8uDgU6RYUimw5qalm-Oi2ROUt8thJrSEoh9HVSD6KUpo2EvuU5gaBWPdzUsvD76OB0C3YxI0g5fTrzjmi1R8XKHStGGc6mFgv2n-6d5sEdBVXO1daGbaKcjpThGCuHUeeF4sGOwoWWP_pfQl__q4jrTsbSuBgfIo0_nO5HocJ_ZgYP6ikCppbQxw_uBrWUevmUbPoPDdItnZh-fXu9LXc7zPuc-QC9skd_QXisQXYNHxVYObvm-7rk43f1A1KH4I-gnXjJ6vrt42YwMAWdedeH-kHgqsoIFVqEEhmyIAOiQnCi4XplXSTTaFbr3iCxBmSO5PYUXFcVx6xqqkqnM97axS5BUnIXHgK6UtfxeNygI-wRWdlP1EIQHJrPyh1cmar1pjebOnZjYokjOgrsxUmjaf2qc5weyAt_XsAHZOSz0ZxB5IpgR0N-phwRaT7mcXRLblkmq32E78SlH589wH8LatlGjacLIKRv71Mb3JviepLcKPnGP59DUKQp1lXy4eps9Ow-WQc4ARnkROXqjjuvWfOTnOUjxaEn_qDdjP0tNumz1juMxl84VSEe09lyvxOICUxxc7yW4MIcToxgIbTqshL9cG5xTrNNHWE4B2gbTymxrPOGbY0rtCMdm5DMm5rL-iVEVfp9qjwwI1lIoQWeyUiaPH3TXacAwtnaNq9inyKG_1ysDjN_m1QYGXW0amu07hE-u3LD2hmJc5bLPKtbNmX4cwzhuo23KZ52fEtw7Hdn5x184A6BtQr5ZadbesvH72gwY2jZ3tM_BGgpo32OKk1E3uWHkccy-OLo7ktbi3B80Vgod08EmmAn4OdvH8q8oRwvq89dffqrQ6B-bP3rZbbvxYFeIghOYR_iXLvMlB51nd6yUr8yKzmzKDrDbtlDLcb2ibqC8YBb5cf_HlcZ2kIeLAI0VL3JTnqRLW66bf76dj715Rx47MGcjmZgePn5qGqfN5pvfBnsClICvkkXa-4G5IMC3dDrh39wPm6HPe5kHpnZ2usJX5dTLCuMAGNKVXk0o6_fbeEV4E3G4gAkOjtI65yeDW7Te_OXhe5hHzrsO3DQgF4SErfiqiJ9uR6l0OG1FBtnEVqrlfh7CrKkjkHW1veJaz6D5c8WHR3PWyW3KijNa-Zrr3dOu-hODmpslVUgoPtNX1XGVlLvPPmSdNTa8iVMJKhrjIFNxRdKvCeCaNaKHz-wkWwUiS09v1W_My-w905jGeVvnVT6_uw8C1C_ag1DcxxatPq6wwEhCBSqEFsEhhAS5lYwe1xoKTNzVSih1jY1VlsmzIqed-7w8DVN77AMT-DRka9QkRQvEJCguXE-gk50c53xz2Sd9QOtirek0t5Fd9snDlHg=\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Making recommendations**\\n\\nI think I need to summarize helpful recommendations based on the user's wants. Since there are no critical issues, I might suggest option 1, which is to tighten the tool policy. If the user doesn't use clawrouter, I can also recommend option 2. The safest next step seems to be adjusting the tool policy.\\n\\nI should confirm the recommendations and ask if they’re okay to proceed. So, I'll say something like: “If it were up to me, I’d do this...” and list out the options.\"},{\"type\":\"summary_text\",\"text\":\"**Deciding on a response**\\n\\nThe user might be looking for clarity, perhaps asking, “What’s the verdict?” I could reassure them that “everything is fine, and there's nothing urgent.” \\n\\nI should present my input in a friendly tone without using the tool since the question is general. It might be worth noting that full elevated permissions are available, but since they only asked about \\\"Y?\\\", I shouldn’t act without explicit instructions. It's a little ambiguous, so I should wait for their confirmation.\"}]}"},{"type":"text","text":"[[reply_to_current]] Quedó **bien**: ya **no hay críticos**, así que no estás en una situación urgente.\n\nSi querés mi recomendación concreta:\n1. **Endurecer tool policy** de los agentes \n2. **Deshabilitar `asana`** si no la usás \n3. **Dejar `operator.read` para después** \n4. **`clawrouter`**: lo revisaría o lo deshabilitaría **solo si no lo necesitás**, porque ese warning puede ser heurístico\n\nMi orden ideal sería: **1 primero**, **2 si no usás Asana**, y el resto después. Si querés, hago eso ahora.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b763c28ca48190aa10375988709813\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":5043,"output":665,"cacheRead":116480,"cacheWrite":0,"totalTokens":122188,"cost":{"input":0.0126075,"output":0.009975,"cacheRead":0.02912,"cacheWrite":0,"total":0.0517025}},"stopReason":"stop","timestamp":1773626289018}} {"type":"message","id":"f3fe8a03","parentId":"9dea6e20","timestamp":"2026-03-16T02:00:10.905Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4023\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:00 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nPensé que todo eso era lo que habías hecho. Entonces que hiciste?"}],"timestamp":1773626410888}} {"type":"message","id":"f6082f02","parentId":"f3fe8a03","timestamp":"2026-03-16T02:00:23.674Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Acknowledging the mistake**\n\nI think it might be a good idea to own up to my mistake. I could note something like, “si querés, ahora sí hago el paso 1” to clarify. I’m wondering if I should proceed without using any tools. To find out more, I might need to perform a memory search query related to today’s hardening and audit. Let’s go ahead and do that!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7642cd81c819084992b7dcc2fcf45\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt2Q3352xPXgUwztl-dJwaxmHO9jXlKEdpSfjt-DPLIjNCrGNfiHDtW0SWX57fvXC352YsLjPWjVwFQCD9oPU90MPbsD_SUvaMnnIvpt22wNM7Ya6KREGMvo_yNUZJldWbRyimUYAl_P_dvDJdczn2FL0ncFdNejbjLyHhLKjR2q31luNsgKsH22oFqG7D4n21HFJGPie-z9hTRgHMtvf2pNjIH5flJk3Y712ik97OIMtNdlBUHSqwFBZzLufrbnvN_RGOyocG4OVBYnGPr2eKXY_l9IDUHwSWAsY6JZVq0ctJfl-CJjTf1OUaJ6T57XVpYVlnVvVyLMPct7IKPia6OGZEw6sJvrbINZI4VQpaOaQi9vwC7Hrmyuj7Wab6rOCQWWcpEsir3QmYGQ-JLnkpHtNso2v_kgH7OZlT5gh2rB2YKopbjKxh1OuUNKpbVAIj0bNY37NzUuWUg7zual69wx9i5DaWSOCVWctoSmIiHzU2Ks-8vdT2CH8oxjIVAUYqHlZO6xAyil0pGn1MTzcgLqL_RIvgqEHnxRY02WMjaXiN1ZieBvg8dr3731Q4hufPzTvpZtujxNUA8R-6zmfSkgkVo0dymmrDvkjPWsQnSK19a4Ke3TY1FwVVYel4riPjeFpBkXg9u9y-QPaeSE2xdVZ78ArC9Obc7O0ggdZV7FgZLhQFXoghimAFZgHzmZpekUWKJ_DPNaQvrdZPyxRppely65RJOF2CbjPAkGHbBeklX-juZ_IyyNkcNSN5fGyJACOyJ9TCStF-dt-dAaG1pwMDGtRi3OrjIuqVZS9yPEBOksfjC8zcbjOEFO7LA7770qdMeF-6o5TdFhtBsvEIpv1N89Op08DmdaYolvo4i7zV2IFhmr9l3flXPccPfPjzDBHrgA7Yxpm4bNJDHcge0JCqeoa-drAva7tvJbXbI5VY0TIVmuPauM9s3DSoXrWTYilo92IPa_viyNeReAxLDrtbD4ADzZv64bQmyeldjqC2knmo8GG3QJug5cLh0s3QaautbuORb-gB-l5oETJYRNtufwLOnN91_NDkNgkDaNf-foixbrMuW3yH5hEF5WFJyAMfXoSgawpKhTPRs0zUsr5C3tg37IMgGm17N5wvZ05J10vTrDB7noMWvha-3U4e1A-B5PLPmMLU0pK3NZPfFghgUbkG_vu4x7Gy28bScYAxFwPrgMRx_PuniibpIAq_wBrw0P8Pd5AEEYTT0p92YRkqP-GkPTlS6EEv7eQVOSMXC8S_ayIq2Ma5aJjIktQGifupJTDXxuzdcZZfN3J_Jtd4GfJfoWQp0ZdYN4sMoiQCsMRBw7sCbN0Kdmy5IetL56b8EYFaFxX_4s2nXnd9zeXQolOCCYBxhYQaV4FQx49XteAaXumIFdGbxK-RvdUT00Euzgv8h_AIpdgPrcFoYYXdF35CBxrr4G7pLIzHKVEW8tV7jpv5QtCu9Bgi0TP7FqT9wntmTz3YDjRt_UkEA9phfqQBgJmjWxkct35uk_yfTEVemc7a8H6fYKp1jh-kMFg-91j-KtTXQTmrrNV5CtbjVl0ZJF80DeINVPDwNS6VUvufWAu1QJV5VBaIqtUhVvovylxn4Ll8bZjWoeatP2jRuYmwjBf20w2zCjiCP0230cllaXKkk0V3mwNKl2IcooFZwHyQytCUPHjYrPj6jYvTc3zV20yLyKKFC13YFiPMnxc1EIGp_WY22AIAjfurs1x3tDNa6oH8szNGkKOFKGULzmyYruk3LQCzQW6g-itGmQmniLsEjnbD99GyVkvHRPWojtXJoeb96372hhkvJ4Fr11FPxMPUy2svSdqf-QWbxN0aYoL7pjjV_lUWSqq5nT9Nr3txQkByggzbdn7KK_CKNV1qfAjJcGdWeKHU-a2dhKU_mtfjPe2e1tVjBisMXsRU8O9reVS720wcIe5wnzdnbgHznvzf-ltwvHDfThkzQAadg5xrW11pxh_yJ0FmivTrpiO2VMIE8sywbzlf8m7woG0KFQhoftXQfm0XRdcZZkIt-cp4pCaARJrsWyRhIc9wSQQaA55Y_sHJVoT1Cu9POntBP5fv24de7sSjPoei_39ZQ7pFxLFBtKOeehXr2m3BwAyFccSixj9zxJXcgaEGienyTEMvkRAt4jAUlnE_1-Pif6dDt8xt_-2dOzwEYh27B-PNMepz796EkTiiV04Du5G__CUYniRIzLYFxmhd_2jPbW_d3jJBp9NW-swF2CbuX3KeA_4n5St4xLX88fyU5HnFCUe_Pn9E1VWc5Bw6ABt60FYkBdB4M-db_wAGc8joMM2K3vvmuiY9WXPmVbu-15WHgFbvTulAxnNkYiRl2kxYyupCRjWzgTJn1AjHIzAoPmv4BbPdNxTtautlg-xeMKil7IMe50ZZgQ_VeVWljej1ZmT1TMksfvwOS2AEIQrVoDu4dVHC2aNbAXBbyRDWyMRQIIwLeaRzn5C4RiDjPTgixiZ73uB3OQP3I51R4fcYJTt2GwljQ3vQb65L_-he4Cf4rBU21sHFD1WmanBcBPBSonCuIHR2MraSfCGbnkNLJ2RKsUcOS3tAd7gKmjaPuF9crhPfF7tZGTiHwxpDLiTjAPZV2KNdu1zNg4RlSqbGh1NM5WHHgwj_j2B8GINIXpcI8xpM8j0ouVQFQlVgLQLVYnXx7JoBZKHWCTJQVjONd5YCDanpG-0jqCPpfgOUtDaguajI1WjDyr8OaHtEGaBQnPywUlmmlXJYrVWzfrEwaR70Y8zzej2XrTmufXrKselmHq8FHBFMCbF5oQVvglidUjYeGuw6lkNxAOT3VFs7VqRXFYfVgl6ogBRqhPDtVgsIqQtLZWziE3JudXESzGIDiiQabZfpjTUqZQ5ASPNs6KHknNjWtO_cjXpTvxUFcsLcsmgJQZdMslnpT--KPtxv6fDleG1BqCZqd3zmexAQbBlTeAFRBatOCKVI-bGxzyuYW9OvgbB9-BDBA80uoAXccliNGxMQ_Qrc7P7jyMfAoezdMwNyvjL_vOD0_chIYS5_r8x6j2FRjUxXvNAaWkrosp8NzKJotWJ5CdMfRonSSdXKoTVdGjR-ySh-IGcRECCT4WiHSqNtByFvY78bWLKva1SzzPq83oOGnkXHJFNBEwZUiFhhxEc-F2zYjWiMEt40cQl9eOsS1xdHAskBSRCUc9UmapcfY9Tm47NuRM-H0HP33jnUGtYpE3839101wtEhGOLcRILblWdkE6VjQlyjV09pQM7nuvzM4gB2iazdzd9sL0VmGqJ_qj97VH2j2JsQkr1ujRr9mDq4ZccBz3C6Q-lgD7kr6P-F6vvhJpM-RsNvj6N-lhsraNgvrIbQgwke23i3ECi7AZVrbDep5B1JhfOqBMCzaZBdBT8Bo8ST5gHdAhYOGspBmjQCNTHq0lzTegLdw2dG-2NWx2P-AZQVaXWmyxk4C_gqpwhNndA6NDayWq9-tIsGvJmWPm4AGiOn0B5tvS--zR69k_MqMpxt3AjbXEc8YcVpMy7jvyOk5O1bU5EX8Jr_OikTK5s2o6KGIN_gPdJ9bcYWY0xcEPLKChbbWw20_K4vZHyB-YRagi-7oFSRWtx43CzU1QlBKvladu_f74HRncfCbLc3bM=\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Acknowledging the mistake**\\n\\nI think it might be a good idea to own up to my mistake. I could note something like, “si querés, ahora sí hago el paso 1” to clarify. I’m wondering if I should proceed without using any tools. To find out more, I might need to perform a memory search query related to today’s hardening and audit. Let’s go ahead and do that!\"}]}"},{"type":"toolCall","id":"call_OtDMv92MCxuSDDzPYU5xzsj6|fc_0776d4d0ce7a6f6b0169b764375b948190ab56644a50ae827d","name":"memory_search","arguments":{"query":"today OpenClaw hardening changes applied what was done and what remained pending warnings criticals asana clawrouter acpx exec allowlist operator.read March 16 2026","maxResults":5},"partialJson":"{\"query\":\"today OpenClaw hardening changes applied what was done and what remained pending warnings criticals asana clawrouter acpx exec allowlist operator.read March 16 2026\",\"maxResults\":5}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":461,"output":493,"cacheRead":121344,"cacheWrite":0,"totalTokens":122298,"cost":{"input":0.0011525,"output":0.0073950000000000005,"cacheRead":0.030336,"cacheWrite":0,"total":0.0388835}},"stopReason":"toolUse","timestamp":1773626410902}} {"type":"message","id":"4387c336","parentId":"f6082f02","timestamp":"2026-03-16T02:00:24.345Z","message":{"role":"toolResult","toolCallId":"call_OtDMv92MCxuSDDzPYU5xzsj6|fc_0776d4d0ce7a6f6b0169b764375b948190ab56644a50ae827d","toolName":"memory_search","content":[{"type":"text","text":"{\n \"results\": [\n {\n \"path\": \"memory/2026-03-03.md\",\n \"startLine\": 1,\n \"endLine\": 30,\n \"score\": 0.3739320397377014,\n \"snippet\": \"# 2026-03-03\\n\\n## Tailscale Routing Fix\\n\\nIgnacio corrigió el routing de Tailscale para proteger el dashboard de OpenClaw:\\n\\n- La raíz `https://miopenclaw-vnic.tail9799d2.ts.net/` queda reservada para el gateway dashboard de OpenClaw\\n- `/` apunta siempre a `http://127.0.0.1:18789`\\n- El dashboard/sitio de Coto que estaba ocupando la raíz se movió a `https://miopenclaw-vnic.tail9799d2.ts.net/coto/`, apuntando a `http://127.0.0.1:3001`\\n\\n## Protecciones implementadas\\n\\n1. **Guard automático**: Instaló `~/.local/bin/openclaw-serve-guard` con timer de systemd de usuario (`openclaw-serve-guard.timer`) que revalida cada 30s que `/` siga apuntando a OpenClaw\\n2. **Corrección automática**: Si alguien vuelv\\n\\nSource: memory/2026-03-03.md#L1-L30\",\n \"source\": \"memory\",\n \"citation\": \"memory/2026-03-03.md#L1-L30\"\n },\n {\n \"path\": \"memory/2026-03-05.md\",\n \"startLine\": 145,\n \"endLine\": 168,\n \"score\": 0.36796185970306394,\n \"snippet\": \"- Added periodic cron drift guard (every 6h) to check hotfix integrity and alert with remediation command if drift is detected.\\n- Important operational lesson: local fixes in `/usr/lib/node_modules/openclaw/dist/*.js` are not permanent across OpenClaw updates; reapply script/runbook are required post-update.\\n- Resumed DIA work via codex recon run; produced handoff:\\n - `~/.openclaw/workspace/dia-recon-next-steps.md`\\n - Findings: DIA VTEX endpoints reachable from current host, no obvious WAF challenge in lightweight checks, current egress appeared Argentina-friendly in that run.\\n\\n## 2026-03-05 13:52 UTC — DIA autonomy switched to HTTP cookie mode\\n- Received handoff from Claude Code: Flutter\\n\\nSource: memory/2026-03-05.md#L145-L168\",\n \"source\": \"memory\",\n \"citation\": \"memory/2026-03-05.md#L145-L168\"\n },\n {\n \"path\": \"memory/2026-03-05.md\",\n \"startLine\": 132,\n \"endLine\": 147,\n \"score\": 0.3644869595766067,\n \"snippet\": \"- Patched runtime variants: subagent-registry / reply / pi-embedded / plugin-sdk reply.\\n- Validation pass: `runId=3c81985e-da19-4f5d-bf01-ade7b5b7c183`, `sessionKey=agent:gemini:subagent:9532f2a0-a1c6-408f-88a0-7f6caf1a6138` now returns transcript message.\\n- Documented runbook: `cli-subagent-transcript-fix-runbook.md`.\\n- Added reapply script: `scripts/reapply_subagent_transcript_fix.py` (dry-run/apply/restart + syntax checks + backup rollback).\\n\\n## 2026-03-05 11:35 UTC — Durable memory flush\\n- Fixed subagent transcript-loss issue for CLI/backends by patching delivery-stage transcript mirroring across active OpenClaw dist runtime variants.\\n- Confirmed working with live probes: pipo, codex, ge\\n\\nSource: memory/2026-03-05.md#L132-L147\",\n \"source\": \"memory\",\n \"citation\": \"memory/2026-03-05.md#L132-L147\"\n },\n {\n \"path\": \"memory/2026-03-05.md\",\n \"startLine\": 1,\n \"endLine\": 27,\n \"score\": 0.3619994610548019,\n \"snippet\": \"# 2026-03-05 — Major Stack Overhaul Session (with Claude Code)\\n\\nA very long and productive session with Claude Code (not Pipo doing the work, but worth logging for continuity).\\n\\n## What changed tonight\\n\\n### OpenClaw & Gateway\\n- Updated openclaw from v2026.3.1 → v2026.3.2 (`sudo npm install -g openclaw@2026.3.2`)\\n- Fixed `OPENCLAW_SERVICE_VERSION` in systemd service file to match\\n- Updated `OPENROUTER_API_KEY` in service file to new key\\n- Fixed Model Selection dropdown bug: moved `blockrun/auto` to first position in `agents.defaults.models` (LitElement falls back to first option)\\n- Gateway token in service file ends with \\\"our tailnet\\\" — looks like a corruption artifact, but gateway is running\\n\\nSource: memory/2026-03-05.md#L1-L27\",\n \"source\": \"memory\",\n \"citation\": \"memory/2026-03-05.md#L1-L27\"\n },\n {\n \"path\": \"memory/2026-03-01.md\",\n \"startLine\": 23,\n \"endLine\": 34,\n \"score\": 0.35890255272388455,\n \"snippet\": \"- Claves (Gemini/OpenAI/GitHub) se inyectan desde `~/.openclaw/openclaw.json` al abrir shell.\\n - Contexto principal de trabajo: `~/.openclaw/workspace/ops/docker-cli-stack`.\\n - Si aparece “API Key missing”: `source ~/.bashrc && bw-sync`.\\n- Se validó estado “Maxxxed Out”:\\n - Archivo de referencia encontrado en `~/.openclaw/workspace/MEMORIES.md` (el path informado sin `.openclaw` no existe).\\n - Nuevas directivas de despliegue: usar `pipo-deploy ` con puertos 3001-3010 para exponer servicios en `https://miopenclaw-vnic.tail9799d2.ts.net`.\\n - Modo de trabajo esperado: no solo codear, también levantar y mostrar resultados en vivo cuando aplique.\\n- Proyecto “Coto Reverse” Fase 1 ej\\n\\nSource: memory/2026-03-01.md#L23-L34\",\n \"source\": \"memory\",\n \"citation\": \"memory/2026-03-01.md#L23-L34\"\n }\n ],\n \"provider\": \"openai\",\n \"model\": \"text-embedding-3-small\",\n \"citations\": \"auto\",\n \"mode\": \"hybrid\"\n}"}],"details":{"results":[{"path":"memory/2026-03-03.md","startLine":1,"endLine":30,"score":0.3739320397377014,"snippet":"# 2026-03-03\n\n## Tailscale Routing Fix\n\nIgnacio corrigió el routing de Tailscale para proteger el dashboard de OpenClaw:\n\n- La raíz `https://miopenclaw-vnic.tail9799d2.ts.net/` queda reservada para el gateway dashboard de OpenClaw\n- `/` apunta siempre a `http://127.0.0.1:18789`\n- El dashboard/sitio de Coto que estaba ocupando la raíz se movió a `https://miopenclaw-vnic.tail9799d2.ts.net/coto/`, apuntando a `http://127.0.0.1:3001`\n\n## Protecciones implementadas\n\n1. **Guard automático**: Instaló `~/.local/bin/openclaw-serve-guard` con timer de systemd de usuario (`openclaw-serve-guard.timer`) que revalida cada 30s que `/` siga apuntando a OpenClaw\n2. **Corrección automática**: Si alguien vuelv\n\nSource: memory/2026-03-03.md#L1-L30","source":"memory","citation":"memory/2026-03-03.md#L1-L30"},{"path":"memory/2026-03-05.md","startLine":145,"endLine":168,"score":0.36796185970306394,"snippet":"- Added periodic cron drift guard (every 6h) to check hotfix integrity and alert with remediation command if drift is detected.\n- Important operational lesson: local fixes in `/usr/lib/node_modules/openclaw/dist/*.js` are not permanent across OpenClaw updates; reapply script/runbook are required post-update.\n- Resumed DIA work via codex recon run; produced handoff:\n - `~/.openclaw/workspace/dia-recon-next-steps.md`\n - Findings: DIA VTEX endpoints reachable from current host, no obvious WAF challenge in lightweight checks, current egress appeared Argentina-friendly in that run.\n\n## 2026-03-05 13:52 UTC — DIA autonomy switched to HTTP cookie mode\n- Received handoff from Claude Code: Flutter\n\nSource: memory/2026-03-05.md#L145-L168","source":"memory","citation":"memory/2026-03-05.md#L145-L168"},{"path":"memory/2026-03-05.md","startLine":132,"endLine":147,"score":0.3644869595766067,"snippet":"- Patched runtime variants: subagent-registry / reply / pi-embedded / plugin-sdk reply.\n- Validation pass: `runId=3c81985e-da19-4f5d-bf01-ade7b5b7c183`, `sessionKey=agent:gemini:subagent:9532f2a0-a1c6-408f-88a0-7f6caf1a6138` now returns transcript message.\n- Documented runbook: `cli-subagent-transcript-fix-runbook.md`.\n- Added reapply script: `scripts/reapply_subagent_transcript_fix.py` (dry-run/apply/restart + syntax checks + backup rollback).\n\n## 2026-03-05 11:35 UTC — Durable memory flush\n- Fixed subagent transcript-loss issue for CLI/backends by patching delivery-stage transcript mirroring across active OpenClaw dist runtime variants.\n- Confirmed working with live probes: pipo, codex, ge\n\nSource: memory/2026-03-05.md#L132-L147","source":"memory","citation":"memory/2026-03-05.md#L132-L147"},{"path":"memory/2026-03-05.md","startLine":1,"endLine":27,"score":0.3619994610548019,"snippet":"# 2026-03-05 — Major Stack Overhaul Session (with Claude Code)\n\nA very long and productive session with Claude Code (not Pipo doing the work, but worth logging for continuity).\n\n## What changed tonight\n\n### OpenClaw & Gateway\n- Updated openclaw from v2026.3.1 → v2026.3.2 (`sudo npm install -g openclaw@2026.3.2`)\n- Fixed `OPENCLAW_SERVICE_VERSION` in systemd service file to match\n- Updated `OPENROUTER_API_KEY` in service file to new key\n- Fixed Model Selection dropdown bug: moved `blockrun/auto` to first position in `agents.defaults.models` (LitElement falls back to first option)\n- Gateway token in service file ends with \"our tailnet\" — looks like a corruption artifact, but gateway is running\n\nSource: memory/2026-03-05.md#L1-L27","source":"memory","citation":"memory/2026-03-05.md#L1-L27"},{"path":"memory/2026-03-01.md","startLine":23,"endLine":34,"score":0.35890255272388455,"snippet":"- Claves (Gemini/OpenAI/GitHub) se inyectan desde `~/.openclaw/openclaw.json` al abrir shell.\n - Contexto principal de trabajo: `~/.openclaw/workspace/ops/docker-cli-stack`.\n - Si aparece “API Key missing”: `source ~/.bashrc && bw-sync`.\n- Se validó estado “Maxxxed Out”:\n - Archivo de referencia encontrado en `~/.openclaw/workspace/MEMORIES.md` (el path informado sin `.openclaw` no existe).\n - Nuevas directivas de despliegue: usar `pipo-deploy ` con puertos 3001-3010 para exponer servicios en `https://miopenclaw-vnic.tail9799d2.ts.net`.\n - Modo de trabajo esperado: no solo codear, también levantar y mostrar resultados en vivo cuando aplique.\n- Proyecto “Coto Reverse” Fase 1 ej\n\nSource: memory/2026-03-01.md#L23-L34","source":"memory","citation":"memory/2026-03-01.md#L23-L34"}],"provider":"openai","model":"text-embedding-3-small","citations":"auto","mode":"hybrid"},"isError":false,"timestamp":1773626424333}} {"type":"message","id":"0b6f8806","parentId":"4387c336","timestamp":"2026-03-16T02:00:32.244Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Considering memory retrieval**\n\nI’m noticing that my search didn’t find today’s memory, possibly due to some embedding issues. I think using memory_get might not be necessary since I already have conversation context. However, the instructions suggest employing memory_get to pull only the essential lines. To be cautious, I should probably retrieve today’s file lines, as the path is known. So, it looks like I’ll be using memory_get for today’s file.","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7643a92688190bfca96f6da8939a0\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt2Q_MectR11dsd0DYtbCOHZARok9UMEk_V_dwgJqj_1L5_JcfrWNwrpCr90lCeuNNTxwQVNdwOqNighn9WguqzdYzAV4Obm1I9sMmi7TfW9KGplx0245SPJX-UTjl_Lt10qx4kgVci5gRahi0tZHUpf4m--rPte53XbtDGOnmYb4iDZ-UIN9FnYUjsOj0QTAW3Fxx5Fjj8ExCkN5cSuS6cOMWd6wQlY8E778U5F91VjeezCS-F8-aHOV0cWx8_LfrDuRgoUrHNylxG4IU6QSyZoBVgdO6XVzcbTRuETVwX8sTlC3Z_P4wcESmKGJSk5BIJDOJJOfbJvoUfafjD52eNdUcBd0ZGiR-nKmecSZn8Pu2a3-GNqTZ3gj0NDqFgi8QdjJ-J3A0AAxsq33ZxTTfERsaQoCW42cw6xBv-DYsrYVDlt9YTCeV2AS8cmXYAm7vlUwNI2ENHQPqcVCuO53AhDTeP8N3LfHeVZ-q3dZZFLohBATsAb7xGLHfvATrmBeJhUZOY0Nod4XowRMINMUJtXrrxJVaMrlfgDuQ470228Y8kh6cUDlMh3RhkbmwHx6ml4xZ8Hoy-1RZ-NrOvDbZEIp7EZ5KF3LMvdwoT4o_gHkojUNW-KZFgoTtmA-Ud-P7rb-G7UXCay-ypbNWhNtizkclWLqJr0ROdgJATSuVD87H88N_660LBqa4smJxzCz0z9xwf7hCZ_Yd-LBdPDd_-Rz80Mfk3rO17gE3uPywru-2RbsvNhzhh1h8F4UbT8ckmnLnilcBmBCwl--1dD3NnCoxauSqOMJsiaYpydR2T_syyKw-bI4O4V9LrI54IZzr9RSGCOdD2Ue8AThMPXx5c-xe3bkKxAgEKygMTtxTLVdHfc5gBl90rWDP54tYLJdUD8xY2HhHvAmjq0zj9bYOR0dumukq5AQVj5Dm4A4betpKLuzrq_SxdtJVbZTHqgC--qu1ItiHmzwov0kLc36BZR4VQVVkwJDbt3acGvYGMo3UswLTpZnMtWZxKrywj9cee5Sq7d0DlsTWGR_VjNtwdhDP7e8ZOGGCiDTVMovuVNZX_tjE2XrF-O5l0LsbwfJzeK09zB81o0Wq4QDrZKcGYSAKcSiyxCL86dyuizc4zi5CeFPVa7dra6Xqy5RFiZiJ8pNaoB5TzpZisHNdxqHnCDo8SKaAe8UsAzAJW3X8iIZidGaOhAyaNVg_HI9s5TEsGPNkVORRjEHRrapRlqD4FwSFqIchJG4OWUx33KfAe47BrRiAaclR2ExuQS66l0rB0jb8ipjQ2l62mz09dAtWaVkkLFYCHv8RssHwdZu2fYjO3tqdJjJPPUXdfN-OEZlxSbE6K7eo7Mi1W1LmfDZQfv_t0rmzRXjhaXfNh2WlScTYyTvmE3WCHdu_X2PToHUleypCTKIeiUxpHkOE0eA3yUKmWL76-c5sRLuYXeJ2DQlQsWsWuz0Efc6qggb49TKXFPo4kgEhLsV3v46YGEOtZaFhZtMWQ7l6fqAO6Z4POfZe4qVLtjrwFZKNiRXvtc7zcxs\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Considering memory retrieval**\\n\\nI’m noticing that my search didn’t find today’s memory, possibly due to some embedding issues. I think using memory_get might not be necessary since I already have conversation context. However, the instructions suggest employing memory_get to pull only the essential lines. To be cautious, I should probably retrieve today’s file lines, as the path is known. So, it looks like I’ll be using memory_get for today’s file.\"}]}"},{"type":"toolCall","id":"call_FrKKEjioPsDKxkQRsOZE8mDP|fc_0776d4d0ce7a6f6b0169b7643fe5e081909deaddffb3ee3656","name":"memory_get","arguments":{"path":"memory/2026-03-16.md","from":1,"lines":40},"partialJson":"{\"path\":\"memory/2026-03-16.md\",\"from\":1,\"lines\":40}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":1754,"output":145,"cacheRead":122112,"cacheWrite":0,"totalTokens":124011,"cost":{"input":0.004385,"output":0.002175,"cacheRead":0.030528,"cacheWrite":0,"total":0.037087999999999996}},"stopReason":"toolUse","timestamp":1773626424359}} {"type":"message","id":"33a1cc7d","parentId":"0b6f8806","timestamp":"2026-03-16T02:00:32.275Z","message":{"role":"toolResult","toolCallId":"call_FrKKEjioPsDKxkQRsOZE8mDP|fc_0776d4d0ce7a6f6b0169b7643fe5e081909deaddffb3ee3656","toolName":"memory_get","content":[{"type":"text","text":"{\n \"text\": \"## OpenClaw hardening + audit\\n- Applied reversible OpenClaw hardening changes:\\n - `tools.exec.security = allowlist`\\n - `tools.exec.ask = on-miss`\\n - `plugins.entries.acpx.config.permissionMode = approve-reads`\\n - `plugins.entries.acpx.config.expectedVersion = 0.1.15`\\n - pinned `plugins.installs.clawrouter.spec` to `@blockrun/clawrouter@0.12.43`\\n- Cleaned local `asana` skill so it no longer reads OAuth client credentials from environment variables; it now uses `~/.clawdbot/asana/credentials.json` only.\\n- OpenClaw restarted cleanly after config patch; Telegram stayed up.\\n- Deep security audit result after changes: **0 critical, 5 warnings, 2 info**.\\n - Remaining warnings:\\n - Claude/Claude Opus CLI workers are below recommended model tiers.\\n - Extension plugin tools are still reachable under permissive tool policy for several agents.\\n - `clawrouter` plugin flagged by heuristic scanner for possible exfiltration patterns.\\n - `asana` skill still flagged heuristically because it reads local token files and talks to the Asana API.\\n - deep gateway probe still warns: missing scope `operator.read`.\\n - Info:\\n - Tailscale Serve exposure is enabled for the gateway on the tailnet.\\n - attack surface summary is otherwise in personal-assistant / trusted-operator mode.\\n- Good operational summary to remember: no active critical findings remain; next optional pass would be tightening agent tool policies, disabling/reviewing `clawrouter`, disabling `asana` if unused, or investigating `operator.read` for the deep probe.\\n\",\n \"path\": \"memory/2026-03-16.md\"\n}"}],"details":{"text":"## OpenClaw hardening + audit\n- Applied reversible OpenClaw hardening changes:\n - `tools.exec.security = allowlist`\n - `tools.exec.ask = on-miss`\n - `plugins.entries.acpx.config.permissionMode = approve-reads`\n - `plugins.entries.acpx.config.expectedVersion = 0.1.15`\n - pinned `plugins.installs.clawrouter.spec` to `@blockrun/clawrouter@0.12.43`\n- Cleaned local `asana` skill so it no longer reads OAuth client credentials from environment variables; it now uses `~/.clawdbot/asana/credentials.json` only.\n- OpenClaw restarted cleanly after config patch; Telegram stayed up.\n- Deep security audit result after changes: **0 critical, 5 warnings, 2 info**.\n - Remaining warnings:\n - Claude/Claude Opus CLI workers are below recommended model tiers.\n - Extension plugin tools are still reachable under permissive tool policy for several agents.\n - `clawrouter` plugin flagged by heuristic scanner for possible exfiltration patterns.\n - `asana` skill still flagged heuristically because it reads local token files and talks to the Asana API.\n - deep gateway probe still warns: missing scope `operator.read`.\n - Info:\n - Tailscale Serve exposure is enabled for the gateway on the tailnet.\n - attack surface summary is otherwise in personal-assistant / trusted-operator mode.\n- Good operational summary to remember: no active critical findings remain; next optional pass would be tightening agent tool policies, disabling/reviewing `clawrouter`, disabling `asana` if unused, or investigating `operator.read` for the deep probe.\n","path":"memory/2026-03-16.md"},"isError":false,"timestamp":1773626432264}} {"type":"message","id":"548dbcc2","parentId":"33a1cc7d","timestamp":"2026-03-16T02:01:07.519Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Reflecting on task progress**\n\nI’m reviewing what I accomplished and what still needs attention. I hardened the configuration, cleaned up Asana, and restarted while confirming the audit. However, I haven’t retightened the per-agent tool policies, disabled certain features, changed wrappers, or fixed the auth/perms scope yet. Overall, I completed the first real hardening pass and addressed critical issues, but I still need to tackle the decisions with functional impact. Should I continue with tool policy adjustments next? The audit came back with no critical issues, five warnings, and two informational notes.","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7644795d48190909da2e5f552542c\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt2RgBIK9mbrwYT3Ur0UwW4TsmxyaZuY7YkVg6LYFn5upiIWXvfc7yR_D-HBK5rbZ1SbuCF72GUXx3gCFPPNCDWUMdjNN2DOahYuiSBmcPWI1LdK2W5UIwEsVsIC3ZZdc0cZ5QBRbms7scsuoIH8JWhsG9v8RiUzLPLlI62Y86zlMa-x6XbC03FsrdQcmudReVCG8FtTF1pRN1seb7ygvEo5EK_f1Jh9yLhhbP7Jzc0RBDNonU9OYpkDmoQLCZ286mC3sh5163xs_yzfU86KNsKZQO9xSnwmbk3V7XBqUxIg_tXH4a-H8GZq9Z5WDQFFdaH8Ks_NwvlAOsC7SWfPcXqHQU6yzDqAC55Q2JyjY9Iz9xj4F1MVFwDG4pjBDMKcFXRTInvtK7uq8tisbrNpXBaRnjLIU-FvAVk5rICM3neSnKi2lpNBMh2ec9sSvl8iF20CZO90L8AmfVLsJvn_yGZeKdsINV9VrS4QXPo6S8RFlfO82xpUD1YDFNwbUqVfFR67LPLTdi4r7y1gqu_ARICBfqFeUrgUw3zcwH87OJy4aYRXR0wDv75GNvrp_OYkXAD5GqqBtzYdHEWrtXOWjxljJoEvPoMXkXjpQx4trYnAV4L7exXQB2mItKV5ENGnYaEYkpadZRHF8m7nrqHUtl9mDQL8CxJd0gGzaJ0x1HId2pkQ_yy1BZAoHjbEh0nMLWmXgxn2TK-jaojYjLHDiMz0pgl1cOFnoMWW15hBwETLPHNNXyOelK9gdSlXBHlDmJ5LmaNgr2kKmIYgoVr0GO4VMKkNBI7AgthjZG8-Dyemt9kj9dZkTJ3lIfc9gs_u8s8-0uBc9o7qmujVY4DwcCyBxyA9SOErzy0KJIhc_wI0TxhBJ7zqiQrqfQMxqDp3VMi-Ze-TfKWShYFIPda7sDdpbs5EOdEl0HM5I0ubJqyxeGVe8nf-LWtmZ3Fjnb4EmP8GnHuwa1iDcKs3syfrh2elLMMg3OIpEec45kvSaNarV7iz1XQPhq7Og7EZVRemBQtWHNzZ5mydaNPd7LXYB28bs87Af5lAFCF4VVAGFH01Vpzmhlm6OYGsoyqpWimnQ62K8U89il0fVI3k0fpvL8P-xI9Bd1WbzXRg1PxjKPEkGIs4knEr2a0l8odYBWl1dQYwfL5XJ3y9MrAbU94bfd9YudmDB4v5RmHqEuse4pWKbLxBamrL4SUJXVQVF-maSVYIN3ZPOv0bTMeOykGd7__E-G7HKDASHhOEpWkHpzf2BP0CUGqeW3o8s5ROJpk1QZXwplIkYuCvhNg1AmHzRrCkfSnO7Dg87mVyc4VhvM8YOTEPerqlpmyNYsK3ZaRcDtJHEHJTgniJAhOUT2nCDnV87d6ce76_tF1Kj4N5Oq4XcumpMkJGlJpIIW4gu2ztXR_qtqVZEv1JSeRX8X08TweJFKljEANIjKAW_Xsz0ux3_RGqZCVd7BzUyGRgWjq97sMpZtKy9U3BU6QU6N2T0aOp_jQgBIYclwfLXr9kINyB0LPHTjey6w9oGYc_SCoI8tLxEPAk9zIiIto60hwZfVMB_8M_Uzib2J1v1Qf1iMmAqQGJu9rnBuWVU5p_rZ-ulXePinozOkiJOuHcjJY7YVTKu5EaYaw6dlI5QkrqO-AAClzu-6z8XCY3T34bnQvBbWpOdEABMXyYp8Abzh52tGBUMXgBOvzke7lNgO5bJ8hETMilqIHYYEJIgcAR5S8jbpx1IvOSw6rkgSgLL7oFj1cLkinWR6deztg1ho9O3S9tM9oZFTcUa-6cd2bM_nvuJxSuNQj7K4_XUyNiNFDJw2nSwCXL4_nro1kdutDiu405hsX--x5lRm_KfK6ZENb-GJxPIeUgCy-w_IoouhZrMRpOEbi5fIHzYoPF0FBIxNWZZKFHhzWyCpJ9o46LHMl98Zep44I57wr2hBz5IojKkFLHwEnee0UKhiR8gAAYKbiRlcIFwpS5Te5jPK-BYRSCXtzuJAeJI5fnOqxJU8iPZhIVpR8MdYG9tYe0I6doj77Faie3RsA2aleOqtxqbGsjnSrDd5q0uzHM0CZctCPsrd29wIFQeBQPKT0cFANe1ATGYODUlC465Li8LA7A5Ytq1yH53zunZnQJqMMWHiR4LThGdJhO1GcC1P3pUG4Tenze-3ZDFJdzDsUY4NNpIizY8bt0I41gYPKrELjVfi8UiTLYWawzPfq_EedjC27Uz3qIKCmZNlg1a4TXmuboh06qm8cAtsAMWYpKqKgKNUKITl8LYHr48N7a-yzT8Utqx9SQXF9vO_45zxf6h9s6Oyv8O9m9GbOhx6AKzCy8sj_KG6eAYs-823SDG0mVltD96o0xLDqTI8uQ6zNhy9Ib8P5DVEYlEHCG1vd4FInnW7FHyXdeaYOqygglnoGNML5JdXo_9JTWRAw1UMpI58J9RRoBaBf3PwXirNVJYm5z1n0-SJ6a4WChUHJXBrigBqKKOJGOeQB1OsnLk4dnV6pxoLKHNHhWT_gMSEeLxMiRrefzXo1UGkaOYMSuQE2V8zhrObyr0ZkKvdMAdBOOqjHG4iVps7yjwQTcxzCtb6PvjgUyE3PJDa0-0Kdb-PiWWOnABI-khbrDr8Wy1Dps0bb9nrR9l8g8w_MZYZEzt2QDOzGUJx_p9WiXOppevi_jbHjt0sNOBoCzCa5Q_ChGxNwdwQ06bU_tyeQoWbdm3lAYQiB1F3Fa7kdegqaryz1b5fMQxQdrLtYNo1qxyQn0tEckq_oaVCexLhytS5-vrYwgG4eEEDFO1dowhaxKfGFt2p-fnt4M4yJbmZkT8v6AO69Uttj81Ambtifisq6tH-4BSOzMtkYuhvQ2DW1SiOvB6J2gHfMe4DqzxWMFrCtIo7MJwcyb4wrfT_6pYCEihRFWgyDjiGGlZO8C4GSGUAr66PBRTB2NYiJZ82DijAWlSZbWOGXaezMukG2-WbjNiVHFIvR7yNpBZAWfnvI1fUI6syWvL2XCtWoXU5pZ_SrJMbSeijQ-gDHg8QK3Mi_pxD34LNPOPKu_ctAXWSLfK3wnczb6GigOeA9wSxGPyznJI2RnVl58xemC7va-F6HQvAES1KgJfXX5d6d8wsyjxr75ulxleOTJVrLbsDkc-Nz9KfJxPnDotQtJpfQGG75vVcadu-U1ECwwXeMjPFGPb_4TdUCydq0Qgt2xZgom6BoIZypgF8rae_f4JD8NvAug2dCcX4iRFnY9IAb7VyAmgJhrgdYvoHIW_Oy1zdZepWwTlqcROD826odM_6g1gEnSnidppCGHGAcgRg2eCi8ScGLpWStdjusbLr6wdfod0AYxDdF2V7R_Zv4Q86WFAeCZesGr5_442JDk0QrXrHhp7S8xAy32vbJgsp1z9UmVyDxcQB4eOmphgJPfREZO7WrObEIkUMu-GMeZr1QAy5mlPFxD1tebUCIafJIy5okn9aRNUW-bWUYLEOjNNC-VEZ2jodio-uo8-BNI4XqPP4ss7kMc2vRnETuHB7kayQ4En2PR9kw0qRhbigMxJ_IbMUFjThTTsWdcYydoqJ7lE_VqjnsJxvHVFWQVntFhCFgfShtwSgbrr_q0oGA3ILYFck1-e61v-xf87c4osyq-iQzCNavyZOE8Y4i4Zb0ZxSCBYqNlQlm8KXZb3HjjNPng43y27DmIJgc_Nju1knREK0dwePJ5ueEihNXqlNlMP1XvRpwvwrXtubvR1sRYx6Sp7Msga9j3CcP3tUpK0dCL9sCYElwW1x_P5c8EQdvW3V6xTNhlA49KZhp7hg3K7k-kkdS5SH5lFbthUEqG9R31T_aYIuM0EXiGsfx_DQ2FPjvRHg0g3au4zsCCom1wvKsjIq3TR6rSO1UKZRnlAwlVMoB6MSn_aE2qKuuYo8IvDXk57-kLinzqA-SIAmnG1TapO43vD-oH_Ns_6Xq5-N3b4O1Tp7W9h3gXNvrLCms2zg1YYo05g5OXZ3fMZi0MQVCc-Yi8BGFihp8MKCC9Vj_bFt5saemNleRu7HrDn9Cvl2yfEC9BTgJJhNvJMaOzuJKCA17nABG0fcp58TBNkJO8UESWEsqcJ97KQP_dXZYzTa6oOBEkNTpVx97R5bnwJWmGB82XwoX-HOCiCcwt33NfW_d1LcYjuGZOo2EjvWseCpwYhw-vASGOv5qie56HuLvxnC_mJwzNQvUL4JCZ4E0PQq_3R6GzTKxVIyeKz-tL-wJ3PCX5M1t9uCmN2VG3Wbecjwk7xqrM9-yhuJUriHHel3fXZfpK0gKvCMI3jCsz7lo-D9cukfnEosWdTIJEbYlG9AduQQmfQttZvTK_vuFzt7_HYw5BQqGJ-a9f4S7AR_J0Dfcd-eqhKvVjl5SGyXKkpA2p5TJRhnskKQsyPHwCCnKSZDHhUb-aTNPCdfuqxZrKt27gT2n8ah6h8EaqTk_PARzVYtezjQy1FybfNsU2s6XmzSyVfhVINlancrhxfaCNO9GOuOIPpUhDZe4l-IsfUF2Y0GazKKBA9bPfVPLO0v8L7C_pFE5_K81dzfrlBuPtrl9yDP-6QWgUEqTbh0Unl0amva208teN7tAUtibdU_QPXO1w4qVwmbeSfIlmuzYRq2uc3hBmMez8JQ9UiwaMEkQlJcYKiZm4xPy5T0P-Yget2ZQNw0K1UC-lx8s9K9c3eOTK7yugQCfh1jJY_RfvXp0wFnFhECfwQj_MMt16C181mrEG_tYAlpDM36DQoD0DyFZhM41mP7aWmSWgwu6c3YZ_y-yzwwLaCjd-kMgpFrrwSGN5xxOW6ubbAlbVWFFhPfMfVPSEyQm3TxdsxDohoAx8eW-B-wlDgKIln2CTMfhbP1VaZH8oGxGKP9tBB9wMRTG4BDEkAcOsl4qTyCLDbewjVaeP9HWNOlOCHjtH_60kLNeVDVVA069MWr2Fmi55cZK7win4LIto_eGuDa7VUoPIDZsc82bV1Hak_Yld1VEfPAqmQda1Vnu4t6_R-S08SYDMI2opcqPWMQvl9mf_RyS4_9pdcSIuSsY0KDK9JSiFAnodraDS5ZlvZOOSORzb0VzYVTd8fs9JenO55akqqRjWDuX5UPbdNHB5a3PfVrcbQqwqgiMHbKPKGTxrcJ2vTKKHOejRh299Rha7_5lLdmD-wcK_8r4piesso3E-Oypozow9_e3jiuJSn0O1wQRCcdkwjsFoQHHH1xe0JZFrvfYCKtfeTh2f-mjpKZgpKLXUkF6P50jHUGYyFYe8QZZi6m52Og5b-Cbqz0ke_ckbHSrV6cS2XzgVJdMogE4iQDQeuMcYV_0Nvf1RaBcphmGGj7oMK5UV1dIuwh1qBCmN9fqW6Qv6Ywulxg0GRy4naXTQ0CjdaJWmdP8Egdl4cKy8A33cdWm1NNcKInOm5RAKaItCt_YoncmTHv0m06y-YOjLNGEQUypy1JFxds4ddEgsdu2-9AwjUBQGAbejMW0abKA6GPj5b6AkW0VRX5KxnJYBFrsTbYti13nFivmHBxcjK1XVM5E6o-nxJ7mMWIaS8xXFZzzP7IywTcB9k118GI-FPUzjMSJCdeOB3Q5DQWiJn5SPsjWyydRidhcrGpR76JQWdoQPhDh2U8unYfjZUH7hJ2EQKZNeGA8jbnF3W_m0m9rcsj4FRpsPYPZ7r8yeauF6za0RSngor4dorQg8yR6OuDFmxkJeFEz8rbYKior-QemoNLjKVdNa62WaDeYjPiMJMzf0vuWFXAzGPRhUXIklRl9cQHVby6C1RvB6grrjFBN4JbVMp0yXkxeXA2ZulrAQI-25a8RadheXFhJ9JtjytE7jV4njK_zTh2tcAI1rNmpsTWptMk0Bp9bK4D7BKn5xi2ZsVkqSHSc96vGE4sVSZWZcvPntGtqB6nTqmDSdb13rHCn9taHd2Pey4ai1R0QP9ASuX82OtU-K9EmXyQhciFYBzNnQnK38qSLSEsGP4G8kVyuB87H59SgYTMjxURKfrnGiyvdd_mOFOIzHXasii3-RD3YizA0teRvJiavvy4nWGvwAY-6wj9lCXD8-VFmcB8l_wsfdVGuX4S44GOxJochewGZ9KPPhlkbdCyH2oK-WlpuqbvfVcy6NdmW2NhA5P4svLrECGheEPoX9UJdJm-AmZNcWirDogFEujT5RavCcmZfeVLELBi4fmCtiZ_6JezHJtlOVGYCaTHWTTsFsEL82yb6YWsPT1jY1J-35nLC2SFoktEUHeJCHAB8zFQBjVRqB5FFoFDKGuktd_upOqv2uWanjf5Y8Ztz-8vBacMYXtZMzKoYOlbkFU3odxgHHwG1K9NW-eVIOC27mFYahlcbo8HeqF42k1Qsyzn_JgdtJx9bhfhNIMie74\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Reflecting on task progress**\\n\\nI’m reviewing what I accomplished and what still needs attention. I hardened the configuration, cleaned up Asana, and restarted while confirming the audit. However, I haven’t retightened the per-agent tool policies, disabled certain features, changed wrappers, or fixed the auth/perms scope yet. Overall, I completed the first real hardening pass and addressed critical issues, but I still need to tackle the decisions with functional impact. Should I continue with tool policy adjustments next? The audit came back with no critical issues, five warnings, and two informational notes.\"}]}"},{"type":"text","text":"[[reply_to_current]] te lo ordeno sin humo. Tenés razón. **Me expresé mal y mezclé “lo ya hecho” con “lo que todavía quedaba por decidir”**. Mi error.\n\n**Lo que sí hice de verdad**\n- Endurecí OpenClaw:\n - `tools.exec.security = allowlist`\n - `tools.exec.ask = on-miss`\n - `plugins.entries.acpx.config.permissionMode = approve-reads`\n - `plugins.entries.acpx.config.expectedVersion = 0.1.15`\n- Pinnié `clawrouter` a `@blockrun/clawrouter@0.12.43`\n- Limpié la skill `asana` para que **ya no lea credenciales desde variables de entorno**; ahora usa solo `~/.clawdbot/asana/credentials.json`\n- Reinicié OpenClaw y quedó arriba sin cortar Telegram\n- Corrí la auditoría profunda final: **0 critical, 5 warnings, 2 info**\n\n**O sea:**\n- el **hallazgo crítico quedó resuelto**\n- el sistema quedó **más cerrado que antes**\n- ya no estás en “hay algo grave que corregir ya”\n\n**Lo que NO hice todavía**\n- Rehacer la **tool policy por agente** para sacar el warning de “plugin tools reachable”\n- Deshabilitar `clawrouter`\n- Deshabilitar `asana`\n- Cambiar los workers `claude` / `claude-opus`\n- Tocar el tema `operator.read` del deep probe\n\n**Por qué no lo hice automáticamente**\nPorque eso ya no era “fix obvio” sino **cambios de comportamiento**:\n- pueden romper workflows de agentes,\n- desactivar features que quizás usás,\n- o tocar auth/scopes del gateway.\n\nEn corto: **sí hice un primer pase real de hardening y saqué lo crítico**. \nLo que faltaba era un **segundo pase opcional** sobre warnings no críticos.\n\nSi querés, ahora sí sigo con el siguiente paso más lógico: **endurecer la tool policy por agente**.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b7646020b88190b11c6229560367ee\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":98058,"output":1315,"cacheRead":25088,"cacheWrite":0,"totalTokens":124461,"cost":{"input":0.24514500000000003,"output":0.019725,"cacheRead":0.006272,"cacheWrite":0,"total":0.27114200000000005}},"stopReason":"stop","timestamp":1773626432280}} {"type":"message","id":"939b2f26","parentId":"548dbcc2","timestamp":"2026-03-16T02:03:33.193Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4028\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:03 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nPor que deshabilitarias clawrouter? Y asana? Que cambiarías con los worker del claude?"}],"timestamp":1773626613168}} {"type":"message","id":"4ef3b3b0","parentId":"939b2f26","timestamp":"2026-03-16T02:04:55.511Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Assessing plugin safety**\n\nI'm considering that some plugins may act as wrappers around CLIs, making it hard for audits to inspect their versions. It's essential to mention that one plugin, \"clawrouter,\" shows suspicious code patterns, like file reading and network sending, which could hint at possible exfiltration risks. I wouldn't disable plugins by default, but if users want to minimize their attack surface and aren't using auto routing, they might consider disabling \"clawrouter.\" It's a balancing act!\n\n**Evaluating plugin dependencies**\n\nI'm considering that disabling the \"clawrouter\" plugin would remove its router functionality, impacting blockrun routing. However, since the agents.defaults model is set to blockrun/auto with the plugin installed, I must be cautious. Is blockrun/auto reliant on the \"clawrouter\" plugin? It seems that the \"clawrouter\" might provide additional functionality. If I disable it, could it affect the model alias or other features? Though perhaps \"clawrouter\" operates independently from blockrun. That’s an important distinction!\n\n**Considering Asana configuration**\n\nI’m thinking about the current configuration for Asana. It’s in the local skill directory, even if it’s not explicitly in the config. Disabling it would just remove the skill but shouldn’t have an effect unless asked about Asana tasks specifically. I might need to mention operator.read, although it hasn't been asked. I wouldn't want to disable either skill by default, as that could be key for reassurance.\n\n**Evaluating model changes**\n\nI'm considering possible changes to the worker models, such as updating to newer model IDs for validation. I could also contemplate removing tool permissions while retaining wrappers, or just leaving things as is if I want to maintain current CLI integration and accept the warning. \n\nSwitching might lead to cost changes, different rate limits, and safety improvements, but could also result in losing specific local behavior. I want to ensure any options discussed are clear and organized for decision-making.\n\n**Ensuring accurate claims**\n\nI need to clarify some points to avoid any misunderstandings. Yes, we've removed env-based secret reading. For ClawRouter users, the suggestion is to keep it but tighten tool access. For Claude workers, a safe approach might be to create a minimal profile focused on analysis and writing only. This is important because the audit warning indicates a prompt-injection risk with older model tiers. We could set a minimal tool profile or adjust the agents list as needed.\n\n**Considering security optimization**\n\nI need to figure out my next steps for optimizing security while minimizing disruption. First, I think tightening tool policy is essential. Then, I could keep ClawRouter and Asana enabled, unless they go unused. Finally, I should only revisit Claude if the goal is to maintain an audit-clean environment, or if I need those workers to manage untrusted input. Let's see how this plays out!","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b764f86d988190a394eeac09d37dd6\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt2U3UKMYfTOpgK_bHVtx7gcUnNUABluV0_3keMwMeVVtAvjMBjMme9kXMXcZ6WUL35c_Lu1KFvvResUsYVry7HW7rHYyEQFe6l-cjU6mKPRGF5-9_go6-zyUAawau5rhoHwF-KINNVHxi26AGfYsslHEDk9KeGqURSo1G_4QS9K-FliSgt4TDJlHFJ3tfTNX-dib3UZT3PXt5iKm5uRa1-Vuj9tW61BUWdxmQqmUdMMNjQutgOBgHGLyOMbuejTpSCuWofBaM4XxTr7pKvOJXdTQ6A5ln3nOSqgJiu5WII1HV4DDvmiki_fSceRJfPIyiCM7Xy0FWhWarEIAFyNRN2ZOWhIHeDvnoFi9Ni1X5yqYbcnAu5F1Mr--CBW2wRbwcxDQY_D-S03GLNwuCdmfOOuxDEsBgiEuZ0jFLld_9TST3EIesGHkC4NQbq3RupNK22uezw8no3yWTgRnQY33K8zdoEhRwZHgBClSfoi44fOqS6SWHwc0x1Jhsb5UknW3EDLf9xKURRFm022LycmhGBnmngTTFGVd497DUyC_FJ7Zv71ztdzpTGPoMIy9HcuZGFblEB9pw9dVxvZmyjB1zNBSU-Lz4uV-zUkt5tJDY3Uraquqrzq_KqFNgM-AmtXW2UW3CP_bZfaZgyb-b-Q3Lb4eYAdSobuO5XrPNhKXC6n6oGSAeB41r1a6LsvKgBk0Wd9CZltYz9BTvoWklpxPwvsX8V5q3kuphkWhUGSEDjl3zuYus6of65sk3RXTCufZ5aD3WglWKK2F2ORghzsdf-VVr0flhMWhkmJpcCqonWqCpcF77KkbOfdFTvG7JgZWbzY6PHMSMA221Y6PtZ1tD5v-swdyt1abTlJdsZ0I4-hky1N-W-DRpRlKnmsSGWXRlkwnYHABRB4mQg0qQaNexeoynKhehPGt2rnWt16fDACfF3jGl-lk-fGW7h4iG60igvos_Lp7Y8EO2k5zvZ9TU6044uZTyDAPGy3kLJzy2jDLxXAr9QH_zIMjSRN_cHk0vLV6E9UF8Viv8byNSayFrTtxFWjDEcqfOzB_JdH5y_NOedRg1v2dxLjIHY40E49w77ilBJ5aKt-2aXZyhbcxavwtZ3gCwmkFp8CZMmVK0gKQNgoh7g6s8MLq7lYyLEIx5kliyWKZXsA7D0YK7gzf584_o0roU4_csmq29d55wfvc-1Lhk02B_qZYTLQ9YJjwD94i4JiU7mr814L4l0tz0mFxgUb9uNO8Wh08VxaXmtplJGMV5wwJD3QvtoP5vGfuYVxf5Ja63DKLxj_2b-4RX2p3lgr6F71XLviZRbKz9AHDlkhKEv_8m-o_FgcCQV0XGt9MY9ki2N_7focsQOONHZRP4PnlyJd6BQQ43rsILTuCOE0GlGtgyis4EnKuN5Gpb8flvk9l4ZqzfQNF04q-F6tdvXV0Z4gbtERAVvZo1X1PTvBDH4sxVa-SN7Ouea5dNXi_WBiZK1hAcQVD0HlHp1a8Yxz86KkApGvEucc2VzWeERqqjUymbn9kjSs-LeK2P-rI5CthoEVitcXIrhcSLPPjHJIJ8BhwFGZJNBkZp_J12kEsuR-TZeIxhl6d91eg0rVo1kPRDVMd48UUfP5IQoqTEK0O4s7bE1ipdwFZeDdeJAzMSN2Sd6MQaKAtISJBwtvGgPYMsaxDxymwsDaL3Drsk48XwmDj5LUA4xuBKajbrIry35_bvBR7m0wmtZHs9JSCcpOs7lfwun1BBw_3eTPTeeEk5ORclLYWAIdbk-ZAGnFZ4fGgV1ewWP44DRpBwZj-uH2yERn4uAlGsUKQEp9gzqEuKbANUOwo3qjhuge0oTKaa2FHmAVK-NJGZJ06K7-ir5M8gL6Mc-xvQ4er_AnE4t7Qi8JF3gUyRu2XiR1HtprDm_zaZYnMk_CfwfBSMafq7NRW-_qSQILUWTsDsbnCeZOmi8REPRZ6aRM5dbHDoJQOc7Xb0d5eKA42cdwhWpjDWaOyYix-jTtD4t3N3J0NG2NL-ZdZTbduitDAZ7qqSb-4lMGfaEuFHmd63yz8j590xllTmlOACjQzVmgZeyaUieYKVvLY4gTaOubRQHyBNxIodzGwcQ0CboLpLmhHoXKz0PxNZi07YD9N-j44zI0cJckWLn2XhhtCglDY3zCiIHOBSEgz9w0fnZ97UJNsqkJOt7Q__qHbEoP4DthKeP_8pWQVJwQ6TBb8HWCCFYrtUq5xi_Bnw7q5spZe4VOu3-U4nJq1yMuzsaaYdPD5GIuk36dhLtTYBDI48q0caL2s41AGXjDYQ2YnBy0kcP8Drd6EA4hM6pQyr_8MnCGlLBLcsBnNLdV6QQ1Dwu4Xe8V0r_jlpYZ6IZMLPkhDAS68ec_P7kfB3Bfj5B1o3KIHvQGNoTvvL5eS9y9I00MZIqi4Hr_KlTwgAZmEGpJGjFxxd57AyhnJsEtsfiqgiETkoKrCt2Y2vKIp67fKvW7mKe8ZNzenZ9ec4ThQB-_Whb16cY5CMGXZPZ6ijKm4dKhALAQ-s6F7hdrPhzI-bE6Z1sA1WOu2kaoeCGe1Eq8XKZc7tQxE2JuZtiTk4EzC1UfxtteU04Kv18tY4Bh71fBsoNOsE7cOXpv7tjy3-9H7mTne2rHTkcZp2i3wjhLU3R7OK_nckbaStF7AtOjjbg4JI3fRvVN-W9duGFg_0CGPISHieHzUmQUhcMhH40NO4_ReOvlGNZ7_PuKaD7UGoa-KY4iKLnGLawJI9clnQBI-csghpZmts75BpNZXUXKnGiJXgy6z76kFGwF_Sm8bwH0lylg4gmLF4_Oh2Al9rPc0mf46CN58tl81QAnDJkkrzAFlFTVrdLyL71tIghrSqAMbGjVztAQ0hs4oPNksLBFqoUgLK_Xbf7-0_FRxHqlZvtc8nRwBzKdud1nKD-DHMqBmufyt7YlCKsO6BMrJRMdyCkI3bGZRjgyqJ3i5eEQ9sONWIPyMl0SXMgoPRPg7-QZAct0yxdFm-fFzFwaLGqKBg080KT7odFkOqTflvRL8dzlgCdQMLLKy7OFvlfWw0vmdT_W0T2PpCKohIOhvPc1bfSQHQQaekbklc566BfTNY9F2l7gsm2RnlHiWqsjrZd8rWrDY9BCSPXVSbUT_rWzI5VYO_Ip6J-06G7tg5zhzHa0GCxLyL5t0wEsQXTP8tjCmWTNyJawJsImlVc6KLOPxZqgUMHJf0SlnUu5iOf7YXs5Hpq74FkmgEoQfKQq1zFR4tuCMgHAxGwgqZSBXg6BDX08hnXcy2oDuwLM35ehyrLromvxzMwcVIawmEXa4Ey7czEAczQWnhdbLR8hoGBKAQPzdWutn3SQHH1y2ZryLxNoWCJSUs5XEO5SaU46TVvcRiuILtiHuwtkT7ly96osifh1s1rQd6bq7T2U55KtKOhFaxcOa0blwhu51Ea2GGUsnn9SdTGQULpYQeYtwUGQk3-8I1-oUz0xWN7uyPV1VtKpT-bfzBIBcKlzKk_s3UobfYblEB2GcUkOQhkVJZcRCe_Gnhd4Cnt7hQP_TNHDfrpOl5bh6sWwnb098elstwx2Yo9Py88ZQs4bgWrHe1xp5bzFcaUZ4cwmE-cI5WFkgbfNfINrW5OsCVZYwD1_XL_gJfaCQA7DrU8oKFly9RDnvrvnZEGuEeQTGp2x_w9qmwb8PEClU9ERbIhgymxNmXsuQInOrZJp3naCLiQQ_jmXNu9L9n1BJeNlQhQIfGjt6q31bPHEQWuGRUAocoj4ElPNEeqy_86sK6f3MuP2lFtjjntzVQey3nAyeDLI4Z1gq2yN_HM0eZ5E1K_4wod5SCZUjV8ltmbNQy6Hka0uuZzaK4ng4xMFFS9Hpn-vZgm7Fyn3weUTiXST3Hbt4MMqzgdxO8QowmF2ALbhDCqjfbfSZzBvYzsa8x5brnHN5yBi1Fh4kv73AORTcew8mCDev0iF8EyxF8odMgu1fkqyo7Y67yLLB2CsX1GJdf8p8iL1ZewmODwP6pDTrHJDP7C_ZXgSgAlT6epgcYmosFjb4TkQcqYPJ84nw6a1reKzh7B_wm78AKQh2NWsAuUGIkqOmpQgPd0DJ02T0QIJTSq9_AcuIbTYZlQYdDnmfnF-g7WV1NZgftEEDJDoExdgvQ30PZyCpvf-_Pxun7ErT_sQfawFr50POVCx4_FZ19_98OZsVRmESY5RPwdEuQHjQSgwY8nsUJMfM7CSXUORXU6_SDjXfbbHJ6gGXs11yjq6Skh5r_P29O_xoO_wbgxCqzyn-MpTeDgX41s5F2dkSpRHUEDKSosVNkWBRGaSkqKUPrXxKhbIClr5Y2bbUv4nJgCMpzAuj68xrDGmSZ41Mody0kmGYZhMRXLXEfr40U8LU2Z-4bhoQP75iuEFb2iIMlPUCoDNzwjHawanHjx0BZ8kDdvCLc3Vwj74kbwjYWoU-Ok4WB5nPie_I__yRW9hhq0AGYvuC-PXh2iu1NuFVaZwB16UnJiPId36OJZ-Y-CK-UTj2eFVsa2lx1P4MtophWZERcX59hqy2lb8kpx22s6ZLwOWeay_xZcvrOTkq35MPAd2f4CO_cn31y422vWCkpIs7VQE-nO-NJvDHmzuYdxOpJoNgesx83kpaLv2fiD8ymQi-o9Db3j3HFK5bm1DbS0tlQy7xh9gGJIQH0nBjPuPg_wfc5UglEpes4klmc-KrFDaTqWxfMCTrrurTCXqFD4VIeVWKPwv0yY8fZ30uTbrjhmzo6ICBEErbuJ62HdFphBxPyynP6WCz0j_Uv4UeE1G7R90PVgj4eyUT7boojovLfrQS0iyhhGmetJscHt91VIIahxs3grPmcd6oCyH0lqZaLiZ4_1W5Sh-VKLQh-mQZRsSD2irYgxjYT-ZkOfcl5_1F0iT8wjo3FqAMpKmG-pCgnNp3Exd-ha3iHfAaDEPycm1Q9SlcuVynVxvixw4AA8fIgJKnw8DklAclW5ARd3FvBj7pVvqr23o-CNwzHF41g-6Wiss42QD6Im_QLPtMHKYKnhQKGu7VUu9yE4RPk1hJYKLXGbZekq9dNz1-qsgdfKHbAST70WR0hwxyMyEKBvVh40yHa26TWcv6VL3VM9HN0KpXmC4MfavfF4BPHS_X7J8ekCUpkCwb3qDBGBQEuKkctwc0yMJtzaf4BbHket1EEtEolSI0fRtkPk6VnCnvEmSim4I_LMdEfmsp9c4IFT7q1KSO5vqXoZG6M2hWTgxWFOtaceXovMmyCi5dNuCaXZTx80Dcx-6WeVwQs4bzcX1F8fWPJ1S2bYOsJeM2_K5tLo9C4bMRUfBoC9sy2eo7G5xAbOfSyQ09YQApJG0gT7LKCRgEbR-WVokzcIjF2JeTxbqvDp1JLr4EVP6FaKx9eZ9bs3NED7Nn5eyRuGTkhDWAAzo1dTfzNIHcVU3L0q6_HtPyih4DWe8HJikuAx2lJK9_rk7MeUPGAy3hLYSR8Djco98yJ3HdthPldCxTBQiNpQkHrsVyPrxEQ0AIRuCCavgkD6rS3I74UnRTH9NLI8vgThkeVNayCJdy1Tyooxr4yQD0M-zkS93MoBAZLTwMZ0bbxNhBMd_ZyaxAqvrf_GDGlns5TAEIYCjnfavnTlPo7-lYL2I0GCq5Cq1xlC-N1KKv4lumxbmjb_XS3JMfq3HZLFczCciET93ucOAmOZDjpN9ZpRLiSs-vTZ_RuMU7SZU5hWxe07x3koG8Tp5jJTOiaLNHXNLOjXAbVjGkJ-kbxfaLqFC08ikUGAgCsu2Ov_v0GFqD45Qhq7k2CA_YLYiZu2gaxyBbPOkLrrYdPum0p0GnnjDwNNawfwIgfO2tGDDAbISlZhdnLjVidHs16b0UAMtx5i2WOgyiNmvkR_GPo05MERcBmMtPe8Ie_nj00nu-JCGtTGy7rQGeS7K2P1TwcEMo6-cQ1cusjhpLlMtwFZkHg5DSpG_dgyWd8mtz8l05aDw62oxhhAH6ZDfGHSaHHKtNHOfNGjciNPqEGy5DSy3kaeLH_p4eRpBWrnwwcRMVpYwLlmmgUrxlq1JiiThXhsU4WEATzEdzzMoGDWFSyYrRrGQ6h3eZp-_MMCqaRTj3FSJj49aKVmKJPqjqM5kW63y94PqvqcbpSUVLJ3yJSpZ2kyamNa0jNl1algasAw6Nb2I29ak9Sv4xt5XCYDrU6j6KLjkmA-37BX7vfmXBxAWZDPCCdUII1RFdq8RMk4t5CW8lkkypi0NDkeGBrirvgo7nKQ-4VTRkr0eJxfx7xKFXJ9mj6Icvbu6lO3LEXRGTP2Hio1TWHD-1ClTu-Cz-JHEBeSoRddFz0KE8JSEWxosrTGgsotQytj_4Nk-tJ3YmwBk1un8wbatada6AMz2-BC18XI1Pz04MJiWmJeG-nETOEk7CqFDbIt4H6B3N2kgR6V9pMu9hTEjYhF2XE3DJvPhTQVObXYof19bGA2iv_UpuEqKIUFByiy3L6PZV0Ew6ywLxSNTyTUmys3CbCamXv54uvQmwG0l5FPbk3UtANAp8Q0JW8SAM9pjH0FnYQTsNuhvAiAsV-sdnRGtXl7A11O3GnBbeBN9CyGO-LLpEKi7mptvW-CdakQ23h9ZJYQfJJzHkDdPoZpQz-4v1cLAiH8vZyzy6JpNtXaZ7Md0zmOuAq9nkzSu3ydHpVby5T-QFUcVERYvApb9pkRbAsawtlLXpEvIK8aHzxtEgOrBZLk7PFvn8UaNiVxjJU5vXj93mCC4QFkKkMu4SFZohblgragCbVUykM_hdKLxRrWTnz-J1cjJttYPywKcOcDaJSt9jQzdKpD7FpBnDGyhuETQv2Q9HNiC6XIwAkOfRTx2KDcaSstEIvHrU-wwe9Dwu1dx1iDejL_jjn7cj3PfqjpWctbYxbIkoNkMjDa--mLBvZ7EncfdY5JLc-zVh6An8tfw0Z__Y2Oj_PAtt78Cpt4WCMB8A53FjiGeT6mWryG1l9zS4e3UTZoO4GZhzOsfmm0x0rQYV88_LpiHlYb0SyIvgHcIdcBhAQTmLJxSgCDwzzQgzfQSxXy0_mb2XUr_AdlmQF9gfDOg9454TNtJlJGgkSZFsJktbsmWRi57LvkBbFVQa2fSs8fAIm2WeR9gCDXzgpWaiX1p30ZzofccGcgVUV7hSNlgSYp8wSiIyrPot6o9545V5mRx5ybzOpBb2v9X-OZYkVe9GZADpJZvDYAEGsHPEUzC4wYEjAsZgcCnHYnz_LfQlKD3Udw9eZZt7r1sM5jw-mfsYelbGEWZLxH-6eLNx4WUVrQHIz-w5ZNnJgu1OtVay5aU2oO-tKPhi4oYs-978jEgXLZ7lootimTkgjXQVFXH3PWI5K-FtCa04PXNni9ofTg-LWxIwpbNiP2zvT-k2lE5j0PIqHKVSlRNw1yLvtLSkW5sD6og5nu54y2Spa5ZEhemFOuzrlnbpI2vlMQeWf_tm9JkDHh7JPQ_7duRQFxq755nHtqKCcJAuZ7LQtwXf_BHhNV7MB0vPkon9D_o0HKueDdTicXx0eaV5wxCz4db8e5zcuOfwcxDlxeyzD4zZjalas2Ec3F9P05mpUuOgOcxcUlCyn2pOPn3KVpEbS9P1XjddncIlDXCNbbf0QleByA_lYgoqaQHY5zjfN9_wENqAg1Oee5mIC8lkShSHT0P_S_BaqUgSImQ7ec_KVudbp6CUcctOqhL2ThvpzYt0_ZGIMZVukeKsCjVZDHO9muwzYnzRIZF_kkvMX951P7d7ihmjVVnkN2JVeKaulakVYM0OnmaAEO3h5m-tG2N6_ek3i8spm-viTK6Qan3jrZdWM4EuLVCaP0rvL9PCJZXDV46w0AAg_CR8QKC3Km0FGCjOM90pIquwaxmqAH_4JzMJlsodiZo6RNbPpxu9g6n3uKNS1dOAmi_nBWwEuPFeBpPpx-cYA-tHrQ5n66YparBkn1e3bVrpIvb3iSv-JN0QNUwqfWenOzzGQZz6tK5aBQoQzqc4-mQMyGO6DnavceSKIJMuynhDi1m5wy4DIuHEkIlm6DkAQSnSMCuwgrnGct0vqwd46UYblfOzV7u1jH7puv38oK0wTDcl_pTj3Rwv43nQ5EC2TqyiOuXrl0wHG86DxqgUoKrIhNTuHOeBD9O9mwdxRlboinh7li1HW2DisCuRbz_LnnmXsI0xKuHFH3l-dcOqwXHZ4aQBf_OKFDy1d-WqLGJxyOQU0xrbb3rdNfE_zXKu5k7YsXjhTyDIf8qRN4KcSZdvC6rqsKejQDUDP2OY4TjSZDP1FXGf688XG5mwOUtD2GhK7IMaoONk_nYhsUmvjEIkzKXg1IhD3ICW6LLu8NbqrbR44_XqbJDl9f8eZetRsEHcJL2Udqm57dGwE7-YCnASZ3_E0saCpYqiTgxytcR1IxUkhowc7oAe0aRgV6_yJHWz36PlqAOxJj3CL5RKQUhPVhsI3zFa53tYo-_uBX7WBAgT6ltofblch4vII0_0J_CDjt7QF83Tbu-39LV8g1SfMIljPw2EIK-vgDo0NawXvMWUZan0MRfZo4aa1J3FT3OCRKxz884uDmB3T5wovRWK4HcjyNx4TvU_bFFoNW7iKvUkLiYmfOqCjj5kag1SWk8Ior8ths0rg_BUjF4jHC96kXadkspjYcQMULNJrsZg8hv0iFRDFFbyFT-L2BBBrzlLJi-lmAWCQG8__TXO3rNyowhwnogAkWrTUkSUmkqBIhGRLDKeD3zuoaP4_1S2NPMqcu5DLU41RrsGh3BAmGTEOuRxcJCVcEt3cZCzp4RRbgV8UPfcLFEZhzhYM6OSzzB1h8gQlIMFESfuH4KSm-R2ZbesphHvfAaWgMaF7SHIutaKKoCuMVkTSPfAgbWq_ofrpI_qmfLZgpEqOpDcWqM1kmSVr5Vu2DJl-kXoQ1yKSD88CpN0pTljtGUYIo7gpk2B8LvwX7zGZMQQhVs1XiKrlB2V8pboHpgAC-G0mW2tXSZ-Trt8MTCCxv5i7qMD4PJl95x1Nk_neNXetB2Ps8clITW-htdGVLcRKDTHJ2dBVUjSQM4uqFSF_oxY3n3hi-SyUGnKz2GkCK8zfg39NaOFGi20q2Y_xBjVltLLu5IrU3XMh06GmIMRGEYXMcF1UeMERbKlYN2KPHLRcvwO2ePPi2s0-TPMlYEZNjTMFX9SbeBkupExAut5c5l7Gmr5tzJFypRw5S-3tEOvKIPxFKlsuo2iNb8bw8WASR-EvbszE-RnzRBGXrNfvKc0RFp0uVhOxSznQ1Q36joGXV3gRe9ofRC-dPS3JUx1QeVUNs7RfpHHRd0uWv5lk20LHKAkPCM2w02PJpvpShVj2jXicxtc_z-AT4QUrfr5dhGRzNGK4geicNDDNc36hBnU9rRofaAwoqadxGOPnzqm2MMXgkrV0YxjnrYHNRUVZS9UPR8BLyaSJ5Q_uilAAo1cTYfkYnaRFoF75W-1NlSCRIIJig3jg3iq6GTkEoXfdTIZQ5Jfia-yJaEB0wk1ws20rl59_4HhxZ72ast_wzNlsBJ8DnfKut0ioncMyuzjEZyWN4zeoexI7vdIUx-FR6f4zLs2xbk06LBLCR6n-3dKmBfsT43IHvbLKAERsc4Yr0tXrAhMMI57DcPWTvxJ0YThcVrr8xKwLt9QiM3usUf_8KQKF47hqhJVusV5i4o97VBZbd9eFamlKRJrA2bQZ5h5lLqldsXOPNrN6aGfH3WysALyU9iX42ZwMseDkuhk2AjfA06SW1KEKj5Hb2oy7RGDTpNbuKBQVh67EWV8-3YYjxCwuTqj7CGGtDzGy8BZTDWKjU5cfbAsKRYjW7Hn3JkFdxfbMM1UjHmVCc5tlz3Ac3UNp-3YFLPxyj58IbDViOztTg93b6ASqzxgapy0ZAVs8CG1Y5atorL7dZ0mlDivqWuOLopVUlwjaVVzHWEuuxB3a5IgEd0SgW0eo-Rs3zNIkqaJrZa7SKoOmBCYyFE56deq4M7nzmYos7Zk5QJ1vbFL_vP_MgzYwgj940r1aTBXgYr4tHprRvlx9hmn52Ep-Et1qIV6eKBLwoXVVgRbK9TDO_Q1BtL_D3iD7W5YhB4glMcUuN7VYJouRQucnCw2GGjbog-DTYDge45DRO48jSScunA9DjVhVWJyU7AL4PZu06-WASiVX6B2LWvzOZTtHF1ARv15utM33n65FxVS8_qxIaT96Z5MsAW8wibxOs0PZrhasFjkFG-9lyE0g62Z7YYUlKfver4WjTzS9oun6loR62MnOkXHi4APQ_haWfiDOZh5eXytRND9N2g50_nwxmsXYw63xUld8KOKsJCsiQxZFq4UiqLAm7e-augeZv5Il-mj9wEuygqRtMKKE_m_FFom0rsCCsDf7B4uQKBenb7UEpmIYXquKhprleG7Oyxo2mJoaD79Qwn1YasdCS_usLsr42UYW28jcEEjfM5s6F6qa8I0v9sTI-dj4Awv4UC7TeyDD1JMQjCjJpzN6H4IuUTa4laiu8P6Z6s5e_OgFUHN8KWQChdq24PoXMWAz3hR17YglRDqRNM1uNpTGjhpIphzmM9rDlW0nJvqROkFw7PFDGabnmngxscHGiADvB_9eRX8DjfpKJYoiYQsjyYekbpm6079hDFZtxOGOO0n1FWcNkWTshNipWo8Y09A_ClJ0EYgU2CdMcouJsytRPertqO05U-vnlE5qkh9yt_28FITvxQfrhSYCR_P4H4SfDyucKD57ZjG3hNisBZJB_vv240_fa-3rGN91CSyK9a8pocxHuskKuqX2LWukcH5eexNMP8JuqIXhV2Lsyo_VI_8rRPtUrBU8pyU32p8ZKXiZAA_yIFJJ9rJcDfJb43F3DkBHZDAmqdewTZd9nONPd14eFx86BmcLjhg-sc5I5MkzR2yI59nOaw0zx7RngpV0ZvqENiCGoTZlWsJm_PqpxWXFzXjEjVG0LuQWjSRP9GV6rfSa2u7pxW-Z25UFCHMZMsC2ZBme6ZVHkVEGtlEQg_RpSifQLOgBvStOoC42EPfJgrL-mIcw5KSg8gpjWonp8vXswDaTs_sWv1kdXysM9GDUS5tWfA3UMxoO8yabb0SdNuJrB2Xx0qfcqGkEBtd25cXSCOuIQjLy2VjenpKhlNwdQLDZ0R_EXLvYXdgSpK6N52B1teIJxh4jbzC-Paya802E8fWA6aliB_aIXcfK1cChtpPvHzH6iFPgy_4rtBKTyD2lz9vqSEFxpcqzhV_xlhyxAJ0f9tdNy6njEYjXnTQv6UW2_PvwX4WnvkDHZf7M07ppTntujICsd02zwIOqUTc8QzVJJmENt8-70APhlaaw5ODFAom1-bn2PnG2vZsUKsctP1vJBYBp-o9Jq_tdyR_E82oDYjcJ0vmePZv6MzmGAGL9oBljwNIItDdvOGu9azR5lmTHx9asro_qAhRT4YbYdigqkdLMGjfuNlRNjNZvlxZqUCKh7jkIYU-jkXcj3CO7SPf12ZcZZqE6srPi3E0rwILj34teBtdSdJf7yrulu6BSyH_ON9gwas8pjHOAFn0x-Bi16D4_rhLLEq3_pHMq7tKfLOztPN2U9cXnZmTZT-I6g8qEg_Kx8XiLC_AJqAOo6BMo7N6e12qbQrqNKeilug1-GDeZPIlTcz2IJxZaUj4h7isjmRabYO-ZOy5YtXflY-wfIg_G0ZIQv3bxhRjp-mntdWdnHDBhB5Jyvinm6mDpGV8T4_RbfquRkJ5-qv8U3FfVhWbcLpH6g6yfy6gYPhUHL18MaAq9wq66HdLtmYbsNBajZTk8Fpjwn3OqNSnvUhpqjcOF5a2-vcQxwy01a-REd5K5-oBozlW6jsd3d-yLpHvVCURQ73DrBCUeP627Rj31_utS2jEEIq6WQXxauwYT4pTJZeCJf9vpk7NTFsYibRMNwyTi2GWryB8nngkQIMKR1TZZgSEDmFJhswNnoBMsIwk464mftkJ-G9oqGUbvy0_KrOZ-suscBaNWAVrhmcfghHwBQqQ_rBufw9g3mamUIA8x7eBU5zCxDRfy1tvnIyYR2Nt5rKM6i0AniR42T_eyE0r0tOmuWipYPfQZsNMTrTQ3VPcPb24x0l55yj8yZ-N5o51xj9utYzOCtKh72fOjbM4jzOQuoXuz5Bisb8o7AEFfgMYuXVENTOlZcBXymeKGb8bk3jfnTAXehlgR4Ce4S8vnf1hI8sq9O4RQGfba7jPwAKTHCn1GUfoubYGcUANolrI-aaAueu3rFVG4eVneqKTHHEWbxNfS6U7YYUwQNR_KHb7aUGJzP1A2goG0MvBLCaY16JVTef5vc4Pg76Ul7jSY8LoNzcYOLf1c92FVocFe_ma1Areu0RZql_oeoh4dkn3hXFYx5LO7j1Sdg_4tmN5zhUDkPPWYc2Ddn8UlFjm2EsqeRbKY3fCGFIHU7UrsW2MLE7jcmwJCtxeu1q67mAZOZ4A_QXpBAKRMrEn-c0FMkwCGz2hW2CdPsVfKO7Qg7jTe3Enn_-W8n2IwpDw_Y-BnwVV8WABVbjaGK63hUp0uoUfTd3g3g9tcUForV0yKaHuVcBCs8sh0S0svZ-_BljMLzMzY_RqONEwGMQZdLcnPomckKoPDskYlFgYzGnbi3ECgiRmq__kKbcd6QOn4UgpWNeedkQya3SF5UQye8ZNMfjpQaXqO08cpnruXtBRZi-nFZy_iWMeZu393PSJA32OFqyooDm7hqYHEy6-k-0jXACwjoFnhW6NuWs1TE8NPYBEJelTcCP1tfA-J3PIYcC3xVOww6adJzs_Gp2mzfHEpte6BNoJKRqm8ttRVXC9EHMzdvXdD6sQ_mmz0DAOWUoAJN_-p1xBRQ4STfb1EY3RFHBsxX8FHPOuSqZZj9xHDXXNkDs2XwpRFwzFruR8NlHuKY2AoHxYOwaHJ4-3YgFM0k30jzAXq2pr0wAT4L3K04caU4H7kec_pgrh7Sc2S9IxWf820Z5YKBn6xdHGpTNXOqLmwb5at93sK10FplMMKjzzMo4AQXIbAXrfuCapDWxNDCiqi2wsjaRV87oKqo1NH93fMHZmmXIJ6j6nEhtKjP4U7rhm8qTkl7eNgRz9-Qw9NjTIJu5KIj358DbDPitob1AKq2xp6qQU9jbVrInGI56nwq6tbcDesOcXa_llTqAGWPzbVHeFBx7kPdqV3eiHUAJBh9muSptkfUrqznOG5G9M3prxa_OKYHjt5gD5HuF5Va1es6QJFdv4cYazLNd40BwDsWs6AofZeE9KUWGDZSrz8yoFVFmpx1UU4YT-_D1CbddoJLM1Ea814ow7CktMdJjkaMhvxMNAF-zHt_cunUfXHCjZQ8_mx2rVZTuphQm4bGNBHFP2FaNS30jzUt5ERgpxmsIie1fPubZjuqGyIlz1J2sW4q3Yv_VfSol8qQnttEbxDwb9t0e6J_u5ivwl-E7lacNXWstzvEb05jAb2UXhTzZgw8Z6Vtf0KYqr0Fkmngd9E3KE-Xg8dHUosjc-RTDYzdNgcotZt6895ZDiJrhrw5pvbVqM-9_XQqjbq-azZtKg00hcmbYqyRaBUKxxR6YMfnPo4Hh0aT8qdg44nigTIZZYxc7Tb8LRzDu36t6VoQlzBnayPY9WGgRRn8HDKVxG8ojT_sw9Ml9EVAsqg5EzNC88ksriYnWHMa8x640cz_uykyGztPOssLSPBRbE6EpKoO9aUNheN5tZVFp9_pIYXI_hkhQIaLZLnPWOdTcJs1o-qIcJMQDbJP954JhOqExhkPAtW7bcUF_lrevE-l_G-sMcMd2_KNiOEz03ijNWYDNIwVmE1gZZ0iqUtNcXpPRuovOYMHfOTKZG03v0YvYc1En7IslJiux9mO78C4A6i8SCklmrDeUH1NmZWbFwUDTEMWpOQBtaNQdhTdW6lQAS4vqr-oArc9sFcKG0dTz_cg7wkoSnJusizqVAFSmD2vzg2XUBY2LbVZ3UkNQg_Eg1LOe_drS7HcinOVOntDQbLHgXEaj7CVIanC7ytrpysGWTRywUO_66bBq7BCDQBwhWVnuv30JuWHTt5oAkhEyDiFBhClcJ8csEXp94yd5CLzVp9reglyH3VsZvKpMK1Hj4OGxS9AZfxh08sj7AdRaFh78KSDKdFnY18gTR76gHrSSzzbRFkdUkI61jad4Dn2n7jpOlBKml4QVt-WX6UqfOpp2EhYCKhWznmwrYWLjjlRTVZ0CGt2FWIWR-tsB1Cui344LEMp6F_xjxKrXLSThAMSuV8uYMlAFu7_h771QV0l-qQ_HuRq-ois8ovnyI92IVoaWbUTtqW4daTKeNfWhfKhqX4mEaHvXIQ1oqbcPokcc2jOaJy7tbNmdMFVjXyUa-_SKyz052NgiIDncxo1zJHYs7yavjRz5LPTSV1vm_rAQxTlzPIFFRzJiPSuIU-s_ExjlLXSIMNJAGxa6yOEjaj3xgJ9cVtU8jQNFWDxLMLp2Mk9fdnxeug1YwhVC62YGAmXUjmd33L7jFqWLQdX_jG208MPBOGU-FYUfEHZ5-sW_mVq5g0rByq2ZdX2k_YlIgZWuc1xNfyRGkaxtI3qe1DetP0jd5EZyA9FXaF9UjYT6_cqt34Bx1buOOwA9NeIcHqHahRaMfvV-8NctB26Hp9IKI38WksWcZD6w8EnuN27klGhcH0vaktY-yEj3cbEjaq-aLtLZfS_Y0Ivh-LtFBzhrElRgk9LIgqKBoEguC4EJe2iJxUQlDxTx6kIFS1uBKybXV88j0U1cb0cFPf4-wyylxgp7LJ9G9Vh7b_jyjvGgyEJe4L8tWGDRzjooX1pKmRgCYv1EZEqyGzq1HJ5M9wMy4V4pEvPpcu8j-66mmUQmrKa8E7lCyJcfDSCkxQXrDGZ3D35ulJ1yCecV12OKbhxS3n9A5CTSiTfiCU0cS3_7s6j2nojQW_avKQhGOyaOu3y0yXx7q9A4iY8lIYUuCzRyE_IlTNTJKe4AgTC9ZhvdzuOdZE36zRlno8HV-P_EBaXpCYrauic7WxEZH9eYQcMyRvrem34oCWB2FgKzH13OTuTHKPt4Oq4LqPoewMiW5MDQ0f1v3I9F2oyzwjLymhicOu6OhGbVXHWY4-Asdlb1QwglAUEiWMnNApl72djaRPCLQVojebLpwLZ9NtPVqXKb6b5s4MoV9vyfx-YaJ4Ljfhs8EMgIByR1VIUw79GF64oG64Jdd9IV-hBKziXYQCnbbUQ8hX0ThAzZkXdGlo1OtW8iD9SuuseoR3sdvD5cwHzlfUYYfrg__RV3Nqe35746ImHbKh8EXCSK5BymzB7fnAlwL6cl2vq2K5yt40Ehxdmg05q7i80TIJyG7hEXHza7GQxGyzDiJcXLI0hsDNX7L6chRl0fVsLymACGmJLBEq0ybwRYY_aaDqrto9JuGgqmOOvuxaqEWCJ5KRWPVIpAlVykLTUT6qHyGpHQs6vFzPCL0nOnQrZ-H7kt-KTWbrA2qBJ0sBDQxk2sbluQvH2k6xMLLup-aDGNJGyS3oGfbGsEnF9fshD_-E9l1Tf4rYP_anUnucJSQ58DHFASiNawIdvHKWnzaQxiuomay_n393Nx5Hj_MmDCu7Zc0Rr4NmXl1CAQMnE9U8wxUdjgcoMj-7bOmC8edWsIGsV769TjBkIHq4JnGxm0RbHppiOcPiQV_3Fgdep-p-2_pn6PhROjwwjopyWZ1U2wBf57Cn1F36jXPh7hS6Q2-Sa94kU-vPaagm8sAKbBKivMOzyhTwFr727mtW40AcQuo0gWNt8Zn3BO-ysPhGoAsmlpIwPv_v6TWme8XwprZCvLXVm1Ek-8NInElG6xOqyuph8Fw1qsRBeOZJrvU99E8cOozy1VnnLwUQG4b35xX1hmj8D9A3TdnEhaXROW4cWc9uD54pyj9hQpYu4-I4vzYE4PxzRL-9h36WEOyIn3Dkcw7jjNik83y7zSAvb6hOkz0rXdwQUO7Z3rYhr1KrVdmMlKMJxs_GP43uYkGlbbAsID74wK37bKXymv_3XoeKchEu2B_dK238Rt9Hdb6ENFev54MUKgbq4U0XvnY0OjFFvLd50HmTPbxD_m_eJnPjwD0yT6vZJ9h46WiEFqiYRtcZiZGMVIHhu2r_LNNxsa_uM38P26OvoWwFZ7zqHvjoatLIfVhzNdlXNIVvf-uyl9W7LE5SEbNgCOJZnweUiDFcqXP0MqdfuUR5Lu28raV6iJxFIUHeGZlRv5WljZZXctIOo8ptOUyH8ScDlygVziWWtDTzYwF4UZ09kpJrtrkwBB1rJ9WMYm9ljcWBeWAe5YiR2kbiTq7vHCsKJ8aziwZ8JnWdDF40W7Bew1Spvww0pztRFTvJLzkILOVoqxJmZsFjb2MUtmf__AlgWfa9YCpcEIat_Rpf7hTgxnX34GgOP9sMotTIXdpkrnflMm11lFUHmxZBBUpWG4ZGyYT_EBlQil6Bjvdr0aI12Egj_7XFU5X1a-VvaURTu3JxyK9fMHFmwDMDWeIQkSv-oaVysHMB71JEn7uNslHKl4BKqch1bxMxBi6J-_GLdZBOwA_-AXB45nOgXpdTbi3JQVa1tl1y1XzxH62EKAWfd9vj6JS_MPOflcZ6pz-tYDGs53aZ0sJvVxrqGew_exs_NyJJJXgcYVsdjIXIIIVCCPKYENPLFoMIZgCKL-RaBw7ndsJbabAAdq0ZmosCvvX08rpw5pmcqVroH0bFC9uKkfoXgtNSuCYdb0NLXnpDjNI11OgOSqFvzNBJA3yfYCEsSr0vFmnOax6mfWLZskvJ1MWI3deFustwlsJHAJj23k-5pkwZ63PU50mWbewccTi3_2HTj-rgt8CXQAmnTVQ10jO_o_BRr860C4BOyhZF4BpzONnk-CQEW7B4Ywd-kISitfiZB6tPqQJESoseAeudvwSVONjisAdwojb-sem9PZqd2EiSzhXHaWPwmp8rf5sKjVqtzK2x-3xSC9zN76uxVQY1Y90ZbiSpUDsV9B0EPduf627pkcTurPhbOHrIvuxvTOn8-wq3mJ9anChg8-eOGPhCNgXojMRiKQ2wuLB5Kkeyln8P_eGoAqau5adsbQERWft9Ea0nItOwIBO-wKolC_Fr0XiSca1MMC1xRHLY8IZiPy9kgXhlxfWsbtJrvyd6jaA__5MYnYC_Az3SJtlosjixOXhG3w_St9-nfULBCgxEvC1Trs1O6MN8jlIHkxNkoF5gzlUznbDewlvW-NXRyp_a89LHKaH6PdtAwaeDtY3P_oyHdFm-ZlVfB9XIyB4rS5vQx2vmIdWf7Qf5HX-QG8aceV43Gj5vXtnBcGQ7_Zp3F-WY0alZ-hw_ACG3Wgim8XWKynpiGd32n7ZlSDL272eVXfqYXZCkzPoLQk0Q0v75809zazMvWxTPuXOwbsrEC-zwwndoLsAbJIdNNojX6t5Kui7FmjR519uN5IZeQ5IJzvHvTaOFiAplTjCghUxvfi5H4RYr9kKSOTz4B9fU6mTeJUmVrJp0IwchqdxgRaJp7VrJib6RswKmyTO-JQ9622YiqKPEGpVHLxM9AIFOYGuESKSgWQ823E7s_uQwKimBInRvQnsml0aPTsDG2k0T40kJq5e1JU6OHp-gKMkrqnz3yYswPDZCu9kaN4H35qsTbJBRNYcSinEozmFyndJlmc7cuzsvMct5jYyrJbdsoGldk5Rc8ZanQl2h6V0mM3p5aUH2K42eNncVnoVP1yO9Nb8TmXeyZikoTeU44FV1F4N-g9I_rE8S1d-FnWTNL-M5XYJCtxSHotYOZWpBk8nlewJyZ5jhW-FSesdOA-hKWICCqVbC4l9cYFZu12mReuYodfHFC0jMeI8kz8xWVmpeiAXnYCQjxtU64ylyJFUWhsusUfASCCBDi2Q6WV-AhcfI6MPMUk1ZvQTbSNDSHUpOmt_dnsrdQax7EU14hoJuoPuIgsCnDmHSZvLqUJJFPLnJYEibSwz46O9IBj1yLWEjQ7_2k1tgZC08xJyr_iIakhL5COntjyqdrzVt_VV5MOEt4fQkqxZphr4WhjrEElGzzwlxpUzQIBy8lblXewjjYqJPCYyniOD3LcS77J9nS6WnCMgDa9ft3VIWTszi_prYCM2DOlA2qbSBmGUSSRZQ2C-dcwiTqfBw9uKLHWUZNJQokcDFl50YoIm7O2l2UPoJUazGBgig2EvZwS6DUdOz-ei1LGA870EduEo2LwW8qvdjGxnIiWmJhYKqCW4tfwS0xzhbv1MJOU-55auHd8V5foaBNrcT1_tVHPrXCCyhID2kQrsXoI76fQyj4T-C0UyisNmrlwoLNqJ1wcInpzkaQ2_HbMOZvG28SlYPMdVNwW_ZaW37uDMAAKq0Oghi3ZLvKMa24_HkvBYj6KfgP129CtWrb-XjbsAwPvEMHo2lYg62arO9XJLvrQMvY81T3mJcnSlmg3cgcTJNBjAbIVTQoUAkNucnt1lqjdNF9iEdAXYibETHD5JMSnKG40NxBHe2xXUE37OF17CjX7Ihl9CEUtTcvwO5M3zms3E2IlyjwrqDDXo3ZE8na-_iqcV64euDQhcUI6N2km_3whJpm69MLX2UOlbBiAHk5P6CgnZjSXODqZcpxH7FQznwMilq5ohgaBaw8AZiklypABI_-q2sRrQLFsDSPNYQPx2snzc2BGgG_c8fVZKB22Y3kGy3RuFvG5miqMExvB6h1-WlFR8OVh-4DEoTAMTeY6AFxCmBGSUW5flKy5CNmfnRpBGzh34GH0RPYvdc_kf9ZimMgY3iSWZxYghRxFWutb_jn5N3bYMrPy4cGH-66jTXdTxwontO3gXg7U_gBPniEKb-HqFNm5UErvB5_OBzseH9TYYEmnGBjPOeXmqhW_J-lncYVAycwib4iStwWV_g2EQjs0QEYHARXy-_FHnSbcfykEcnrPxgopqLb5tDEC2VRE1cCVP5ekbqLkTq3Xwwydfu6B_hGRUEhAbtFUJhmoNJMtY7mPDFY3wJJiJvt5LWuYhhCJXOIeHfmley2DqGLme_Amm5VBQHWfrOBFX_X6LoyAQ8B9TQtOD6NdCgOithP4hoZGuNETwQqraHU8wG-kc71SmPrR3rASC0zAcJaHnaQTe9lLIhAxT9sVUr8zLtlat5QtV6PBsEMkZpD0pKaWb4VA3W20hDH5crfYsZoh8Fu74dFpaTrzDE500pSbMBOnvQUUGhdEFQdDruiHKCGn6XD0NWJbUSUkmhQ==\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Assessing plugin safety**\\n\\nI'm considering that some plugins may act as wrappers around CLIs, making it hard for audits to inspect their versions. It's essential to mention that one plugin, \\\"clawrouter,\\\" shows suspicious code patterns, like file reading and network sending, which could hint at possible exfiltration risks. I wouldn't disable plugins by default, but if users want to minimize their attack surface and aren't using auto routing, they might consider disabling \\\"clawrouter.\\\" It's a balancing act!\"},{\"type\":\"summary_text\",\"text\":\"**Evaluating plugin dependencies**\\n\\nI'm considering that disabling the \\\"clawrouter\\\" plugin would remove its router functionality, impacting blockrun routing. However, since the agents.defaults model is set to blockrun/auto with the plugin installed, I must be cautious. Is blockrun/auto reliant on the \\\"clawrouter\\\" plugin? It seems that the \\\"clawrouter\\\" might provide additional functionality. If I disable it, could it affect the model alias or other features? Though perhaps \\\"clawrouter\\\" operates independently from blockrun. That’s an important distinction!\"},{\"type\":\"summary_text\",\"text\":\"**Considering Asana configuration**\\n\\nI’m thinking about the current configuration for Asana. It’s in the local skill directory, even if it’s not explicitly in the config. Disabling it would just remove the skill but shouldn’t have an effect unless asked about Asana tasks specifically. I might need to mention operator.read, although it hasn't been asked. I wouldn't want to disable either skill by default, as that could be key for reassurance.\"},{\"type\":\"summary_text\",\"text\":\"**Evaluating model changes**\\n\\nI'm considering possible changes to the worker models, such as updating to newer model IDs for validation. I could also contemplate removing tool permissions while retaining wrappers, or just leaving things as is if I want to maintain current CLI integration and accept the warning. \\n\\nSwitching might lead to cost changes, different rate limits, and safety improvements, but could also result in losing specific local behavior. I want to ensure any options discussed are clear and organized for decision-making.\"},{\"type\":\"summary_text\",\"text\":\"**Ensuring accurate claims**\\n\\nI need to clarify some points to avoid any misunderstandings. Yes, we've removed env-based secret reading. For ClawRouter users, the suggestion is to keep it but tighten tool access. For Claude workers, a safe approach might be to create a minimal profile focused on analysis and writing only. This is important because the audit warning indicates a prompt-injection risk with older model tiers. We could set a minimal tool profile or adjust the agents list as needed.\"},{\"type\":\"summary_text\",\"text\":\"**Considering security optimization**\\n\\nI need to figure out my next steps for optimizing security while minimizing disruption. First, I think tightening tool policy is essential. Then, I could keep ClawRouter and Asana enabled, unless they go unused. Finally, I should only revisit Claude if the goal is to maintain an audit-clean environment, or if I need those workers to manage untrusted input. Let's see how this plays out!\"}]}"},{"type":"text","text":"[[reply_to_current]] aclaro el criterio real: warning heurístico vs cambio destructivo. Porque **“deshabilitar” era una opción de reducción de superficie**, no porque yo crea que estén rotos o comprometidos.\n\n**ClawRouter**\n- El warning sale porque el plugin tiene el patrón **“leer archivo local + mandar red”**.\n- Ese patrón **puede ser totalmente legítimo** en un router/plugin que usa config local, wallet y llamadas a APIs/modelos.\n- Entonces: **no lo deshabilitaría por defecto**.\n- Solo lo deshabilitaría si:\n - no lo usás, o\n - querés una postura más paranoica/minimalista.\n- **Qué cambiaría si lo apago:** perderías lo que dependa del plugin/ruta de ClawRouter. Antes de tocarlo, yo revisaría exactamente qué estás usando de eso.\n\n**Asana**\n- Mismo cuento: el scanner ve **“leer token local + hablar con API externa”** y lo marca.\n- Eso en una integración OAuth con Asana es **normal**.\n- La parte que sí me parecía fea ya la arreglé: **dejé de usar credenciales desde variables de entorno**.\n- Entonces: **no lo deshabilitaría si lo usás**.\n- Solo lo apagaría si está ahí al pedo.\n- **Qué cambiaría si lo apago:** simplemente perdés la integración con Asana.\n\n**Workers de Claude**\n- Ese warning **no significa “Claude está mal”**.\n- Significa más bien: *“estos workers están configurados como wrappers `claude-sonnet-cli/default` y `claude-opus-cli/default`, y la auditoría no los considera explícitamente como Claude 4.5+ verificable”*.\n- O sea: problema de **tier/verificabilidad de safety posture**, no señal de compromiso.\n\n**Qué podría cambiar ahí**\n1. **No tocar nada** \n - Menos riesgo de romper tu flujo actual\n - Te queda el warning\n\n2. **Restringirles herramientas** \n - Mantener Claude para pensar/escribir\n - Sacarle superficie de ataque si reciben input menos confiable\n - Para mí, esta suele ser la mejor jugada\n\n3. **Reapuntarlos a modelos explícitos y modernos** \n - Ej: IDs explícitos de Claude recientes, no wrappers genéricos\n - Pros: auditoría más limpia, postura más clara\n - Contras: puede cambiar costo, auth, rate limits y comportamiento del worker\n\nMi recomendación real, si querés seguridad **sin romper cosas**:\n1. **endurecer tool policy**\n2. **dejar ClawRouter prendido**\n3. **dejar Asana prendido si lo usás**\n4. **no tocar Claude salvo que quieras dejar la auditoría más prolija**\n\nSi querés, hago ahora mismo **solo el endurecimiento de tool policy**, que es la parte con mejor relación seguridad / no-romper-tu-setup.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b7653748f88190bef36bae6a516692\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":2863,"output":3232,"cacheRead":121600,"cacheWrite":0,"totalTokens":127695,"cost":{"input":0.007157500000000001,"output":0.04848,"cacheRead":0.0304,"cacheWrite":0,"total":0.0860375}},"stopReason":"stop","timestamp":1773626613189}} {"type":"message","id":"eb01ec7f","parentId":"4ef3b3b0","timestamp":"2026-03-16T02:06:17.111Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4031\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:06 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nNo toques nada."}],"timestamp":1773626777090}} {"type":"message","id":"57ae5e31","parentId":"eb01ec7f","timestamp":"2026-03-16T02:06:24.332Z","message":{"role":"assistant","content":[{"type":"text","text":"[[reply_to_current]] Perfecto — lo dejo así. Quedó **sin críticos**, más endurecido que antes, y no toco ni `clawrouter`, ni `asana`, ni los workers de Claude.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b7659eb3d4819086edf2ac9b2785c6\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":98999,"output":49,"cacheRead":26112,"cacheWrite":0,"totalTokens":125160,"cost":{"input":0.2474975,"output":0.000735,"cacheRead":0.006528,"cacheWrite":0,"total":0.2547605}},"stopReason":"stop","timestamp":1773626777107}} {"type":"message","id":"094a2c5d","parentId":"57ae5e31","timestamp":"2026-03-16T02:11:55.137Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4039\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:11 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?"}],"timestamp":1773627115120}} {"type":"message","id":"66f6ee15","parentId":"094a2c5d","timestamp":"2026-03-16T02:12:05.264Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b766f12cc48190973e77cc3800b333\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt2b0rI-f-Jt_SenHdPXewJmQeNK6gWbE1UjB7L7xIRc9o9dFo9VSVqPXh6hwnBFSMNl8EplFYIBFGz_ZX3cgvQwuOIppCmyyp8lgSL9giULB1AoOgJnq-b8FGorL1yXAU0tL3T4ATjEfTN_Hzg8owLySQm0ihEyDZT9uLHK1bNJ_fvwr5e7BM4gMuyEDDOYCMMEEsmTAJxrDsEhzAUene08ersqY7MPUsYp0UamzpN856kNTQHm6lZI5qCNibylAhM9k7dC0zVm7zKzKkn9OQMI48sTsfYAeprIuNLZMht-V-ujnHRcdgxohDW-DPO5pShxcn_jCpTZLEXH_T5tA8WMNul_vPBO8QO5xMIHSE82SB-RycIW9VCjoENB22yqMEv5xj2X91LOvJywQ_XrfRdWg7icM_D_PX5R4q7vsC-QHnDctsgSWqd9r6v2_-iw6o4CQn2Yg-K3tuBczcAjkstmUE1L0VIolz-vSLPZ8zHWheuLcvZN2dG4SbAps0tkSTP_0hftVEb_DqLernkHqfSNcv7P32WS5cd7fbx-OunUuY6KUuiznDjVrS2ZsOxUf-VI6Wi4QVUrybZG-zAD1hZPXNoSs-V8OpIKuvvn0ksmPIoLkiumjULURcT2PPmkiWMQGMHTUn6QfdhEBwqAaM7_OTl1NWMUe38WJyi08C72qAErV6i4mDGP9s47aSxLtJ8GAdXMbsObETVUgda3UfTgiPWOJK4SfwZBOKI73CtmnYUqVa_4XaEMcACHPq_TxDGJjtQiojSoQrt2dxN2APDEKNGC5qxo8O3i99lI_gXXmO5yOgT4NjElieGywzX8nUBq28dX_h9w7GQsTIE0kdmcbOj4iIeUREbDnfwR9VAGletlDaQL5f6OGFLqtJBI0WpOHMt-_6W2PFs4BztOa-R-N5roOiXL8VdgIcjCZ7xdPu-cjWDWQ_sHBnwmwdwSC2RKLC9bd-hTD01caCm23_8nKjrttGPn0TjayC6GUiqUpmliUefW7Le2kK9PngPtHCmZ_D_9LYyJPVmEMGGbM5ugX3C36u3eg4K0Yj4IQBkAnvve6GGImBQFyBWC3yTsoi47WABzQHrydMon3bGW6WoeqniSgclZEnKk3G1EaRTitZTrnYbQcBIYfRKWGAYFc7CSXbYR93mwmdStRN1z9QiC7BXtBDFNDDpatGFa_3g-dQTFBfGI2y5rjWVJrC9p962exGUr055SJEhAruwb_65taoX3kQ8J3tB2AL0om2wSJYuUm0BiezUVabKEZ_rCURDfQNMvYJX66tIjw4pCb9NLJR6EVRXRVu_-4AQmpmI2XvaTmrp9AiBgoGoAOQjPZ6sL-gTTnuyNpG7vZ6tryBZd1dzuCrtxJlGDYGXGfVpNmwOi7aeTvkRFdMIz8iatWc1rBS4f5BBmGa325H4Xj_otnMyZ0TrYjW9KskrI6imebOJam53xPHF_OhAS2_aaglTLk_LivK5ifFYp3NIYHh68K5jZKET661Ju-v78Yzuewp8ukendQCasCpya0bQjG0DnhAlRUDVdYaVjgVzxqX3qWnS_2kfyZCMiEvJ5fK9eDu2jNGPvhuWyx-R-4UhDgaTc0lmfwU7QcxNb3UJUF9norBASyiDa-JbcVOC7Z5qCo6t94mHajPFerzSPSklA32r0c4Spy8IcpzrWWf84HBEjCFCYOg9R9dgs2OY7WH9WMyqs=\",\"summary\":[]}"},{"type":"toolCall","id":"call_QqpTR9WB1ZRDGM5aQY9Qf5Jj|fc_0776d4d0ce7a6f6b0169b766f4fb008190b94429c2beea98f3","name":"session_status","arguments":{},"partialJson":"{}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":124133,"output":144,"cacheRead":0,"cacheWrite":0,"totalTokens":124277,"cost":{"input":0.3103325,"output":0.00216,"cacheRead":0,"cacheWrite":0,"total":0.3124925}},"stopReason":"toolUse","timestamp":1773627115133}} {"type":"message","id":"c45e1d8a","parentId":"66f6ee15","timestamp":"2026-03-16T02:12:07.652Z","message":{"role":"toolResult","toolCallId":"call_QqpTR9WB1ZRDGM5aQY9Qf5Jj|fc_0776d4d0ce7a6f6b0169b766f4fb008190b94429c2beea98f3","toolName":"session_status","content":[{"type":"text","text":"🦞 OpenClaw 2026.3.13 (61d171a)\n🕒 Time: Monday, March 16th, 2026 — 2:12 AM (UTC)\n🧠 Model: openai-codex/gpt-5.4 · 🔑 oauth (openai-codex:default)\n🧮 Tokens: 99k in / 49 out\n🗄️ Cache: 21% hit · 26k cached, 0 new\n📚 Context: 125k/400k (31%) · 🧹 Compactions: 0\n📊 Usage: 5h 53% left ⏱18m · Week 86% left ⏱6d 19h\n🧵 Session: agent:pipo:telegram:direct:842987156 • updated just now\n⚙️ Runtime: direct · Think: high · verbose · Reasoning: on · elevated:full\n🪢 Queue: collect (depth 0)"}],"details":{"ok":true,"sessionKey":"agent:pipo:telegram:direct:842987156","changedModel":false,"statusText":"🦞 OpenClaw 2026.3.13 (61d171a)\n🕒 Time: Monday, March 16th, 2026 — 2:12 AM (UTC)\n🧠 Model: openai-codex/gpt-5.4 · 🔑 oauth (openai-codex:default)\n🧮 Tokens: 99k in / 49 out\n🗄️ Cache: 21% hit · 26k cached, 0 new\n📚 Context: 125k/400k (31%) · 🧹 Compactions: 0\n📊 Usage: 5h 53% left ⏱18m · Week 86% left ⏱6d 19h\n🧵 Session: agent:pipo:telegram:direct:842987156 • updated just now\n⚙️ Runtime: direct · Think: high · verbose · Reasoning: on · elevated:full\n🪢 Queue: collect (depth 0)"},"isError":false,"timestamp":1773627127639}} {"type":"message","id":"bb964c07","parentId":"c45e1d8a","timestamp":"2026-03-16T02:12:14.919Z","message":{"role":"assistant","content":[{"type":"text","text":"[[reply_to_current]] Ahora mismo estoy corriendo con:\n\n- **Provider:** `openai-codex`\n- **Modelo:** `gpt-5.4`\n- **Auth/profile:** `openai-codex:default` vía **OAuth**\n\nEn formato completo: **`openai-codex/gpt-5.4`**.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b766fcced0819094467adfe9127754\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":124502,"output":77,"cacheRead":0,"cacheWrite":0,"totalTokens":124579,"cost":{"input":0.311255,"output":0.001155,"cacheRead":0,"cacheWrite":0,"total":0.31241}},"stopReason":"stop","timestamp":1773627127658}} {"type":"custom","customType":"model-snapshot","data":{"timestamp":1773627155863,"provider":"custom-api-deepseek-com","modelApi":"openai-completions","modelId":"deepseek-chat"},"id":"255b0884","parentId":"bb964c07","timestamp":"2026-03-16T02:12:35.864Z"} {"type":"custom","customType":"openclaw:prompt-error","data":{"timestamp":1773627755959,"runId":"6dfe8231-db55-4ec0-8921-f45d4a2e9a1d","sessionId":"a4d3a298-780a-4341-83d4-88c4ae20a559","provider":"custom-api-deepseek-com","model":"deepseek-chat","api":"openai-completions","error":"aborted"},"id":"c159940b","parentId":"255b0884","timestamp":"2026-03-16T02:22:35.959Z"} {"type":"custom","customType":"model-snapshot","data":{"timestamp":1773627756511,"provider":"openrouter","modelApi":"openai-completions","modelId":"openrouter/free"},"id":"bdbb01a6","parentId":"c159940b","timestamp":"2026-03-16T02:22:36.512Z"} {"type":"message","id":"6adcfc56","parentId":"bdbb01a6","timestamp":"2026-03-16T02:22:36.566Z","message":{"role":"user","content":[{"type":"text","text":"[Queued messages while agent was busy]\n\n---\nQueued #1\nConversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4047\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:16 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?\n\n---\nQueued #2\nConversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4050\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:16 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?\n\n---\nQueued #3\nConversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4053\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:17 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?\n\n---\nQueued #4\nConversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4056\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:17 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?\n\n---\nQueued #5\nConversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4059\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:17 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?"}],"timestamp":1773627756549}} {"type":"message","id":"6da757b0","parentId":"6adcfc56","timestamp":"2026-03-16T02:22:36.875Z","message":{"role":"assistant","content":[],"api":"openai-completions","provider":"openrouter","model":"openrouter/free","usage":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"totalTokens":0,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"error","timestamp":1773627756562,"errorMessage":"401 User not found."}} {"type":"custom","customType":"model-snapshot","data":{"timestamp":1773627757250,"provider":"blockrun","modelApi":"openai-completions","modelId":"auto"},"id":"e7db1298","parentId":"6da757b0","timestamp":"2026-03-16T02:22:37.250Z"} {"type":"message","id":"6496dcc0","parentId":"e7db1298","timestamp":"2026-03-16T02:22:37.314Z","message":{"role":"user","content":[{"type":"text","text":"[Queued messages while agent was busy]\n\n---\nQueued #1\nConversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4047\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:16 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?\n\n---\nQueued #2\nConversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4050\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:16 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?\n\n---\nQueued #3\nConversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4053\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:17 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?\n\n---\nQueued #4\nConversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4056\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:17 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?\n\n---\nQueued #5\nConversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4059\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:17 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?"}],"timestamp":1773627757288}} {"type":"message","id":"8093af90","parentId":"6496dcc0","timestamp":"2026-03-16T02:22:44.791Z","message":{"role":"assistant","content":[],"api":"openai-completions","provider":"blockrun","model":"auto","usage":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"totalTokens":0,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1773627757306}} {"type":"custom","customType":"model-snapshot","data":{"timestamp":1773627956919,"provider":"openrouter","modelApi":"openai-completions","modelId":"openrouter/free"},"id":"96dcff40","parentId":"8093af90","timestamp":"2026-03-16T02:25:56.919Z"} {"type":"message","id":"c313cb79","parentId":"96dcff40","timestamp":"2026-03-16T02:25:56.979Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4060\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:25 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nPipo"}],"timestamp":1773627956958}} {"type":"message","id":"86c4b574","parentId":"c313cb79","timestamp":"2026-03-16T02:25:57.316Z","message":{"role":"assistant","content":[],"api":"openai-completions","provider":"openrouter","model":"openrouter/free","usage":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"totalTokens":0,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"error","timestamp":1773627956976,"errorMessage":"401 User not found."}} {"type":"custom","customType":"model-snapshot","data":{"timestamp":1773627957631,"provider":"blockrun","modelApi":"openai-completions","modelId":"auto"},"id":"1397f628","parentId":"86c4b574","timestamp":"2026-03-16T02:25:57.631Z"} {"type":"message","id":"6efcf9ad","parentId":"1397f628","timestamp":"2026-03-16T02:25:57.695Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4060\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:25 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nPipo"}],"timestamp":1773627957668}} {"type":"message","id":"954ed345","parentId":"6efcf9ad","timestamp":"2026-03-16T02:26:04.573Z","message":{"role":"assistant","content":[{"type":"text","text":"[[reply_to_current]] Sigo corriendo con el mismo modelo, Igna:\n\n- **Provider:** `openai-codex`\n- **Modelo:** `gpt-5.4`"}],"api":"openai-completions","provider":"blockrun","model":"auto","usage":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"totalTokens":0,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1773627957688}} {"type":"custom","customType":"model-snapshot","data":{"timestamp":1773629727781,"provider":"custom-api-moonshot-ai","modelApi":"openai-completions","modelId":"kimi-k2.5"},"id":"68e029bb","parentId":"954ed345","timestamp":"2026-03-16T02:55:27.781Z"} {"type":"message","id":"cf13faef","parentId":"68e029bb","timestamp":"2026-03-16T02:55:27.843Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4069\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 02:55 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?"}],"timestamp":1773629727818}} {"type":"message","id":"322a93dc","parentId":"cf13faef","timestamp":"2026-03-16T02:55:57.241Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"The user is asking again what provider and model I'm running. They seem to be testing or checking if the model has changed. Let me check session_status again to give them the current accurate info.","thinkingSignature":"reasoning_content"},{"type":"toolCall","id":"session_status:99","name":"session_status","arguments":{}}],"api":"openai-completions","provider":"custom-api-moonshot-ai","model":"kimi-k2.5","usage":{"input":93126,"output":52,"cacheRead":5888,"cacheWrite":0,"totalTokens":99066,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"toolUse","timestamp":1773629727839}} {"type":"message","id":"365ef0a5","parentId":"322a93dc","timestamp":"2026-03-16T02:55:57.284Z","message":{"role":"toolResult","toolCallId":"session_status:99","toolName":"session_status","content":[{"type":"text","text":"🦞 OpenClaw 2026.3.13 (61d171a)\n🕒 Time: Monday, March 16th, 2026 — 2:55 AM (UTC)\n🧠 Model: custom-api-moonshot-ai/kimi-k2.5 · 🔑 api-key (models.json)\n🧮 Tokens: 125k in / 77 out · 💵 Cost: $0.0000\n📚 Context: 125k/200k (62%) · 🧹 Compactions: 0\n🧵 Session: agent:pipo:telegram:direct:842987156 • updated 1m ago\n⚙️ Runtime: direct · Think: high · verbose · Reasoning: on · elevated:full\n🪢 Queue: collect (depth 0)"}],"details":{"ok":true,"sessionKey":"agent:pipo:telegram:direct:842987156","changedModel":false,"statusText":"🦞 OpenClaw 2026.3.13 (61d171a)\n🕒 Time: Monday, March 16th, 2026 — 2:55 AM (UTC)\n🧠 Model: custom-api-moonshot-ai/kimi-k2.5 · 🔑 api-key (models.json)\n🧮 Tokens: 125k in / 77 out · 💵 Cost: $0.0000\n📚 Context: 125k/200k (62%) · 🧹 Compactions: 0\n🧵 Session: agent:pipo:telegram:direct:842987156 • updated 1m ago\n⚙️ Runtime: direct · Think: high · verbose · Reasoning: on · elevated:full\n🪢 Queue: collect (depth 0)"},"isError":false,"timestamp":1773629757272}} {"type":"message","id":"69ecda59","parentId":"365ef0a5","timestamp":"2026-03-16T02:56:03.492Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"Interesting! The model changed from `openai-codex/gpt-5.4` to `custom-api-moonshot-ai/kimi-k2.5`. This could be because:\n1. The model was switched during the conversation\n2. A fallback was triggered\n3. The session was reset with a different model\n\nLet me report the current accurate status to the user.","thinkingSignature":"reasoning_content"},{"type":"text","text":"[[reply_to_current]] Ahora cambié — estoy corriendo con:\n\n- **Provider:** `custom-api-moonshot-ai` (Moonshot AI)\n- **Modelo:** `kimi-k2.5`\n\nEn formato completo: **`custom-api-moonshot-ai/kimi-k2.5`**."}],"api":"openai-completions","provider":"custom-api-moonshot-ai","model":"kimi-k2.5","usage":{"input":439,"output":149,"cacheRead":98816,"cacheWrite":0,"totalTokens":99404,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1773629757291}} {"type":"custom","customType":"model-snapshot","data":{"timestamp":1773630201506,"provider":"openrouter","modelApi":"openai-completions","modelId":"openrouter/free"},"id":"557f8d8d","parentId":"69ecda59","timestamp":"2026-03-16T03:03:21.506Z"} {"type":"message","id":"95cc0532","parentId":"557f8d8d","timestamp":"2026-03-16T03:03:21.566Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4075\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 03:03 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?"}],"timestamp":1773630201548}} {"type":"message","id":"631d0547","parentId":"95cc0532","timestamp":"2026-03-16T03:03:21.886Z","message":{"role":"assistant","content":[],"api":"openai-completions","provider":"openrouter","model":"openrouter/free","usage":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"totalTokens":0,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"error","timestamp":1773630201562,"errorMessage":"401 User not found."}} {"type":"custom","customType":"model-snapshot","data":{"timestamp":1773630202201,"provider":"blockrun","modelApi":"openai-completions","modelId":"auto"},"id":"d5a9068e","parentId":"631d0547","timestamp":"2026-03-16T03:03:22.201Z"} {"type":"message","id":"865b7f0e","parentId":"d5a9068e","timestamp":"2026-03-16T03:03:22.263Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4075\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 03:03 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?"}],"timestamp":1773630202239}} {"type":"message","id":"ac1e5d72","parentId":"865b7f0e","timestamp":"2026-03-16T03:03:27.643Z","message":{"role":"assistant","content":[],"api":"openai-completions","provider":"blockrun","model":"auto","usage":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"totalTokens":0,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1773630202256}} {"type":"custom","customType":"model-snapshot","data":{"timestamp":1773630235021,"provider":"openrouter","modelApi":"openai-completions","modelId":"openrouter/free"},"id":"de4bdabf","parentId":"ac1e5d72","timestamp":"2026-03-16T03:03:55.021Z"} {"type":"message","id":"37b17690","parentId":"de4bdabf","timestamp":"2026-03-16T03:03:55.079Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4076\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 03:03 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nHola?"}],"timestamp":1773630235063}} {"type":"message","id":"2da8dc9f","parentId":"37b17690","timestamp":"2026-03-16T03:03:55.124Z","message":{"role":"assistant","content":[],"api":"openai-completions","provider":"openrouter","model":"openrouter/free","usage":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"totalTokens":0,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"error","timestamp":1773630235076,"errorMessage":"401 User not found."}} {"type":"custom","customType":"model-snapshot","data":{"timestamp":1773630235422,"provider":"blockrun","modelApi":"openai-completions","modelId":"auto"},"id":"5c886076","parentId":"2da8dc9f","timestamp":"2026-03-16T03:03:55.422Z"} {"type":"message","id":"04a20e88","parentId":"5c886076","timestamp":"2026-03-16T03:03:55.482Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4076\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 03:03 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nHola?"}],"timestamp":1773630235459}} {"type":"message","id":"1ac725c5","parentId":"04a20e88","timestamp":"2026-03-16T03:04:00.418Z","message":{"role":"assistant","content":[],"api":"openai-completions","provider":"blockrun","model":"auto","usage":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"totalTokens":0,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1773630235475}} {"type":"message","id":"840c798d","parentId":"1ac725c5","timestamp":"2026-03-16T03:04:24.989Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4079\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 03:04 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?"}],"timestamp":1773630264965}} {"type":"message","id":"44402d79","parentId":"840c798d","timestamp":"2026-03-16T03:04:29.368Z","message":{"role":"assistant","content":[],"api":"openai-completions","provider":"blockrun","model":"auto","usage":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"totalTokens":0,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1773630264982}} {"type":"custom","customType":"model-snapshot","data":{"timestamp":1773630289566,"provider":"blockrun","modelApi":"openai-completions","modelId":"free"},"id":"c70f1f28","parentId":"44402d79","timestamp":"2026-03-16T03:04:49.566Z"} {"type":"message","id":"5edd873b","parentId":"c70f1f28","timestamp":"2026-03-16T03:04:49.621Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4082\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 03:04 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?"}],"timestamp":1773630289602}} {"type":"message","id":"55aecb80","parentId":"5edd873b","timestamp":"2026-03-16T03:04:52.059Z","message":{"role":"assistant","content":[{"type":"text","text":"[[reply_to_current]] Seguimos con **`custom-api-moonshot-ai / kimi‑k2 ( k2.5 ) `** como el LLM actual."}],"api":"openai-completions","provider":"blockrun","model":"free","usage":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"totalTokens":0,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0,"total":0}},"stopReason":"stop","timestamp":1773630289619}} {"type":"custom","customType":"model-snapshot","data":{"timestamp":1773630311898,"provider":"openai-codex","modelApi":"openai-codex-responses","modelId":"gpt-5.4"},"id":"6a0c0725","parentId":"55aecb80","timestamp":"2026-03-16T03:05:11.898Z"} {"type":"message","id":"4ea1a513","parentId":"6a0c0725","timestamp":"2026-03-16T03:05:11.956Z","message":{"role":"user","content":[{"type":"text","text":"Conversation info (untrusted metadata):\n```json\n{\n \"message_id\": \"4086\",\n \"sender_id\": \"842987156\",\n \"sender\": \"Snack lakes\",\n \"timestamp\": \"Mon 2026-03-16 03:05 UTC\"\n}\n```\n\nSender (untrusted metadata):\n```json\n{\n \"label\": \"Snack lakes (842987156)\",\n \"id\": \"842987156\",\n \"name\": \"Snack lakes\",\n \"username\": \"snacklakes\"\n}\n```\n\nY ahora que provider y modelo de llm estas corriendo?"}],"timestamp":1773630311935}} {"type":"message","id":"71fc96fe","parentId":"4ea1a513","timestamp":"2026-03-16T03:05:21.983Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"**Determining current model**\n\nI need to respond to the user's question about the current provider or model. According to the instructions, I should use the session_status for model-use inquiries. It seems essential to deliver accurate and up-to-date information. Sometimes I've included tags in final answers, which isn't ideal. Since the user has asked a straightforward question, it might be best to call session_status again to ensure I mention the current model correctly. Let's proceed with that.","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7736ce35c8190b7a1aee102aa160e\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt3NxSZn8hndSfj8PgukHzTG63o19YG-_CY0_e2tXSdFJBnGLJYp4yvEARu1ZdWjJrPiLAp6_htLiQYw6ootmx_QVvQ3KILX4_D_z9kdDRbWcapRYvlJjjkggXa1sDMZauTu9lb2hIW-9jmI8IBNMbnkbc5TDvM1gGdPXQByoCKF9Qhk8kxfkVyjtpKYnxs4M5n0aJc3iGohtED4TWfDtE0wuwT87ZZxNdBBv7aFHN01YgPowLbqvYtKWNlCL6odi67KT7RSwxlEoGKuCr9SPpgyyw2cuXTWtuI6pJdL_aMeeawB1kX5nOCUgDXR1BDDBbSnJbHbj3uq6YH-V2DDByAa3VuOSxvdzXmYmOaxsP0ECH07fJW5xKe3uhJxlK3XL4XzDaWH4Nwa9kMjGU17EX6YXNypbXRECHfxmzrKKbXYESmbcP1_GaaAWd_WWogOLn3iJKBr1mXB30ADtvJGyhlIPfWtvEciHWutdJJ-ak9nK8B_xrgD0AnL3VgjknHvQn9dnSB5IWJLic3WqUIYots_j5eZbiwiEYHuP_Su_5FmZcFtXgH-Df-pq9GIjPzX-dgBTy8gqQxovqKbPPEcMXXcISW4l4O4HLaYkoIiE6rxpMntjpU1o2lRzbk7hI70vVsdXGdYiVUkZPDOzp8y7p2Ao_wz9wsK2iX7BgJN6pBDKuULm2XflqZtQ5LNSwwHjIao_Nn0B-_l4H-NGTYzWmzZKVLz_bDoEJD3VJX-65UC3og3ZHHaEqHGbDA_h7aXXG2T69MHmLXOsEiXagFCL-SXBiZlDquYXzuouLuY0pn0sMnFubuKVy0Ta249JRno3u73oaTZfAHOjppmN0sIDY8z1HAOXeHaRumF7zU_0qp5Nga1TYHGnIpMZWAgIBhw2GYdA6aGTBLUt0qR7WqY5ngKFDRgqU9_NmtkH7bKNgBlfSt0gMMnosYNB7oDiR4o6TeQ2QZFZ-WS2v09EYZObuzIxK-qCo0AD4T74A-qKFwGwC12bgUrJsW47pzVXC_xH6IWJPrgIxB9-7MvPF_g1EWoavkV13tTylZ-uxLfxgCi1qFwqhuGS4UoO5atstcmn-RT_6adWWyAPc3L9Jw9_mXDFFHSuuFgHGUi5RrCiziQjmYJH3fFA6cSvHK_4xAc9KTblHyYje8gjASC-lHw9U-YKoN3sdg2MqCNu5socUt4Q4-0LDjgykIsgyCjVjGwTIJVJ6aa2KW5coscClA8Ak7yIrvAk-mVqWTrXTDThkjNaHOUEHAVro2le8k_9VqV4MmN8qlczdbhZrH2wR8NuF3r5WDN9whFZRxgxx7mwKCgijp6bV1qJqJIJ4-PvgFG99DQNnrWj9xk_7zlSiRiYn_GkRSOAVofS4vZnc_rc4RJJgXGtYrkGZePvqm2pjbO_Kfn22QGeiO4T02qAlM9oVtNwquX6bJMuaDrHK0aRaEqEHfOo6yiTFifj6ofGVHD6VjBjF20bnjLqe1ooU9sPY_rvPw==\",\"summary\":[{\"type\":\"summary_text\",\"text\":\"**Determining current model**\\n\\nI need to respond to the user's question about the current provider or model. According to the instructions, I should use the session_status for model-use inquiries. It seems essential to deliver accurate and up-to-date information. Sometimes I've included tags in final answers, which isn't ideal. Since the user has asked a straightforward question, it might be best to call session_status again to ensure I mention the current model correctly. Let's proceed with that.\"}]}"},{"type":"toolCall","id":"call_neabVNEnk6VKz8vzHrJCWAAq|fc_0776d4d0ce7a6f6b0169b773717bdc8190bfd6df2afbce059c","name":"session_status","arguments":{},"partialJson":"{}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":127128,"output":115,"cacheRead":0,"cacheWrite":0,"totalTokens":127243,"cost":{"input":0.31782000000000005,"output":0.001725,"cacheRead":0,"cacheWrite":0,"total":0.319545}},"stopReason":"toolUse","timestamp":1773630311952}} {"type":"message","id":"5b4aee1e","parentId":"71fc96fe","timestamp":"2026-03-16T03:05:22.739Z","message":{"role":"toolResult","toolCallId":"call_neabVNEnk6VKz8vzHrJCWAAq|fc_0776d4d0ce7a6f6b0169b773717bdc8190bfd6df2afbce059c","toolName":"session_status","content":[{"type":"text","text":"🦞 OpenClaw 2026.3.13 (61d171a)\n🕒 Time: Monday, March 16th, 2026 — 3:05 AM (UTC)\n🧠 Model: openai-codex/gpt-5.4 · 🔑 oauth (openai-codex:default)\n🧮 Tokens: 94k in / 201 out\n🗄️ Cache: 51% hit · 99k cached, 0 new\n📚 Context: 127k/400k (32%) · 🧹 Compactions: 0\n📊 Usage: 5h 100% left ⏱4h 59m · Week 86% left ⏱6d 18h\n🧵 Session: agent:pipo:telegram:direct:842987156 • updated just now\n⚙️ Runtime: direct · Think: high · verbose · Reasoning: on · elevated:full\n🪢 Queue: collect (depth 0)"}],"details":{"ok":true,"sessionKey":"agent:pipo:telegram:direct:842987156","changedModel":false,"statusText":"🦞 OpenClaw 2026.3.13 (61d171a)\n🕒 Time: Monday, March 16th, 2026 — 3:05 AM (UTC)\n🧠 Model: openai-codex/gpt-5.4 · 🔑 oauth (openai-codex:default)\n🧮 Tokens: 94k in / 201 out\n🗄️ Cache: 51% hit · 99k cached, 0 new\n📚 Context: 127k/400k (32%) · 🧹 Compactions: 0\n📊 Usage: 5h 100% left ⏱4h 59m · Week 86% left ⏱6d 18h\n🧵 Session: agent:pipo:telegram:direct:842987156 • updated just now\n⚙️ Runtime: direct · Think: high · verbose · Reasoning: on · elevated:full\n🪢 Queue: collect (depth 0)"},"isError":false,"timestamp":1773630322727}} {"type":"message","id":"becf1917","parentId":"5b4aee1e","timestamp":"2026-03-16T03:05:33.887Z","message":{"role":"assistant","content":[{"type":"thinking","thinking":"","thinkingSignature":"{\"id\":\"rs_0776d4d0ce7a6f6b0169b7737c5db4819096aedd948be3e715\",\"type\":\"reasoning\",\"encrypted_content\":\"gAAAAABpt3N91Zz-04ZY6F0g3pfRqh1LeojK-tvH_LJURNsiaAgwjWh1ufVRx8J24afceIgca7ZwdxN_0fbNT4xTKQEasmjhRfaorZ7ysRWo-BSGwo_MqHqy5RpXXrsI0Uv825I7jbe6VqBIMFUVoLAZITKcrUZSJfkQKt-7ZpuT9upP_tkln9t2PguOzjTuP-oZhcsE1pyZljAXB-2wWNr_w63pCWsNfVT-EsXPKPeqEIwvwkNBkH56Zf_oAVZJlWaV3LDO9Iv02a4SD2zXbrddtVIPVmvhe8uMWafNiQ0U9f4ztMhhGtxlpYOXiKgVXRl3xiSiG8rD1Z9SzfKMalEuRrR_sZNavfSZ-ThM5mE-Ek9KwR_Ut3rbgRoq6yFmLaab9LKdEqArvNxQbUrOxUUhsfGqMCTR3PemOZ-x7zElupHpZetS4zwPsvv037IIDhA6p9fA016og2teSn0jv1ZAuAChujUnJ1x-8N83GxQnNlDnBdesZIJyxlP5b9hM2cnn-dDKhw-Jnp3gtOfGZuWB_JijoL6MxlsEBWFDTnlIpsWyfC3rWOFedyaH4H-tcHUPYz7_nG5hLlLjmPf4JTTUzSXwf-i992THGxLbxuHPT-ldyK68zOiencXDwCEONssgw9eSaOGXLIOqY7HOwAS0FPAaPmbMziZPVaJAxlfAPf5hOuqdQdeSwNJB9sFdw1el_IeSkj8kTAoYNiNsAuiZtoNlpgxKINg2kPSZXfMPXg1-jmXeLFc3rfqzi1eJ-f8P0RT4sXdJqQoGGd7x4S2uCe8NGd5bMoh4ARI6DuYeb6dwjau_-pB1yCauj_FRCZ8TXj2B5A4wmEPAU6rnGCmg72pkwEnYZbYKVonqAid7XNaVtb0vASP2T-mYZHbNFFrL2K1Kf_pDFeyhcV9CXzCuXqo_AU43sA==\",\"summary\":[]}"},{"type":"text","text":"[[reply_to_current]] Ahora mismo estoy con:\n\n- **Provider:** `openai-codex`\n- **Modelo:** `gpt-5.4`\n\nCompleto: **`openai-codex/gpt-5.4`**.","textSignature":"{\"v\":1,\"id\":\"msg_0776d4d0ce7a6f6b0169b7737d06d881909dbcf5e762ae57ed\",\"phase\":\"final_answer\"}"}],"api":"openai-codex-responses","provider":"openai-codex","model":"gpt-5.4","usage":{"input":100427,"output":75,"cacheRead":26112,"cacheWrite":0,"totalTokens":126614,"cost":{"input":0.2510675,"output":0.0011250000000000001,"cacheRead":0.006528,"cacheWrite":0,"total":0.25872049999999996}},"stopReason":"stop","timestamp":1773630322743}} {"type":"custom","customType":"model-snapshot","data":{"timestamp":1773630545771,"provider":"custom-api-deepseek-com","modelApi":"openai-completions","modelId":"deepseek-chat"},"id":"fed4a25d","parentId":"becf1917","timestamp":"2026-03-16T03:09:05.771Z"}