43 KiB
43 KiB
Changelog
2026.1.12-4
Fixes
- Onboarding/Configure: refuse to proceed with invalid configs; run
clawdbot doctorfirst to avoid wiping custom fields. (#764 — thanks @mukhtharcm) - Anthropic: merge consecutive user turns (preserve newest metadata) before validation to avoid “Incorrect role information” errors. (#804 — thanks @ThomsenDrake)
- Discord/Slack: centralize reply-thread planning so auto-thread replies stay in the created thread without parent reply refs.
- Update: run
clawdbot doctor --non-interactiveduring updates to avoid TTY hangs. (#781 — thanks @ronyrus) - Tools: allow Claude/Gemini tool param aliases (
file_path,old_string,new_string) while enforcing required params at runtime. (#793 — thanks @hsrvc) - Gemini: downgrade tool-call history missing
thought_signatureto avoid INVALID_ARGUMENT errors. (#793 — thanks @hsrvc) - Messaging: enforce context isolation for message tool sends across providers (normalized targets + tests). (#793 — thanks @hsrvc)
- Auto-reply: re-evaluate reasoning tag enforcement on fallback providers to prevent leaked reasoning. (#810 — thanks @mcinteerj)
- Tools/Gemini: drop null-only union variants while cleaning tool schemas to avoid Cloud Code Assist schema errors. (#782 — thanks @AbhisekBasu1)
2026.1.12-3
Changes
- Sandbox: drop legacy
memorytool-policy shorthand; require explicitgroup:memory.
Fixes
- Telegram: tolerate mocked bots missing native-command APIs (
setMyCommands,command) during tests. - Auto-reply: fix streaming block reply media handling (no redeclared/use-before-declare vars).
2026.1.12-2
Changes
- Subagents: add config to set default sub-agent model (
agents.defaults.subagents.model+ per-agent override); still overridden bysessions_spawn.model. - Plugins: restore full voice-call plugin parity (Telnyx/Twilio, streaming, inbound policies, tools/CLI).
- Sandbox: support tool-policy groups in
tools.sandbox.tools(e.g.group:memory,group:fs) to reduce config churn.
Fixes
- Models/MiniMax: strip malformed tool invocation XML (
<invoke>...</invoke>and</minimax:tool_call>) from assistant text to prevent tool call leaks into user messages. (#809 — thanks @latitudeki5223) - Tools/Models: MiniMax vision now uses the Coding Plan VLM endpoint (
/v1/coding_plan/vlm) so theimagetool works with MiniMax keys (also accepts@/path/to/file.png-style inputs). - Gateway/macOS: reduce noisy loopback WS "closed before connect" logs during tests.
- Auto-reply: resolve ambiguous
/modelfuzzy matches by picking the best candidate instead of erroring.
2026.1.12-1
Changes
- Heartbeat: raise default
ackMaxCharsto 300 so anyHEARTBEAT_OKreplies with short padding stay internal (fewer noisy heartbeat posts on providers). - Onboarding: normalize API key inputs (strip
export KEY=...wrappers) so shell-style entries paste cleanly.
2026.1.12 (Unreleased)
Highlights
- Memory: add vector search for agent memories (Markdown-only scope) with SQLite index, chunking, lazy sync + file watch, and per-agent enablement/fallback.
Changes
- Agents: strengthen memory recall guidance (memory_search mandatory for past work/preferences; system prompt injects conditional recall section; memory_get now described as safe snippet fetch).
- Browser: add
scrollintoviewaction to scroll refs into view before click/type. - Memory: embedding providers support OpenAI or local
node-llama-cpp; config adds defaults + per-agent overrides, provider/fallback metadata surfaced in tools/CLI. - CLI/Tools: new
clawdbot memorycommands plusmemory_search/memory_gettools returning snippets + line ranges and provider info. - Runtime: memory index stored under
~/.clawdbot/memory/{agentId}.sqlitewith watch-on-by-default; inline status replies now stay auth-gated while inline prompts continue to the agent. - Discord: add
discord.allowBotsto permit bot-authored messages (still ignores its own messages) with docs warning about bot loops. (#802) — thanks @zknicker. - CLI/Onboarding:
clawdbot dashboardprints/copies the tokenized Control UI link and opens it; onboarding now auto-opens the dashboard with your token and keeps the link in the summary. - Commands: native slash commands now default to
"auto"(on for Discord/Telegram, off for Slack) with per-provider overrides (discord/telegram/slack.commands.native) and docs updated. - Sandbox: allow Docker bind mounts via
docker.binds; merges global + per-agent binds (per-agent ignored under shared scope) for custom host paths. (#790 — thanks @akonyer)
Fixes
- Auto-reply: inline
/statusnow honors allowlists (authorized stripped + replied inline; unauthorized leaves text for the agent) to match command gating tests. - Models: normalize
${ENV_VAR}apiKey config values and auto-fill missing providerapiKeyfrom env/auth when custom provider models are configured (fixes MiniMax “Unknown model” on fresh installs). - Models/Tools: include
MiniMax-VL-01in implicit MiniMax provider so image pairing uses a real vision model. - Telegram: show typing indicator in General forum topics. (#779) — thanks @azade-c.
- Discord: keep reasoning italics intact when messages are chunked, so reasoning stays italic across multi-part sends.
- Models: keep explicit GitHub Copilot provider config and honor agent-dir auth profiles for auto-injection. (#705) — thanks @TAGOOZ.
- Auto-reply: restore 300-char heartbeat ack limit and keep >300 char replies instead of dropping them; adjust long heartbeat test content accordingly.
- Gateway:
agents.listnow honors explicitagents.listconfig without pulling stray agents from disk; GitHub Copilot CLI auth path uses the updated provider build. - Google: apply patched pi-ai
google-gemini-clifunction call handling (strips ids) after upgrading to pi-ai 0.43.0. - Tools: allow Gemini/Claude-style aliases (
file_path,old_string,new_string) in read/write/edit schemas while still enforcing required params at runtime to avoid validation loops. - Auto-reply: elevated/reasoning toggles now enqueue system events so the model sees the mode change immediately.
- Tools: keep
imageavailable in sandbox and fail over when image models return empty output (fixes “(no text returned)”). - Discord: add per-channel
autoThreadto auto-create threads for top-level messages. (#800) — thanks @davidguttman. - Discord: fix autoThread routing so replies stay in the created thread and avoid reply references. (#807) — thanks @davidguttman.
- Onboarding: TUI defaults to
deliver: falseto avoid cross-provider auto-delivery leaks; onboarding spawns the TUI with explicitdeliver: false. (#791 — thanks @roshanasingh4)
2026.1.11
Highlights
- Plugins are now first-class: loader + CLI management, plus the new Voice Call plugin.
- Config: modular
$includesupport for split config files. (#731) — thanks @pasogott. - Agents/Pi: reserve compaction headroom so pre-compaction memory writes can run before auto-compaction.
- Agents: automatic pre-compaction memory flush turn to store durable memories before compaction.
Changes
- CLI/Onboarding: simplify MiniMax auth choice to a single M2.1 option.
- CLI: configure section selection now loops until Continue.
- Docs: explain MiniMax vs MiniMax Lightning (speed vs cost) and restore LM Studio example.
- Docs: add Cerebras GLM 4.6/4.7 config example (OpenAI-compatible endpoint).
- Onboarding/CLI: group model/auth choice by provider and label Z.AI as GLM 4.7.
- Onboarding/Docs: add Moonshot AI (Kimi K2) auth choice + config example.
- CLI/Onboarding: prompt to reuse detected API keys for Moonshot/MiniMax/Z.AI/Gemini/Anthropic/OpenCode.
- Auto-reply: add compact
/modelpicker (models + available providers) and show provider endpoints in/model status. - Control UI: add Config tab model presets (MiniMax M2.1, GLM 4.7, Kimi) for one-click setup.
- Plugins: add extension loader (tools/RPC/CLI/services), discovery paths, and config schema + Control UI labels (uiHints).
- Plugins: add
clawdbot plugins install(path/tgz/npm), pluslist|info|enable|disable|doctorUX. - Plugins: voice-call plugin now real (Twilio/log), adds start/status RPC/CLI/tool + tests.
- Docs: add plugins doc + cross-links from tools/skills/gateway config.
- Docs: add beginner-friendly plugin quick start + expand Voice Call plugin docs.
- Tests: add Docker plugin loader + tgz-install smoke test.
- Tests: extend Docker plugin E2E to cover installing from local folders (
plugins.load.paths) andfile:npm specs. - Tests: add coverage for pre-compaction memory flush settings.
- Tests: modernize live model smoke selection for current releases and enforce tools/images/thinking-high coverage. (#769) — thanks @steipete.
- Agents/Tools: add
apply_patchtool for multi-file edits (experimental; gated by tools.exec.applyPatch; OpenAI-only). - Agents/Tools: rename the bash tool to exec (config alias maintained). (#748) — thanks @myfunc.
- Agents: add pre-compaction memory flush config (
agents.defaults.compaction.*) with a soft threshold + system prompt. - Config: add
$includedirective for modular config files. (#731) — thanks @pasogott. - Build: set pnpm minimum release age to 2880 minutes (2 days). (#718) — thanks @dan-dr.
- macOS: prompt to install the global
clawdbotCLI when missing in local mode; install viaclawd.bot/install-cli.sh(no onboarding) and use external launchd/CLI instead of the embedded gateway runtime. - Docs: add gog calendar event color IDs from
gog calendar colors. (#715) — thanks @mjrussell. - Cron/CLI: add
--modelflag to cron add/edit commands. (#711) — thanks @mjrussell. - Cron/CLI: trim model overrides on cron edits and document main-session guidance. (#711) — thanks @mjrussell.
- Skills: bundle
skill-creatorto guide creating and packaging skills. - Providers: add per-DM history limit overrides (
dmHistoryLimit) with provider-level config. (#728) — thanks @pkrmf. - Discord: expose channel/category management actions in the message tool. (#730) — thanks @NicholasSpisak.
- Docs: rename README “macOS app” section to “Apps”. (#733) — thanks @AbhisekBasu1.
- Gateway: require
client.idin WebSocket connect params; useclient.instanceIdfor presence de-dupe; update docs/tests. - macOS: remove the attach-only gateway setting; local mode now always manages launchd while still attaching to an existing gateway if present.
Installer
- Postinstall: replace
git applywith builtin JS patcher (works npm/pnpm/bun; no git dependency) plus regression tests. - Postinstall: skip pnpm patch fallback when the new patcher is active.
- Installer tests: add root+non-root docker smokes, CI workflow to fetch clawd.bot scripts and run install sh/cli with onboarding skipped.
- Installer UX: support
CLAWDBOT_NO_ONBOARD=1for non-interactive installs; fix npm prefix on Linux and auto-install git. - Installer UX: add
install.sh --helpwith flags/env and git install hint. - Installer UX: add
--install-method git|npmand auto-detect source checkouts (prompt to update git checkout vs migrate to npm).
Fixes
- Models/Onboarding: configure MiniMax (minimax.io) via Anthropic-compatible
/anthropicendpoint by default (keepminimax-apias a legacy alias). - Models: normalize Gemini 3 Pro/Flash IDs to preview names for live model lookups. (#769) — thanks @steipete.
- CLI: fix guardCancel typing for configure prompts. (#769) — thanks @steipete.
- Gateway/WebChat: include handshake validation details in the WebSocket close reason for easier debugging; preserve close codes.
- Gateway/Auth: send invalid connect responses before closing the handshake; stabilize invalid-connect auth test.
- Gateway: tighten gateway listener detection.
- Control UI: hide onboarding chat when configured and guard the mobile chat sidebar overlay.
- Auth: read Codex keychain credentials and make the lookup platform-aware.
- macOS/Release: avoid bundling dist artifacts in relay builds and generate appcasts from zip-only sources.
- Doctor: surface plugin diagnostics in the report.
- Plugins: treat
plugins.load.pathsdirectory entries as package roots when they containpackage.json+clawdbot.extensions; load plugin packages from config dirs; extract archives without system tar. - Config: expand
~inCLAWDBOT_CONFIG_PATHand common path-like config fields (includingplugins.load.paths); guard invalid$includepaths. (#731) — thanks @pasogott. - Agents: stop pre-creating session transcripts so first user messages persist in JSONL history.
- Agents: skip pre-compaction memory flush when the session workspace is read-only.
- Auto-reply: ignore inline
/statusdirectives unless the message is directive-only. - Auto-reply: align
/thinkdefault display with model reasoning defaults. (#751) — thanks @gabriel-trigo. - Auto-reply: flush block reply buffers on tool boundaries. (#750) — thanks @sebslight.
- Auto-reply: allow sender fallback for command authorization when
SenderIdis empty (WhatsApp self-chat). (#755) — thanks @juanpablodlc. - Heartbeat: refresh prompt text for updated defaults.
- Agents/Tools: use PowerShell on Windows to capture system utility output. (#748) — thanks @myfunc.
- Docker: tolerate unset optional env vars in docker-setup.sh under strict mode. (#725) — thanks @petradonka.
- CLI/Update: preserve base environment when passing overrides to update subprocesses. (#713) — thanks @danielz1z.
- Agents: treat message tool errors as failures so fallback replies still send; require
to+messageforaction=send. (#717) — thanks @theglove44. - Agents: preserve reasoning items on tool-only turns.
- Agents/Subagents: wait for completion before announcing, align wait timeout with run timeout, and make announce prompts more emphatic.
- Agents: route subagent transcripts to the target agent sessions directory and add regression coverage. (#708) — thanks @xMikeMickelson.
- Agents/Tools: preserve action enums when flattening tool schemas. (#708) — thanks @xMikeMickelson.
- Gateway/Agents: canonicalize main session aliases for store writes and add regression coverage. (#709) — thanks @xMikeMickelson.
- Agents: reset sessions and retry when auto-compaction overflows instead of crashing the gateway.
- Providers/Telegram: normalize command mentions for consistent parsing. (#729) — thanks @obviyus.
- Providers: skip DM history limit handling for non-DM sessions. (#728) — thanks @pkrmf.
- Sandbox: fix non-main mode incorrectly sandboxing the main DM session and align
/statusruntime reporting with effective sandbox state. - Sandbox/Gateway: treat
agent:<id>:mainas a main-session alias whensession.mainKeyis customized (backwards compatible). - Auto-reply: fast-path allowlisted slash commands (inline
/help//commands//status//whoamistripped before model).
2026.1.10
Highlights
- CLI:
clawdbot statusnow table-based + shows OS/update/gateway/daemon/agents/sessions;status --alladds a full read-only debug report (tables, log tails, Tailscale summary, and scan progress via OSC-9 + spinner). - CLI Backends: add Codex CLI fallback with resume support (text output) and JSONL parsing for new runs, plus a live CLI resume probe.
- CLI: add
clawdbot update(safe-ish git checkout update) +--updateshorthand. (#673) — thanks @fm1randa. - Gateway: add OpenAI-compatible
/v1/chat/completionsHTTP endpoint (auth, SSE streaming, per-agent routing). (#680).
Changes
- Onboarding/Models: add first-class Z.AI (GLM) auth choice (
zai-api-key) +--zai-api-keyflag. - CLI/Onboarding: add OpenRouter API key auth option in configure/onboard. (#703) — thanks @mteam88.
- Agents: add human-delay pacing between block replies (modes: off/natural/custom, per-agent configurable). (#446) — thanks @tony-freedomology.
- Agents/Browser: add
browser.target(sandbox/host/custom) with sandbox host-control gating viaagents.defaults.sandbox.browser.allowHostControl, allowlists for custom control URLs/hosts/ports, and expand browser tool docs (remote control, profiles, internals). - Onboarding/Models: add catalog-backed default model picker to onboarding + configure. (#611) — thanks @jonasjancarik.
- Agents/OpenCode Zen: update fallback models + defaults, keep legacy alias mappings. (#669) — thanks @magimetal.
- CLI: add
clawdbot resetandclawdbot uninstallflows (interactive + non-interactive) plus docker cleanup smoke test. - Providers: move provider wiring to a plugin architecture. (#661).
- Providers: unify group history context wrappers across providers with per-provider/per-account
historyLimitoverrides (fallback tomessages.groupChat.historyLimit). Set0to disable. (#672). - Gateway/Heartbeat: optionally deliver heartbeat
Reasoning:output (agents.defaults.heartbeat.includeReasoning). (#690) - Docker: allow optional home volume + extra bind mounts in
docker-setup.sh. (#679) — thanks @gabriel-trigo.
Fixes
- Auto-reply: suppress draft/typing streaming for
NO_REPLY(silent system ops) so it doesn’t leak partial output. - CLI/Status: expand tables to full terminal width; clarify provider setup vs runtime warnings; richer per-provider detail; token previews in
statuswhile keepingstatus --allredacted; add troubleshooting link footer; keep log tails pasteable; show gateway auth used when reachable; surface provider runtime errors (Signal/iMessage/Slack); hardentailscale status --jsonparsing; makestatus --allscan progress determinate; and replace the footer with a 3-line “Next steps” recommendation (share/debug/probe). - CLI/Gateway: clarify that
clawdbot gateway statusreports RPC health (connect + RPC) and shows RPC failures separately from connect failures. - CLI/Update: gate progress spinner on stdout TTY and align clean-check step label. (#701) — thanks @bjesuiter.
- Telegram: add
/whoami+/idcommands to reveal sender id for allowlists; allow@usernameand prefixed ids inallowFromprompts (with stability warning). - Heartbeat: strip markup-wrapped
HEARTBEAT_OKso acks don’t leak to external providers (e.g., Telegram). - Control UI: stop auto-writing
telegram.groups["*"]and warn/confirm before enabling wildcard groups. - WhatsApp: send ack reactions only for handled messages and ignore legacy
messages.ackReaction(doctor copies towhatsapp.ackReaction). (#629) — thanks @pasogott. - Sandbox/Skills: mirror skills into sandbox workspaces for read-only mounts so SKILL.md stays accessible.
- Terminal/Table: ANSI-safe wrapping to prevent table clipping/color loss; add regression coverage.
- Docker: allow optional apt packages during image build and document the build arg. (#697) — thanks @gabriel-trigo.
- Gateway/Heartbeat: deliver reasoning even when the main heartbeat reply is
HEARTBEAT_OK. (#694) — thanks @antons. - Agents/Pi: inject config
temperature/maxTokensinto streaming without replacing the session streamFn; cover with live maxTokens probe. (#732) — thanks @peschee. - macOS: clear unsigned launchd overrides on signed restarts and warn via doctor when attach-only/disable markers are set. (#695) — thanks @jeffersonwarrior.
- Agents: enforce single-writer session locks and drop orphan tool results to prevent tool-call ID failures (MiniMax/Anthropic-compatible APIs).
- Docs: make
clawdbot statusthe first diagnostic step, clarifystatus --deepbehavior, and document/whoami+/id. - Docs/Testing: clarify live tool+image probes and how to list your testable
provider/modelids. - Tests/Live: make gateway bash+read probes resilient to provider formatting while still validating real tool calls.
- WhatsApp: detect @lid mentions in groups using authDir reverse mapping + resolve self JID E.164 for mention gating. (#692) — thanks @peschee.
- Gateway/Auth: default to token auth on loopback during onboarding, add doctor token generation flow, and tighten audio transcription config to Whisper-only.
- Providers: dedupe inbound messages across providers to avoid duplicate LLM runs on redeliveries/reconnects. (#689) — thanks @adam91holt.
- Agents: strip
<thought>/<antthinking>tags from hidden reasoning output and cover tag variants in tests. (#688) — thanks @theglove44. - macOS: save model picker selections as normalized provider/model IDs and keep manual entries aligned. (#683) — thanks @benithors.
- Agents: recognize "usage limit" errors as rate limits for failover. (#687) — thanks @evalexpr.
- CLI: avoid success message when daemon restart is skipped. (#685) — thanks @carlulsoe.
- Commands: disable
/config+/debugby default; gate viacommands.config/commands.debugand hide from native registration/help output. - Agents/System: clarify that sub-agents remain sandboxed and cannot use elevated host access.
- Gateway: disable the OpenAI-compatible
/v1/chat/completionsendpoint by default; enable viagateway.http.endpoints.chatCompletions.enabled=true. - macOS: stabilize bridge tunnels, guard invoke senders on disconnect, and drain stdout/stderr to avoid deadlocks. (#676) — thanks @ngutman.
- Agents/System: clarify sandboxed runtime in system prompt and surface elevated availability when sandboxed.
- Auto-reply: prefer
RawBodyfor command/directive parsing (WhatsApp + Discord) and prevent fallback runs from clobbering concurrent session updates. (#643) — thanks @mcinteerj. - WhatsApp: fix group reactions by preserving message IDs and sender JIDs in history; normalize participant phone numbers to JIDs in outbound reactions. (#640) — thanks @mcinteerj.
- WhatsApp: expose group participant IDs to the model so reactions can target the right sender.
- Cron:
wakeMode: "now"waits for heartbeat completion (and retries when the main lane is busy). (#666) — thanks @roshanasingh4. - Agents/OpenAI: fix Responses tool-only → follow-up turn handling (avoid standalone
reasoningitems that trigger 400 “required following item”) and replay reasoning items in Responses/Codex Responses history for tool-call-only turns. - Sandbox: add
clawdbot sandbox explain(effective policy inspector + fix-it keys); improve “sandbox jail” tool-policy/elevated errors with actionable config key paths; link to docs. - Hooks/Gmail: keep Tailscale serve path at
/while preserving the public path. (#668) — thanks @antons. - Hooks/Gmail: allow Tailscale target URLs to preserve internal serve paths.
- Auth: update Claude Code keychain credentials in-place during refresh sync; share JSON file helpers; add CLI fallback coverage.
- Auth: throttle external CLI credential syncs (Claude/Codex), reduce Keychain reads, and skip sync when cached credentials are still fresh.
- CLI: respect
CLAWDBOT_STATE_DIRfor node pairing + voice wake settings storage. (#664) — thanks @azade-c. - Onboarding/Gateway: persist non-interactive gateway token auth in config; add WS wizard + gateway tool-calling regression coverage.
- Gateway/Control UI: make
chat.sendnon-blocking, wire Stop tochat.abort, and treat/stopas an out-of-band abort. (#653) - Gateway/Control UI: allow
chat.abortwithoutrunId(abort active runs), suppress post-abort chat streaming, and prune stuck chat runs. (#653) - Gateway/Control UI: sniff image attachments for chat.send, drop non-images, and log mismatches. (#670) — thanks @cristip73.
- macOS: force
restart-mac.sh --signto require identities and keep bundled Node signed for relay verification. (#580) — thanks @jeffersonwarrior. - Gateway/Agent: accept image attachments on
agent(multimodal message) and add live gateway image probe (CLAWDBOT_LIVE_GATEWAY_IMAGE_PROBE=1). - CLI:
clawdbot sessionsnow includeselev:*+usage:*flags in the table output. - CLI/Pairing: accept positional provider for
pairing list|approve(npm-run compatible); update docs/bot hints. - Branding: normalize user-facing “ClawdBot”/“CLAWDBOT” → “Clawdbot” (CLI, status, docs).
- Auto-reply: fix native
/modelnot updating the actual chat session (Telegram/Slack/Discord). (#646) - Doctor: offer to run
clawdbot updatefirst on git installs (keeps doctor output aligned with latest). - Doctor: avoid false legacy workspace warning when install dir is
~/clawdbot. (#660) - iMessage: fix reasoning persistence across DMs; avoid partial/duplicate replies when reasoning is enabled. (#655) — thanks @antons.
- Models/Auth: allow MiniMax API configs without
models.providers.minimax.apiKey(auth profiles /MINIMAX_API_KEY). (#656) — thanks @mneves75. - Agents: avoid duplicate replies when the message tool sends. (#659) — thanks @mickahouan.
- Agents: harden Cloud Code Assist tool ID sanitization (toolUse/toolCall/toolResult) and scrub extra JSON Schema constraints. (#665) — thanks @sebslight.
- Agents: sanitize tool results + Cloud Code Assist tool IDs at context-build time (prevents mid-run strict-provider request rejects).
- Agents/Tools: resolve workspace-relative Read/Write/Edit paths; align bash default cwd. (#642) — thanks @mukhtharcm.
- Discord: include forwarded message snapshots in agent session context. (#667) — thanks @rubyrunsstuff.
- Telegram: add
telegram.draftChunkto tune draft streaming chunking forstreamMode: "block". (#667) — thanks @rubyrunsstuff. - Tests/Agents: add regression coverage for workspace tool path resolution and bash cwd defaults.
- iOS/Android: enable stricter concurrency/lint checks; fix Swift 6 strict concurrency issues + Android lint errors (ExifInterface, obsolete SDK check). (#662) — thanks @KristijanJovanovski.
- Auth: read Codex CLI keychain tokens on macOS before falling back to
~/.codex/auth.json, preventing stale refresh tokens from breaking gateway live tests. - iOS/macOS: share
AsyncTimeout, require explicitbridgeStableIDon connect, and harden tool display defaults (avoids missing-resource label fallbacks). - Telegram: serialize media-group processing to avoid missed albums under load.
- Signal: handle
dataMessage.reactionevents (signal-cli SSE) to avoid broken attachment errors. (#637) — thanks @neist. - Docs: showcase entries for ParentPay, R2 Upload, iOS TestFlight, and Oura Health. (#650) — thanks @henrino3.
- Agents: repair session transcripts by dropping duplicate tool results across the whole history (unblocks Anthropic-compatible APIs after retries).
- Tests/Live: reset the gateway session between model runs to avoid cross-provider transcript incompatibilities (notably OpenAI Responses reasoning replay rules).
2026.1.9
Highlights
- Microsoft Teams provider: polling, attachments, outbound CLI send, per-channel policy.
- Models/Auth expansion: OpenCode Zen + MiniMax API onboarding; token auth profiles + auth order; OAuth health in doctor/status.
- CLI/Gateway UX: message subcommands, gateway discover/status/SSH, /config + /debug, sandbox CLI.
- Provider reliability sweep: WhatsApp contact cards/targets, Telegram audio-as-voice + streaming, Signal reactions, Slack threading, Discord stability.
- Auto-reply + status: block-streaming controls, reasoning handling, usage/cost reporting.
- Control UI/TUI: queued messages, session links, reasoning view, mobile polish, logs UX.
Breaking
- CLI:
clawdbot messagenow subcommands (message send|poll|...) and requires--providerunless only one provider configured. - Commands/Tools:
/restartand gateway restart tool disabled by default; enable withcommands.restart=true.
New Features and Changes
- Models/Auth: OpenCode Zen onboarding (#623) — thanks @magimetal; MiniMax Anthropic-compatible API + hosted onboarding (#590, #495) — thanks @mneves75, @tobiasbischoff.
- Models/Auth: setup-token + token auth profiles;
clawdbot models auth order {get,set,clear}; per-agent auth candidates in/model status; OAuth expiry checks in doctor/status. - Agent/System: claude-cli runner;
session_statustool (and sandbox allow); adaptive context pruning default; system prompt messaging guidance + no auto self-update; eligible skills list injection; sub-agent context trimmed. - Commands:
/commandslist;/modelsalias;/usagealias;/debugruntime overrides + effective config view;/configchat updates +/config get;config --section. - CLI/Gateway: unified message tool + message subcommands; gateway discover (local + wide-area DNS-SD) with JSON/timeout; gateway status human-readable + JSON + SSH loopback; wide-area records include gatewayPort/sshPort/cliPath + tailnet DNS fallback.
- CLI UX: logs output modes (pretty/plain/JSONL) + colorized health/daemon output; global
--no-color; lobster palette in onboarding/config. - Dev ergonomics: gateway
--dev/--reset+ dev profile auto-config; C-3PO dev templates; dev gateway/TUI helper scripts. - Sandbox/Workspace: sandbox list/recreate commands; sync skills into sandbox workspace; sandbox browser auto-start.
- Config/Onboarding: inline env vars; OpenAI API key flow to shared
~/.clawdbot/.env; Opus 4.5 default prompt for Anthropic auth; QuickStart auto-install gateway (Node-only) + provider picker tweaks + skip-systemd flags; TUI bootstrap prompt (tui --message); remove Bun runtime choice. - Providers: Microsoft Teams provider (polling, attachments, outbound sends, requireMention, config reload/DM policy). (#404) — thanks @onutc
- Providers: WhatsApp broadcast groups for multi-agent replies (#547) — thanks @pasogott; inbound media size cap configurable (#505) — thanks @koala73; identity-based message prefixes (#578) — thanks @p6l-richard.
- Providers: Telegram inline keyboard buttons + callback payload routing (#491) — thanks @azade-c; cron topic delivery targets (#474/#478) — thanks @mitschabaude-bot, @nachoiacovino;
[[audio_as_voice]]tag support (#490) — thanks @jarvis-medmatic. - Providers: Signal reactions + notifications with allowlist support.
- Status/Usage: /status cost reporting +
/costlines; auth profile snippet; provider usage windows. - Control UI: mobile responsiveness (#558) — thanks @carlulsoe; queued messages + Enter-to-send (#527) — thanks @YuriNachos; session links (#471) — thanks @HazAT; reasoning view; skill install feedback (#445) — thanks @pkrmf; chat layout refresh (#475) — thanks @rahthakor; docs link + new session button; drop explicit
ui:install. - TUI: agent picker + agents list RPC; improved status line.
- Doctor/Daemon: audit/repair flows, permissions checks, supervisor config audits; provider status probes + warnings for Discord intents and Telegram privacy; last activity timestamps; gateway restart guidance.
- Docs: Hetzner Docker VPS guide + cross-links (#556/#592) — thanks @Iamadig; Ansible guide (#545) — thanks @pasogott; provider troubleshooting index; hook parameter expansion (#532) — thanks @mcinteerj; model allowlist notes; OAuth deep dive; showcase refresh.
- Apps/Branding: refreshed iOS/Android/macOS icons (#521) — thanks @fishfisher.
Fixes
- Packaging: include MS Teams send module in npm tarball.
- Sandbox/Browser: auto-start CDP endpoint; proxy CDP out of container for attachOnly; relax Bun fetch typing; align sandbox list output with config images.
- Agents/Runtime: gate heartbeat prompt to default sessions; /stop aborts between tool calls; require explicit system-event session keys; guard small context windows; fix model fallback stringification; sessions_spawn inherits provider; failover on billing/credits; respect auth cooldown ordering; restore Anthropic OAuth tool dispatch + tool-name bypass; avoid OpenAI invalid reasoning replay; harden Gmail hook model defaults.
- Agent history/schema: strip/skip empty assistant/error blocks to prevent session corruption/Claude 400s; scrub unsupported JSON Schema keywords + sanitize tool call IDs for Cloud Code Assist; simplify Gemini-compatible tool/session schemas; require raw for config.apply.
- Auto-reply/Streaming: default audioAsVoice false; preserve audio_as_voice propagation + buffer audio blocks + guard voice notes; block reply ordering (timeout) + forced-block fence-safe; avoid chunk splits inside parentheses + fence-close breaks + invalid UTF-16 truncation; preserve inline directive spacing + allow whitespace in reply tags; filter NO_REPLY prefixes + normalize routed replies; suppress leakage with separate Reasoning; block streaming defaults (off by default, minChars/idle tuning) + coalesced blocks; dedupe followup queue; restore explicit responsePrefix default.
- Status/Commands: provider prefix in /status model display; usage filtering + provider mapping; auth label + usage snapshots (claude-cli fallback + optional claude.ai); show Verbose/Elevated only when enabled; compact usage/cost line + restore emoji-rich status; /status in directive-only + multi-directive handling; mention-bypass elevated handling; surface provider usage errors; wire /usage to /status; restore hidden gateway-daemon alias; fallback /model list when catalog unavailable.
- WhatsApp: vCard/contact cards (prefer FN, include numbers, show all contacts, keep summary counts, better empty summaries); preserve group JIDs + normalize targets; resolve @lid mappings/JIDs (Baileys/auth-dir) + inbound mapping; route queued replies to sender; improve web listener errors + remove provider name from errors; record outbound activity account id; fix web media fetch errors; broadcast group history consistency.
- Telegram: keep streamMode draft-only; long-poll conflict retries + update dedupe; grammY fetch mismatch fixes + restrict native fetch to Bun; suppress getUpdates stack traces; include user id in pairing; audio_as_voice handling fixes.
- Discord/Slack: thread context helpers + forum thread starters; avoid category parent overrides; gateway reconnect logs + HELLO timeout + stop provider after reconnect exhaustion; DM recipient parsing for numeric IDs; remove incorrect limited warning; reply threading + mrkdwn edge cases; remove ack reactions after reply; gateway debug event visibility.
- Signal: reaction handling safety; own-reaction matching (uuid+phone); UUID-only senders accepted; ignore reaction-only messages.
- MS Teams: download image attachments reliably; fix top-level replies; stop on shutdown + honor chunk limits; normalize poll providers/deps; pairing label fixes.
- iMessage: isolate group-ish threads by chat_id.
- Gateway/Daemon/Doctor: atomic config writes; repair gateway service entrypoint + install switches; non-interactive legacy migrations; systemd unit alignment + KillMode=process; node bridge keepalive/pings; Launch at Login persistence; bundle ClawdbotKit resources + Swift 6.2 compat dylib; relay version check + remove smoke test; regen Swift GatewayModels + keep agent provider string; cron jobId alias + channel alias migration + main session key normalization; heartbeat Telegram accountId resolution; avoid WhatsApp fallback for internal runs; gateway listener error wording; serveBaseUrl param; honor gateway --dev; fix wide-area discovery updates; align agents.defaults schema; provider account metadata in daemon status; refresh Carbon patch for gateway fixes; restore doctor prompter initialValue handling.
- Control UI/TUI: persist per-session verbose off + hide tool cards; logs tab opens at bottom; relative asset paths + landing cleanup; session labels lookup/persistence; stop pinning main session in recents; start logs at bottom; TUI status bar refresh + timeout handling + hide reasoning label when off.
- Onboarding/Configure: QuickStart single-select provider picker; avoid Codex CLI false-expiry warnings; clarify WhatsApp owner prompt; fix Minimax hosted onboarding (agents.defaults + msteams heartbeat target); remove configure Control UI prompt; honor gateway --dev flag.
Maintenance
-
Dependencies: bump pi-* stack to 0.42.2.
-
Dependencies: Pi 0.40.0 bump (#543) — thanks @mcinteerj.
-
Build: Docker build cache layer (#605) — thanks @zknicker.
-
Auth: enable OAuth token refresh for Claude CLI credentials (
anthropic:claude-cli) with bidirectional sync back to Claude Code storage (file on Linux/Windows, Keychain on macOS). This allows long-running agents to operate autonomously without manual re-authentication (#654 — thanks @radek-paclt).
2026.1.8
Highlights
- Security: DMs locked down by default across providers; pairing-first + allowlist guidance.
- Sandbox: per-agent scope defaults + workspace access controls; tool/session isolation tuned.
- Agent loop: compaction, pruning, streaming, and error handling hardened.
- Providers: Telegram/WhatsApp/Discord/Slack reliability, threading, reactions, media, and retries improved.
- Control UI: logs tab, streaming stability, focus mode, and large-output rendering fixes.
- CLI/Gateway/Doctor: daemon/logs/status, auth migration, and diagnostics significantly expanded.
Breaking
- SECURITY (update ASAP): inbound DMs are now locked down by default on Telegram/WhatsApp/Signal/iMessage/Discord/Slack.
- Previously, if you didn’t configure an allowlist, your bot could be open to anyone (especially discoverable Telegram bots).
- New default: DM pairing (
dmPolicy="pairing"/discord.dm.policy="pairing"/slack.dm.policy="pairing"). - To keep old “open to everyone” behavior: set
dmPolicy="open"and include"*"in the relevantallowFrom(Discord/Slack:discord.dm.allowFrom/slack.dm.allowFrom). - Approve requests via
clawdbot pairing list <provider>+clawdbot pairing approve <provider> <code>.
- Sandbox: default
agent.sandbox.scopeto"agent"(one container/workspace per agent). Use"session"for per-session isolation;"shared"disables cross-session isolation. - Timestamps in agent envelopes are now UTC (compact
YYYY-MM-DDTHH:mmZ); removedmessages.timestampPrefix. Addagent.userTimezoneto tell the model the user’s local time (system prompt only). - Model config schema changes (auth profiles + model lists); doctor auto-migrates and the gateway rewrites legacy configs on startup.
- Commands: gate all slash commands to authorized senders; add
/compactto manually compact session context. - Groups:
whatsapp.groups,telegram.groups, andimessage.groupsnow act as allowlists when set. Add"*"to keep allow-all behavior. - Auto-reply: removed
autoReplyfrom Discord/Slack/Telegram channel configs; userequireMentioninstead (Telegram topics now supportrequireMentionoverrides). - CLI: remove
update,gateway-daemon,gateway {install|uninstall|start|stop|restart|daemon status|wake|send|agent}, andtelegramcommands; movelogin/logouttoproviders login/logout(top-level aliases hidden); usedaemonfor service control,send/agent/wakefor RPC, andnodes canvasfor canvas ops.
Fixes
- CLI/Gateway/Doctor: daemon runtime selection + improved logs/status/health/errors; auth/password handling for local CLI; richer close/timeout details; auto-migrate legacy config/sessions/state; integrity checks + repair prompts;
--yes/--non-interactive;--deepgateway scans; better restart/service hints. - Agent loop + compaction: compaction/pruning tuning, overflow handling, safer bootstrap context, and per-provider threading/confirmations; opt-in tool-result pruning + compact tracking.
- Sandbox + tools: per-agent sandbox overrides, workspaceAccess controls, session tool visibility, tool policy overrides, process isolation, and tool schema/timeout/reaction unification.
- Providers (Telegram/WhatsApp/Discord/Slack/Signal/iMessage): retry/backoff, threading, reactions, media groups/attachments, mention gating, typing behavior, and error/log stability; long polling + forum topic isolation for Telegram.
- Gateway/CLI UX:
clawdbot logs, cron list colors/aliases, docs search, agents list/add/delete flows, status usage snapshots, runtime/auth source display, and/status/commands auth unification. - Control UI/Web: logs tab, focus mode polish, config form resilience, streaming stability, tool output caps, windowed chat history, and reconnect/password URL auth.
- macOS/Android/TUI/Build: macOS gateway races, QR bundling, JSON5 config safety, Voice Wake hardening; Android EXIF rotation + APK naming/versioning; TUI key handling; tooling/bundling fixes.
- Packaging/compat: npm dist folder coverage, Node 25 qrcode-terminal import fixes, Bun/Playwright/WebSocket patches, and Docker Bun install.
- Docs: new FAQ/ClawdHub/config examples/showcase entries and clarified auth, sandbox, and systemd docs.
Maintenance
- Skills additions (Himalaya email, CodexBar, 1Password).
- Dependency refreshes (pi-* stack, Slack SDK, discord-api-types, file-type, zod, Biome, Vite).
- Refactors: centralized group allowlist/mention policy; lint/import cleanup; switch tsx → bun for TS execution.
2026.1.5
Highlights
- Models: add image-specific model config (
agent.imageModel+ fallbacks) and scan support. - Agent tools: new
imagetool routed to the image model (when configured). - Config: default model shorthands (
opus,sonnet,gpt,gpt-mini,gemini,gemini-flash). - Docs: document built-in model shorthands + precedence (user config wins).
- Bun: optional local install/build workflow without maintaining a Bun lockfile (see
docs/bun.md).
Fixes
- Control UI: render Markdown in tool result cards.
- Control UI: prevent overlapping action buttons in Discord guild rules on narrow layouts.
- Android: tapping the foreground service notification brings the app to the front. (#179) — thanks @Syhids
- Cron tool uses
idfor update/remove/run/runs (aligns with gateway params). (#180) — thanks @adamgall - Control UI: chat view uses page scroll with sticky header/sidebar and fixed composer (no inner scroll frame).
- macOS: treat location permission as always-only to avoid iOS-only enums. (#165) — thanks @Nachx639
- macOS: make generated gateway protocol models
Sendablefor Swift 6 strict concurrency. (#195) — thanks @andranik-sahakyan - macOS: bundle QR code renderer modules so DMG gateway boot doesn't crash on missing qrcode-terminal vendor files.
- macOS: parse JSON5 config safely to avoid wiping user settings when comments are present.
- WhatsApp: suppress typing indicator during heartbeat background tasks. (#190) — thanks @mcinteerj
- WhatsApp: mark offline history sync messages as read without auto-reply. (#193) — thanks @mcinteerj
- Discord: avoid duplicate replies when a provider emits late streaming
text_endevents (OpenAI/GPT). - CLI: use tailnet IP for local gateway calls when bind is tailnet/auto (fixes #176).
- Env: load global
$CLAWDBOT_STATE_DIR/.env(~/.clawdbot/.env) as a fallback after CWD.env. - Env: optional login-shell env fallback (opt-in; imports expected keys without overriding existing env).
- Agent tools: OpenAI-compatible tool JSON Schemas (fix
browser, normalize union schemas). - Onboarding: when running from source, auto-build missing Control UI assets (
bun run ui:build). - Discord/Slack: route reaction + system notifications to the correct session (no main-session bleed).
- Agent tools: honor
agent.toolsallow/deny policy even when sandbox is off. - Discord: avoid duplicate replies when OpenAI emits repeated
message_endevents. - Commands: unify /status (inline) and command auth across providers; group bypass for authorized control commands; remove Discord /clawd slash handler.
- CLI: run
clawdbot agentvia the Gateway by default; use--localto force embedded mode.