First-class Clawdis tools (browser, canvas, nodes, cron) replace the old clawdis-* skills; tool schemas are now injected directly into the agent runtime.
-
Per-session model selection + custom model providers: models.providers merges into ~/.clawdis/agent/models.json (merge/replace modes) for LiteLLM, local OpenAI-compatible servers, Anthropic proxies, etc.
-
Group chat activation modes: per-group /activation mention|always command with status visibility.
-
Discord bot transport for DMs and guild text channels, with allowlists + mention gating.
-
Gateway webhooks: external wake and isolated agent hooks with dedicated token auth.
Command queue modes + per-session overrides (/queue ...) and new agent.maxConcurrent cap for safe parallelism across sessions.
-
Background bash tasks: bash auto-yields after 20s (or on demand) with a process tool to list/poll/log/write/kill sessions.
-
Gateway in-process restart: clawdis_gateway tool action triggers a SIGUSR1 restart without needing a supervisor.
-
-
Breaking
-
-
Config refactor: inbound.* removed; use top-level routing (allowlists + group rules + transcription), messages (prefixes/timestamps), and session (scoping/store/mainKey). No legacy keys read.
-
Heartbeat config moved to agent.heartbeat: set every: "30m" (duration string) and optional model. agent.heartbeatMinutes is removed, and heartbeats are disabled unless agent.heartbeat.every is set.
-
Heartbeats now run via the gateway runner (main session) and deliver to the last used channel by default. WhatsApp reply-heartbeat behavior is removed; use agent.heartbeat.target/to (or target: "none") to control delivery.
-
Browser act no longer accepts CSS selector; use snapshot refs (default ai) or evaluate as an escape hatch.
Heartbeat replies now strip repeated HEARTBEAT_OK tails to avoid accidental “OK OK” spam.
-
Heartbeat delivery now uses the last non-empty payload, preventing tool preambles from swallowing the final reply.
-
Heartbeat failure logs now include the error reason instead of [object Object].
-
Duration strings now accept h (hours) where durations are parsed (e.g., heartbeat intervals).
-
WhatsApp inbound now normalizes more wrapper types so quoted reply bodies are extracted reliably.
-
WhatsApp send now preserves existing JIDs (including group @g.us) instead of coercing to @s.whatsapp.net. (Thanks @arun-8687.)
-
Telegram/WhatsApp: reply context stays in Body/ReplyTo*, but outbound replies no longer thread to the original message. (Thanks @joshp123 for the PR and follow-up question.)
-
Suppressed libsignal session cleanup spam from console logs unless verbose mode is enabled.
-
WhatsApp web creds persistence hardened; credentials are restored before auth checks and QR login auto-restarts if it stalls.
-
Group chats now honor routing.groupChat.requireMention=false as the default activation when no per-group override exists.
-
Gateway auth no longer supports PAM/system mode; use token or shared password.
-
Tailscale Funnel now requires password auth (no token-only public exposure).
-
Group /new resets now work with @mentions so activation guidance appears on fresh sessions.
-
Group chat activation context is now injected into the system prompt at session start (and after activation changes), including /new greetings.
-
Typing indicators now start only once a reply payload is produced (no "thinking" typing for silent runs).
-
WhatsApp group typing now starts immediately only when the bot is mentioned; otherwise it waits until real output exists.
-
Streamed segments are stripped before partial replies are emitted.
-
System prompt now tags allowlisted owner numbers as the user identity to avoid mistaken “friend” assumptions.
-
LM Studio/Ollama replies now require tags; streaming ignores content until begins.
-
LM Studio responses API: tools payloads no longer include strict: null, and LM Studio no longer gets forced / tags.
-
Identity emoji no longer auto-prefixes replies (set messages.responsePrefix explicitly if desired).
-
Model switches now enqueue a system event so the next run knows the active model.
-
/model status now lists available models (same as /model).
-
process log pagination is now line-based (omit offset to grab the last N lines).
-
macOS WebChat: assistant bubbles now update correctly when toggling light/dark mode.
-
macOS: avoid spawning a duplicate gateway process when an external listener already exists.
-
Node bridge: when binding to a non-loopback host (e.g. Tailnet IP), also listens on 127.0.0.1 for local connections (without creating duplicate loopback listeners for 0.0.0.0/127.0.0.1 binds).
-
UI perf: pause repeat animations when scenes are inactive (typing dots, onboarding glow, iOS status pulse), throttle voice overlay level updates, and reduce overlay focus churn.
-
Canvas defaults/A2UI auto-nav aligned; debug status overlay centered; redundant await removed in CanvasManager.
-
Gateway launchd loop fixed by removing redundant kickstart -k.
-
CLI now hints when Peekaboo is unauthorized.
-
WhatsApp web inbox listeners now clean up on close to avoid duplicate handlers.
-
Gateway startup now brings up browser control before external providers; WhatsApp/Telegram/Discord auto-start can be disabled with web.enabled, telegram.enabled, or discord.enabled.
-
-
Providers & Routing
-
-
New Discord provider for DMs + guild text channels with allowlists and mention-gated replies by default.
-
routing.queue now controls queue vs interrupt behavior globally + per surface (defaults: WhatsApp/Telegram interrupt, Discord/WebChat queue).
-
/queue supports one-shot or per-session overrides; /queue reset|default clears overrides.
-
agent.maxConcurrent caps global parallel runs while keeping per-session serialization.
-
-
macOS app
-
-
Update-ready state surfaced in the menu; menu sections regrouped with session submenus.
-
Menu bar now shows a dedicated Nodes section under Context with inline rows, overflow submenu, and iconized actions.
-
Nodes now expose consistent inline details with per-node submenus for quick copy of key fields.
-
Node rows now show compact app versions (build numbers moved to submenus) and offer SSH launch from Bonjour when available.
-
Menu actions are grouped below toggles; Open Canvas hides when disabled and Voice Wake now anchors the mic picker.
-
Connections now include Discord provider status + configuration UI.
-
Menu bar gains an Allow Camera toggle alongside Canvas.
-
Session list polish: sleeping/disconnected/error states, usage bar restored, padding + bar sizing tuned, syncing menu removed, header hidden when disconnected.