From 83460df96f5076c005ad3e456f0a3e484fb37cdd Mon Sep 17 00:00:00 2001
From: Peter Steinberger
Date: Tue, 27 Jan 2026 11:27:41 +0000
Subject: [PATCH 1/3] chore: update molt.bot domains
---
AGENTS.md | 10 +-
CHANGELOG.md | 190 +++++++-------
README.md | 235 +++++++++---------
SECURITY.md | 2 +-
appcast.xml | 26 +-
.../macos/Sources/Clawdbot/CLIInstaller.swift | 2 +-
assets/chrome-extension/options.html | 2 +-
docker-setup.sh | 2 +-
docs/CNAME | 2 +-
docs/channels/googlechat.md | 2 +-
docs/cli/browser.md | 2 +-
docs/cli/hooks.md | 2 +-
docs/concepts/markdown-formatting.md | 4 +-
docs/gateway/security/index.md | 2 +-
docs/gateway/troubleshooting.md | 4 +-
docs/help/faq.md | 28 +--
docs/help/troubleshooting.md | 10 +-
docs/hooks.md | 2 +-
docs/install/index.md | 14 +-
docs/install/installer.md | 24 +-
docs/install/uninstall.md | 2 +-
docs/install/updating.md | 87 +++----
docs/platforms/digitalocean.md | 2 +-
docs/platforms/oracle.md | 2 +-
docs/platforms/raspberry-pi.md | 2 +-
docs/reference/RELEASING.md | 2 +-
docs/start/getting-started.md | 4 +-
extensions/lobster/src/lobster-tool.test.ts | 20 ++
extensions/lobster/src/lobster-tool.ts | 26 +-
extensions/mattermost/src/onboarding.ts | 2 +-
extensions/tlon/README.md | 2 +-
extensions/twitch/README.md | 2 +-
extensions/voice-call/README.md | 4 +-
extensions/voice-call/src/cli.ts | 2 +-
extensions/voice-call/src/core-bridge.ts | 14 +-
extensions/zalo/src/onboarding.ts | 2 +-
extensions/zalouser/src/channel.ts | 2 +-
extensions/zalouser/src/onboarding.ts | 4 +-
pnpm-lock.yaml | 20 +-
pnpm-workspace.yaml | 1 +
scripts/docker/install-sh-e2e/run.sh | 2 +-
scripts/docker/install-sh-nonroot/run.sh | 2 +-
scripts/docker/install-sh-smoke/run.sh | 2 +-
scripts/test-install-sh-docker.sh | 4 +-
scripts/test-install-sh-e2e-docker.sh | 2 +-
src/agents/clawdbot-gateway-tool.test.ts | 2 +-
src/agents/system-prompt.ts | 2 +-
src/agents/tools/web-search.ts | 10 +-
src/auto-reply/reply/bash-command.ts | 2 +-
src/canvas-host/a2ui/.bundle.hash | 2 +-
src/channels/plugins/catalog.test.ts | 2 +-
src/channels/plugins/onboarding/telegram.ts | 4 +-
src/channels/registry.test.ts | 2 +-
src/channels/registry.ts | 2 +-
src/cli/acp-cli.ts | 4 +-
src/cli/banner.ts | 4 +-
src/cli/browser-cli-extension.ts | 4 +-
src/cli/browser-cli.ts | 2 +-
src/cli/channels-cli.ts | 2 +-
src/cli/command-format.ts | 15 +-
src/cli/config-cli.ts | 2 +-
src/cli/cron-cli/register.ts | 2 +-
src/cli/daemon-cli/register.ts | 2 +-
src/cli/daemon-cli/status.print.ts | 2 +-
src/cli/directory-cli.ts | 2 +-
src/cli/dns-cli.ts | 2 +-
src/cli/docs-cli.ts | 2 +-
src/cli/exec-approvals-cli.ts | 4 +-
src/cli/gateway-cli/register.ts | 2 +-
src/cli/hooks-cli.test.ts | 2 +-
src/cli/hooks-cli.ts | 2 +-
src/cli/logs-cli.ts | 2 +-
src/cli/memory-cli.ts | 2 +-
src/cli/models-cli.ts | 2 +-
src/cli/node-cli/register.ts | 2 +-
src/cli/nodes-camera.test.ts | 4 +-
src/cli/nodes-camera.ts | 5 +-
src/cli/nodes-canvas.ts | 5 +-
src/cli/nodes-cli/register.ts | 2 +-
src/cli/pairing-cli.ts | 2 +-
src/cli/plugins-cli.ts | 4 +-
src/cli/profile.test.ts | 20 +-
src/cli/program.nodes-media.test.ts | 4 +-
src/cli/program/help.ts | 9 +-
src/cli/program/preaction.ts | 6 +-
src/cli/program/register.agent.ts | 4 +-
src/cli/program/register.configure.ts | 2 +-
src/cli/program/register.maintenance.ts | 8 +-
src/cli/program/register.message.ts | 2 +-
src/cli/program/register.onboard.ts | 2 +-
src/cli/program/register.setup.ts | 2 +-
.../register.status-health-sessions.ts | 6 +-
src/cli/sandbox-cli.ts | 2 +-
src/cli/security-cli.ts | 2 +-
src/cli/skills-cli.ts | 2 +-
src/cli/system-cli.ts | 2 +-
src/cli/tui-cli.ts | 2 +-
src/cli/update-cli.ts | 52 ++--
src/cli/webhooks-cli.ts | 2 +-
src/commands/agents.commands.add.ts | 2 +-
src/commands/auth-choice.apply.openai.ts | 2 +-
....adds-non-default-telegram-account.test.ts | 2 +-
src/commands/configure.gateway.ts | 4 +-
src/commands/configure.wizard.ts | 16 +-
src/commands/daemon-install-helpers.test.ts | 2 +-
src/commands/docs.ts | 6 +-
src/commands/onboard-helpers.ts | 4 +-
src/commands/onboard-hooks.test.ts | 2 +-
src/commands/onboard-hooks.ts | 2 +-
src/commands/onboard-non-interactive/local.ts | 2 +-
.../onboard-non-interactive/remote.ts | 2 +-
src/commands/onboard-remote.ts | 4 +-
src/commands/onboard-skills.ts | 2 +-
src/commands/onboard.ts | 4 +-
src/commands/sandbox-explain.test.ts | 2 +-
src/commands/sandbox-explain.ts | 4 +-
src/commands/status-all/diagnosis.ts | 2 +-
src/commands/status.command.ts | 4 +-
src/commands/status.test.ts | 2 +
src/hooks/bundled/README.md | 6 +-
src/hooks/bundled/boot-md/HOOK.md | 2 +-
src/hooks/bundled/command-logger/HOOK.md | 2 +-
src/hooks/bundled/session-memory/HOOK.md | 2 +-
src/hooks/bundled/soul-evil/HOOK.md | 2 +-
src/hooks/bundled/soul-evil/README.md | 2 +-
src/hooks/frontmatter.test.ts | 2 +-
src/infra/clawdbot-root.ts | 4 +-
src/infra/update-runner.ts | 25 +-
src/pairing/pairing-messages.test.ts | 5 +-
src/plugins/loader.ts | 9 +-
...s-media-file-path-no-file-download.test.ts | 3 +-
src/terminal/links.ts | 2 +-
src/wizard/onboarding.finalize.ts | 16 +-
src/wizard/onboarding.gateway-config.ts | 4 +-
src/wizard/onboarding.ts | 4 +-
ui/src/ui/app-render.ts | 2 +-
ui/src/ui/views/overview.ts | 8 +-
137 files changed, 653 insertions(+), 538 deletions(-)
diff --git a/AGENTS.md b/AGENTS.md
index ac85a00d8..c35e996c7 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -8,7 +8,7 @@
- Docs: `docs/` (images, queue, Pi config). Built output lives in `dist/`.
- Plugins/extensions: live under `extensions/*` (workspace packages). Keep plugin-only deps in the extension `package.json`; do not add them to the root `package.json` unless core uses them.
- Plugins: install runs `npm install --omit=dev` in plugin dir; runtime deps must live in `dependencies`. Avoid `workspace:*` in `dependencies` (npm install breaks); put `clawdbot` in `devDependencies` or `peerDependencies` instead (runtime resolves `clawdbot/plugin-sdk` via jiti alias).
-- Installers served from `https://clawd.bot/*`: live in the sibling repo `../clawd.bot` (`public/install.sh`, `public/install-cli.sh`, `public/install.ps1`).
+- Installers served from `https://molt.bot/*`: live in the sibling repo `../molt.bot` (`public/install.sh`, `public/install-cli.sh`, `public/install.ps1`).
- Messaging channels: always consider **all** built-in + extension channels when refactoring shared logic (routing, allowlists, pairing, command gating, onboarding, docs).
- Core channel docs: `docs/channels/`
- Core channel code: `src/telegram`, `src/discord`, `src/slack`, `src/signal`, `src/imessage`, `src/web` (WhatsApp web), `src/channels`, `src/routing`
@@ -16,13 +16,13 @@
- When adding channels/extensions/apps/docs, review `.github/labeler.yml` for label coverage.
## Docs Linking (Mintlify)
-- Docs are hosted on Mintlify (docs.clawd.bot).
+- Docs are hosted on Mintlify (docs.molt.bot).
- Internal doc links in `docs/**/*.md`: root-relative, no `.md`/`.mdx` (example: `[Config](/configuration)`).
- Section cross-references: use anchors on root-relative paths (example: `[Hooks](/configuration#hooks)`).
- Doc headings and anchors: avoid em dashes and apostrophes in headings because they break Mintlify anchor links.
-- When Peter asks for links, reply with full `https://docs.clawd.bot/...` URLs (not root-relative).
-- When you touch docs, end the reply with the `https://docs.clawd.bot/...` URLs you referenced.
-- README (GitHub): keep absolute docs URLs (`https://docs.clawd.bot/...`) so links work on GitHub.
+- When Peter asks for links, reply with full `https://docs.molt.bot/...` URLs (not root-relative).
+- When you touch docs, end the reply with the `https://docs.molt.bot/...` URLs you referenced.
+- README (GitHub): keep absolute docs URLs (`https://docs.molt.bot/...`) so links work on GitHub.
- Docs content must be generic: no personal device names/hostnames/paths; use placeholders like `user@gateway-host` and “gateway host”.
## exe.dev VM ops (general)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 447e77846..f8f951133 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,6 @@
# Changelog
-Docs: https://docs.clawd.bot
+Docs: https://docs.molt.bot
## 2026.1.26
Status: unreleased.
@@ -113,27 +113,27 @@ Status: unreleased.
## 2026.1.24
### Highlights
-- Providers: Ollama discovery + docs; Venice guide upgrades + cross-links. (#1606) Thanks @abhaymundhara. https://docs.clawd.bot/providers/ollama https://docs.clawd.bot/providers/venice
+- Providers: Ollama discovery + docs; Venice guide upgrades + cross-links. (#1606) Thanks @abhaymundhara. https://docs.molt.bot/providers/ollama https://docs.molt.bot/providers/venice
- Channels: LINE plugin (Messaging API) with rich replies + quick replies. (#1630) Thanks @plum-dawg.
-- TTS: Edge fallback (keyless) + `/tts` auto modes. (#1668, #1667) Thanks @steipete, @sebslight. https://docs.clawd.bot/tts
-- Exec approvals: approve in-chat via `/approve` across all channels (including plugins). (#1621) Thanks @czekaj. https://docs.clawd.bot/tools/exec-approvals https://docs.clawd.bot/tools/slash-commands
-- Telegram: DM topics as separate sessions + outbound link preview toggle. (#1597, #1700) Thanks @rohannagpal, @zerone0x. https://docs.clawd.bot/channels/telegram
+- TTS: Edge fallback (keyless) + `/tts` auto modes. (#1668, #1667) Thanks @steipete, @sebslight. https://docs.molt.bot/tts
+- Exec approvals: approve in-chat via `/approve` across all channels (including plugins). (#1621) Thanks @czekaj. https://docs.molt.bot/tools/exec-approvals https://docs.molt.bot/tools/slash-commands
+- Telegram: DM topics as separate sessions + outbound link preview toggle. (#1597, #1700) Thanks @rohannagpal, @zerone0x. https://docs.molt.bot/channels/telegram
### Changes
- Channels: add LINE plugin (Messaging API) with rich replies, quick replies, and plugin HTTP registry. (#1630) Thanks @plum-dawg.
-- TTS: add Edge TTS provider fallback, defaulting to keyless Edge with MP3 retry on format failures. (#1668) Thanks @steipete. https://docs.clawd.bot/tts
-- TTS: add auto mode enum (off/always/inbound/tagged) with per-session `/tts` override. (#1667) Thanks @sebslight. https://docs.clawd.bot/tts
+- TTS: add Edge TTS provider fallback, defaulting to keyless Edge with MP3 retry on format failures. (#1668) Thanks @steipete. https://docs.molt.bot/tts
+- TTS: add auto mode enum (off/always/inbound/tagged) with per-session `/tts` override. (#1667) Thanks @sebslight. https://docs.molt.bot/tts
- Telegram: treat DM topics as separate sessions and keep DM history limits stable with thread suffixes. (#1597) Thanks @rohannagpal.
-- Telegram: add `channels.telegram.linkPreview` to toggle outbound link previews. (#1700) Thanks @zerone0x. https://docs.clawd.bot/channels/telegram
-- Web search: add Brave freshness filter parameter for time-scoped results. (#1688) Thanks @JonUleis. https://docs.clawd.bot/tools/web
+- Telegram: add `channels.telegram.linkPreview` to toggle outbound link previews. (#1700) Thanks @zerone0x. https://docs.molt.bot/channels/telegram
+- Web search: add Brave freshness filter parameter for time-scoped results. (#1688) Thanks @JonUleis. https://docs.molt.bot/tools/web
- UI: refresh Control UI dashboard design system (colors, icons, typography). (#1745, #1786) Thanks @EnzeD, @mousberg.
-- Exec approvals: forward approval prompts to chat with `/approve` for all channels (including plugins). (#1621) Thanks @czekaj. https://docs.clawd.bot/tools/exec-approvals https://docs.clawd.bot/tools/slash-commands
+- Exec approvals: forward approval prompts to chat with `/approve` for all channels (including plugins). (#1621) Thanks @czekaj. https://docs.molt.bot/tools/exec-approvals https://docs.molt.bot/tools/slash-commands
- Gateway: expose config.patch in the gateway tool with safe partial updates + restart sentinel. (#1653) Thanks @Glucksberg.
-- Diagnostics: add diagnostic flags for targeted debug logs (config + env override). https://docs.clawd.bot/diagnostics/flags
+- Diagnostics: add diagnostic flags for targeted debug logs (config + env override). https://docs.molt.bot/diagnostics/flags
- Docs: expand FAQ (migration, scheduling, concurrency, model recommendations, OpenAI subscription auth, Pi sizing, hackable install, docs SSL workaround).
- Docs: add verbose installer troubleshooting guidance.
- Docs: add macOS VM guide with local/hosted options + VPS/nodes guidance. (#1693) Thanks @f-trycua.
-- Docs: add Bedrock EC2 instance role setup + IAM steps. (#1625) Thanks @sergical. https://docs.clawd.bot/bedrock
+- Docs: add Bedrock EC2 instance role setup + IAM steps. (#1625) Thanks @sergical. https://docs.molt.bot/bedrock
- Docs: update Fly.io guide notes.
- Dev: add prek pre-commit hooks + dependabot config for weekly updates. (#1720) Thanks @dguido.
@@ -144,11 +144,11 @@ Status: unreleased.
- Web UI: hide internal `message_id` hints in chat bubbles.
- Gateway: allow Control UI token-only auth to skip device pairing even when device identity is present (`gateway.controlUi.allowInsecureAuth`). (#1679) Thanks @steipete.
- Matrix: decrypt E2EE media attachments with preflight size guard. (#1744) Thanks @araa47.
-- BlueBubbles: route phone-number targets to DMs, avoid leaking routing IDs, and auto-create missing DMs (Private API required). (#1751) Thanks @tyler6204. https://docs.clawd.bot/channels/bluebubbles
+- BlueBubbles: route phone-number targets to DMs, avoid leaking routing IDs, and auto-create missing DMs (Private API required). (#1751) Thanks @tyler6204. https://docs.molt.bot/channels/bluebubbles
- BlueBubbles: keep part-index GUIDs in reply tags when short IDs are missing.
- iMessage: normalize chat_id/chat_guid/chat_identifier prefixes case-insensitively and keep service-prefixed handles stable. (#1708) Thanks @aaronn.
- Signal: repair reaction sends (group/UUID targets + CLI author flags). (#1651) Thanks @vilkasdev.
-- Signal: add configurable signal-cli startup timeout + external daemon mode docs. (#1677) https://docs.clawd.bot/channels/signal
+- Signal: add configurable signal-cli startup timeout + external daemon mode docs. (#1677) https://docs.molt.bot/channels/signal
- Telegram: set fetch duplex="half" for uploads on Node 22 to avoid sendPhoto failures. (#1684) Thanks @commdata2338.
- Telegram: use wrapped fetch for long-polling on Node to normalize AbortSignal handling. (#1639)
- Telegram: honor per-account proxy for outbound API calls. (#1774) Thanks @radek-paclt.
@@ -186,25 +186,25 @@ Status: unreleased.
## 2026.1.23
### Highlights
-- TTS: move Telegram TTS into core + enable model-driven TTS tags by default for expressive audio replies. (#1559) Thanks @Glucksberg. https://docs.clawd.bot/tts
-- Gateway: add `/tools/invoke` HTTP endpoint for direct tool calls (auth + tool policy enforced). (#1575) Thanks @vignesh07. https://docs.clawd.bot/gateway/tools-invoke-http-api
-- Heartbeat: per-channel visibility controls (OK/alerts/indicator). (#1452) Thanks @dlauer. https://docs.clawd.bot/gateway/heartbeat
-- Deploy: add Fly.io deployment support + guide. (#1570) https://docs.clawd.bot/platforms/fly
-- Channels: add Tlon/Urbit channel plugin (DMs, group mentions, thread replies). (#1544) Thanks @wca4a. https://docs.clawd.bot/channels/tlon
+- TTS: move Telegram TTS into core + enable model-driven TTS tags by default for expressive audio replies. (#1559) Thanks @Glucksberg. https://docs.molt.bot/tts
+- Gateway: add `/tools/invoke` HTTP endpoint for direct tool calls (auth + tool policy enforced). (#1575) Thanks @vignesh07. https://docs.molt.bot/gateway/tools-invoke-http-api
+- Heartbeat: per-channel visibility controls (OK/alerts/indicator). (#1452) Thanks @dlauer. https://docs.molt.bot/gateway/heartbeat
+- Deploy: add Fly.io deployment support + guide. (#1570) https://docs.molt.bot/platforms/fly
+- Channels: add Tlon/Urbit channel plugin (DMs, group mentions, thread replies). (#1544) Thanks @wca4a. https://docs.molt.bot/channels/tlon
### Changes
-- Channels: allow per-group tool allow/deny policies across built-in + plugin channels. (#1546) Thanks @adam91holt. https://docs.clawd.bot/multi-agent-sandbox-tools
-- Agents: add Bedrock auto-discovery defaults + config overrides. (#1553) Thanks @fal3. https://docs.clawd.bot/bedrock
-- CLI: add `clawdbot system` for system events + heartbeat controls; remove standalone `wake`. (commit 71203829d) https://docs.clawd.bot/cli/system
-- CLI: add live auth probes to `clawdbot models status` for per-profile verification. (commit 40181afde) https://docs.clawd.bot/cli/models
+- Channels: allow per-group tool allow/deny policies across built-in + plugin channels. (#1546) Thanks @adam91holt. https://docs.molt.bot/multi-agent-sandbox-tools
+- Agents: add Bedrock auto-discovery defaults + config overrides. (#1553) Thanks @fal3. https://docs.molt.bot/bedrock
+- CLI: add `clawdbot system` for system events + heartbeat controls; remove standalone `wake`. (commit 71203829d) https://docs.molt.bot/cli/system
+- CLI: add live auth probes to `clawdbot models status` for per-profile verification. (commit 40181afde) https://docs.molt.bot/cli/models
- CLI: restart the gateway by default after `clawdbot update`; add `--no-restart` to skip it. (commit 2c85b1b40)
- Browser: add node-host proxy auto-routing for remote gateways (configurable per gateway/node). (commit c3cb26f7c)
-- Plugins: add optional `llm-task` JSON-only tool for workflows. (#1498) Thanks @vignesh07. https://docs.clawd.bot/tools/llm-task
+- Plugins: add optional `llm-task` JSON-only tool for workflows. (#1498) Thanks @vignesh07. https://docs.molt.bot/tools/llm-task
- Markdown: add per-channel table conversion (bullets for Signal/WhatsApp, code blocks elsewhere). (#1495) Thanks @odysseus0.
- Agents: keep system prompt time zone-only and move current time to `session_status` for better cache hits. (commit 66eec295b)
- Agents: remove redundant bash tool alias from tool registration/display. (#1571) Thanks @Takhoffman.
-- Docs: add cron vs heartbeat decision guide (with Lobster workflow notes). (#1533) Thanks @JustYannicc. https://docs.clawd.bot/automation/cron-vs-heartbeat
-- Docs: clarify HEARTBEAT.md empty file skips heartbeats, missing file still runs. (#1535) Thanks @JustYannicc. https://docs.clawd.bot/gateway/heartbeat
+- Docs: add cron vs heartbeat decision guide (with Lobster workflow notes). (#1533) Thanks @JustYannicc. https://docs.molt.bot/automation/cron-vs-heartbeat
+- Docs: clarify HEARTBEAT.md empty file skips heartbeats, missing file still runs. (#1535) Thanks @JustYannicc. https://docs.molt.bot/gateway/heartbeat
### Fixes
- Sessions: accept non-UUID sessionIds for history/send/status while preserving agent scoping. (#1518)
@@ -282,14 +282,14 @@ Status: unreleased.
## 2026.1.21-2
### Fixes
-- Control UI: ignore bootstrap identity placeholder text for avatar values and fall back to the default avatar. https://docs.clawd.bot/cli/agents https://docs.clawd.bot/web/control-ui
+- Control UI: ignore bootstrap identity placeholder text for avatar values and fall back to the default avatar. https://docs.molt.bot/cli/agents https://docs.molt.bot/web/control-ui
- Slack: remove deprecated `filetype` field from `files.uploadV2` to eliminate API warnings. (#1447)
## 2026.1.21
### Changes
-- Highlight: Lobster optional plugin tool for typed workflows + approval gates. https://docs.clawd.bot/tools/lobster
-- Lobster: allow workflow file args via `argsJson` in the plugin tool. https://docs.clawd.bot/tools/lobster
+- Highlight: Lobster optional plugin tool for typed workflows + approval gates. https://docs.molt.bot/tools/lobster
+- Lobster: allow workflow file args via `argsJson` in the plugin tool. https://docs.molt.bot/tools/lobster
- Heartbeat: allow running heartbeats in an explicit session key. (#1256) Thanks @zknicker.
- CLI: default exec approvals to the local host, add gateway/node targeting flags, and show target details in allowlist output.
- CLI: exec approvals mutations render tables instead of raw JSON.
@@ -301,16 +301,16 @@ Status: unreleased.
- Sessions: add per-channel reset overrides via `session.resetByChannel`. (#1353) Thanks @cash-echo-bot.
- Agents: add identity avatar config support and Control UI avatar rendering. (#1329, #1424) Thanks @dlauer.
- UI: show per-session assistant identity in the Control UI. (#1420) Thanks @robbyczgw-cla.
-- CLI: add `clawdbot update wizard` for interactive channel selection and restart prompts. https://docs.clawd.bot/cli/update
+- CLI: add `clawdbot update wizard` for interactive channel selection and restart prompts. https://docs.molt.bot/cli/update
- Signal: add typing indicators and DM read receipts via signal-cli.
- MSTeams: add file uploads, adaptive cards, and attachment handling improvements. (#1410) Thanks @Evizero.
- Onboarding: remove the run setup-token auth option (paste setup-token or reuse CLI creds instead).
-- Docs: add troubleshooting entry for gateway.mode blocking gateway start. https://docs.clawd.bot/gateway/troubleshooting
+- Docs: add troubleshooting entry for gateway.mode blocking gateway start. https://docs.molt.bot/gateway/troubleshooting
- Docs: add /model allowlist troubleshooting note. (#1405)
- Docs: add per-message Gmail search example for gog. (#1220) Thanks @mbelinky.
### Breaking
-- **BREAKING:** Control UI now rejects insecure HTTP without device identity by default. Use HTTPS (Tailscale Serve) or set `gateway.controlUi.allowInsecureAuth: true` to allow token-only auth. https://docs.clawd.bot/web/control-ui#insecure-http
+- **BREAKING:** Control UI now rejects insecure HTTP without device identity by default. Use HTTPS (Tailscale Serve) or set `gateway.controlUi.allowInsecureAuth: true` to allow token-only auth. https://docs.molt.bot/web/control-ui#insecure-http
- **BREAKING:** Envelope and system event timestamps now default to host-local time (was UTC) so agents don’t have to constantly convert.
### Fixes
@@ -336,68 +336,68 @@ Status: unreleased.
## 2026.1.20
### Changes
-- Control UI: add copy-as-markdown with error feedback. (#1345) https://docs.clawd.bot/web/control-ui
-- Control UI: drop the legacy list view. (#1345) https://docs.clawd.bot/web/control-ui
-- TUI: add syntax highlighting for code blocks. (#1200) https://docs.clawd.bot/tui
-- TUI: session picker shows derived titles, fuzzy search, relative times, and last message preview. (#1271) https://docs.clawd.bot/tui
-- TUI: add a searchable model picker for quicker model selection. (#1198) https://docs.clawd.bot/tui
-- TUI: add input history (up/down) for submitted messages. (#1348) https://docs.clawd.bot/tui
-- ACP: add `clawdbot acp` for IDE integrations. https://docs.clawd.bot/cli/acp
-- ACP: add `clawdbot acp client` interactive harness for debugging. https://docs.clawd.bot/cli/acp
-- Skills: add download installs with OS-filtered options. https://docs.clawd.bot/tools/skills
-- Skills: add the local sherpa-onnx-tts skill. https://docs.clawd.bot/tools/skills
-- Memory: add hybrid BM25 + vector search (FTS5) with weighted merging and fallback. https://docs.clawd.bot/concepts/memory
-- Memory: add SQLite embedding cache to speed up reindexing and frequent updates. https://docs.clawd.bot/concepts/memory
-- Memory: add OpenAI batch indexing for embeddings when configured. https://docs.clawd.bot/concepts/memory
-- Memory: enable OpenAI batch indexing by default for OpenAI embeddings. https://docs.clawd.bot/concepts/memory
-- Memory: allow parallel OpenAI batch indexing jobs (default concurrency: 2). https://docs.clawd.bot/concepts/memory
-- Memory: render progress immediately, color batch statuses in verbose logs, and poll OpenAI batch status every 2s by default. https://docs.clawd.bot/concepts/memory
-- Memory: add `--verbose` logging for memory status + batch indexing details. https://docs.clawd.bot/concepts/memory
-- Memory: add native Gemini embeddings provider for memory search. (#1151) https://docs.clawd.bot/concepts/memory
-- Browser: allow config defaults for efficient snapshots in the tool/CLI. (#1336) https://docs.clawd.bot/tools/browser
-- Nostr: add the Nostr channel plugin with profile management + onboarding defaults. (#1323) https://docs.clawd.bot/channels/nostr
-- Matrix: migrate to matrix-bot-sdk with E2EE support, location handling, and group allowlist upgrades. (#1298) https://docs.clawd.bot/channels/matrix
-- Slack: add HTTP webhook mode via Bolt HTTP receiver. (#1143) https://docs.clawd.bot/channels/slack
-- Telegram: enrich forwarded-message context with normalized origin details + legacy fallback. (#1090) https://docs.clawd.bot/channels/telegram
+- Control UI: add copy-as-markdown with error feedback. (#1345) https://docs.molt.bot/web/control-ui
+- Control UI: drop the legacy list view. (#1345) https://docs.molt.bot/web/control-ui
+- TUI: add syntax highlighting for code blocks. (#1200) https://docs.molt.bot/tui
+- TUI: session picker shows derived titles, fuzzy search, relative times, and last message preview. (#1271) https://docs.molt.bot/tui
+- TUI: add a searchable model picker for quicker model selection. (#1198) https://docs.molt.bot/tui
+- TUI: add input history (up/down) for submitted messages. (#1348) https://docs.molt.bot/tui
+- ACP: add `clawdbot acp` for IDE integrations. https://docs.molt.bot/cli/acp
+- ACP: add `clawdbot acp client` interactive harness for debugging. https://docs.molt.bot/cli/acp
+- Skills: add download installs with OS-filtered options. https://docs.molt.bot/tools/skills
+- Skills: add the local sherpa-onnx-tts skill. https://docs.molt.bot/tools/skills
+- Memory: add hybrid BM25 + vector search (FTS5) with weighted merging and fallback. https://docs.molt.bot/concepts/memory
+- Memory: add SQLite embedding cache to speed up reindexing and frequent updates. https://docs.molt.bot/concepts/memory
+- Memory: add OpenAI batch indexing for embeddings when configured. https://docs.molt.bot/concepts/memory
+- Memory: enable OpenAI batch indexing by default for OpenAI embeddings. https://docs.molt.bot/concepts/memory
+- Memory: allow parallel OpenAI batch indexing jobs (default concurrency: 2). https://docs.molt.bot/concepts/memory
+- Memory: render progress immediately, color batch statuses in verbose logs, and poll OpenAI batch status every 2s by default. https://docs.molt.bot/concepts/memory
+- Memory: add `--verbose` logging for memory status + batch indexing details. https://docs.molt.bot/concepts/memory
+- Memory: add native Gemini embeddings provider for memory search. (#1151) https://docs.molt.bot/concepts/memory
+- Browser: allow config defaults for efficient snapshots in the tool/CLI. (#1336) https://docs.molt.bot/tools/browser
+- Nostr: add the Nostr channel plugin with profile management + onboarding defaults. (#1323) https://docs.molt.bot/channels/nostr
+- Matrix: migrate to matrix-bot-sdk with E2EE support, location handling, and group allowlist upgrades. (#1298) https://docs.molt.bot/channels/matrix
+- Slack: add HTTP webhook mode via Bolt HTTP receiver. (#1143) https://docs.molt.bot/channels/slack
+- Telegram: enrich forwarded-message context with normalized origin details + legacy fallback. (#1090) https://docs.molt.bot/channels/telegram
- Discord: fall back to `/skill` when native command limits are exceeded. (#1287)
- Discord: expose `/skill` globally. (#1287)
-- Zalouser: add channel dock metadata, config schema, setup wiring, probe, and status issues. (#1219) https://docs.clawd.bot/plugins/zalouser
-- Plugins: require manifest-embedded config schemas with preflight validation warnings. (#1272) https://docs.clawd.bot/plugins/manifest
-- Plugins: move channel catalog metadata into plugin manifests. (#1290) https://docs.clawd.bot/plugins/manifest
-- Plugins: align Nextcloud Talk policy helpers with core patterns. (#1290) https://docs.clawd.bot/plugins/manifest
-- Plugins/UI: let channel plugin metadata drive UI labels/icons and cron channel options. (#1306) https://docs.clawd.bot/web/control-ui
-- Agents/UI: add agent avatar support in identity config, IDENTITY.md, and the Control UI. (#1329) https://docs.clawd.bot/gateway/configuration
-- Plugins: add plugin slots with a dedicated memory slot selector. https://docs.clawd.bot/plugins/agent-tools
-- Plugins: ship the bundled BlueBubbles channel plugin (disabled by default). https://docs.clawd.bot/channels/bluebubbles
+- Zalouser: add channel dock metadata, config schema, setup wiring, probe, and status issues. (#1219) https://docs.molt.bot/plugins/zalouser
+- Plugins: require manifest-embedded config schemas with preflight validation warnings. (#1272) https://docs.molt.bot/plugins/manifest
+- Plugins: move channel catalog metadata into plugin manifests. (#1290) https://docs.molt.bot/plugins/manifest
+- Plugins: align Nextcloud Talk policy helpers with core patterns. (#1290) https://docs.molt.bot/plugins/manifest
+- Plugins/UI: let channel plugin metadata drive UI labels/icons and cron channel options. (#1306) https://docs.molt.bot/web/control-ui
+- Agents/UI: add agent avatar support in identity config, IDENTITY.md, and the Control UI. (#1329) https://docs.molt.bot/gateway/configuration
+- Plugins: add plugin slots with a dedicated memory slot selector. https://docs.molt.bot/plugins/agent-tools
+- Plugins: ship the bundled BlueBubbles channel plugin (disabled by default). https://docs.molt.bot/channels/bluebubbles
- Plugins: migrate bundled messaging extensions to the plugin SDK and resolve plugin-sdk imports in the loader.
-- Plugins: migrate the Zalo plugin to the shared plugin SDK runtime. https://docs.clawd.bot/channels/zalo
-- Plugins: migrate the Zalo Personal plugin to the shared plugin SDK runtime. https://docs.clawd.bot/plugins/zalouser
-- Plugins: allow optional agent tools with explicit allowlists and add the plugin tool authoring guide. https://docs.clawd.bot/plugins/agent-tools
+- Plugins: migrate the Zalo plugin to the shared plugin SDK runtime. https://docs.molt.bot/channels/zalo
+- Plugins: migrate the Zalo Personal plugin to the shared plugin SDK runtime. https://docs.molt.bot/plugins/zalouser
+- Plugins: allow optional agent tools with explicit allowlists and add the plugin tool authoring guide. https://docs.molt.bot/plugins/agent-tools
- Plugins: auto-enable bundled channel/provider plugins when configuration is present.
- Plugins: sync plugin sources on channel switches and update npm-installed plugins during `clawdbot update`.
- Plugins: share npm plugin update logic between `clawdbot update` and `clawdbot plugins update`.
- Gateway/API: add `/v1/responses` (OpenResponses) with item-based input + semantic streaming events. (#1229)
- Gateway/API: expand `/v1/responses` to support file/image inputs, tool_choice, usage, and output limits. (#1229)
-- Usage: add `/usage cost` summaries and macOS menu cost charts. https://docs.clawd.bot/reference/api-usage-costs
-- Security: warn when <=300B models run without sandboxing while web tools are enabled. https://docs.clawd.bot/cli/security
-- Exec: add host/security/ask routing for gateway + node exec. https://docs.clawd.bot/tools/exec
-- Exec: add `/exec` directive for per-session exec defaults (host/security/ask/node). https://docs.clawd.bot/tools/exec
-- Exec approvals: migrate approvals to `~/.clawdbot/exec-approvals.json` with per-agent allowlists + skill auto-allow toggle, and add approvals UI + node exec lifecycle events. https://docs.clawd.bot/tools/exec-approvals
-- Nodes: add headless node host (`clawdbot node start`) for `system.run`/`system.which`. https://docs.clawd.bot/cli/node
-- Nodes: add node daemon service install/status/start/stop/restart. https://docs.clawd.bot/cli/node
+- Usage: add `/usage cost` summaries and macOS menu cost charts. https://docs.molt.bot/reference/api-usage-costs
+- Security: warn when <=300B models run without sandboxing while web tools are enabled. https://docs.molt.bot/cli/security
+- Exec: add host/security/ask routing for gateway + node exec. https://docs.molt.bot/tools/exec
+- Exec: add `/exec` directive for per-session exec defaults (host/security/ask/node). https://docs.molt.bot/tools/exec
+- Exec approvals: migrate approvals to `~/.clawdbot/exec-approvals.json` with per-agent allowlists + skill auto-allow toggle, and add approvals UI + node exec lifecycle events. https://docs.molt.bot/tools/exec-approvals
+- Nodes: add headless node host (`clawdbot node start`) for `system.run`/`system.which`. https://docs.molt.bot/cli/node
+- Nodes: add node daemon service install/status/start/stop/restart. https://docs.molt.bot/cli/node
- Bridge: add `skills.bins` RPC to support node host auto-allow skill bins.
-- Sessions: add daily reset policy with per-type overrides and idle windows (default 4am local), preserving legacy idle-only configs. (#1146) https://docs.clawd.bot/concepts/session
-- Sessions: allow `sessions_spawn` to override thinking level for sub-agent runs. https://docs.clawd.bot/tools/subagents
-- Channels: unify thread/topic allowlist matching + command/mention gating helpers across core providers. https://docs.clawd.bot/concepts/groups
-- Models: add Qwen Portal OAuth provider support. (#1120) https://docs.clawd.bot/providers/qwen
-- Onboarding: add allowlist prompts and username-to-id resolution across core and extension channels. https://docs.clawd.bot/start/onboarding
-- Docs: clarify allowlist input types and onboarding behavior for messaging channels. https://docs.clawd.bot/start/onboarding
-- Docs: refresh Android node discovery docs for the Gateway WS service type. https://docs.clawd.bot/platforms/android
-- Docs: surface Amazon Bedrock in provider lists and clarify Bedrock auth env vars. (#1289) https://docs.clawd.bot/bedrock
-- Docs: clarify WhatsApp voice notes. https://docs.clawd.bot/channels/whatsapp
-- Docs: clarify Windows WSL portproxy LAN access notes. https://docs.clawd.bot/platforms/windows
-- Docs: refresh bird skill install metadata and usage notes. (#1302) https://docs.clawd.bot/tools/browser-login
+- Sessions: add daily reset policy with per-type overrides and idle windows (default 4am local), preserving legacy idle-only configs. (#1146) https://docs.molt.bot/concepts/session
+- Sessions: allow `sessions_spawn` to override thinking level for sub-agent runs. https://docs.molt.bot/tools/subagents
+- Channels: unify thread/topic allowlist matching + command/mention gating helpers across core providers. https://docs.molt.bot/concepts/groups
+- Models: add Qwen Portal OAuth provider support. (#1120) https://docs.molt.bot/providers/qwen
+- Onboarding: add allowlist prompts and username-to-id resolution across core and extension channels. https://docs.molt.bot/start/onboarding
+- Docs: clarify allowlist input types and onboarding behavior for messaging channels. https://docs.molt.bot/start/onboarding
+- Docs: refresh Android node discovery docs for the Gateway WS service type. https://docs.molt.bot/platforms/android
+- Docs: surface Amazon Bedrock in provider lists and clarify Bedrock auth env vars. (#1289) https://docs.molt.bot/bedrock
+- Docs: clarify WhatsApp voice notes. https://docs.molt.bot/channels/whatsapp
+- Docs: clarify Windows WSL portproxy LAN access notes. https://docs.molt.bot/platforms/windows
+- Docs: refresh bird skill install metadata and usage notes. (#1302) https://docs.molt.bot/tools/browser-login
- Agents: add local docs path resolution and include docs/mirror/source/community pointers in the system prompt.
- Agents: clarify node_modules read-only guidance in agent instructions.
- Config: stamp last-touched metadata on write and warn if the config is newer than the running build.
@@ -522,19 +522,19 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
## 2026.1.16-1
### Highlights
-- Hooks: add hooks system with bundled hooks, CLI tooling, and docs. (#1028) — thanks @ThomsenDrake. https://docs.clawd.bot/hooks
-- Media: add inbound media understanding (image/audio/video) with provider + CLI fallbacks. https://docs.clawd.bot/nodes/media-understanding
-- Plugins: add Zalo Personal plugin (`@clawdbot/zalouser`) and unify channel directory for plugins. (#1032) — thanks @suminhthanh. https://docs.clawd.bot/plugins/zalouser
-- Models: add Vercel AI Gateway auth choice + onboarding updates. (#1016) — thanks @timolins. https://docs.clawd.bot/providers/vercel-ai-gateway
-- Sessions: add `session.identityLinks` for cross-platform DM session li nking. (#1033) — thanks @thewilloftheshadow. https://docs.clawd.bot/concepts/session
-- Web search: add `country`/`language` parameters (schema + Brave API) and docs. (#1046) — thanks @YuriNachos. https://docs.clawd.bot/tools/web
+- Hooks: add hooks system with bundled hooks, CLI tooling, and docs. (#1028) — thanks @ThomsenDrake. https://docs.molt.bot/hooks
+- Media: add inbound media understanding (image/audio/video) with provider + CLI fallbacks. https://docs.molt.bot/nodes/media-understanding
+- Plugins: add Zalo Personal plugin (`@clawdbot/zalouser`) and unify channel directory for plugins. (#1032) — thanks @suminhthanh. https://docs.molt.bot/plugins/zalouser
+- Models: add Vercel AI Gateway auth choice + onboarding updates. (#1016) — thanks @timolins. https://docs.molt.bot/providers/vercel-ai-gateway
+- Sessions: add `session.identityLinks` for cross-platform DM session li nking. (#1033) — thanks @thewilloftheshadow. https://docs.molt.bot/concepts/session
+- Web search: add `country`/`language` parameters (schema + Brave API) and docs. (#1046) — thanks @YuriNachos. https://docs.molt.bot/tools/web
### Breaking
- **BREAKING:** `clawdbot message` and message tool now require `target` (dropping `to`/`channelId` for destinations). (#1034) — thanks @tobalsan.
- **BREAKING:** Channel auth now prefers config over env for Discord/Telegram/Matrix (env is fallback only). (#1040) — thanks @thewilloftheshadow.
- **BREAKING:** Drop legacy `chatType: "room"` support; use `chatType: "channel"`.
- **BREAKING:** remove legacy provider-specific target resolution fallbacks; target resolution is centralized with plugin hints + directory lookups.
-- **BREAKING:** `clawdbot hooks` is now `clawdbot webhooks`; hooks live under `clawdbot hooks`. https://docs.clawd.bot/cli/webhooks
+- **BREAKING:** `clawdbot hooks` is now `clawdbot webhooks`; hooks live under `clawdbot hooks`. https://docs.molt.bot/cli/webhooks
- **BREAKING:** `clawdbot plugins install ` now copies into `~/.clawdbot/extensions` (use `--link` to keep path-based loading).
### Changes
@@ -545,7 +545,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Tools: send Chrome-like headers by default for `web_fetch` to improve extraction on bot-sensitive sites.
- Tools: Firecrawl fallback now uses bot-circumvention + cache by default; remove basic HTML fallback when extraction fails.
- Tools: default `exec` exit notifications and auto-migrate legacy `tools.bash` to `tools.exec`.
-- Tools: add `exec` PTY support for interactive sessions. https://docs.clawd.bot/tools/exec
+- Tools: add `exec` PTY support for interactive sessions. https://docs.molt.bot/tools/exec
- Tools: add tmux-style `process send-keys` and bracketed paste helpers for PTY sessions.
- Tools: add `process submit` helper to send CR for PTY sessions.
- Tools: respond to PTY cursor position queries to unblock interactive TUIs.
@@ -600,7 +600,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Sessions: hard-stop `sessions.delete` cleanup.
- Channels: treat replies to the bot as implicit mentions across supported channels.
- Channels: normalize object-format capabilities in channel capability parsing.
-- Security: default-deny slash/control commands unless a channel computed `CommandAuthorized` (fixes accidental “open” behavior), and ensure WhatsApp + Zalo plugin channels gate inline `/…` tokens correctly. https://docs.clawd.bot/gateway/security
+- Security: default-deny slash/control commands unless a channel computed `CommandAuthorized` (fixes accidental “open” behavior), and ensure WhatsApp + Zalo plugin channels gate inline `/…` tokens correctly. https://docs.molt.bot/gateway/security
- Security: redact sensitive text in gateway WS logs.
- Tools: cap pending `exec` process output to avoid unbounded buffers.
- CLI: speed up `clawdbot sandbox-explain` by avoiding heavy plugin imports when normalizing channel ids.
@@ -906,7 +906,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Agents: add pre-compaction memory flush config (`agents.defaults.compaction.*`) with a soft threshold + system prompt.
- Config: add `$include` directive 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 `clawdbot` CLI when missing in local mode; install via `clawd.bot/install-cli.sh` (no onboarding) and use external launchd/CLI instead of the embedded gateway runtime.
+- macOS: prompt to install the global `clawdbot` CLI when missing in local mode; install via `molt.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 `--model` flag to cron add/edit commands. (#711) — thanks @mjrussell.
- Cron/CLI: trim model overrides on cron edits and document main-session guidance. (#711) — thanks @mjrussell.
@@ -920,7 +920,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
### Installer
- Postinstall: replace `git apply` with 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 tests: add root+non-root docker smokes, CI workflow to fetch molt.bot scripts and run install sh/cli with onboarding skipped.
- Installer UX: support `CLAWDBOT_NO_ONBOARD=1` for non-interactive installs; fix npm prefix on Linux and auto-install git.
- Installer UX: add `install.sh --help` with flags/env and git install hint.
- Installer UX: add `--install-method git|npm` and auto-detect source checkouts (prompt to update git checkout vs migrate to npm).
diff --git a/README.md b/README.md
index a3f0b11d1..9f1f93193 100644
--- a/README.md
+++ b/README.md
@@ -21,55 +21,56 @@ It answers you on the channels you already use (WhatsApp, Telegram, Slack, Disco
If you want a personal, single-user assistant that feels local, fast, and always-on, this is it.
-[Website](https://clawdbot.com) · [Docs](https://docs.clawd.bot) · [Getting Started](https://docs.clawd.bot/start/getting-started) · [Updating](https://docs.clawd.bot/install/updating) · [Showcase](https://docs.clawd.bot/start/showcase) · [FAQ](https://docs.clawd.bot/start/faq) · [Wizard](https://docs.clawd.bot/start/wizard) · [Nix](https://github.com/clawdbot/nix-clawdbot) · [Docker](https://docs.clawd.bot/install/docker) · [Discord](https://discord.gg/clawd)
+[Website](https://molt.bot) · [Docs](https://docs.molt.bot) · [Getting Started](https://docs.molt.bot/start/getting-started) · [Updating](https://docs.molt.bot/install/updating) · [Showcase](https://docs.molt.bot/start/showcase) · [FAQ](https://docs.molt.bot/start/faq) · [Wizard](https://docs.molt.bot/start/wizard) · [Nix](https://github.com/clawdbot/nix-clawdbot) · [Docker](https://docs.molt.bot/install/docker) · [Discord](https://discord.gg/clawd)
Preferred setup: run the onboarding wizard (`clawdbot onboard`). It walks through gateway, workspace, channels, and skills. The CLI wizard is the recommended path and works on **macOS, Linux, and Windows (via WSL2; strongly recommended)**.
Works with npm, pnpm, or bun.
-New install? Start here: [Getting started](https://docs.clawd.bot/start/getting-started)
+New install? Start here: [Getting started](https://docs.molt.bot/start/getting-started)
**Subscriptions (OAuth):**
- **[Anthropic](https://www.anthropic.com/)** (Claude Pro/Max)
- **[OpenAI](https://openai.com/)** (ChatGPT/Codex)
-Model note: while any model is supported, I strongly recommend **Anthropic Pro/Max (100/200) + Opus 4.5** for long‑context strength and better prompt‑injection resistance. See [Onboarding](https://docs.clawd.bot/start/onboarding).
+Model note: while any model is supported, I strongly recommend **Anthropic Pro/Max (100/200) + Opus 4.5** for long‑context strength and better prompt‑injection resistance. See [Onboarding](https://docs.molt.bot/start/onboarding).
## Models (selection + auth)
-- Models config + CLI: [Models](https://docs.clawd.bot/concepts/models)
-- Auth profile rotation (OAuth vs API keys) + fallbacks: [Model failover](https://docs.clawd.bot/concepts/model-failover)
+- Models config + CLI: [Models](https://docs.molt.bot/concepts/models)
+- Auth profile rotation (OAuth vs API keys) + fallbacks: [Model failover](https://docs.molt.bot/concepts/model-failover)
## Install (recommended)
Runtime: **Node ≥22**.
```bash
-npm install -g clawdbot@latest
-# or: pnpm add -g clawdbot@latest
+npm install -g moltbot@latest
+# or: pnpm add -g moltbot@latest
-clawdbot onboard --install-daemon
+moltbot onboard --install-daemon
```
The wizard installs the Gateway daemon (launchd/systemd user service) so it stays running.
+Legacy note: `clawdbot` remains available as a compatibility shim.
## Quick start (TL;DR)
Runtime: **Node ≥22**.
-Full beginner guide (auth, pairing, channels): [Getting started](https://docs.clawd.bot/start/getting-started)
+Full beginner guide (auth, pairing, channels): [Getting started](https://docs.molt.bot/start/getting-started)
```bash
-clawdbot onboard --install-daemon
+moltbot onboard --install-daemon
-clawdbot gateway --port 18789 --verbose
+moltbot gateway --port 18789 --verbose
# Send a message
-clawdbot message send --to +1234567890 --message "Hello from Clawdbot"
+moltbot message send --to +1234567890 --message "Hello from Moltbot"
# Talk to the assistant (optionally deliver back to any connected channel: WhatsApp/Telegram/Slack/Discord/Google Chat/Signal/iMessage/BlueBubbles/Microsoft Teams/Matrix/Zalo/Zalo Personal/WebChat)
-clawdbot agent --message "Ship checklist" --thinking high
+moltbot agent --message "Ship checklist" --thinking high
```
-Upgrading? [Updating guide](https://docs.clawd.bot/install/updating) (and run `clawdbot doctor`).
+Upgrading? [Updating guide](https://docs.molt.bot/install/updating) (and run `moltbot doctor`).
## Development channels
@@ -78,7 +79,7 @@ Upgrading? [Updating guide](https://docs.clawd.bot/install/updating) (and run `c
- **dev**: moving head of `main`, npm dist-tag `dev` (when published).
Switch channels (git + npm): `clawdbot update --channel stable|beta|dev`.
-Details: [Development channels](https://docs.clawd.bot/install/development-channels).
+Details: [Development channels](https://docs.molt.bot/install/development-channels).
## From source (development)
@@ -92,19 +93,19 @@ pnpm install
pnpm ui:build # auto-installs UI deps on first run
pnpm build
-pnpm clawdbot onboard --install-daemon
+pnpm moltbot onboard --install-daemon
# Dev loop (auto-reload on TS changes)
pnpm gateway:watch
```
-Note: `pnpm clawdbot ...` runs TypeScript directly (via `tsx`). `pnpm build` produces `dist/` for running via Node / the packaged `clawdbot` binary.
+Note: `pnpm moltbot ...` runs TypeScript directly (via `tsx`). `pnpm build` produces `dist/` for running via Node / the packaged `moltbot` binary.
## Security defaults (DM access)
Clawdbot connects to real messaging surfaces. Treat inbound DMs as **untrusted input**.
-Full security guide: [Security](https://docs.clawd.bot/gateway/security)
+Full security guide: [Security](https://docs.molt.bot/gateway/security)
Default behavior on Telegram/WhatsApp/Signal/iMessage/Microsoft Teams/Discord/Google Chat/Slack:
- **DM pairing** (`dmPolicy="pairing"` / `channels.discord.dm.policy="pairing"` / `channels.slack.dm.policy="pairing"`): unknown senders receive a short pairing code and the bot does not process their message.
@@ -115,14 +116,14 @@ Run `clawdbot doctor` to surface risky/misconfigured DM policies.
## Highlights
-- **[Local-first Gateway](https://docs.clawd.bot/gateway)** — single control plane for sessions, channels, tools, and events.
-- **[Multi-channel inbox](https://docs.clawd.bot/channels)** — WhatsApp, Telegram, Slack, Discord, Google Chat, Signal, iMessage, BlueBubbles, Microsoft Teams, Matrix, Zalo, Zalo Personal, WebChat, macOS, iOS/Android.
-- **[Multi-agent routing](https://docs.clawd.bot/gateway/configuration)** — route inbound channels/accounts/peers to isolated agents (workspaces + per-agent sessions).
-- **[Voice Wake](https://docs.clawd.bot/nodes/voicewake) + [Talk Mode](https://docs.clawd.bot/nodes/talk)** — always-on speech for macOS/iOS/Android with ElevenLabs.
-- **[Live Canvas](https://docs.clawd.bot/platforms/mac/canvas)** — agent-driven visual workspace with [A2UI](https://docs.clawd.bot/platforms/mac/canvas#canvas-a2ui).
-- **[First-class tools](https://docs.clawd.bot/tools)** — browser, canvas, nodes, cron, sessions, and Discord/Slack actions.
-- **[Companion apps](https://docs.clawd.bot/platforms/macos)** — macOS menu bar app + iOS/Android [nodes](https://docs.clawd.bot/nodes).
-- **[Onboarding](https://docs.clawd.bot/start/wizard) + [skills](https://docs.clawd.bot/tools/skills)** — wizard-driven setup with bundled/managed/workspace skills.
+- **[Local-first Gateway](https://docs.molt.bot/gateway)** — single control plane for sessions, channels, tools, and events.
+- **[Multi-channel inbox](https://docs.molt.bot/channels)** — WhatsApp, Telegram, Slack, Discord, Google Chat, Signal, iMessage, BlueBubbles, Microsoft Teams, Matrix, Zalo, Zalo Personal, WebChat, macOS, iOS/Android.
+- **[Multi-agent routing](https://docs.molt.bot/gateway/configuration)** — route inbound channels/accounts/peers to isolated agents (workspaces + per-agent sessions).
+- **[Voice Wake](https://docs.molt.bot/nodes/voicewake) + [Talk Mode](https://docs.molt.bot/nodes/talk)** — always-on speech for macOS/iOS/Android with ElevenLabs.
+- **[Live Canvas](https://docs.molt.bot/platforms/mac/canvas)** — agent-driven visual workspace with [A2UI](https://docs.molt.bot/platforms/mac/canvas#canvas-a2ui).
+- **[First-class tools](https://docs.molt.bot/tools)** — browser, canvas, nodes, cron, sessions, and Discord/Slack actions.
+- **[Companion apps](https://docs.molt.bot/platforms/macos)** — macOS menu bar app + iOS/Android [nodes](https://docs.molt.bot/nodes).
+- **[Onboarding](https://docs.molt.bot/start/wizard) + [skills](https://docs.molt.bot/tools/skills)** — wizard-driven setup with bundled/managed/workspace skills.
## Star History
@@ -131,40 +132,40 @@ Run `clawdbot doctor` to surface risky/misconfigured DM policies.
## Everything we built so far
### Core platform
-- [Gateway WS control plane](https://docs.clawd.bot/gateway) with sessions, presence, config, cron, webhooks, [Control UI](https://docs.clawd.bot/web), and [Canvas host](https://docs.clawd.bot/platforms/mac/canvas#canvas-a2ui).
-- [CLI surface](https://docs.clawd.bot/tools/agent-send): gateway, agent, send, [wizard](https://docs.clawd.bot/start/wizard), and [doctor](https://docs.clawd.bot/gateway/doctor).
-- [Pi agent runtime](https://docs.clawd.bot/concepts/agent) in RPC mode with tool streaming and block streaming.
-- [Session model](https://docs.clawd.bot/concepts/session): `main` for direct chats, group isolation, activation modes, queue modes, reply-back. Group rules: [Groups](https://docs.clawd.bot/concepts/groups).
-- [Media pipeline](https://docs.clawd.bot/nodes/images): images/audio/video, transcription hooks, size caps, temp file lifecycle. Audio details: [Audio](https://docs.clawd.bot/nodes/audio).
+- [Gateway WS control plane](https://docs.molt.bot/gateway) with sessions, presence, config, cron, webhooks, [Control UI](https://docs.molt.bot/web), and [Canvas host](https://docs.molt.bot/platforms/mac/canvas#canvas-a2ui).
+- [CLI surface](https://docs.molt.bot/tools/agent-send): gateway, agent, send, [wizard](https://docs.molt.bot/start/wizard), and [doctor](https://docs.molt.bot/gateway/doctor).
+- [Pi agent runtime](https://docs.molt.bot/concepts/agent) in RPC mode with tool streaming and block streaming.
+- [Session model](https://docs.molt.bot/concepts/session): `main` for direct chats, group isolation, activation modes, queue modes, reply-back. Group rules: [Groups](https://docs.molt.bot/concepts/groups).
+- [Media pipeline](https://docs.molt.bot/nodes/images): images/audio/video, transcription hooks, size caps, temp file lifecycle. Audio details: [Audio](https://docs.molt.bot/nodes/audio).
### Channels
-- [Channels](https://docs.clawd.bot/channels): [WhatsApp](https://docs.clawd.bot/channels/whatsapp) (Baileys), [Telegram](https://docs.clawd.bot/channels/telegram) (grammY), [Slack](https://docs.clawd.bot/channels/slack) (Bolt), [Discord](https://docs.clawd.bot/channels/discord) (discord.js), [Google Chat](https://docs.clawd.bot/channels/googlechat) (Chat API), [Signal](https://docs.clawd.bot/channels/signal) (signal-cli), [iMessage](https://docs.clawd.bot/channels/imessage) (imsg), [BlueBubbles](https://docs.clawd.bot/channels/bluebubbles) (extension), [Microsoft Teams](https://docs.clawd.bot/channels/msteams) (extension), [Matrix](https://docs.clawd.bot/channels/matrix) (extension), [Zalo](https://docs.clawd.bot/channels/zalo) (extension), [Zalo Personal](https://docs.clawd.bot/channels/zalouser) (extension), [WebChat](https://docs.clawd.bot/web/webchat).
-- [Group routing](https://docs.clawd.bot/concepts/group-messages): mention gating, reply tags, per-channel chunking and routing. Channel rules: [Channels](https://docs.clawd.bot/channels).
+- [Channels](https://docs.molt.bot/channels): [WhatsApp](https://docs.molt.bot/channels/whatsapp) (Baileys), [Telegram](https://docs.molt.bot/channels/telegram) (grammY), [Slack](https://docs.molt.bot/channels/slack) (Bolt), [Discord](https://docs.molt.bot/channels/discord) (discord.js), [Google Chat](https://docs.molt.bot/channels/googlechat) (Chat API), [Signal](https://docs.molt.bot/channels/signal) (signal-cli), [iMessage](https://docs.molt.bot/channels/imessage) (imsg), [BlueBubbles](https://docs.molt.bot/channels/bluebubbles) (extension), [Microsoft Teams](https://docs.molt.bot/channels/msteams) (extension), [Matrix](https://docs.molt.bot/channels/matrix) (extension), [Zalo](https://docs.molt.bot/channels/zalo) (extension), [Zalo Personal](https://docs.molt.bot/channels/zalouser) (extension), [WebChat](https://docs.molt.bot/web/webchat).
+- [Group routing](https://docs.molt.bot/concepts/group-messages): mention gating, reply tags, per-channel chunking and routing. Channel rules: [Channels](https://docs.molt.bot/channels).
### Apps + nodes
-- [macOS app](https://docs.clawd.bot/platforms/macos): menu bar control plane, [Voice Wake](https://docs.clawd.bot/nodes/voicewake)/PTT, [Talk Mode](https://docs.clawd.bot/nodes/talk) overlay, [WebChat](https://docs.clawd.bot/web/webchat), debug tools, [remote gateway](https://docs.clawd.bot/gateway/remote) control.
-- [iOS node](https://docs.clawd.bot/platforms/ios): [Canvas](https://docs.clawd.bot/platforms/mac/canvas), [Voice Wake](https://docs.clawd.bot/nodes/voicewake), [Talk Mode](https://docs.clawd.bot/nodes/talk), camera, screen recording, Bonjour pairing.
-- [Android node](https://docs.clawd.bot/platforms/android): [Canvas](https://docs.clawd.bot/platforms/mac/canvas), [Talk Mode](https://docs.clawd.bot/nodes/talk), camera, screen recording, optional SMS.
-- [macOS node mode](https://docs.clawd.bot/nodes): system.run/notify + canvas/camera exposure.
+- [macOS app](https://docs.molt.bot/platforms/macos): menu bar control plane, [Voice Wake](https://docs.molt.bot/nodes/voicewake)/PTT, [Talk Mode](https://docs.molt.bot/nodes/talk) overlay, [WebChat](https://docs.molt.bot/web/webchat), debug tools, [remote gateway](https://docs.molt.bot/gateway/remote) control.
+- [iOS node](https://docs.molt.bot/platforms/ios): [Canvas](https://docs.molt.bot/platforms/mac/canvas), [Voice Wake](https://docs.molt.bot/nodes/voicewake), [Talk Mode](https://docs.molt.bot/nodes/talk), camera, screen recording, Bonjour pairing.
+- [Android node](https://docs.molt.bot/platforms/android): [Canvas](https://docs.molt.bot/platforms/mac/canvas), [Talk Mode](https://docs.molt.bot/nodes/talk), camera, screen recording, optional SMS.
+- [macOS node mode](https://docs.molt.bot/nodes): system.run/notify + canvas/camera exposure.
### Tools + automation
-- [Browser control](https://docs.clawd.bot/tools/browser): dedicated clawd Chrome/Chromium, snapshots, actions, uploads, profiles.
-- [Canvas](https://docs.clawd.bot/platforms/mac/canvas): [A2UI](https://docs.clawd.bot/platforms/mac/canvas#canvas-a2ui) push/reset, eval, snapshot.
-- [Nodes](https://docs.clawd.bot/nodes): camera snap/clip, screen record, [location.get](https://docs.clawd.bot/nodes/location-command), notifications.
-- [Cron + wakeups](https://docs.clawd.bot/automation/cron-jobs); [webhooks](https://docs.clawd.bot/automation/webhook); [Gmail Pub/Sub](https://docs.clawd.bot/automation/gmail-pubsub).
-- [Skills platform](https://docs.clawd.bot/tools/skills): bundled, managed, and workspace skills with install gating + UI.
+- [Browser control](https://docs.molt.bot/tools/browser): dedicated clawd Chrome/Chromium, snapshots, actions, uploads, profiles.
+- [Canvas](https://docs.molt.bot/platforms/mac/canvas): [A2UI](https://docs.molt.bot/platforms/mac/canvas#canvas-a2ui) push/reset, eval, snapshot.
+- [Nodes](https://docs.molt.bot/nodes): camera snap/clip, screen record, [location.get](https://docs.molt.bot/nodes/location-command), notifications.
+- [Cron + wakeups](https://docs.molt.bot/automation/cron-jobs); [webhooks](https://docs.molt.bot/automation/webhook); [Gmail Pub/Sub](https://docs.molt.bot/automation/gmail-pubsub).
+- [Skills platform](https://docs.molt.bot/tools/skills): bundled, managed, and workspace skills with install gating + UI.
### Runtime + safety
-- [Channel routing](https://docs.clawd.bot/concepts/channel-routing), [retry policy](https://docs.clawd.bot/concepts/retry), and [streaming/chunking](https://docs.clawd.bot/concepts/streaming).
-- [Presence](https://docs.clawd.bot/concepts/presence), [typing indicators](https://docs.clawd.bot/concepts/typing-indicators), and [usage tracking](https://docs.clawd.bot/concepts/usage-tracking).
-- [Models](https://docs.clawd.bot/concepts/models), [model failover](https://docs.clawd.bot/concepts/model-failover), and [session pruning](https://docs.clawd.bot/concepts/session-pruning).
-- [Security](https://docs.clawd.bot/gateway/security) and [troubleshooting](https://docs.clawd.bot/channels/troubleshooting).
+- [Channel routing](https://docs.molt.bot/concepts/channel-routing), [retry policy](https://docs.molt.bot/concepts/retry), and [streaming/chunking](https://docs.molt.bot/concepts/streaming).
+- [Presence](https://docs.molt.bot/concepts/presence), [typing indicators](https://docs.molt.bot/concepts/typing-indicators), and [usage tracking](https://docs.molt.bot/concepts/usage-tracking).
+- [Models](https://docs.molt.bot/concepts/models), [model failover](https://docs.molt.bot/concepts/model-failover), and [session pruning](https://docs.molt.bot/concepts/session-pruning).
+- [Security](https://docs.molt.bot/gateway/security) and [troubleshooting](https://docs.molt.bot/channels/troubleshooting).
### Ops + packaging
-- [Control UI](https://docs.clawd.bot/web) + [WebChat](https://docs.clawd.bot/web/webchat) served directly from the Gateway.
-- [Tailscale Serve/Funnel](https://docs.clawd.bot/gateway/tailscale) or [SSH tunnels](https://docs.clawd.bot/gateway/remote) with token/password auth.
-- [Nix mode](https://docs.clawd.bot/install/nix) for declarative config; [Docker](https://docs.clawd.bot/install/docker)-based installs.
-- [Doctor](https://docs.clawd.bot/gateway/doctor) migrations, [logging](https://docs.clawd.bot/logging).
+- [Control UI](https://docs.molt.bot/web) + [WebChat](https://docs.molt.bot/web/webchat) served directly from the Gateway.
+- [Tailscale Serve/Funnel](https://docs.molt.bot/gateway/tailscale) or [SSH tunnels](https://docs.molt.bot/gateway/remote) with token/password auth.
+- [Nix mode](https://docs.molt.bot/install/nix) for declarative config; [Docker](https://docs.molt.bot/install/docker)-based installs.
+- [Doctor](https://docs.molt.bot/gateway/doctor) migrations, [logging](https://docs.molt.bot/logging).
## How it works (short)
@@ -187,12 +188,12 @@ WhatsApp / Telegram / Slack / Discord / Google Chat / Signal / iMessage / BlueBu
## Key subsystems
-- **[Gateway WebSocket network](https://docs.clawd.bot/concepts/architecture)** — single WS control plane for clients, tools, and events (plus ops: [Gateway runbook](https://docs.clawd.bot/gateway)).
-- **[Tailscale exposure](https://docs.clawd.bot/gateway/tailscale)** — Serve/Funnel for the Gateway dashboard + WS (remote access: [Remote](https://docs.clawd.bot/gateway/remote)).
-- **[Browser control](https://docs.clawd.bot/tools/browser)** — clawd‑managed Chrome/Chromium with CDP control.
-- **[Canvas + A2UI](https://docs.clawd.bot/platforms/mac/canvas)** — agent‑driven visual workspace (A2UI host: [Canvas/A2UI](https://docs.clawd.bot/platforms/mac/canvas#canvas-a2ui)).
-- **[Voice Wake](https://docs.clawd.bot/nodes/voicewake) + [Talk Mode](https://docs.clawd.bot/nodes/talk)** — always‑on speech and continuous conversation.
-- **[Nodes](https://docs.clawd.bot/nodes)** — Canvas, camera snap/clip, screen record, `location.get`, notifications, plus macOS‑only `system.run`/`system.notify`.
+- **[Gateway WebSocket network](https://docs.molt.bot/concepts/architecture)** — single WS control plane for clients, tools, and events (plus ops: [Gateway runbook](https://docs.molt.bot/gateway)).
+- **[Tailscale exposure](https://docs.molt.bot/gateway/tailscale)** — Serve/Funnel for the Gateway dashboard + WS (remote access: [Remote](https://docs.molt.bot/gateway/remote)).
+- **[Browser control](https://docs.molt.bot/tools/browser)** — clawd‑managed Chrome/Chromium with CDP control.
+- **[Canvas + A2UI](https://docs.molt.bot/platforms/mac/canvas)** — agent‑driven visual workspace (A2UI host: [Canvas/A2UI](https://docs.molt.bot/platforms/mac/canvas#canvas-a2ui)).
+- **[Voice Wake](https://docs.molt.bot/nodes/voicewake) + [Talk Mode](https://docs.molt.bot/nodes/talk)** — always‑on speech and continuous conversation.
+- **[Nodes](https://docs.molt.bot/nodes)** — Canvas, camera snap/clip, screen record, `location.get`, notifications, plus macOS‑only `system.run`/`system.notify`.
## Tailscale access (Gateway dashboard)
@@ -208,7 +209,7 @@ Notes:
- Funnel refuses to start unless `gateway.auth.mode: "password"` is set.
- Optional: `gateway.tailscale.resetOnExit` to undo Serve/Funnel on shutdown.
-Details: [Tailscale guide](https://docs.clawd.bot/gateway/tailscale) · [Web surfaces](https://docs.clawd.bot/web)
+Details: [Tailscale guide](https://docs.molt.bot/gateway/tailscale) · [Web surfaces](https://docs.molt.bot/web)
## Remote Gateway (Linux is great)
@@ -218,7 +219,7 @@ It’s perfectly fine to run the Gateway on a small Linux instance. Clients (mac
- **Device nodes** run device‑local actions (`system.run`, camera, screen recording, notifications) via `node.invoke`.
In short: exec runs where the Gateway lives; device actions run where the device lives.
-Details: [Remote access](https://docs.clawd.bot/gateway/remote) · [Nodes](https://docs.clawd.bot/nodes) · [Security](https://docs.clawd.bot/gateway/security)
+Details: [Remote access](https://docs.molt.bot/gateway/remote) · [Nodes](https://docs.molt.bot/nodes) · [Security](https://docs.molt.bot/gateway/security)
## macOS permissions via the Gateway protocol
@@ -233,7 +234,7 @@ Elevated bash (host permissions) is separate from macOS TCC:
- Use `/elevated on|off` to toggle per‑session elevated access when enabled + allowlisted.
- Gateway persists the per‑session toggle via `sessions.patch` (WS method) alongside `thinkingLevel`, `verboseLevel`, `model`, `sendPolicy`, and `groupActivation`.
-Details: [Nodes](https://docs.clawd.bot/nodes) · [macOS app](https://docs.clawd.bot/platforms/macos) · [Gateway protocol](https://docs.clawd.bot/concepts/architecture)
+Details: [Nodes](https://docs.molt.bot/nodes) · [macOS app](https://docs.molt.bot/platforms/macos) · [Gateway protocol](https://docs.molt.bot/concepts/architecture)
## Agent to Agent (sessions_* tools)
@@ -242,7 +243,7 @@ Details: [Nodes](https://docs.clawd.bot/nodes) · [macOS app](https://docs.clawd
- `sessions_history` — fetch transcript logs for a session.
- `sessions_send` — message another session; optional reply‑back ping‑pong + announce step (`REPLY_SKIP`, `ANNOUNCE_SKIP`).
-Details: [Session tools](https://docs.clawd.bot/concepts/session-tool)
+Details: [Session tools](https://docs.molt.bot/concepts/session-tool)
## Skills registry (ClawdHub)
@@ -284,13 +285,13 @@ Note: signed builds required for macOS permissions to stick across rebuilds (see
- Voice trigger forwarding + Canvas surface.
- Controlled via `clawdbot nodes …`.
-Runbook: [iOS connect](https://docs.clawd.bot/platforms/ios).
+Runbook: [iOS connect](https://docs.molt.bot/platforms/ios).
### Android node (optional)
- Pairs via the same Bridge + pairing flow as iOS.
- Exposes Canvas, Camera, and Screen capture commands.
-- Runbook: [Android connect](https://docs.clawd.bot/platforms/android).
+- Runbook: [Android connect](https://docs.molt.bot/platforms/android).
## Agent workspace + skills
@@ -310,7 +311,7 @@ Minimal `~/.clawdbot/clawdbot.json` (model + defaults):
}
```
-[Full configuration reference (all keys + examples).](https://docs.clawd.bot/gateway/configuration)
+[Full configuration reference (all keys + examples).](https://docs.molt.bot/gateway/configuration)
## Security model (important)
@@ -318,15 +319,15 @@ Minimal `~/.clawdbot/clawdbot.json` (model + defaults):
- **Group/channel safety:** set `agents.defaults.sandbox.mode: "non-main"` to run **non‑main sessions** (groups/channels) inside per‑session Docker sandboxes; bash then runs in Docker for those sessions.
- **Sandbox defaults:** allowlist `bash`, `process`, `read`, `write`, `edit`, `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`; denylist `browser`, `canvas`, `nodes`, `cron`, `discord`, `gateway`.
-Details: [Security guide](https://docs.clawd.bot/gateway/security) · [Docker + sandboxing](https://docs.clawd.bot/install/docker) · [Sandbox config](https://docs.clawd.bot/gateway/configuration)
+Details: [Security guide](https://docs.molt.bot/gateway/security) · [Docker + sandboxing](https://docs.molt.bot/install/docker) · [Sandbox config](https://docs.molt.bot/gateway/configuration)
-### [WhatsApp](https://docs.clawd.bot/channels/whatsapp)
+### [WhatsApp](https://docs.molt.bot/channels/whatsapp)
- Link the device: `pnpm clawdbot channels login` (stores creds in `~/.clawdbot/credentials`).
- Allowlist who can talk to the assistant via `channels.whatsapp.allowFrom`.
- If `channels.whatsapp.groups` is set, it becomes a group allowlist; include `"*"` to allow all.
-### [Telegram](https://docs.clawd.bot/channels/telegram)
+### [Telegram](https://docs.molt.bot/channels/telegram)
- Set `TELEGRAM_BOT_TOKEN` or `channels.telegram.botToken` (env wins).
- Optional: set `channels.telegram.groups` (with `channels.telegram.groups."*".requireMention`); when set, it is a group allowlist (include `"*"` to allow all). Also `channels.telegram.allowFrom` or `channels.telegram.webhookUrl` as needed.
@@ -341,11 +342,11 @@ Details: [Security guide](https://docs.clawd.bot/gateway/security) · [Docker +
}
```
-### [Slack](https://docs.clawd.bot/channels/slack)
+### [Slack](https://docs.molt.bot/channels/slack)
- Set `SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` (or `channels.slack.botToken` + `channels.slack.appToken`).
-### [Discord](https://docs.clawd.bot/channels/discord)
+### [Discord](https://docs.molt.bot/channels/discord)
- Set `DISCORD_BOT_TOKEN` or `channels.discord.token` (env wins).
- Optional: set `commands.native`, `commands.text`, or `commands.useAccessGroups`, plus `channels.discord.dm.allowFrom`, `channels.discord.guilds`, or `channels.discord.mediaMaxMb` as needed.
@@ -360,21 +361,21 @@ Details: [Security guide](https://docs.clawd.bot/gateway/security) · [Docker +
}
```
-### [Signal](https://docs.clawd.bot/channels/signal)
+### [Signal](https://docs.molt.bot/channels/signal)
- Requires `signal-cli` and a `channels.signal` config section.
-### [iMessage](https://docs.clawd.bot/channels/imessage)
+### [iMessage](https://docs.molt.bot/channels/imessage)
- macOS only; Messages must be signed in.
- If `channels.imessage.groups` is set, it becomes a group allowlist; include `"*"` to allow all.
-### [Microsoft Teams](https://docs.clawd.bot/channels/msteams)
+### [Microsoft Teams](https://docs.molt.bot/channels/msteams)
- Configure a Teams app + Bot Framework, then add a `msteams` config section.
- Allowlist who can talk via `msteams.allowFrom`; group access via `msteams.groupAllowFrom` or `msteams.groupPolicy: "open"`.
-### [WebChat](https://docs.clawd.bot/web/webchat)
+### [WebChat](https://docs.molt.bot/web/webchat)
- Uses the Gateway WebSocket; no separate WebChat port/config.
@@ -392,69 +393,69 @@ Browser control (optional):
## Docs
Use these when you’re past the onboarding flow and want the deeper reference.
-- [Start with the docs index for navigation and “what’s where.”](https://docs.clawd.bot)
-- [Read the architecture overview for the gateway + protocol model.](https://docs.clawd.bot/concepts/architecture)
-- [Use the full configuration reference when you need every key and example.](https://docs.clawd.bot/gateway/configuration)
-- [Run the Gateway by the book with the operational runbook.](https://docs.clawd.bot/gateway)
-- [Learn how the Control UI/Web surfaces work and how to expose them safely.](https://docs.clawd.bot/web)
-- [Understand remote access over SSH tunnels or tailnets.](https://docs.clawd.bot/gateway/remote)
-- [Follow the onboarding wizard flow for a guided setup.](https://docs.clawd.bot/start/wizard)
-- [Wire external triggers via the webhook surface.](https://docs.clawd.bot/automation/webhook)
-- [Set up Gmail Pub/Sub triggers.](https://docs.clawd.bot/automation/gmail-pubsub)
-- [Learn the macOS menu bar companion details.](https://docs.clawd.bot/platforms/mac/menu-bar)
-- [Platform guides: Windows (WSL2)](https://docs.clawd.bot/platforms/windows), [Linux](https://docs.clawd.bot/platforms/linux), [macOS](https://docs.clawd.bot/platforms/macos), [iOS](https://docs.clawd.bot/platforms/ios), [Android](https://docs.clawd.bot/platforms/android)
-- [Debug common failures with the troubleshooting guide.](https://docs.clawd.bot/channels/troubleshooting)
-- [Review security guidance before exposing anything.](https://docs.clawd.bot/gateway/security)
+- [Start with the docs index for navigation and “what’s where.”](https://docs.molt.bot)
+- [Read the architecture overview for the gateway + protocol model.](https://docs.molt.bot/concepts/architecture)
+- [Use the full configuration reference when you need every key and example.](https://docs.molt.bot/gateway/configuration)
+- [Run the Gateway by the book with the operational runbook.](https://docs.molt.bot/gateway)
+- [Learn how the Control UI/Web surfaces work and how to expose them safely.](https://docs.molt.bot/web)
+- [Understand remote access over SSH tunnels or tailnets.](https://docs.molt.bot/gateway/remote)
+- [Follow the onboarding wizard flow for a guided setup.](https://docs.molt.bot/start/wizard)
+- [Wire external triggers via the webhook surface.](https://docs.molt.bot/automation/webhook)
+- [Set up Gmail Pub/Sub triggers.](https://docs.molt.bot/automation/gmail-pubsub)
+- [Learn the macOS menu bar companion details.](https://docs.molt.bot/platforms/mac/menu-bar)
+- [Platform guides: Windows (WSL2)](https://docs.molt.bot/platforms/windows), [Linux](https://docs.molt.bot/platforms/linux), [macOS](https://docs.molt.bot/platforms/macos), [iOS](https://docs.molt.bot/platforms/ios), [Android](https://docs.molt.bot/platforms/android)
+- [Debug common failures with the troubleshooting guide.](https://docs.molt.bot/channels/troubleshooting)
+- [Review security guidance before exposing anything.](https://docs.molt.bot/gateway/security)
## Advanced docs (discovery + control)
-- [Discovery + transports](https://docs.clawd.bot/gateway/discovery)
-- [Bonjour/mDNS](https://docs.clawd.bot/gateway/bonjour)
-- [Gateway pairing](https://docs.clawd.bot/gateway/pairing)
-- [Remote gateway README](https://docs.clawd.bot/gateway/remote-gateway-readme)
-- [Control UI](https://docs.clawd.bot/web/control-ui)
-- [Dashboard](https://docs.clawd.bot/web/dashboard)
+- [Discovery + transports](https://docs.molt.bot/gateway/discovery)
+- [Bonjour/mDNS](https://docs.molt.bot/gateway/bonjour)
+- [Gateway pairing](https://docs.molt.bot/gateway/pairing)
+- [Remote gateway README](https://docs.molt.bot/gateway/remote-gateway-readme)
+- [Control UI](https://docs.molt.bot/web/control-ui)
+- [Dashboard](https://docs.molt.bot/web/dashboard)
## Operations & troubleshooting
-- [Health checks](https://docs.clawd.bot/gateway/health)
-- [Gateway lock](https://docs.clawd.bot/gateway/gateway-lock)
-- [Background process](https://docs.clawd.bot/gateway/background-process)
-- [Browser troubleshooting (Linux)](https://docs.clawd.bot/tools/browser-linux-troubleshooting)
-- [Logging](https://docs.clawd.bot/logging)
+- [Health checks](https://docs.molt.bot/gateway/health)
+- [Gateway lock](https://docs.molt.bot/gateway/gateway-lock)
+- [Background process](https://docs.molt.bot/gateway/background-process)
+- [Browser troubleshooting (Linux)](https://docs.molt.bot/tools/browser-linux-troubleshooting)
+- [Logging](https://docs.molt.bot/logging)
## Deep dives
-- [Agent loop](https://docs.clawd.bot/concepts/agent-loop)
-- [Presence](https://docs.clawd.bot/concepts/presence)
-- [TypeBox schemas](https://docs.clawd.bot/concepts/typebox)
-- [RPC adapters](https://docs.clawd.bot/reference/rpc)
-- [Queue](https://docs.clawd.bot/concepts/queue)
+- [Agent loop](https://docs.molt.bot/concepts/agent-loop)
+- [Presence](https://docs.molt.bot/concepts/presence)
+- [TypeBox schemas](https://docs.molt.bot/concepts/typebox)
+- [RPC adapters](https://docs.molt.bot/reference/rpc)
+- [Queue](https://docs.molt.bot/concepts/queue)
## Workspace & skills
-- [Skills config](https://docs.clawd.bot/tools/skills-config)
-- [Default AGENTS](https://docs.clawd.bot/reference/AGENTS.default)
-- [Templates: AGENTS](https://docs.clawd.bot/reference/templates/AGENTS)
-- [Templates: BOOTSTRAP](https://docs.clawd.bot/reference/templates/BOOTSTRAP)
-- [Templates: IDENTITY](https://docs.clawd.bot/reference/templates/IDENTITY)
-- [Templates: SOUL](https://docs.clawd.bot/reference/templates/SOUL)
-- [Templates: TOOLS](https://docs.clawd.bot/reference/templates/TOOLS)
-- [Templates: USER](https://docs.clawd.bot/reference/templates/USER)
+- [Skills config](https://docs.molt.bot/tools/skills-config)
+- [Default AGENTS](https://docs.molt.bot/reference/AGENTS.default)
+- [Templates: AGENTS](https://docs.molt.bot/reference/templates/AGENTS)
+- [Templates: BOOTSTRAP](https://docs.molt.bot/reference/templates/BOOTSTRAP)
+- [Templates: IDENTITY](https://docs.molt.bot/reference/templates/IDENTITY)
+- [Templates: SOUL](https://docs.molt.bot/reference/templates/SOUL)
+- [Templates: TOOLS](https://docs.molt.bot/reference/templates/TOOLS)
+- [Templates: USER](https://docs.molt.bot/reference/templates/USER)
## Platform internals
-- [macOS dev setup](https://docs.clawd.bot/platforms/mac/dev-setup)
-- [macOS menu bar](https://docs.clawd.bot/platforms/mac/menu-bar)
-- [macOS voice wake](https://docs.clawd.bot/platforms/mac/voicewake)
-- [iOS node](https://docs.clawd.bot/platforms/ios)
-- [Android node](https://docs.clawd.bot/platforms/android)
-- [Windows (WSL2)](https://docs.clawd.bot/platforms/windows)
-- [Linux app](https://docs.clawd.bot/platforms/linux)
+- [macOS dev setup](https://docs.molt.bot/platforms/mac/dev-setup)
+- [macOS menu bar](https://docs.molt.bot/platforms/mac/menu-bar)
+- [macOS voice wake](https://docs.molt.bot/platforms/mac/voicewake)
+- [iOS node](https://docs.molt.bot/platforms/ios)
+- [Android node](https://docs.molt.bot/platforms/android)
+- [Windows (WSL2)](https://docs.molt.bot/platforms/windows)
+- [Linux app](https://docs.molt.bot/platforms/linux)
## Email hooks (Gmail)
-- [docs.clawd.bot/gmail-pubsub](https://docs.clawd.bot/automation/gmail-pubsub)
+- [docs.molt.bot/gmail-pubsub](https://docs.molt.bot/automation/gmail-pubsub)
## Clawd
diff --git a/SECURITY.md b/SECURITY.md
index 5bc9c9112..1d0849a54 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -11,7 +11,7 @@ If you believe you've found a security issue in Clawdbot, please report it priva
For threat model + hardening guidance (including `clawdbot security audit --deep` and `--fix`), see:
-- `https://docs.clawd.bot/gateway/security`
+- `https://docs.molt.bot/gateway/security`
### Web Interface Safety
diff --git a/appcast.xml b/appcast.xml
index 8158ac244..df325a7b6 100644
--- a/appcast.xml
+++ b/appcast.xml
@@ -28,28 +28,28 @@
Clawdbot 2026.1.24
Highlights
-Providers: Ollama discovery + docs; Venice guide upgrades + cross-links. (#1606) Thanks @abhaymundhara. https://docs.clawd.bot/providers/ollama https://docs.clawd.bot/providers/venice
+Providers: Ollama discovery + docs; Venice guide upgrades + cross-links. (#1606) Thanks @abhaymundhara. https://docs.molt.bot/providers/ollama https://docs.molt.bot/providers/venice
Channels: LINE plugin (Messaging API) with rich replies + quick replies. (#1630) Thanks @plum-dawg.
-TTS: Edge fallback (keyless) + /tts auto modes. (#1668, #1667) Thanks @steipete, @sebslight. https://docs.clawd.bot/tts
-Exec approvals: approve in-chat via /approve across all channels (including plugins). (#1621) Thanks @czekaj. https://docs.clawd.bot/tools/exec-approvals https://docs.clawd.bot/tools/slash-commands
-Telegram: DM topics as separate sessions + outbound link preview toggle. (#1597, #1700) Thanks @rohannagpal, @zerone0x. https://docs.clawd.bot/channels/telegram
+TTS: Edge fallback (keyless) + /tts auto modes. (#1668, #1667) Thanks @steipete, @sebslight. https://docs.molt.bot/tts
+Exec approvals: approve in-chat via /approve across all channels (including plugins). (#1621) Thanks @czekaj. https://docs.molt.bot/tools/exec-approvals https://docs.molt.bot/tools/slash-commands
+Telegram: DM topics as separate sessions + outbound link preview toggle. (#1597, #1700) Thanks @rohannagpal, @zerone0x. https://docs.molt.bot/channels/telegram
Changes
Channels: add LINE plugin (Messaging API) with rich replies, quick replies, and plugin HTTP registry. (#1630) Thanks @plum-dawg.
-TTS: add Edge TTS provider fallback, defaulting to keyless Edge with MP3 retry on format failures. (#1668) Thanks @steipete. https://docs.clawd.bot/tts
-TTS: add auto mode enum (off/always/inbound/tagged) with per-session /tts override. (#1667) Thanks @sebslight. https://docs.clawd.bot/tts
+TTS: add Edge TTS provider fallback, defaulting to keyless Edge with MP3 retry on format failures. (#1668) Thanks @steipete. https://docs.molt.bot/tts
+TTS: add auto mode enum (off/always/inbound/tagged) with per-session /tts override. (#1667) Thanks @sebslight. https://docs.molt.bot/tts
Telegram: treat DM topics as separate sessions and keep DM history limits stable with thread suffixes. (#1597) Thanks @rohannagpal.
-Telegram: add channels.telegram.linkPreview to toggle outbound link previews. (#1700) Thanks @zerone0x. https://docs.clawd.bot/channels/telegram
-Web search: add Brave freshness filter parameter for time-scoped results. (#1688) Thanks @JonUleis. https://docs.clawd.bot/tools/web
+Telegram: add channels.telegram.linkPreview to toggle outbound link previews. (#1700) Thanks @zerone0x. https://docs.molt.bot/channels/telegram
+Web search: add Brave freshness filter parameter for time-scoped results. (#1688) Thanks @JonUleis. https://docs.molt.bot/tools/web
UI: refresh Control UI dashboard design system (typography, colors, spacing). (#1786) Thanks @mousberg.
-Exec approvals: forward approval prompts to chat with /approve for all channels (including plugins). (#1621) Thanks @czekaj. https://docs.clawd.bot/tools/exec-approvals https://docs.clawd.bot/tools/slash-commands
+Exec approvals: forward approval prompts to chat with /approve for all channels (including plugins). (#1621) Thanks @czekaj. https://docs.molt.bot/tools/exec-approvals https://docs.molt.bot/tools/slash-commands
Gateway: expose config.patch in the gateway tool with safe partial updates + restart sentinel. (#1653) Thanks @Glucksberg.
-Diagnostics: add diagnostic flags for targeted debug logs (config + env override). https://docs.clawd.bot/diagnostics/flags
+Diagnostics: add diagnostic flags for targeted debug logs (config + env override). https://docs.molt.bot/diagnostics/flags
Docs: expand FAQ (migration, scheduling, concurrency, model recommendations, OpenAI subscription auth, Pi sizing, hackable install, docs SSL workaround).
Docs: add verbose installer troubleshooting guidance.
Docs: add macOS VM guide with local/hosted options + VPS/nodes guidance. (#1693) Thanks @f-trycua.
-Docs: add Bedrock EC2 instance role setup + IAM steps. (#1625) Thanks @sergical. https://docs.clawd.bot/bedrock
+Docs: add Bedrock EC2 instance role setup + IAM steps. (#1625) Thanks @sergical. https://docs.molt.bot/bedrock
Docs: update Fly.io guide notes.
Dev: add prek pre-commit hooks + dependabot config for weekly updates. (#1720) Thanks @dguido.
@@ -61,10 +61,10 @@
Web UI: hide internal message_id hints in chat bubbles.
Gateway: allow Control UI token-only auth to skip device pairing even when device identity is present (gateway.controlUi.allowInsecureAuth). (#1679) Thanks @steipete.
Matrix: decrypt E2EE media attachments with preflight size guard. (#1744) Thanks @araa47.
-BlueBubbles: route phone-number targets to DMs, avoid leaking routing IDs, and auto-create missing DMs (Private API required). (#1751) Thanks @tyler6204. https://docs.clawd.bot/channels/bluebubbles
+BlueBubbles: route phone-number targets to DMs, avoid leaking routing IDs, and auto-create missing DMs (Private API required). (#1751) Thanks @tyler6204. https://docs.molt.bot/channels/bluebubbles
BlueBubbles: keep part-index GUIDs in reply tags when short IDs are missing.
Signal: repair reaction sends (group/UUID targets + CLI author flags). (#1651) Thanks @vilkasdev.
-Signal: add configurable signal-cli startup timeout + external daemon mode docs. (#1677) https://docs.clawd.bot/channels/signal
+Signal: add configurable signal-cli startup timeout + external daemon mode docs. (#1677) https://docs.molt.bot/channels/signal
Telegram: set fetch duplex="half" for uploads on Node 22 to avoid sendPhoto failures. (#1684) Thanks @commdata2338.
Telegram: use wrapped fetch for long-polling on Node to normalize AbortSignal handling. (#1639)
Telegram: honor per-account proxy for outbound API calls. (#1774) Thanks @radek-paclt.
diff --git a/apps/macos/Sources/Clawdbot/CLIInstaller.swift b/apps/macos/Sources/Clawdbot/CLIInstaller.swift
index b9113e27a..c020ccef9 100644
--- a/apps/macos/Sources/Clawdbot/CLIInstaller.swift
+++ b/apps/macos/Sources/Clawdbot/CLIInstaller.swift
@@ -70,7 +70,7 @@ enum CLIInstaller {
let escapedVersion = self.shellEscape(version)
let escapedPrefix = self.shellEscape(prefix)
let script = """
- curl -fsSL https://clawd.bot/install-cli.sh | \
+ curl -fsSL https://molt.bot/install-cli.sh | \
bash -s -- --json --no-onboard --prefix \(escapedPrefix) --version \(escapedVersion)
"""
return ["/bin/bash", "-lc", script]
diff --git a/assets/chrome-extension/options.html b/assets/chrome-extension/options.html
index f66608f43..7cd4e27ce 100644
--- a/assets/chrome-extension/options.html
+++ b/assets/chrome-extension/options.html
@@ -171,7 +171,7 @@
Start Clawdbot’s browser relay on this machine (Gateway or node host), then click the toolbar button again.
- Full guide (install, remote Gateway, security): docs.clawd.bot/tools/chrome-extension
+ Full guide (install, remote Gateway, security): docs.molt.bot/tools/chrome-extension
diff --git a/docker-setup.sh b/docker-setup.sh
index 776541827..906bbb09c 100755
--- a/docker-setup.sh
+++ b/docker-setup.sh
@@ -191,7 +191,7 @@ echo "Telegram (bot token):"
echo " ${COMPOSE_HINT} run --rm clawdbot-cli providers add --provider telegram --token "
echo "Discord (bot token):"
echo " ${COMPOSE_HINT} run --rm clawdbot-cli providers add --provider discord --token "
-echo "Docs: https://docs.clawd.bot/providers"
+echo "Docs: https://docs.molt.bot/providers"
echo ""
echo "==> Starting gateway"
diff --git a/docs/CNAME b/docs/CNAME
index afc13c7fe..43ca6ac7f 100644
--- a/docs/CNAME
+++ b/docs/CNAME
@@ -1 +1 @@
-clawdbot.com
+docs.molt.bot
diff --git a/docs/channels/googlechat.md b/docs/channels/googlechat.md
index 00cfa7c72..298e6f9ab 100644
--- a/docs/channels/googlechat.md
+++ b/docs/channels/googlechat.md
@@ -25,7 +25,7 @@ Status: ready for DMs + spaces via Google Chat API webhooks (HTTP only).
5) Create a Google Chat app in the [Google Cloud Console Chat Configuration](https://console.cloud.google.com/apis/api/chat.googleapis.com/hangouts-chat):
- Fill in the **Application info**:
- **App name**: (e.g. `Clawdbot`)
- - **Avatar URL**: (e.g. `https://clawd.bot/logo.png`)
+ - **Avatar URL**: (e.g. `https://molt.bot/logo.png`)
- **Description**: (e.g. `Personal AI Assistant`)
- Enable **Interactive features**.
- Under **Functionality**, check **Join spaces and group conversations**.
diff --git a/docs/cli/browser.md b/docs/cli/browser.md
index 6d54b8a10..d0f1d5a7d 100644
--- a/docs/cli/browser.md
+++ b/docs/cli/browser.md
@@ -53,7 +53,7 @@ clawdbot browser --browser-profile work tabs
```bash
clawdbot browser tabs
-clawdbot browser open https://docs.clawd.bot
+clawdbot browser open https://docs.molt.bot
clawdbot browser focus
clawdbot browser close
```
diff --git a/docs/cli/hooks.md b/docs/cli/hooks.md
index 825550b05..ee867be69 100644
--- a/docs/cli/hooks.md
+++ b/docs/cli/hooks.md
@@ -85,7 +85,7 @@ Details:
Source: clawdbot-bundled
Path: /path/to/clawdbot/hooks/bundled/session-memory/HOOK.md
Handler: /path/to/clawdbot/hooks/bundled/session-memory/handler.ts
- Homepage: https://docs.clawd.bot/hooks#session-memory
+ Homepage: https://docs.molt.bot/hooks#session-memory
Events: command:new
Requirements:
diff --git a/docs/concepts/markdown-formatting.md b/docs/concepts/markdown-formatting.md
index 91799a3e9..5c92669d2 100644
--- a/docs/concepts/markdown-formatting.md
+++ b/docs/concepts/markdown-formatting.md
@@ -39,7 +39,7 @@ stay consistent across channels.
Input Markdown:
```markdown
-Hello **world** — see [docs](https://docs.clawd.bot).
+Hello **world** — see [docs](https://docs.molt.bot).
```
IR (schematic):
@@ -51,7 +51,7 @@ IR (schematic):
{ "start": 6, "end": 11, "style": "bold" }
],
"links": [
- { "start": 19, "end": 23, "href": "https://docs.clawd.bot" }
+ { "start": 19, "end": 23, "href": "https://docs.molt.bot" }
]
}
```
diff --git a/docs/gateway/security/index.md b/docs/gateway/security/index.md
index 5f5990b9e..9b9090d36 100644
--- a/docs/gateway/security/index.md
+++ b/docs/gateway/security/index.md
@@ -750,7 +750,7 @@ Mario asking for find ~
Found a vulnerability in Clawdbot? Please report responsibly:
-1. Email: security@clawd.bot
+1. Email: security@molt.bot
2. Don't post publicly until fixed
3. We'll credit you (unless you prefer anonymity)
diff --git a/docs/gateway/troubleshooting.md b/docs/gateway/troubleshooting.md
index 697654b80..4f192b40f 100644
--- a/docs/gateway/troubleshooting.md
+++ b/docs/gateway/troubleshooting.md
@@ -501,12 +501,12 @@ upgrades in place and rewrites the gateway service to point at the new install.
Switch **to git install**:
```bash
-curl -fsSL https://clawd.bot/install.sh | bash -s -- --install-method git --no-onboard
+curl -fsSL https://molt.bot/install.sh | bash -s -- --install-method git --no-onboard
```
Switch **to npm global**:
```bash
-curl -fsSL https://clawd.bot/install.sh | bash
+curl -fsSL https://molt.bot/install.sh | bash
```
Notes:
diff --git a/docs/help/faq.md b/docs/help/faq.md
index 554597165..55db3e637 100644
--- a/docs/help/faq.md
+++ b/docs/help/faq.md
@@ -18,7 +18,7 @@ Quick answers plus deeper troubleshooting for real-world setups (local dev, VPS,
- [It is stuck on "wake up my friend" / onboarding will not hatch. What now?](#it-is-stuck-on-wake-up-my-friend-onboarding-will-not-hatch-what-now)
- [Can I migrate my setup to a new machine (Mac mini) without redoing onboarding?](#can-i-migrate-my-setup-to-a-new-machine-mac-mini-without-redoing-onboarding)
- [Where do I see what’s new in the latest version?](#where-do-i-see-whats-new-in-the-latest-version)
- - [I can't access docs.clawd.bot (SSL error). What now?](#i-cant-access-docsclawdbot-ssl-error-what-now)
+ - [I can't access docs.molt.bot (SSL error). What now?](#i-cant-access-docsclawdbot-ssl-error-what-now)
- [What’s the difference between stable and beta?](#whats-the-difference-between-stable-and-beta)
- [How do I install the beta version, and what’s the difference between beta and dev?](#how-do-i-install-the-beta-version-and-whats-the-difference-between-beta-and-dev)
- [How do I try the latest bits?](#how-do-i-try-the-latest-bits)
@@ -258,7 +258,7 @@ setup (PATH, services, permissions, auth files). Give them the **full source che
the hackable (git) install:
```bash
-curl -fsSL https://clawd.bot/install.sh | bash -s -- --install-method git
+curl -fsSL https://molt.bot/install.sh | bash -s -- --install-method git
```
This installs Clawdbot **from a git checkout**, so the agent can read the code + docs and
@@ -296,7 +296,7 @@ Install docs: [Install](/install), [Installer flags](/install/installer), [Updat
The repo recommends running from source and using the onboarding wizard:
```bash
-curl -fsSL https://clawd.bot/install.sh | bash
+curl -fsSL https://molt.bot/install.sh | bash
clawdbot onboard --install-daemon
```
@@ -416,8 +416,8 @@ section is the latest shipped version. Entries are grouped by **Highlights**, **
### I cant access docsclawdbot SSL error What now
-Some Comcast/Xfinity connections incorrectly block `docs.clawd.bot` via Xfinity
-Advanced Security. Disable it or allowlist `docs.clawd.bot`, then retry. More
+Some Comcast/Xfinity connections incorrectly block `docs.molt.bot` via Xfinity
+Advanced Security. Disable it or allowlist `docs.molt.bot`, then retry. More
detail: [Troubleshooting](/help/troubleshooting#docsclawdbot-shows-an-ssl-error-comcastxfinity).
Please help us unblock it by reporting here: https://spa.xfinity.com/check_url_status.
@@ -445,15 +445,15 @@ https://github.com/clawdbot/clawdbot/blob/main/CHANGELOG.md
One‑liners (macOS/Linux):
```bash
-curl -fsSL --proto '=https' --tlsv1.2 https://clawd.bot/install.sh | bash -s -- --beta
+curl -fsSL --proto '=https' --tlsv1.2 https://molt.bot/install.sh | bash -s -- --beta
```
```bash
-curl -fsSL --proto '=https' --tlsv1.2 https://clawd.bot/install.sh | bash -s -- --install-method git
+curl -fsSL --proto '=https' --tlsv1.2 https://molt.bot/install.sh | bash -s -- --install-method git
```
Windows installer (PowerShell):
-https://clawd.bot/install.ps1
+https://molt.bot/install.ps1
More detail: [Development channels](/install/development-channels) and [Installer flags](/install/installer).
@@ -478,7 +478,7 @@ This switches to the `main` branch and updates from source.
2) **Hackable install (from the installer site):**
```bash
-curl -fsSL https://clawd.bot/install.sh | bash -s -- --install-method git
+curl -fsSL https://molt.bot/install.sh | bash -s -- --install-method git
```
That gives you a local repo you can edit, then update via git.
@@ -498,19 +498,19 @@ Docs: [Update](/cli/update), [Development channels](/install/development-channel
Re-run the installer with **verbose output**:
```bash
-curl -fsSL https://clawd.bot/install.sh | bash -s -- --verbose
+curl -fsSL https://molt.bot/install.sh | bash -s -- --verbose
```
Beta install with verbose:
```bash
-curl -fsSL https://clawd.bot/install.sh | bash -s -- --beta --verbose
+curl -fsSL https://molt.bot/install.sh | bash -s -- --beta --verbose
```
For a hackable (git) install:
```bash
-curl -fsSL https://clawd.bot/install.sh | bash -s -- --install-method git --verbose
+curl -fsSL https://molt.bot/install.sh | bash -s -- --install-method git --verbose
```
More options: [Installer flags](/install/installer).
@@ -541,7 +541,7 @@ Use the **hackable (git) install** so you have the full source and docs locally,
your bot (or Claude/Codex) *from that folder* so it can read the repo and answer precisely.
```bash
-curl -fsSL https://clawd.bot/install.sh | bash -s -- --install-method git
+curl -fsSL https://molt.bot/install.sh | bash -s -- --install-method git
```
More detail: [Install](/install) and [Installer flags](/install/installer).
@@ -946,7 +946,7 @@ Advantages:
- **Always-on Gateway** (run on a VPS, interact from anywhere)
- **Nodes** for local browser/screen/camera/exec
-Showcase: https://clawd.bot/showcase
+Showcase: https://molt.bot/showcase
## Skills and automation
diff --git a/docs/help/troubleshooting.md b/docs/help/troubleshooting.md
index 4a7d2ced3..b142de4eb 100644
--- a/docs/help/troubleshooting.md
+++ b/docs/help/troubleshooting.md
@@ -38,13 +38,13 @@ Almost always a Node/npm PATH issue. Start here:
Re-run the installer in verbose mode to see the full trace and npm output:
```bash
-curl -fsSL https://clawd.bot/install.sh | bash -s -- --verbose
+curl -fsSL https://molt.bot/install.sh | bash -s -- --verbose
```
For beta installs:
```bash
-curl -fsSL https://clawd.bot/install.sh | bash -s -- --beta --verbose
+curl -fsSL https://molt.bot/install.sh | bash -s -- --beta --verbose
```
You can also set `CLAWDBOT_VERBOSE=1` instead of the flag.
@@ -59,10 +59,10 @@ You can also set `CLAWDBOT_VERBOSE=1` instead of the flag.
- [Gateway troubleshooting](/gateway/troubleshooting)
- [Control UI](/web/control-ui#insecure-http)
-### `docs.clawd.bot` shows an SSL error (Comcast/Xfinity)
+### `docs.molt.bot` shows an SSL error (Comcast/Xfinity)
-Some Comcast/Xfinity connections block `docs.clawd.bot` via Xfinity Advanced Security.
-Disable Advanced Security or add `docs.clawd.bot` to the allowlist, then retry.
+Some Comcast/Xfinity connections block `docs.molt.bot` via Xfinity Advanced Security.
+Disable Advanced Security or add `docs.molt.bot` to the allowlist, then retry.
- Xfinity Advanced Security help: https://www.xfinity.com/support/articles/using-xfinity-xfi-advanced-security
- Quick sanity checks: try a mobile hotspot or VPN to confirm it’s ISP-level filtering
diff --git a/docs/hooks.md b/docs/hooks.md
index 9870dda88..880c31f19 100644
--- a/docs/hooks.md
+++ b/docs/hooks.md
@@ -124,7 +124,7 @@ The `HOOK.md` file contains metadata in YAML frontmatter plus Markdown documenta
---
name: my-hook
description: "Short description of what this hook does"
-homepage: https://docs.clawd.bot/hooks#my-hook
+homepage: https://docs.molt.bot/hooks#my-hook
metadata: {"clawdbot":{"emoji":"🔗","events":["command:new"],"requires":{"bins":["node"]}}}
---
diff --git a/docs/install/index.md b/docs/install/index.md
index 7ccab0ca8..f5f5b7476 100644
--- a/docs/install/index.md
+++ b/docs/install/index.md
@@ -12,13 +12,13 @@ Use the installer unless you have a reason not to. It sets up the CLI and runs o
## Quick install (recommended)
```bash
-curl -fsSL https://clawd.bot/install.sh | bash
+curl -fsSL https://molt.bot/install.sh | bash
```
Windows (PowerShell):
```powershell
-iwr -useb https://clawd.bot/install.ps1 | iex
+iwr -useb https://molt.bot/install.ps1 | iex
```
Next step (if you skipped onboarding):
@@ -40,13 +40,13 @@ clawdbot onboard --install-daemon
Installs `clawdbot` globally via npm and runs onboarding.
```bash
-curl -fsSL https://clawd.bot/install.sh | bash
+curl -fsSL https://molt.bot/install.sh | bash
```
Installer flags:
```bash
-curl -fsSL https://clawd.bot/install.sh | bash -s -- --help
+curl -fsSL https://molt.bot/install.sh | bash -s -- --help
```
Details: [Installer internals](/install/installer).
@@ -54,7 +54,7 @@ Details: [Installer internals](/install/installer).
Non-interactive (skip onboarding):
```bash
-curl -fsSL https://clawd.bot/install.sh | bash -s -- --no-onboard
+curl -fsSL https://molt.bot/install.sh | bash -s -- --no-onboard
```
### 2) Global install (manual)
@@ -123,10 +123,10 @@ The installer supports two methods:
```bash
# Explicit npm
-curl -fsSL https://clawd.bot/install.sh | bash -s -- --install-method npm
+curl -fsSL https://molt.bot/install.sh | bash -s -- --install-method npm
# Install from GitHub (source checkout)
-curl -fsSL https://clawd.bot/install.sh | bash -s -- --install-method git
+curl -fsSL https://molt.bot/install.sh | bash -s -- --install-method git
```
Common flags:
diff --git a/docs/install/installer.md b/docs/install/installer.md
index 7cd485756..d60f972d4 100644
--- a/docs/install/installer.md
+++ b/docs/install/installer.md
@@ -1,29 +1,29 @@
---
summary: "How the installer scripts work (install.sh + install-cli.sh), flags, and automation"
read_when:
- - You want to understand `clawd.bot/install.sh`
+ - You want to understand `molt.bot/install.sh`
- You want to automate installs (CI / headless)
- You want to install from a GitHub checkout
---
# Installer internals
-Clawdbot ships two installer scripts (served from `clawd.bot`):
+Clawdbot ships two installer scripts (served from `molt.bot`):
-- `https://clawd.bot/install.sh` — “recommended” installer (global npm install by default; can also install from a GitHub checkout)
-- `https://clawd.bot/install-cli.sh` — non-root-friendly CLI installer (installs into a prefix with its own Node)
- - `https://clawd.bot/install.ps1` — Windows PowerShell installer (npm by default; optional git install)
+- `https://molt.bot/install.sh` — “recommended” installer (global npm install by default; can also install from a GitHub checkout)
+- `https://molt.bot/install-cli.sh` — non-root-friendly CLI installer (installs into a prefix with its own Node)
+ - `https://molt.bot/install.ps1` — Windows PowerShell installer (npm by default; optional git install)
To see the current flags/behavior, run:
```bash
-curl -fsSL https://clawd.bot/install.sh | bash -s -- --help
+curl -fsSL https://molt.bot/install.sh | bash -s -- --help
```
Windows (PowerShell) help:
```powershell
-& ([scriptblock]::Create((iwr -useb https://clawd.bot/install.ps1))) -?
+& ([scriptblock]::Create((iwr -useb https://molt.bot/install.ps1))) -?
```
If the installer completes but `clawdbot` is not found in a new terminal, it’s usually a Node/npm PATH issue. See: [Install](/install#nodejs--npm-path-sanity).
@@ -45,7 +45,7 @@ What it does (high level):
If you *want* `sharp` to link against a globally-installed libvips (or you’re debugging), set:
```bash
-SHARP_IGNORE_GLOBAL_LIBVIPS=0 curl -fsSL https://clawd.bot/install.sh | bash
+SHARP_IGNORE_GLOBAL_LIBVIPS=0 curl -fsSL https://molt.bot/install.sh | bash
```
### Discoverability / “git install” prompt
@@ -78,7 +78,7 @@ This script installs `clawdbot` into a prefix (default: `~/.clawdbot`) and also
Help:
```bash
-curl -fsSL https://clawd.bot/install-cli.sh | bash -s -- --help
+curl -fsSL https://molt.bot/install-cli.sh | bash -s -- --help
```
## install.ps1 (Windows PowerShell)
@@ -94,15 +94,15 @@ What it does (high level):
Examples:
```powershell
-iwr -useb https://clawd.bot/install.ps1 | iex
+iwr -useb https://molt.bot/install.ps1 | iex
```
```powershell
-iwr -useb https://clawd.bot/install.ps1 | iex -InstallMethod git
+iwr -useb https://molt.bot/install.ps1 | iex -InstallMethod git
```
```powershell
-iwr -useb https://clawd.bot/install.ps1 | iex -InstallMethod git -GitDir "C:\\clawdbot"
+iwr -useb https://molt.bot/install.ps1 | iex -InstallMethod git -GitDir "C:\\clawdbot"
```
Environment variables:
diff --git a/docs/install/uninstall.md b/docs/install/uninstall.md
index 5849a6780..1c8e65919 100644
--- a/docs/install/uninstall.md
+++ b/docs/install/uninstall.md
@@ -113,7 +113,7 @@ If you used a profile, delete the matching task name and `~\.clawdbot-\
### Normal install (install.sh / npm / pnpm / bun)
-If you used `https://clawd.bot/install.sh` or `install.ps1`, the CLI was installed with `npm install -g clawdbot@latest`.
+If you used `https://molt.bot/install.sh` or `install.ps1`, the CLI was installed with `npm install -g clawdbot@latest`.
Remove it with `npm rm -g clawdbot` (or `pnpm remove -g` / `bun remove -g` if you installed that way).
### Source checkout (git clone)
diff --git a/docs/install/updating.md b/docs/install/updating.md
index 1d39fa6e4..6cca10566 100644
--- a/docs/install/updating.md
+++ b/docs/install/updating.md
@@ -1,32 +1,33 @@
---
-summary: "Updating Clawdbot safely (global install or source), plus rollback strategy"
+summary: "Updating Moltbot safely (global install or source), plus rollback strategy"
read_when:
- - Updating Clawdbot
+ - Updating Moltbot
- Something breaks after an update
---
# Updating
-Clawdbot is moving fast (pre “1.0”). Treat updates like shipping infra: update → run checks → restart (or use `clawdbot update`, which restarts) → verify.
+Moltbot is moving fast (pre “1.0”). Treat updates like shipping infra: update → run checks → restart (or use `moltbot update`, which restarts) → verify.
## Recommended: re-run the website installer (upgrade in place)
The **preferred** update path is to re-run the installer from the website. It
-detects existing installs, upgrades in place, and runs `clawdbot doctor` when
+detects existing installs, upgrades in place, and runs `moltbot doctor` when
needed.
```bash
-curl -fsSL https://clawd.bot/install.sh | bash
+curl -fsSL https://molt.bot/install.sh | bash
```
Notes:
- Add `--no-onboard` if you don’t want the onboarding wizard to run again.
- For **source installs**, use:
```bash
- curl -fsSL https://clawd.bot/install.sh | bash -s -- --install-method git --no-onboard
+ curl -fsSL https://molt.bot/install.sh | bash -s -- --install-method git --no-onboard
```
The installer will `git pull --rebase` **only** if the repo is clean.
-- For **global installs**, the script uses `npm install -g clawdbot@latest` under the hood.
+- For **global installs**, the script uses `npm install -g moltbot@latest` under the hood.
+- Legacy note: `clawdbot` remains available as a compatibility shim.
## Before you update
@@ -42,20 +43,20 @@ Notes:
Global install (pick one):
```bash
-npm i -g clawdbot@latest
+npm i -g moltbot@latest
```
```bash
-pnpm add -g clawdbot@latest
+pnpm add -g moltbot@latest
```
We do **not** recommend Bun for the Gateway runtime (WhatsApp/Telegram bugs).
To switch update channels (git + npm installs):
```bash
-clawdbot update --channel beta
-clawdbot update --channel dev
-clawdbot update --channel stable
+moltbot update --channel beta
+moltbot update --channel dev
+moltbot update --channel stable
```
Use `--tag ` for a one-off install tag/version.
@@ -67,36 +68,36 @@ Note: on npm installs, the gateway logs an update hint on startup (checks the cu
Then:
```bash
-clawdbot doctor
-clawdbot gateway restart
-clawdbot health
+moltbot doctor
+moltbot gateway restart
+moltbot health
```
Notes:
-- If your Gateway runs as a service, `clawdbot gateway restart` is preferred over killing PIDs.
+- If your Gateway runs as a service, `moltbot gateway restart` is preferred over killing PIDs.
- If you’re pinned to a specific version, see “Rollback / pinning” below.
-## Update (`clawdbot update`)
+## Update (`moltbot update`)
For **source installs** (git checkout), prefer:
```bash
-clawdbot update
+moltbot update
```
It runs a safe-ish update flow:
- Requires a clean worktree.
- Switches to the selected channel (tag or branch).
- Fetches + rebases against the configured upstream (dev channel).
-- Installs deps, builds, builds the Control UI, and runs `clawdbot doctor`.
+- Installs deps, builds, builds the Control UI, and runs `moltbot doctor`.
- Restarts the gateway by default (use `--no-restart` to skip).
-If you installed via **npm/pnpm** (no git metadata), `clawdbot update` will try to update via your package manager. If it can’t detect the install, use “Update (global install)” instead.
+If you installed via **npm/pnpm** (no git metadata), `moltbot update` will try to update via your package manager. If it can’t detect the install, use “Update (global install)” instead.
## Update (Control UI / RPC)
The Control UI has **Update & Restart** (RPC: `update.run`). It:
-1) Runs the same source-update flow as `clawdbot update` (git checkout only).
+1) Runs the same source-update flow as `moltbot update` (git checkout only).
2) Writes a restart sentinel with a structured report (stdout/stderr tail).
3) Restarts the gateway and pings the last active session with the report.
@@ -109,7 +110,7 @@ From the repo checkout:
Preferred:
```bash
-clawdbot update
+moltbot update
```
Manual (equivalent-ish):
@@ -119,21 +120,21 @@ git pull
pnpm install
pnpm build
pnpm ui:build # auto-installs UI deps on first run
-clawdbot doctor
-clawdbot health
+moltbot doctor
+moltbot health
```
Notes:
-- `pnpm build` matters when you run the packaged `clawdbot` binary ([`dist/entry.js`](https://github.com/clawdbot/clawdbot/blob/main/dist/entry.js)) or use Node to run `dist/`.
-- If you run from a repo checkout without a global install, use `pnpm clawdbot ...` for CLI commands.
-- If you run directly from TypeScript (`pnpm clawdbot ...`), a rebuild is usually unnecessary, but **config migrations still apply** → run doctor.
-- Switching between global and git installs is easy: install the other flavor, then run `clawdbot doctor` so the gateway service entrypoint is rewritten to the current install.
+- `pnpm build` matters when you run the packaged `moltbot` binary ([`dist/entry.js`](https://github.com/clawdbot/clawdbot/blob/main/dist/entry.js)) or use Node to run `dist/`.
+- If you run from a repo checkout without a global install, use `pnpm moltbot ...` for CLI commands.
+- If you run directly from TypeScript (`pnpm moltbot ...`), a rebuild is usually unnecessary, but **config migrations still apply** → run doctor.
+- Switching between global and git installs is easy: install the other flavor, then run `moltbot doctor` so the gateway service entrypoint is rewritten to the current install.
-## Always run: `clawdbot doctor`
+## Always Run: `moltbot doctor`
Doctor is the “safe update” command. It’s intentionally boring: repair + migrate + warn.
-Note: if you’re on a **source install** (git checkout), `clawdbot doctor` will offer to run `clawdbot update` first.
+Note: if you’re on a **source install** (git checkout), `moltbot doctor` will offer to run `moltbot update` first.
Typical things it does:
- Migrate deprecated config keys / legacy config file locations.
@@ -149,18 +150,18 @@ Details: [Doctor](/gateway/doctor)
CLI (works regardless of OS):
```bash
-clawdbot gateway status
-clawdbot gateway stop
-clawdbot gateway restart
-clawdbot gateway --port 18789
-clawdbot logs --follow
+moltbot gateway status
+moltbot gateway stop
+moltbot gateway restart
+moltbot gateway --port 18789
+moltbot logs --follow
```
If you’re supervised:
- macOS launchd (app-bundled LaunchAgent): `launchctl kickstart -k gui/$UID/com.clawdbot.gateway` (use `com.clawdbot.` if set)
- Linux systemd user service: `systemctl --user restart clawdbot-gateway[-].service`
- Windows (WSL2): `systemctl --user restart clawdbot-gateway[-].service`
- - `launchctl`/`systemctl` only work if the service is installed; otherwise run `clawdbot gateway install`.
+ - `launchctl`/`systemctl` only work if the service is installed; otherwise run `moltbot gateway install`.
Runbook + exact service labels: [Gateway runbook](/gateway)
@@ -171,20 +172,20 @@ Runbook + exact service labels: [Gateway runbook](/gateway)
Install a known-good version (replace `` with the last working one):
```bash
-npm i -g clawdbot@
+npm i -g moltbot@
```
```bash
-pnpm add -g clawdbot@
+pnpm add -g moltbot@
```
-Tip: to see the current published version, run `npm view clawdbot version`.
+Tip: to see the current published version, run `npm view moltbot version`.
Then restart + re-run doctor:
```bash
-clawdbot doctor
-clawdbot gateway restart
+moltbot doctor
+moltbot gateway restart
```
### Pin (source) by date
@@ -201,7 +202,7 @@ Then reinstall deps + restart:
```bash
pnpm install
pnpm build
-clawdbot gateway restart
+moltbot gateway restart
```
If you want to go back to latest later:
@@ -213,6 +214,6 @@ git pull
## If you’re stuck
-- Run `clawdbot doctor` again and read the output carefully (it often tells you the fix).
+- Run `moltbot doctor` again and read the output carefully (it often tells you the fix).
- Check: [Troubleshooting](/gateway/troubleshooting)
- Ask in Discord: https://channels.discord.gg/clawd
diff --git a/docs/platforms/digitalocean.md b/docs/platforms/digitalocean.md
index afefe3676..ac46a5b47 100644
--- a/docs/platforms/digitalocean.md
+++ b/docs/platforms/digitalocean.md
@@ -65,7 +65,7 @@ curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs
# Install Clawdbot
-curl -fsSL https://clawd.bot/install.sh | bash
+curl -fsSL https://molt.bot/install.sh | bash
# Verify
clawdbot --version
diff --git a/docs/platforms/oracle.md b/docs/platforms/oracle.md
index d8006754b..52db36049 100644
--- a/docs/platforms/oracle.md
+++ b/docs/platforms/oracle.md
@@ -97,7 +97,7 @@ tailscale status
## 5) Install Clawdbot
```bash
-curl -fsSL https://clawd.bot/install.sh | bash
+curl -fsSL https://molt.bot/install.sh | bash
source ~/.bashrc
```
diff --git a/docs/platforms/raspberry-pi.md b/docs/platforms/raspberry-pi.md
index b34e3fcfe..ba6b339cf 100644
--- a/docs/platforms/raspberry-pi.md
+++ b/docs/platforms/raspberry-pi.md
@@ -110,7 +110,7 @@ sudo sysctl -p
### Option A: Standard Install (Recommended)
```bash
-curl -fsSL https://clawd.bot/install.sh | bash
+curl -fsSL https://molt.bot/install.sh | bash
```
### Option B: Hackable Install (For tinkering)
diff --git a/docs/reference/RELEASING.md b/docs/reference/RELEASING.md
index a4c68e3e9..c107ac119 100644
--- a/docs/reference/RELEASING.md
+++ b/docs/reference/RELEASING.md
@@ -42,7 +42,7 @@ When the operator says “release”, immediately do this preflight (no extra qu
- [ ] `CLAWDBOT_INSTALL_SMOKE_SKIP_NONROOT=1 pnpm test:install:smoke` (Docker install smoke test, fast path; required before release)
- If the immediate previous npm release is known broken, set `CLAWDBOT_INSTALL_SMOKE_PREVIOUS=` or `CLAWDBOT_INSTALL_SMOKE_SKIP_PREVIOUS=1` for the preinstall step.
- [ ] (Optional) Full installer smoke (adds non-root + CLI coverage): `pnpm test:install:smoke`
-- [ ] (Optional) Installer E2E (Docker, runs `curl -fsSL https://clawd.bot/install.sh | bash`, onboards, then runs real tool calls):
+- [ ] (Optional) Installer E2E (Docker, runs `curl -fsSL https://molt.bot/install.sh | bash`, onboards, then runs real tool calls):
- `pnpm test:install:e2e:openai` (requires `OPENAI_API_KEY`)
- `pnpm test:install:e2e:anthropic` (requires `ANTHROPIC_API_KEY`)
- `pnpm test:install:e2e` (requires both keys; runs both providers)
diff --git a/docs/start/getting-started.md b/docs/start/getting-started.md
index 790a79dfc..92a772c4d 100644
--- a/docs/start/getting-started.md
+++ b/docs/start/getting-started.md
@@ -54,7 +54,7 @@ Windows: use **WSL2** (Ubuntu recommended). WSL2 is strongly recommended; native
## 1) Install the CLI (recommended)
```bash
-curl -fsSL https://clawd.bot/install.sh | bash
+curl -fsSL https://molt.bot/install.sh | bash
```
Installer options (install method, non-interactive, from GitHub): [Install](/install).
@@ -62,7 +62,7 @@ Installer options (install method, non-interactive, from GitHub): [Install](/ins
Windows (PowerShell):
```powershell
-iwr -useb https://clawd.bot/install.ps1 | iex
+iwr -useb https://molt.bot/install.ps1 | iex
```
Alternative (global install):
diff --git a/extensions/lobster/src/lobster-tool.test.ts b/extensions/lobster/src/lobster-tool.test.ts
index 5c887cc76..7314c9d5e 100644
--- a/extensions/lobster/src/lobster-tool.test.ts
+++ b/extensions/lobster/src/lobster-tool.test.ts
@@ -83,6 +83,26 @@ describe("lobster plugin tool", () => {
expect(res.details).toMatchObject({ ok: true, status: "ok" });
});
+ it("tolerates noisy stdout before the JSON envelope", async () => {
+ const payload = { ok: true, status: "ok", output: [], requiresApproval: null };
+ const { binPath } = await writeFakeLobsterScript(
+ `const payload = ${JSON.stringify(payload)};\n` +
+ `console.log("noise before json");\n` +
+ `process.stdout.write(JSON.stringify(payload));\n`,
+ "clawdbot-lobster-plugin-noisy-",
+ );
+
+ const tool = createLobsterTool(fakeApi());
+ const res = await tool.execute("call-noisy", {
+ action: "run",
+ pipeline: "noop",
+ lobsterPath: binPath,
+ timeoutMs: 1000,
+ });
+
+ expect(res.details).toMatchObject({ ok: true, status: "ok" });
+ });
+
it("requires absolute lobsterPath when provided", async () => {
const tool = createLobsterTool(fakeApi());
await expect(
diff --git a/extensions/lobster/src/lobster-tool.ts b/extensions/lobster/src/lobster-tool.ts
index 368389ab8..e6e8441ff 100644
--- a/extensions/lobster/src/lobster-tool.ts
+++ b/extensions/lobster/src/lobster-tool.ts
@@ -131,10 +131,28 @@ async function runLobsterSubprocess(params: {
}
function parseEnvelope(stdout: string): LobsterEnvelope {
- let parsed: unknown;
- try {
- parsed = JSON.parse(stdout);
- } catch {
+ const trimmed = stdout.trim();
+
+ const tryParse = (input: string) => {
+ try {
+ return JSON.parse(input) as unknown;
+ } catch {
+ return undefined;
+ }
+ };
+
+ let parsed: unknown = tryParse(trimmed);
+
+ // Some environments can leak extra stdout (e.g. warnings/logs) before the
+ // final JSON envelope. Be tolerant and parse the last JSON-looking suffix.
+ if (parsed === undefined) {
+ const suffixMatch = trimmed.match(/({[\s\S]*}|\[[\s\S]*])\s*$/);
+ if (suffixMatch?.[1]) {
+ parsed = tryParse(suffixMatch[1]);
+ }
+ }
+
+ if (parsed === undefined) {
throw new Error("lobster returned invalid JSON");
}
diff --git a/extensions/mattermost/src/onboarding.ts b/extensions/mattermost/src/onboarding.ts
index 431c648ae..31578b3e7 100644
--- a/extensions/mattermost/src/onboarding.ts
+++ b/extensions/mattermost/src/onboarding.ts
@@ -17,7 +17,7 @@ async function noteMattermostSetup(prompter: WizardPrompter): Promise {
"2) Create a bot + copy its token",
"3) Use your server base URL (e.g., https://chat.example.com)",
"Tip: the bot must be a member of any channel you want it to monitor.",
- "Docs: https://docs.clawd.bot/channels/mattermost",
+ "Docs: https://docs.molt.bot/channels/mattermost",
].join("\n"),
"Mattermost bot token",
);
diff --git a/extensions/tlon/README.md b/extensions/tlon/README.md
index aa02cab93..19c8fbb27 100644
--- a/extensions/tlon/README.md
+++ b/extensions/tlon/README.md
@@ -2,4 +2,4 @@
Tlon/Urbit channel plugin for Clawdbot. Supports DMs, group mentions, and thread replies.
-Docs: https://docs.clawd.bot/channels/tlon
+Docs: https://docs.molt.bot/channels/tlon
diff --git a/extensions/twitch/README.md b/extensions/twitch/README.md
index 2d3e4ceea..377b49baa 100644
--- a/extensions/twitch/README.md
+++ b/extensions/twitch/README.md
@@ -80,7 +80,7 @@ Multi-account config (advanced):
## Full documentation
-See https://docs.clawd.bot/channels/twitch for:
+See https://docs.molt.bot/channels/twitch for:
- Token refresh setup
- Access control patterns
diff --git a/extensions/voice-call/README.md b/extensions/voice-call/README.md
index 5f009aa28..269a67d11 100644
--- a/extensions/voice-call/README.md
+++ b/extensions/voice-call/README.md
@@ -8,8 +8,8 @@ Providers:
- **Plivo** (Voice API + XML transfer + GetInput speech)
- **Mock** (dev/no network)
-Docs: `https://docs.clawd.bot/plugins/voice-call`
-Plugin system: `https://docs.clawd.bot/plugin`
+Docs: `https://docs.molt.bot/plugins/voice-call`
+Plugin system: `https://docs.molt.bot/plugin`
## Install (local dev)
diff --git a/extensions/voice-call/src/cli.ts b/extensions/voice-call/src/cli.ts
index 6291ef137..7769ae09f 100644
--- a/extensions/voice-call/src/cli.ts
+++ b/extensions/voice-call/src/cli.ts
@@ -45,7 +45,7 @@ export function registerVoiceCallCli(params: {
const root = program
.command("voicecall")
.description("Voice call utilities")
- .addHelpText("after", () => `\nDocs: https://docs.clawd.bot/cli/voicecall\n`);
+ .addHelpText("after", () => `\nDocs: https://docs.molt.bot/cli/voicecall\n`);
root
.command("call")
diff --git a/extensions/voice-call/src/core-bridge.ts b/extensions/voice-call/src/core-bridge.ts
index a1d01e10f..bc008a515 100644
--- a/extensions/voice-call/src/core-bridge.ts
+++ b/extensions/voice-call/src/core-bridge.ts
@@ -88,7 +88,7 @@ function findPackageRoot(startDir: string, name: string): string | null {
function resolveClawdbotRoot(): string {
if (coreRootCache) return coreRootCache;
- const override = process.env.CLAWDBOT_ROOT?.trim();
+ const override = process.env.MOLTBOT_ROOT?.trim() || process.env.CLAWDBOT_ROOT?.trim();
if (override) {
coreRootCache = override;
return override;
@@ -107,15 +107,17 @@ function resolveClawdbotRoot(): string {
}
for (const start of candidates) {
- const found = findPackageRoot(start, "clawdbot");
- if (found) {
- coreRootCache = found;
- return found;
+ for (const name of ["moltbot", "clawdbot"]) {
+ const found = findPackageRoot(start, name);
+ if (found) {
+ coreRootCache = found;
+ return found;
+ }
}
}
throw new Error(
- "Unable to resolve Clawdbot root. Set CLAWDBOT_ROOT to the package root.",
+ "Unable to resolve core root. Set MOLTBOT_ROOT (or legacy CLAWDBOT_ROOT) to the package root.",
);
}
diff --git a/extensions/zalo/src/onboarding.ts b/extensions/zalo/src/onboarding.ts
index 4cb681dbe..3c4e5c197 100644
--- a/extensions/zalo/src/onboarding.ts
+++ b/extensions/zalo/src/onboarding.ts
@@ -132,7 +132,7 @@ async function noteZaloTokenHelp(prompter: WizardPrompter): Promise {
"2) Create a bot and get the token",
"3) Token looks like 12345689:abc-xyz",
"Tip: you can also set ZALO_BOT_TOKEN in your env.",
- "Docs: https://docs.clawd.bot/channels/zalo",
+ "Docs: https://docs.molt.bot/channels/zalo",
].join("\n"),
"Zalo bot token",
);
diff --git a/extensions/zalouser/src/channel.ts b/extensions/zalouser/src/channel.ts
index 6554d7874..712143f65 100644
--- a/extensions/zalouser/src/channel.ts
+++ b/extensions/zalouser/src/channel.ts
@@ -471,7 +471,7 @@ export const zalouserPlugin: ChannelPlugin = {
const ok = await checkZcaInstalled();
if (!ok) {
throw new Error(
- "Missing dependency: `zca` not found in PATH. See docs.clawd.bot/channels/zalouser",
+ "Missing dependency: `zca` not found in PATH. See docs.molt.bot/channels/zalouser",
);
}
runtime.log(
diff --git a/extensions/zalouser/src/onboarding.ts b/extensions/zalouser/src/onboarding.ts
index a5c205015..2a318d281 100644
--- a/extensions/zalouser/src/onboarding.ts
+++ b/extensions/zalouser/src/onboarding.ts
@@ -53,7 +53,7 @@ async function noteZalouserHelp(prompter: WizardPrompter): Promise {
"1) Install zca-cli",
"2) You'll scan a QR code with your Zalo app",
"",
- "Docs: https://docs.clawd.bot/channels/zalouser",
+ "Docs: https://docs.molt.bot/channels/zalouser",
].join("\n"),
"Zalo Personal Setup",
);
@@ -316,7 +316,7 @@ export const zalouserOnboardingAdapter: ChannelOnboardingAdapter = {
"The `zca` binary was not found in PATH.",
"",
"Install zca-cli, then re-run onboarding:",
- "Docs: https://docs.clawd.bot/channels/zalouser",
+ "Docs: https://docs.molt.bot/channels/zalouser",
].join("\n"),
"Missing Dependency",
);
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d1c55dd8d..82f0a96e2 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -316,7 +316,7 @@ importers:
devDependencies:
clawdbot:
specifier: workspace:*
- version: link:../..
+ version: link:../../packages/clawdbot
extensions/imessage: {}
@@ -324,7 +324,7 @@ importers:
devDependencies:
clawdbot:
specifier: workspace:*
- version: link:../..
+ version: link:../../packages/clawdbot
extensions/llm-task: {}
@@ -350,7 +350,7 @@ importers:
devDependencies:
clawdbot:
specifier: workspace:*
- version: link:../..
+ version: link:../../packages/clawdbot
extensions/mattermost: {}
@@ -385,7 +385,7 @@ importers:
version: 1.2.2
clawdbot:
specifier: workspace:*
- version: link:../..
+ version: link:../../packages/clawdbot
express:
specifier: ^5.2.1
version: 5.2.1
@@ -399,7 +399,7 @@ importers:
dependencies:
clawdbot:
specifier: workspace:*
- version: link:../..
+ version: link:../../packages/clawdbot
nostr-tools:
specifier: ^2.20.0
version: 2.20.0(typescript@5.9.3)
@@ -441,7 +441,7 @@ importers:
devDependencies:
clawdbot:
specifier: workspace:*
- version: link:../..
+ version: link:../../packages/clawdbot
extensions/voice-call:
dependencies:
@@ -461,7 +461,7 @@ importers:
dependencies:
clawdbot:
specifier: workspace:*
- version: link:../..
+ version: link:../../packages/clawdbot
undici:
specifier: 7.19.0
version: 7.19.0
@@ -472,6 +472,12 @@ importers:
specifier: 0.34.47
version: 0.34.47
clawdbot:
+ specifier: workspace:*
+ version: link:../../packages/clawdbot
+
+ packages/clawdbot:
+ dependencies:
+ moltbot:
specifier: workspace:*
version: link:../..
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 115f9a8c0..acf898add 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,6 +1,7 @@
packages:
- .
- ui
+ - packages/*
- extensions/*
onlyBuiltDependencies:
diff --git a/scripts/docker/install-sh-e2e/run.sh b/scripts/docker/install-sh-e2e/run.sh
index 474fc329e..0cc4a27e4 100755
--- a/scripts/docker/install-sh-e2e/run.sh
+++ b/scripts/docker/install-sh-e2e/run.sh
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
-INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://clawd.bot/install.sh}"
+INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://molt.bot/install.sh}"
MODELS_MODE="${CLAWDBOT_E2E_MODELS:-both}" # both|openai|anthropic
INSTALL_TAG="${CLAWDBOT_INSTALL_TAG:-latest}"
E2E_PREVIOUS_VERSION="${CLAWDBOT_INSTALL_E2E_PREVIOUS:-}"
diff --git a/scripts/docker/install-sh-nonroot/run.sh b/scripts/docker/install-sh-nonroot/run.sh
index 82e2275ae..bdb91bb13 100644
--- a/scripts/docker/install-sh-nonroot/run.sh
+++ b/scripts/docker/install-sh-nonroot/run.sh
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
-INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://clawd.bot/install.sh}"
+INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://molt.bot/install.sh}"
echo "==> Pre-flight: ensure git absent"
if command -v git >/dev/null; then
diff --git a/scripts/docker/install-sh-smoke/run.sh b/scripts/docker/install-sh-smoke/run.sh
index b73864ee1..de0e2536f 100755
--- a/scripts/docker/install-sh-smoke/run.sh
+++ b/scripts/docker/install-sh-smoke/run.sh
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
-INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://clawd.bot/install.sh}"
+INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://molt.bot/install.sh}"
SMOKE_PREVIOUS_VERSION="${CLAWDBOT_INSTALL_SMOKE_PREVIOUS:-}"
SKIP_PREVIOUS="${CLAWDBOT_INSTALL_SMOKE_SKIP_PREVIOUS:-0}"
diff --git a/scripts/test-install-sh-docker.sh b/scripts/test-install-sh-docker.sh
index ba87eeb65..03cde30be 100755
--- a/scripts/test-install-sh-docker.sh
+++ b/scripts/test-install-sh-docker.sh
@@ -4,8 +4,8 @@ set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
SMOKE_IMAGE="${CLAWDBOT_INSTALL_SMOKE_IMAGE:-clawdbot-install-smoke:local}"
NONROOT_IMAGE="${CLAWDBOT_INSTALL_NONROOT_IMAGE:-clawdbot-install-nonroot:local}"
-INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://clawd.bot/install.sh}"
-CLI_INSTALL_URL="${CLAWDBOT_INSTALL_CLI_URL:-https://clawd.bot/install-cli.sh}"
+INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://molt.bot/install.sh}"
+CLI_INSTALL_URL="${CLAWDBOT_INSTALL_CLI_URL:-https://molt.bot/install-cli.sh}"
SKIP_NONROOT="${CLAWDBOT_INSTALL_SMOKE_SKIP_NONROOT:-0}"
LATEST_DIR="$(mktemp -d)"
LATEST_FILE="${LATEST_DIR}/latest"
diff --git a/scripts/test-install-sh-e2e-docker.sh b/scripts/test-install-sh-e2e-docker.sh
index 0ad79aaf8..600be4e56 100755
--- a/scripts/test-install-sh-e2e-docker.sh
+++ b/scripts/test-install-sh-e2e-docker.sh
@@ -3,7 +3,7 @@ set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
IMAGE_NAME="${CLAWDBOT_INSTALL_E2E_IMAGE:-clawdbot-install-e2e:local}"
-INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://clawd.bot/install.sh}"
+INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://molt.bot/install.sh}"
OPENAI_API_KEY="${OPENAI_API_KEY:-}"
ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY:-}"
diff --git a/src/agents/clawdbot-gateway-tool.test.ts b/src/agents/clawdbot-gateway-tool.test.ts
index 76d8ff8e4..8def33988 100644
--- a/src/agents/clawdbot-gateway-tool.test.ts
+++ b/src/agents/clawdbot-gateway-tool.test.ts
@@ -50,7 +50,7 @@ describe("gateway tool", () => {
};
expect(parsed.payload?.kind).toBe("restart");
expect(parsed.payload?.doctorHint).toBe(
- "Run: clawdbot --profile isolated doctor --non-interactive",
+ "Run: moltbot --profile isolated doctor --non-interactive",
);
expect(kill).not.toHaveBeenCalled();
diff --git a/src/agents/system-prompt.ts b/src/agents/system-prompt.ts
index 1d1a6a5eb..4d4512298 100644
--- a/src/agents/system-prompt.ts
+++ b/src/agents/system-prompt.ts
@@ -116,7 +116,7 @@ function buildDocsSection(params: { docsPath?: string; isMinimal: boolean; readT
return [
"## Documentation",
`Clawdbot docs: ${docsPath}`,
- "Mirror: https://docs.clawd.bot",
+ "Mirror: https://docs.molt.bot",
"Source: https://github.com/clawdbot/clawdbot",
"Community: https://discord.com/invite/clawd",
"Find new skills: https://clawdhub.com",
diff --git a/src/agents/tools/web-search.ts b/src/agents/tools/web-search.ts
index 50d3d19a1..7cec8f21c 100644
--- a/src/agents/tools/web-search.ts
+++ b/src/agents/tools/web-search.ts
@@ -128,13 +128,13 @@ function missingSearchKeyPayload(provider: (typeof SEARCH_PROVIDERS)[number]) {
error: "missing_perplexity_api_key",
message:
"web_search (perplexity) needs an API key. Set PERPLEXITY_API_KEY or OPENROUTER_API_KEY in the Gateway environment, or configure tools.web.search.perplexity.apiKey.",
- docs: "https://docs.clawd.bot/tools/web",
+ docs: "https://docs.molt.bot/tools/web",
};
}
return {
error: "missing_brave_api_key",
message: `web_search needs a Brave Search API key. Run \`${formatCliCommand("clawdbot configure --section web")}\` to store it, or set BRAVE_API_KEY in the Gateway environment.`,
- docs: "https://docs.clawd.bot/tools/web",
+ docs: "https://docs.molt.bot/tools/web",
};
}
@@ -279,7 +279,7 @@ async function runPerplexitySearch(params: {
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${params.apiKey}`,
- "HTTP-Referer": "https://clawdbot.com",
+ "HTTP-Referer": "https://molt.bot",
"X-Title": "Clawdbot Web Search",
},
body: JSON.stringify({
@@ -447,7 +447,7 @@ export function createWebSearchTool(options?: {
return jsonResult({
error: "unsupported_freshness",
message: "freshness is only supported by the Brave web_search provider.",
- docs: "https://docs.clawd.bot/tools/web",
+ docs: "https://docs.molt.bot/tools/web",
});
}
const freshness = rawFreshness ? normalizeFreshness(rawFreshness) : undefined;
@@ -456,7 +456,7 @@ export function createWebSearchTool(options?: {
error: "invalid_freshness",
message:
"freshness must be one of pd, pw, pm, py, or a range like YYYY-MM-DDtoYYYY-MM-DD.",
- docs: "https://docs.clawd.bot/tools/web",
+ docs: "https://docs.molt.bot/tools/web",
});
}
const result = await runWebSearch({
diff --git a/src/auto-reply/reply/bash-command.ts b/src/auto-reply/reply/bash-command.ts
index a83bf3952..47ea45504 100644
--- a/src/auto-reply/reply/bash-command.ts
+++ b/src/auto-reply/reply/bash-command.ts
@@ -189,7 +189,7 @@ export async function handleBashChatCommand(params: {
}): Promise {
if (params.cfg.commands?.bash !== true) {
return {
- text: "⚠️ bash is disabled. Set commands.bash=true to enable. Docs: https://docs.clawd.bot/tools/slash-commands#config",
+ text: "⚠️ bash is disabled. Set commands.bash=true to enable. Docs: https://docs.molt.bot/tools/slash-commands#config",
};
}
diff --git a/src/canvas-host/a2ui/.bundle.hash b/src/canvas-host/a2ui/.bundle.hash
index 19a232f5c..01a6e013f 100644
--- a/src/canvas-host/a2ui/.bundle.hash
+++ b/src/canvas-host/a2ui/.bundle.hash
@@ -1 +1 @@
-2567ca5bbc065b922d96717a488d5db3120b5b033c5d0508682d1aa8fbba470a
+b3c955e808e8d11cdbb6f716a038f26ccdd4b69228ad0c4ce76fd81e98496d56
diff --git a/src/channels/plugins/catalog.test.ts b/src/channels/plugins/catalog.test.ts
index 2470dbd33..a50aa2b36 100644
--- a/src/channels/plugins/catalog.test.ts
+++ b/src/channels/plugins/catalog.test.ts
@@ -8,7 +8,7 @@ import { getChannelPluginCatalogEntry, listChannelPluginCatalogEntries } from ".
describe("channel plugin catalog", () => {
it("includes Microsoft Teams", () => {
const entry = getChannelPluginCatalogEntry("msteams");
- expect(entry?.install.npmSpec).toBe("@clawdbot/msteams");
+ expect(entry?.install.npmSpec).toBe("@moltbot/msteams");
expect(entry?.meta.aliases).toContain("teams");
});
diff --git a/src/channels/plugins/onboarding/telegram.ts b/src/channels/plugins/onboarding/telegram.ts
index fdbc044c5..90920ab40 100644
--- a/src/channels/plugins/onboarding/telegram.ts
+++ b/src/channels/plugins/onboarding/telegram.ts
@@ -38,7 +38,7 @@ async function noteTelegramTokenHelp(prompter: WizardPrompter): Promise {
"3) Copy the token (looks like 123456:ABC...)",
"Tip: you can also set TELEGRAM_BOT_TOKEN in your env.",
`Docs: ${formatDocsLink("/telegram")}`,
- "Website: https://clawd.bot",
+ "Website: https://molt.bot",
].join("\n"),
"Telegram bot token",
);
@@ -51,7 +51,7 @@ async function noteTelegramUserIdHelp(prompter: WizardPrompter): Promise {
"2) Or call https://api.telegram.org/bot/getUpdates and read message.from.id",
"3) Third-party: DM @userinfobot or @getidsbot",
`Docs: ${formatDocsLink("/telegram")}`,
- "Website: https://clawd.bot",
+ "Website: https://molt.bot",
].join("\n"),
"Telegram user id",
);
diff --git a/src/channels/registry.test.ts b/src/channels/registry.test.ts
index 84940aa42..44b53ef6d 100644
--- a/src/channels/registry.test.ts
+++ b/src/channels/registry.test.ts
@@ -33,6 +33,6 @@ describe("channel registry", () => {
);
expect(line).not.toContain("Docs:");
expect(line).toContain("/channels/telegram");
- expect(line).toContain("https://clawd.bot");
+ expect(line).toContain("https://molt.bot");
});
});
diff --git a/src/channels/registry.ts b/src/channels/registry.ts
index 10ddeed4a..6afe1996c 100644
--- a/src/channels/registry.ts
+++ b/src/channels/registry.ts
@@ -22,7 +22,7 @@ export const DEFAULT_CHAT_CHANNEL: ChatChannelId = "whatsapp";
export type ChatChannelMeta = ChannelMeta;
-const WEBSITE_URL = "https://clawd.bot";
+const WEBSITE_URL = "https://molt.bot";
const CHAT_CHANNEL_META: Record = {
telegram: {
diff --git a/src/cli/acp-cli.ts b/src/cli/acp-cli.ts
index f2283d23d..8669d77fa 100644
--- a/src/cli/acp-cli.ts
+++ b/src/cli/acp-cli.ts
@@ -21,7 +21,7 @@ export function registerAcpCli(program: Command) {
.option("--verbose, -v", "Verbose logging to stderr", false)
.addHelpText(
"after",
- () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/acp", "docs.clawd.bot/cli/acp")}\n`,
+ () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/acp", "docs.molt.bot/cli/acp")}\n`,
)
.action((opts) => {
try {
@@ -46,7 +46,7 @@ export function registerAcpCli(program: Command) {
.command("client")
.description("Run an interactive ACP client against the local ACP bridge")
.option("--cwd ", "Working directory for the ACP session")
- .option("--server ", "ACP server command (default: clawdbot)")
+ .option("--server ", "ACP server command (default: moltbot)")
.option("--server-args ", "Extra arguments for the ACP server")
.option("--server-verbose", "Enable verbose logging on the ACP server", false)
.option("--verbose, -v", "Verbose client logging", false)
diff --git a/src/cli/banner.ts b/src/cli/banner.ts
index 7a811f56e..87803c9c7 100644
--- a/src/cli/banner.ts
+++ b/src/cli/banner.ts
@@ -2,6 +2,7 @@ import { resolveCommitHash } from "../infra/git-commit.js";
import { visibleWidth } from "../terminal/ansi.js";
import { isRich, theme } from "../terminal/theme.js";
import { pickTagline, type TaglineOptions } from "./tagline.js";
+import { resolveCliName } from "./cli-name.js";
type BannerOptions = TaglineOptions & {
argv?: string[];
@@ -37,7 +38,8 @@ export function formatCliBannerLine(version: string, options: BannerOptions = {}
const commitLabel = commit ?? "unknown";
const tagline = pickTagline(options);
const rich = options.richTty ?? isRich();
- const title = "🦞 Clawdbot";
+ const cliName = resolveCliName(options.argv ?? process.argv, options.env);
+ const title = cliName === "clawdbot" ? "🦞 Clawdbot" : "🦞 Moltbot";
const prefix = "🦞 ";
const columns = options.columns ?? process.stdout.columns ?? 120;
const plainFullLine = `${title} ${version} (${commitLabel}) — ${tagline}`;
diff --git a/src/cli/browser-cli-extension.ts b/src/cli/browser-cli-extension.ts
index 3bd7c5b3a..6775216e6 100644
--- a/src/cli/browser-cli-extension.ts
+++ b/src/cli/browser-cli-extension.ts
@@ -90,7 +90,7 @@ export function registerBrowserExtensionCommands(
`- “Load unpacked” → select: ${displayPath}`,
`- Pin “Clawdbot Browser Relay”, then click it on the tab (badge shows ON)`,
"",
- `${theme.muted("Docs:")} ${formatDocsLink("/tools/chrome-extension", "docs.clawd.bot/tools/chrome-extension")}`,
+ `${theme.muted("Docs:")} ${formatDocsLink("/tools/chrome-extension", "docs.molt.bot/tools/chrome-extension")}`,
].join("\n"),
),
);
@@ -107,7 +107,7 @@ export function registerBrowserExtensionCommands(
danger(
[
`Chrome extension is not installed. Run: "${formatCliCommand("clawdbot browser extension install")}"`,
- `Docs: ${formatDocsLink("/tools/chrome-extension", "docs.clawd.bot/tools/chrome-extension")}`,
+ `Docs: ${formatDocsLink("/tools/chrome-extension", "docs.molt.bot/tools/chrome-extension")}`,
].join("\n"),
),
);
diff --git a/src/cli/browser-cli.ts b/src/cli/browser-cli.ts
index 50c71ef01..cda4d4275 100644
--- a/src/cli/browser-cli.ts
+++ b/src/cli/browser-cli.ts
@@ -31,7 +31,7 @@ export function registerBrowserCli(program: Command) {
true,
)}\n\n${theme.muted("Docs:")} ${formatDocsLink(
"/cli/browser",
- "docs.clawd.bot/cli/browser",
+ "docs.molt.bot/cli/browser",
)}\n`,
)
.action(() => {
diff --git a/src/cli/channels-cli.ts b/src/cli/channels-cli.ts
index 97fbee520..6d90ae935 100644
--- a/src/cli/channels-cli.ts
+++ b/src/cli/channels-cli.ts
@@ -76,7 +76,7 @@ export function registerChannelsCli(program: Command) {
() =>
`\n${theme.muted("Docs:")} ${formatDocsLink(
"/cli/channels",
- "docs.clawd.bot/cli/channels",
+ "docs.molt.bot/cli/channels",
)}\n`,
);
diff --git a/src/cli/command-format.ts b/src/cli/command-format.ts
index 9e5eef160..e62806cd4 100644
--- a/src/cli/command-format.ts
+++ b/src/cli/command-format.ts
@@ -1,6 +1,7 @@
import { normalizeProfileName } from "./profile-utils.js";
+import { replaceCliName, resolveCliName } from "./cli-name.js";
-const CLI_PREFIX_RE = /^(?:pnpm|npm|bunx|npx)\s+clawdbot\b|^clawdbot\b/;
+const CLI_PREFIX_RE = /^(?:pnpm|npm|bunx|npx)\s+(?:clawdbot|moltbot)\b|^(?:clawdbot|moltbot)\b/;
const PROFILE_FLAG_RE = /(?:^|\s)--profile(?:\s|=|$)/;
const DEV_FLAG_RE = /(?:^|\s)--dev(?:\s|$)/;
@@ -8,9 +9,13 @@ export function formatCliCommand(
command: string,
env: Record = process.env as Record,
): string {
+ const cliName = resolveCliName(undefined, env);
+ const normalizedCommand = replaceCliName(command, cliName);
const profile = normalizeProfileName(env.CLAWDBOT_PROFILE);
- if (!profile) return command;
- if (!CLI_PREFIX_RE.test(command)) return command;
- if (PROFILE_FLAG_RE.test(command) || DEV_FLAG_RE.test(command)) return command;
- return command.replace(CLI_PREFIX_RE, (match) => `${match} --profile ${profile}`);
+ if (!profile) return normalizedCommand;
+ if (!CLI_PREFIX_RE.test(normalizedCommand)) return normalizedCommand;
+ if (PROFILE_FLAG_RE.test(normalizedCommand) || DEV_FLAG_RE.test(normalizedCommand)) {
+ return normalizedCommand;
+ }
+ return normalizedCommand.replace(CLI_PREFIX_RE, (match) => `${match} --profile ${profile}`);
}
diff --git a/src/cli/config-cli.ts b/src/cli/config-cli.ts
index 605482251..80550599d 100644
--- a/src/cli/config-cli.ts
+++ b/src/cli/config-cli.ts
@@ -185,7 +185,7 @@ export function registerConfigCli(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/config", "docs.clawd.bot/cli/config")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/config", "docs.molt.bot/cli/config")}\n`,
)
.option(
"--section ",
diff --git a/src/cli/cron-cli/register.ts b/src/cli/cron-cli/register.ts
index 7989e08fb..aa115f1fa 100644
--- a/src/cli/cron-cli/register.ts
+++ b/src/cli/cron-cli/register.ts
@@ -15,7 +15,7 @@ export function registerCronCli(program: Command) {
.description("Manage cron jobs (via Gateway)")
.addHelpText(
"after",
- () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/cron", "docs.clawd.bot/cli/cron")}\n`,
+ () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/cron", "docs.molt.bot/cli/cron")}\n`,
);
registerCronStatusCommand(cron);
diff --git a/src/cli/daemon-cli/register.ts b/src/cli/daemon-cli/register.ts
index 92b47690d..8c180c732 100644
--- a/src/cli/daemon-cli/register.ts
+++ b/src/cli/daemon-cli/register.ts
@@ -18,7 +18,7 @@ export function registerDaemonCli(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/gateway", "docs.clawd.bot/cli/gateway")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/gateway", "docs.molt.bot/cli/gateway")}\n`,
);
daemon
diff --git a/src/cli/daemon-cli/status.print.ts b/src/cli/daemon-cli/status.print.ts
index 801980d24..dc34e00e6 100644
--- a/src/cli/daemon-cli/status.print.ts
+++ b/src/cli/daemon-cli/status.print.ts
@@ -322,5 +322,5 @@ export function printDaemonStatus(status: DaemonStatus, opts: { json: boolean })
}
defaultRuntime.log(`${label("Troubles:")} run ${formatCliCommand("clawdbot status")}`);
- defaultRuntime.log(`${label("Troubleshooting:")} https://docs.clawd.bot/troubleshooting`);
+ defaultRuntime.log(`${label("Troubleshooting:")} https://docs.molt.bot/troubleshooting`);
}
diff --git a/src/cli/directory-cli.ts b/src/cli/directory-cli.ts
index d58663d8a..51fdd6049 100644
--- a/src/cli/directory-cli.ts
+++ b/src/cli/directory-cli.ts
@@ -39,7 +39,7 @@ export function registerDirectoryCli(program: Command) {
() =>
`\n${theme.muted("Docs:")} ${formatDocsLink(
"/cli/directory",
- "docs.clawd.bot/cli/directory",
+ "docs.molt.bot/cli/directory",
)}\n`,
)
.action(() => {
diff --git a/src/cli/dns-cli.ts b/src/cli/dns-cli.ts
index 7798415e8..c063163a5 100644
--- a/src/cli/dns-cli.ts
+++ b/src/cli/dns-cli.ts
@@ -97,7 +97,7 @@ export function registerDnsCli(program: Command) {
.description("DNS helpers for wide-area discovery (Tailscale + CoreDNS)")
.addHelpText(
"after",
- () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/dns", "docs.clawd.bot/cli/dns")}\n`,
+ () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/dns", "docs.molt.bot/cli/dns")}\n`,
);
dns
diff --git a/src/cli/docs-cli.ts b/src/cli/docs-cli.ts
index 8078b8afe..0bcbe3bac 100644
--- a/src/cli/docs-cli.ts
+++ b/src/cli/docs-cli.ts
@@ -13,7 +13,7 @@ export function registerDocsCli(program: Command) {
.argument("[query...]", "Search query")
.addHelpText(
"after",
- () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/docs", "docs.clawd.bot/cli/docs")}\n`,
+ () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/docs", "docs.molt.bot/cli/docs")}\n`,
)
.action(async (queryParts: string[]) => {
await runCommandWithRuntime(defaultRuntime, async () => {
diff --git a/src/cli/exec-approvals-cli.ts b/src/cli/exec-approvals-cli.ts
index f59b5475b..8b420db50 100644
--- a/src/cli/exec-approvals-cli.ts
+++ b/src/cli/exec-approvals-cli.ts
@@ -233,7 +233,7 @@ export function registerExecApprovalsCli(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/approvals", "docs.clawd.bot/cli/approvals")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/approvals", "docs.molt.bot/cli/approvals")}\n`,
);
const getCmd = approvals
@@ -337,7 +337,7 @@ export function registerExecApprovalsCli(program: Command) {
)}\n${formatExample(
'clawdbot approvals allowlist remove "~/Projects/**/bin/rg"',
"Remove an allowlist pattern.",
- )}\n\n${theme.muted("Docs:")} ${formatDocsLink("/cli/approvals", "docs.clawd.bot/cli/approvals")}\n`,
+ )}\n\n${theme.muted("Docs:")} ${formatDocsLink("/cli/approvals", "docs.molt.bot/cli/approvals")}\n`,
);
const allowlistAdd = allowlist
diff --git a/src/cli/gateway-cli/register.ts b/src/cli/gateway-cli/register.ts
index 8334cc6f7..eec58dd58 100644
--- a/src/cli/gateway-cli/register.ts
+++ b/src/cli/gateway-cli/register.ts
@@ -103,7 +103,7 @@ export function registerGatewayCli(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/gateway", "docs.clawd.bot/cli/gateway")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/gateway", "docs.molt.bot/cli/gateway")}\n`,
),
);
diff --git a/src/cli/hooks-cli.test.ts b/src/cli/hooks-cli.test.ts
index edbaf797d..6a4ee37fc 100644
--- a/src/cli/hooks-cli.test.ts
+++ b/src/cli/hooks-cli.test.ts
@@ -16,7 +16,7 @@ const report: HookStatusReport = {
handlerPath: "/tmp/hooks/session-memory/handler.js",
hookKey: "session-memory",
emoji: "💾",
- homepage: "https://docs.clawd.bot/hooks#session-memory",
+ homepage: "https://docs.molt.bot/hooks#session-memory",
events: ["command:new"],
always: false,
disabled: false,
diff --git a/src/cli/hooks-cli.ts b/src/cli/hooks-cli.ts
index 022c7c295..a0eab75f5 100644
--- a/src/cli/hooks-cli.ts
+++ b/src/cli/hooks-cli.ts
@@ -424,7 +424,7 @@ export function registerHooksCli(program: Command): void {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/hooks", "docs.clawd.bot/cli/hooks")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/hooks", "docs.molt.bot/cli/hooks")}\n`,
);
hooks
diff --git a/src/cli/logs-cli.ts b/src/cli/logs-cli.ts
index e5af23af8..8fcd8fffa 100644
--- a/src/cli/logs-cli.ts
+++ b/src/cli/logs-cli.ts
@@ -180,7 +180,7 @@ export function registerLogsCli(program: Command) {
.option("--no-color", "Disable ANSI colors")
.addHelpText(
"after",
- () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/logs", "docs.clawd.bot/cli/logs")}\n`,
+ () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/logs", "docs.molt.bot/cli/logs")}\n`,
);
addGatewayClientOptions(logs);
diff --git a/src/cli/memory-cli.ts b/src/cli/memory-cli.ts
index a184fa1b4..68894adf5 100644
--- a/src/cli/memory-cli.ts
+++ b/src/cli/memory-cli.ts
@@ -424,7 +424,7 @@ export function registerMemoryCli(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/memory", "docs.clawd.bot/cli/memory")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/memory", "docs.molt.bot/cli/memory")}\n`,
);
memory
diff --git a/src/cli/models-cli.ts b/src/cli/models-cli.ts
index d914629e7..f68631d18 100644
--- a/src/cli/models-cli.ts
+++ b/src/cli/models-cli.ts
@@ -44,7 +44,7 @@ export function registerModelsCli(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/models", "docs.clawd.bot/cli/models")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/models", "docs.molt.bot/cli/models")}\n`,
);
models
diff --git a/src/cli/node-cli/register.ts b/src/cli/node-cli/register.ts
index 8712c6a44..8f5c5b5ad 100644
--- a/src/cli/node-cli/register.ts
+++ b/src/cli/node-cli/register.ts
@@ -23,7 +23,7 @@ export function registerNodeCli(program: Command) {
.description("Run a headless node host (system.run/system.which)")
.addHelpText(
"after",
- () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/node", "docs.clawd.bot/cli/node")}\n`,
+ () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/node", "docs.molt.bot/cli/node")}\n`,
);
node
diff --git a/src/cli/nodes-camera.test.ts b/src/cli/nodes-camera.test.ts
index a024b535a..55d62cf06 100644
--- a/src/cli/nodes-camera.test.ts
+++ b/src/cli/nodes-camera.test.ts
@@ -51,11 +51,11 @@ describe("nodes camera helpers", () => {
tmpDir: "/tmp",
id: "id1",
});
- expect(p).toBe(path.join("/tmp", "clawdbot-camera-snap-front-id1.jpg"));
+ expect(p).toBe(path.join("/tmp", "moltbot-camera-snap-front-id1.jpg"));
});
it("writes base64 to file", async () => {
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), "clawdbot-test-"));
+ const dir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-test-"));
const out = path.join(dir, "x.bin");
await writeBase64ToFile(out, "aGk=");
await expect(fs.readFile(out, "utf8")).resolves.toBe("hi");
diff --git a/src/cli/nodes-camera.ts b/src/cli/nodes-camera.ts
index d91053e76..f5bf2f2ea 100644
--- a/src/cli/nodes-camera.ts
+++ b/src/cli/nodes-camera.ts
@@ -3,6 +3,8 @@ import * as fs from "node:fs/promises";
import * as os from "node:os";
import * as path from "node:path";
+import { resolveCliName } from "./cli-name.js";
+
export type CameraFacing = "front" | "back";
export type CameraSnapPayload = {
@@ -70,7 +72,8 @@ export function cameraTempPath(opts: {
const id = opts.id ?? randomUUID();
const facingPart = opts.facing ? `-${opts.facing}` : "";
const ext = opts.ext.startsWith(".") ? opts.ext : `.${opts.ext}`;
- return path.join(tmpDir, `clawdbot-camera-${opts.kind}${facingPart}-${id}${ext}`);
+ const cliName = resolveCliName();
+ return path.join(tmpDir, `${cliName}-camera-${opts.kind}${facingPart}-${id}${ext}`);
}
export async function writeBase64ToFile(filePath: string, base64: string) {
diff --git a/src/cli/nodes-canvas.ts b/src/cli/nodes-canvas.ts
index b021ef22f..577c20560 100644
--- a/src/cli/nodes-canvas.ts
+++ b/src/cli/nodes-canvas.ts
@@ -2,6 +2,8 @@ import { randomUUID } from "node:crypto";
import * as os from "node:os";
import * as path from "node:path";
+import { resolveCliName } from "./cli-name.js";
+
export type CanvasSnapshotPayload = {
format: string;
base64: string;
@@ -29,5 +31,6 @@ export function canvasSnapshotTempPath(opts: { ext: string; tmpDir?: string; id?
const tmpDir = opts.tmpDir ?? os.tmpdir();
const id = opts.id ?? randomUUID();
const ext = opts.ext.startsWith(".") ? opts.ext : `.${opts.ext}`;
- return path.join(tmpDir, `clawdbot-canvas-snapshot-${id}${ext}`);
+ const cliName = resolveCliName();
+ return path.join(tmpDir, `${cliName}-canvas-snapshot-${id}${ext}`);
}
diff --git a/src/cli/nodes-cli/register.ts b/src/cli/nodes-cli/register.ts
index 20dd61902..501b28103 100644
--- a/src/cli/nodes-cli/register.ts
+++ b/src/cli/nodes-cli/register.ts
@@ -17,7 +17,7 @@ export function registerNodesCli(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/nodes", "docs.clawd.bot/cli/nodes")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/nodes", "docs.molt.bot/cli/nodes")}\n`,
);
registerNodesStatusCommands(nodes);
diff --git a/src/cli/pairing-cli.ts b/src/cli/pairing-cli.ts
index 4d405bff5..a5d0ae137 100644
--- a/src/cli/pairing-cli.ts
+++ b/src/cli/pairing-cli.ts
@@ -53,7 +53,7 @@ export function registerPairingCli(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/pairing", "docs.clawd.bot/cli/pairing")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/pairing", "docs.molt.bot/cli/pairing")}\n`,
);
pairing
diff --git a/src/cli/plugins-cli.ts b/src/cli/plugins-cli.ts
index 303231bdb..57709e04a 100644
--- a/src/cli/plugins-cli.ts
+++ b/src/cli/plugins-cli.ts
@@ -98,7 +98,7 @@ export function registerPluginsCli(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/plugins", "docs.clawd.bot/cli/plugins")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/plugins", "docs.molt.bot/cli/plugins")}\n`,
);
plugins
@@ -521,7 +521,7 @@ export function registerPluginsCli(program: Command) {
lines.push(`- ${target}${diag.message}`);
}
}
- const docs = formatDocsLink("/plugin", "docs.clawd.bot/plugin");
+ const docs = formatDocsLink("/plugin", "docs.molt.bot/plugin");
lines.push("");
lines.push(`${theme.muted("Docs:")} ${docs}`);
defaultRuntime.log(lines.join("\n"));
diff --git a/src/cli/profile.test.ts b/src/cli/profile.test.ts
index 0470bcf2c..f17e56214 100644
--- a/src/cli/profile.test.ts
+++ b/src/cli/profile.test.ts
@@ -80,60 +80,60 @@ describe("applyCliProfileEnv", () => {
describe("formatCliCommand", () => {
it("returns command unchanged when no profile is set", () => {
- expect(formatCliCommand("clawdbot doctor --fix", {})).toBe("clawdbot doctor --fix");
+ expect(formatCliCommand("clawdbot doctor --fix", {})).toBe("moltbot doctor --fix");
});
it("returns command unchanged when profile is default", () => {
expect(formatCliCommand("clawdbot doctor --fix", { CLAWDBOT_PROFILE: "default" })).toBe(
- "clawdbot doctor --fix",
+ "moltbot doctor --fix",
);
});
it("returns command unchanged when profile is Default (case-insensitive)", () => {
expect(formatCliCommand("clawdbot doctor --fix", { CLAWDBOT_PROFILE: "Default" })).toBe(
- "clawdbot doctor --fix",
+ "moltbot doctor --fix",
);
});
it("returns command unchanged when profile is invalid", () => {
expect(formatCliCommand("clawdbot doctor --fix", { CLAWDBOT_PROFILE: "bad profile" })).toBe(
- "clawdbot doctor --fix",
+ "moltbot doctor --fix",
);
});
it("returns command unchanged when --profile is already present", () => {
expect(
formatCliCommand("clawdbot --profile work doctor --fix", { CLAWDBOT_PROFILE: "work" }),
- ).toBe("clawdbot --profile work doctor --fix");
+ ).toBe("moltbot --profile work doctor --fix");
});
it("returns command unchanged when --dev is already present", () => {
expect(formatCliCommand("clawdbot --dev doctor", { CLAWDBOT_PROFILE: "dev" })).toBe(
- "clawdbot --dev doctor",
+ "moltbot --dev doctor",
);
});
it("inserts --profile flag when profile is set", () => {
expect(formatCliCommand("clawdbot doctor --fix", { CLAWDBOT_PROFILE: "work" })).toBe(
- "clawdbot --profile work doctor --fix",
+ "moltbot --profile work doctor --fix",
);
});
it("trims whitespace from profile", () => {
expect(formatCliCommand("clawdbot doctor --fix", { CLAWDBOT_PROFILE: " jbclawd " })).toBe(
- "clawdbot --profile jbclawd doctor --fix",
+ "moltbot --profile jbclawd doctor --fix",
);
});
it("handles command with no args after clawdbot", () => {
expect(formatCliCommand("clawdbot", { CLAWDBOT_PROFILE: "test" })).toBe(
- "clawdbot --profile test",
+ "moltbot --profile test",
);
});
it("handles pnpm wrapper", () => {
expect(formatCliCommand("pnpm clawdbot doctor", { CLAWDBOT_PROFILE: "work" })).toBe(
- "pnpm clawdbot --profile work doctor",
+ "pnpm moltbot --profile work doctor",
);
});
});
diff --git a/src/cli/program.nodes-media.test.ts b/src/cli/program.nodes-media.test.ts
index 60513b8e1..3132a98b9 100644
--- a/src/cli/program.nodes-media.test.ts
+++ b/src/cli/program.nodes-media.test.ts
@@ -174,7 +174,7 @@ describe("cli program (nodes media)", () => {
const out = String(runtime.log.mock.calls[0]?.[0] ?? "");
const mediaPath = out.replace(/^MEDIA:/, "").trim();
- expect(mediaPath).toMatch(/clawdbot-camera-clip-front-.*\.mp4$/);
+ expect(mediaPath).toMatch(/moltbot-camera-clip-front-.*\.mp4$/);
try {
await expect(fs.readFile(mediaPath, "utf8")).resolves.toBe("hi");
@@ -421,7 +421,7 @@ describe("cli program (nodes media)", () => {
const out = String(runtime.log.mock.calls[0]?.[0] ?? "");
const mediaPath = out.replace(/^MEDIA:/, "").trim();
- expect(mediaPath).toMatch(/clawdbot-canvas-snapshot-.*\.png$/);
+ expect(mediaPath).toMatch(/moltbot-canvas-snapshot-.*\.png$/);
try {
await expect(fs.readFile(mediaPath, "utf8")).resolves.toBe("hi");
diff --git a/src/cli/program/help.ts b/src/cli/program/help.ts
index c90f9eb96..9ad704c16 100644
--- a/src/cli/program/help.ts
+++ b/src/cli/program/help.ts
@@ -2,8 +2,11 @@ import type { Command } from "commander";
import { formatDocsLink } from "../../terminal/links.js";
import { isRich, theme } from "../../terminal/theme.js";
import { formatCliBannerLine, hasEmittedCliBanner } from "../banner.js";
+import { replaceCliName, resolveCliName } from "../cli-name.js";
import type { ProgramContext } from "./context.js";
+const CLI_NAME = resolveCliName();
+
const EXAMPLES = [
[
"clawdbot channels login --verbose",
@@ -29,7 +32,7 @@ const EXAMPLES = [
export function configureProgramHelp(program: Command, ctx: ProgramContext) {
program
- .name("clawdbot")
+ .name(CLI_NAME)
.description("")
.version(ctx.programVersion)
.option(
@@ -77,12 +80,12 @@ export function configureProgramHelp(program: Command, ctx: ProgramContext) {
});
const fmtExamples = EXAMPLES.map(
- ([cmd, desc]) => ` ${theme.command(cmd)}\n ${theme.muted(desc)}`,
+ ([cmd, desc]) => ` ${theme.command(replaceCliName(cmd, CLI_NAME))}\n ${theme.muted(desc)}`,
).join("\n");
program.addHelpText("afterAll", ({ command }) => {
if (command !== program) return "";
- const docs = formatDocsLink("/cli", "docs.clawd.bot/cli");
+ const docs = formatDocsLink("/cli", "docs.molt.bot/cli");
return `\n${theme.heading("Examples:")}\n${fmtExamples}\n\n${theme.muted("Docs:")} ${docs}\n`;
});
}
diff --git a/src/cli/program/preaction.ts b/src/cli/program/preaction.ts
index 1607e0634..acdcde387 100644
--- a/src/cli/program/preaction.ts
+++ b/src/cli/program/preaction.ts
@@ -6,6 +6,7 @@ import { ensureConfigReady } from "./config-guard.js";
import { ensurePluginRegistryLoaded } from "../plugin-registry.js";
import { isTruthyEnvValue } from "../../infra/env.js";
import { setVerbose } from "../../globals.js";
+import { resolveCliName } from "../cli-name.js";
function setProcessTitleForCommand(actionCommand: Command) {
let current: Command = actionCommand;
@@ -13,8 +14,9 @@ function setProcessTitleForCommand(actionCommand: Command) {
current = current.parent;
}
const name = current.name();
- if (!name || name === "clawdbot") return;
- process.title = `clawdbot-${name}`;
+ const cliName = resolveCliName();
+ if (!name || name === cliName) return;
+ process.title = `${cliName}-${name}`;
}
// Commands that need channel plugins loaded
diff --git a/src/cli/program/register.agent.ts b/src/cli/program/register.agent.ts
index d597efde9..80eb9a35f 100644
--- a/src/cli/program/register.agent.ts
+++ b/src/cli/program/register.agent.ts
@@ -68,7 +68,7 @@ ${formatHelpExamples([
],
])}
-${theme.muted("Docs:")} ${formatDocsLink("/cli/agent", "docs.clawd.bot/cli/agent")}`,
+${theme.muted("Docs:")} ${formatDocsLink("/cli/agent", "docs.molt.bot/cli/agent")}`,
)
.action(async (opts) => {
const verboseLevel = typeof opts.verbose === "string" ? opts.verbose.toLowerCase() : "";
@@ -86,7 +86,7 @@ ${theme.muted("Docs:")} ${formatDocsLink("/cli/agent", "docs.clawd.bot/cli/agent
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/agents", "docs.clawd.bot/cli/agents")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/agents", "docs.molt.bot/cli/agents")}\n`,
);
agents
diff --git a/src/cli/program/register.configure.ts b/src/cli/program/register.configure.ts
index a10805e88..55bec5209 100644
--- a/src/cli/program/register.configure.ts
+++ b/src/cli/program/register.configure.ts
@@ -16,7 +16,7 @@ export function registerConfigureCommand(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/configure", "docs.clawd.bot/cli/configure")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/configure", "docs.molt.bot/cli/configure")}\n`,
)
.option(
"--section ",
diff --git a/src/cli/program/register.maintenance.ts b/src/cli/program/register.maintenance.ts
index 023965c5c..efb8b7851 100644
--- a/src/cli/program/register.maintenance.ts
+++ b/src/cli/program/register.maintenance.ts
@@ -15,7 +15,7 @@ export function registerMaintenanceCommands(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/doctor", "docs.clawd.bot/cli/doctor")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/doctor", "docs.molt.bot/cli/doctor")}\n`,
)
.option("--no-workspace-suggestions", "Disable workspace memory system suggestions", false)
.option("--yes", "Accept defaults without prompting", false)
@@ -45,7 +45,7 @@ export function registerMaintenanceCommands(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/dashboard", "docs.clawd.bot/cli/dashboard")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/dashboard", "docs.molt.bot/cli/dashboard")}\n`,
)
.option("--no-open", "Print URL but do not launch a browser", false)
.action(async (opts) => {
@@ -62,7 +62,7 @@ export function registerMaintenanceCommands(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/reset", "docs.clawd.bot/cli/reset")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/reset", "docs.molt.bot/cli/reset")}\n`,
)
.option("--scope ", "config|config+creds+sessions|full (default: interactive prompt)")
.option("--yes", "Skip confirmation prompts", false)
@@ -85,7 +85,7 @@ export function registerMaintenanceCommands(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/uninstall", "docs.clawd.bot/cli/uninstall")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/uninstall", "docs.molt.bot/cli/uninstall")}\n`,
)
.option("--service", "Remove the gateway service", false)
.option("--state", "Remove state + config", false)
diff --git a/src/cli/program/register.message.ts b/src/cli/program/register.message.ts
index 24af5f37f..b9fa22a47 100644
--- a/src/cli/program/register.message.ts
+++ b/src/cli/program/register.message.ts
@@ -46,7 +46,7 @@ ${formatHelpExamples([
],
])}
-${theme.muted("Docs:")} ${formatDocsLink("/cli/message", "docs.clawd.bot/cli/message")}`,
+${theme.muted("Docs:")} ${formatDocsLink("/cli/message", "docs.molt.bot/cli/message")}`,
)
.action(() => {
message.help({ error: true });
diff --git a/src/cli/program/register.onboard.ts b/src/cli/program/register.onboard.ts
index eac6a60df..8f31635f0 100644
--- a/src/cli/program/register.onboard.ts
+++ b/src/cli/program/register.onboard.ts
@@ -38,7 +38,7 @@ export function registerOnboardCommand(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/onboard", "docs.clawd.bot/cli/onboard")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/onboard", "docs.molt.bot/cli/onboard")}\n`,
)
.option("--workspace ", "Agent workspace directory (default: ~/clawd)")
.option("--reset", "Reset config + credentials + sessions + workspace before running wizard")
diff --git a/src/cli/program/register.setup.ts b/src/cli/program/register.setup.ts
index aa79a5dda..ad36a70e5 100644
--- a/src/cli/program/register.setup.ts
+++ b/src/cli/program/register.setup.ts
@@ -14,7 +14,7 @@ export function registerSetupCommand(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/setup", "docs.clawd.bot/cli/setup")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/setup", "docs.molt.bot/cli/setup")}\n`,
)
.option(
"--workspace ",
diff --git a/src/cli/program/register.status-health-sessions.ts b/src/cli/program/register.status-health-sessions.ts
index 66d0c4abb..42913588f 100644
--- a/src/cli/program/register.status-health-sessions.ts
+++ b/src/cli/program/register.status-health-sessions.ts
@@ -53,7 +53,7 @@ export function registerStatusHealthSessionsCommands(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/status", "docs.clawd.bot/cli/status")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/status", "docs.molt.bot/cli/status")}\n`,
)
.action(async (opts) => {
const verbose = resolveVerbose(opts);
@@ -87,7 +87,7 @@ export function registerStatusHealthSessionsCommands(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/health", "docs.clawd.bot/cli/health")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/health", "docs.molt.bot/cli/health")}\n`,
)
.action(async (opts) => {
const verbose = resolveVerbose(opts);
@@ -130,7 +130,7 @@ export function registerStatusHealthSessionsCommands(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/sessions", "docs.clawd.bot/cli/sessions")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/sessions", "docs.molt.bot/cli/sessions")}\n`,
)
.action(async (opts) => {
setVerbose(Boolean(opts.verbose));
diff --git a/src/cli/sandbox-cli.ts b/src/cli/sandbox-cli.ts
index 746566f82..bcf9df54a 100644
--- a/src/cli/sandbox-cli.ts
+++ b/src/cli/sandbox-cli.ts
@@ -68,7 +68,7 @@ export function registerSandboxCli(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/sandbox", "docs.clawd.bot/cli/sandbox")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/sandbox", "docs.molt.bot/cli/sandbox")}\n`,
)
.action(() => {
sandbox.help({ error: true });
diff --git a/src/cli/security-cli.ts b/src/cli/security-cli.ts
index 2bd5a36b7..7a72ad6da 100644
--- a/src/cli/security-cli.ts
+++ b/src/cli/security-cli.ts
@@ -34,7 +34,7 @@ export function registerSecurityCli(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/security", "docs.clawd.bot/cli/security")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/security", "docs.molt.bot/cli/security")}\n`,
);
security
diff --git a/src/cli/skills-cli.ts b/src/cli/skills-cli.ts
index 7488aee83..520b1a5c0 100644
--- a/src/cli/skills-cli.ts
+++ b/src/cli/skills-cli.ts
@@ -337,7 +337,7 @@ export function registerSkillsCli(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/skills", "docs.clawd.bot/cli/skills")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/skills", "docs.molt.bot/cli/skills")}\n`,
);
skills
diff --git a/src/cli/system-cli.ts b/src/cli/system-cli.ts
index 4162c16de..9ade7aa15 100644
--- a/src/cli/system-cli.ts
+++ b/src/cli/system-cli.ts
@@ -23,7 +23,7 @@ export function registerSystemCli(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/system", "docs.clawd.bot/cli/system")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/system", "docs.molt.bot/cli/system")}\n`,
);
addGatewayClientOptions(
diff --git a/src/cli/tui-cli.ts b/src/cli/tui-cli.ts
index 3fbf6bc86..795642410 100644
--- a/src/cli/tui-cli.ts
+++ b/src/cli/tui-cli.ts
@@ -20,7 +20,7 @@ export function registerTuiCli(program: Command) {
.option("--history-limit ", "History entries to load", "200")
.addHelpText(
"after",
- () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/tui", "docs.clawd.bot/cli/tui")}\n`,
+ () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/tui", "docs.molt.bot/cli/tui")}\n`,
)
.action(async (opts) => {
try {
diff --git a/src/cli/update-cli.ts b/src/cli/update-cli.ts
index 9e597e485..c80878f90 100644
--- a/src/cli/update-cli.ts
+++ b/src/cli/update-cli.ts
@@ -39,6 +39,7 @@ import { trimLogTail } from "../infra/restart-sentinel.js";
import { defaultRuntime } from "../runtime.js";
import { formatDocsLink } from "../terminal/links.js";
import { formatCliCommand } from "./command-format.js";
+import { replaceCliName, resolveCliName } from "./cli-name.js";
import { stylePromptHint, stylePromptMessage } from "../terminal/prompt-style.js";
import { theme } from "../terminal/theme.js";
import { renderTable } from "../terminal/table.js";
@@ -81,6 +82,7 @@ const STEP_LABELS: Record = {
build: "Building",
"ui:build": "Building UI",
"clawdbot doctor": "Running doctor checks",
+ "moltbot doctor": "Running doctor checks",
"git rev-parse HEAD (after)": "Verifying update",
"global update": "Updating via package manager",
"global install": "Installing global package",
@@ -110,6 +112,9 @@ const UPDATE_QUIPS = [
];
const MAX_LOG_CHARS = 8000;
+const DEFAULT_PACKAGE_NAME = "moltbot";
+const CORE_PACKAGE_NAMES = new Set([DEFAULT_PACKAGE_NAME, "clawdbot"]);
+const CLI_NAME = resolveCliName();
const CLAWDBOT_REPO_URL = "https://github.com/clawdbot/clawdbot.git";
const DEFAULT_GIT_DIR = path.join(os.homedir(), "clawdbot");
@@ -117,7 +122,11 @@ function normalizeTag(value?: string | null): string | null {
if (!value) return null;
const trimmed = value.trim();
if (!trimmed) return null;
- return trimmed.startsWith("clawdbot@") ? trimmed.slice("clawdbot@".length) : trimmed;
+ if (trimmed.startsWith("clawdbot@")) return trimmed.slice("clawdbot@".length);
+ if (trimmed.startsWith(`${DEFAULT_PACKAGE_NAME}@`)) {
+ return trimmed.slice(`${DEFAULT_PACKAGE_NAME}@`.length);
+ }
+ return trimmed;
}
function pickUpdateQuip(): string {
@@ -157,16 +166,22 @@ async function isGitCheckout(root: string): Promise {
}
}
-async function isClawdbotPackage(root: string): Promise {
+async function readPackageName(root: string): Promise {
try {
const raw = await fs.readFile(path.join(root, "package.json"), "utf-8");
const parsed = JSON.parse(raw) as { name?: string };
- return parsed?.name === "clawdbot";
+ const name = parsed?.name?.trim();
+ return name ? name : null;
} catch {
- return false;
+ return null;
}
}
+async function isCorePackage(root: string): Promise {
+ const name = await readPackageName(root);
+ return Boolean(name && CORE_PACKAGE_NAMES.has(name));
+}
+
async function pathExists(targetPath: string): Promise {
try {
await fs.stat(targetPath);
@@ -269,8 +284,8 @@ async function ensureGitCheckout(params: {
});
}
- if (!(await isClawdbotPackage(params.dir))) {
- throw new Error(`CLAWDBOT_GIT_DIR does not look like a clawdbot checkout: ${params.dir}.`);
+ if (!(await isCorePackage(params.dir))) {
+ throw new Error(`CLAWDBOT_GIT_DIR does not look like a core checkout: ${params.dir}.`);
}
return null;
@@ -691,10 +706,13 @@ export async function updateCommand(opts: UpdateCommandOptions): Promise {
return { stdout: res.stdout, stderr: res.stderr, code: res.code };
};
const pkgRoot = await resolveGlobalPackageRoot(manager, runCommand, timeoutMs ?? 20 * 60_000);
+ const packageName =
+ (pkgRoot ? await readPackageName(pkgRoot) : await readPackageName(root)) ??
+ DEFAULT_PACKAGE_NAME;
const beforeVersion = pkgRoot ? await readPackageVersion(pkgRoot) : null;
const updateStep = await runUpdateStep({
name: "global update",
- argv: globalInstallArgs(manager, `clawdbot@${tag}`),
+ argv: globalInstallArgs(manager, `${packageName}@${tag}`),
timeoutMs: timeoutMs ?? 20 * 60_000,
progress,
});
@@ -705,7 +723,7 @@ export async function updateCommand(opts: UpdateCommandOptions): Promise {
const entryPath = path.join(pkgRoot, "dist", "entry.js");
if (await pathExists(entryPath)) {
const doctorStep = await runUpdateStep({
- name: "clawdbot doctor",
+ name: `${CLI_NAME} doctor`,
argv: [resolveNodeRunner(), entryPath, "doctor", "--non-interactive"],
timeoutMs: timeoutMs ?? 20 * 60_000,
progress,
@@ -806,11 +824,13 @@ export async function updateCommand(opts: UpdateCommandOptions): Promise {
if (result.reason === "not-git-install") {
defaultRuntime.log(
theme.warn(
- `Skipped: this Clawdbot install isn't a git checkout, and the package manager couldn't be detected. Update via your package manager, then run \`${formatCliCommand("clawdbot doctor")}\` and \`${formatCliCommand("clawdbot gateway restart")}\`.`,
+ `Skipped: this Clawdbot install isn't a git checkout, and the package manager couldn't be detected. Update via your package manager, then run \`${replaceCliName(formatCliCommand("clawdbot doctor"), CLI_NAME)}\` and \`${replaceCliName(formatCliCommand("clawdbot gateway restart"), CLI_NAME)}\`.`,
),
);
defaultRuntime.log(
- theme.muted("Examples: `npm i -g clawdbot@latest` or `pnpm add -g clawdbot@latest`"),
+ theme.muted(
+ `Examples: \`${replaceCliName("npm i -g clawdbot@latest", CLI_NAME)}\` or \`${replaceCliName("pnpm add -g clawdbot@latest", CLI_NAME)}\``,
+ ),
);
}
defaultRuntime.exit(0);
@@ -926,7 +946,7 @@ export async function updateCommand(opts: UpdateCommandOptions): Promise {
defaultRuntime.log(theme.warn(`Daemon restart failed: ${String(err)}`));
defaultRuntime.log(
theme.muted(
- `You may need to restart the service manually: ${formatCliCommand("clawdbot gateway restart")}`,
+ `You may need to restart the service manually: ${replaceCliName(formatCliCommand("clawdbot gateway restart"), CLI_NAME)}`,
),
);
}
@@ -936,13 +956,13 @@ export async function updateCommand(opts: UpdateCommandOptions): Promise {
if (result.mode === "npm" || result.mode === "pnpm") {
defaultRuntime.log(
theme.muted(
- `Tip: Run \`${formatCliCommand("clawdbot doctor")}\`, then \`${formatCliCommand("clawdbot gateway restart")}\` to apply updates to a running gateway.`,
+ `Tip: Run \`${replaceCliName(formatCliCommand("clawdbot doctor"), CLI_NAME)}\`, then \`${replaceCliName(formatCliCommand("clawdbot gateway restart"), CLI_NAME)}\` to apply updates to a running gateway.`,
),
);
} else {
defaultRuntime.log(
theme.muted(
- `Tip: Run \`${formatCliCommand("clawdbot gateway restart")}\` to apply updates to a running gateway.`,
+ `Tip: Run \`${replaceCliName(formatCliCommand("clawdbot gateway restart"), CLI_NAME)}\` to apply updates to a running gateway.`,
),
);
}
@@ -1137,7 +1157,7 @@ ${theme.heading("Notes:")}
- Downgrades require confirmation (can break configuration)
- Skips update if the working directory has uncommitted changes
-${theme.muted("Docs:")} ${formatDocsLink("/cli/update", "docs.clawd.bot/cli/update")}`;
+${theme.muted("Docs:")} ${formatDocsLink("/cli/update", "docs.molt.bot/cli/update")}`;
})
.action(async (opts) => {
try {
@@ -1161,7 +1181,7 @@ ${theme.muted("Docs:")} ${formatDocsLink("/cli/update", "docs.clawd.bot/cli/upda
.option("--timeout ", "Timeout for each update step in seconds (default: 1200)")
.addHelpText(
"after",
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/update", "docs.clawd.bot/cli/update")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/update", "docs.molt.bot/cli/update")}\n`,
)
.action(async (opts) => {
try {
@@ -1188,7 +1208,7 @@ ${theme.muted("Docs:")} ${formatDocsLink("/cli/update", "docs.clawd.bot/cli/upda
"- Shows current update channel (stable/beta/dev) and source",
)}\n${theme.muted("- Includes git tag/branch/SHA for source checkouts")}\n\n${theme.muted(
"Docs:",
- )} ${formatDocsLink("/cli/update", "docs.clawd.bot/cli/update")}`,
+ )} ${formatDocsLink("/cli/update", "docs.molt.bot/cli/update")}`,
)
.action(async (opts) => {
try {
diff --git a/src/cli/webhooks-cli.ts b/src/cli/webhooks-cli.ts
index 08c77af4d..1792533c2 100644
--- a/src/cli/webhooks-cli.ts
+++ b/src/cli/webhooks-cli.ts
@@ -28,7 +28,7 @@ export function registerWebhooksCli(program: Command) {
.addHelpText(
"after",
() =>
- `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/webhooks", "docs.clawd.bot/cli/webhooks")}\n`,
+ `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/webhooks", "docs.molt.bot/cli/webhooks")}\n`,
);
const gmail = webhooks.command("gmail").description("Gmail Pub/Sub hooks (via gogcli)");
diff --git a/src/commands/agents.commands.add.ts b/src/commands/agents.commands.add.ts
index 53b8ba049..5423ac79e 100644
--- a/src/commands/agents.commands.add.ts
+++ b/src/commands/agents.commands.add.ts
@@ -326,7 +326,7 @@ export async function agentsAddCommand(
await prompter.note(
[
"Routing unchanged. Add bindings when you're ready.",
- "Docs: https://docs.clawd.bot/concepts/multi-agent",
+ "Docs: https://docs.molt.bot/concepts/multi-agent",
].join("\n"),
"Routing",
);
diff --git a/src/commands/auth-choice.apply.openai.ts b/src/commands/auth-choice.apply.openai.ts
index 947b81181..d00208fab 100644
--- a/src/commands/auth-choice.apply.openai.ts
+++ b/src/commands/auth-choice.apply.openai.ts
@@ -138,7 +138,7 @@ export async function applyAuthChoiceOpenAI(
spin.stop("OpenAI OAuth failed");
params.runtime.error(String(err));
await params.prompter.note(
- "Trouble with OAuth? See https://docs.clawd.bot/start/faq",
+ "Trouble with OAuth? See https://docs.molt.bot/start/faq",
"OAuth help",
);
}
diff --git a/src/commands/channels.adds-non-default-telegram-account.test.ts b/src/commands/channels.adds-non-default-telegram-account.test.ts
index d5241a2fd..ff04b5c24 100644
--- a/src/commands/channels.adds-non-default-telegram-account.test.ts
+++ b/src/commands/channels.adds-non-default-telegram-account.test.ts
@@ -370,7 +370,7 @@ describe("channels command", () => {
});
expect(lines.join("\n")).toMatch(/Warnings:/);
expect(lines.join("\n")).toMatch(/Message Content Intent is disabled/i);
- expect(lines.join("\n")).toMatch(/Run: clawdbot( --profile isolated)? doctor/);
+ expect(lines.join("\n")).toMatch(/Run: (?:clawdbot|moltbot)( --profile isolated)? doctor/);
});
it("surfaces Discord permission audit issues in channels status output", () => {
diff --git a/src/commands/configure.gateway.ts b/src/commands/configure.gateway.ts
index d572e54a9..273231f31 100644
--- a/src/commands/configure.gateway.ts
+++ b/src/commands/configure.gateway.ts
@@ -139,9 +139,7 @@ export async function promptGatewayConfig(
let tailscaleResetOnExit = false;
if (tailscaleMode !== "off") {
note(
- ["Docs:", "https://docs.clawd.bot/gateway/tailscale", "https://docs.clawd.bot/web"].join(
- "\n",
- ),
+ ["Docs:", "https://docs.molt.bot/gateway/tailscale", "https://docs.molt.bot/web"].join("\n"),
"Tailscale",
);
tailscaleResetOnExit = Boolean(
diff --git a/src/commands/configure.wizard.ts b/src/commands/configure.wizard.ts
index 7563643e1..535efef31 100644
--- a/src/commands/configure.wizard.ts
+++ b/src/commands/configure.wizard.ts
@@ -100,7 +100,7 @@ async function promptWebToolsConfig(
[
"Web search lets your agent look things up online using the `web_search` tool.",
"It requires a Brave Search API key (you can store it in the config or set BRAVE_API_KEY in the Gateway environment).",
- "Docs: https://docs.clawd.bot/tools/web",
+ "Docs: https://docs.molt.bot/tools/web",
].join("\n"),
"Web search",
);
@@ -136,7 +136,7 @@ async function promptWebToolsConfig(
[
"No key stored yet, so web_search will stay unavailable.",
"Store a key here or set BRAVE_API_KEY in the Gateway environment.",
- "Docs: https://docs.clawd.bot/tools/web",
+ "Docs: https://docs.molt.bot/tools/web",
].join("\n"),
"Web search",
);
@@ -189,7 +189,7 @@ export async function runConfigureWizard(
[
...snapshot.issues.map((iss) => `- ${iss.path}: ${iss.message}`),
"",
- "Docs: https://docs.clawd.bot/gateway/configuration",
+ "Docs: https://docs.molt.bot/gateway/configuration",
].join("\n"),
"Config issues",
);
@@ -393,8 +393,8 @@ export async function runConfigureWizard(
note(
[
"Docs:",
- "https://docs.clawd.bot/gateway/health",
- "https://docs.clawd.bot/gateway/troubleshooting",
+ "https://docs.molt.bot/gateway/health",
+ "https://docs.molt.bot/gateway/troubleshooting",
].join("\n"),
"Health check help",
);
@@ -518,8 +518,8 @@ export async function runConfigureWizard(
note(
[
"Docs:",
- "https://docs.clawd.bot/gateway/health",
- "https://docs.clawd.bot/gateway/troubleshooting",
+ "https://docs.molt.bot/gateway/health",
+ "https://docs.molt.bot/gateway/troubleshooting",
].join("\n"),
"Health check help",
);
@@ -577,7 +577,7 @@ export async function runConfigureWizard(
`Web UI: ${links.httpUrl}`,
`Gateway WS: ${links.wsUrl}`,
gatewayStatusLine,
- "Docs: https://docs.clawd.bot/web/control-ui",
+ "Docs: https://docs.molt.bot/web/control-ui",
].join("\n"),
"Control UI",
);
diff --git a/src/commands/daemon-install-helpers.test.ts b/src/commands/daemon-install-helpers.test.ts
index e3b873737..179da04a2 100644
--- a/src/commands/daemon-install-helpers.test.ts
+++ b/src/commands/daemon-install-helpers.test.ts
@@ -235,7 +235,7 @@ describe("gatewayInstallErrorHint", () => {
it("returns platform-specific hints", () => {
expect(gatewayInstallErrorHint("win32")).toContain("Run as administrator");
expect(gatewayInstallErrorHint("linux")).toMatch(
- /clawdbot( --profile isolated)? gateway install/,
+ /(?:clawdbot|moltbot)( --profile isolated)? gateway install/,
);
});
});
diff --git a/src/commands/docs.ts b/src/commands/docs.ts
index 4ca479f65..d0f01ce6e 100644
--- a/src/commands/docs.ts
+++ b/src/commands/docs.ts
@@ -5,7 +5,7 @@ import { formatDocsLink } from "../terminal/links.js";
import { isRich, theme } from "../terminal/theme.js";
import { formatCliCommand } from "../cli/command-format.js";
-const SEARCH_TOOL = "https://docs.clawd.bot/mcp.SearchClawdbot";
+const SEARCH_TOOL = "https://docs.molt.bot/mcp.SearchClawdbot";
const SEARCH_TIMEOUT_MS = 30_000;
const DEFAULT_SNIPPET_MAX = 220;
@@ -148,12 +148,12 @@ async function renderMarkdown(markdown: string, runtime: RuntimeEnv) {
export async function docsSearchCommand(queryParts: string[], runtime: RuntimeEnv) {
const query = queryParts.join(" ").trim();
if (!query) {
- const docs = formatDocsLink("/", "docs.clawd.bot");
+ const docs = formatDocsLink("/", "docs.molt.bot");
if (isRich()) {
runtime.log(`${theme.muted("Docs:")} ${docs}`);
runtime.log(`${theme.muted("Search:")} ${formatCliCommand('clawdbot docs "your query"')}`);
} else {
- runtime.log("Docs: https://docs.clawd.bot/");
+ runtime.log("Docs: https://docs.molt.bot/");
runtime.log(`Search: ${formatCliCommand('clawdbot docs "your query"')}`);
}
return;
diff --git a/src/commands/onboard-helpers.ts b/src/commands/onboard-helpers.ts
index dd8288a60..27c74ae00 100644
--- a/src/commands/onboard-helpers.ts
+++ b/src/commands/onboard-helpers.ts
@@ -177,8 +177,8 @@ export function formatControlUiSshHint(params: {
localUrl,
authedUrl,
"Docs:",
- "https://docs.clawd.bot/gateway/remote",
- "https://docs.clawd.bot/web/control-ui",
+ "https://docs.molt.bot/gateway/remote",
+ "https://docs.molt.bot/web/control-ui",
]
.filter(Boolean)
.join("\n");
diff --git a/src/commands/onboard-hooks.test.ts b/src/commands/onboard-hooks.test.ts
index 10c99140a..e83f61399 100644
--- a/src/commands/onboard-hooks.test.ts
+++ b/src/commands/onboard-hooks.test.ts
@@ -239,7 +239,7 @@ describe("onboard-hooks", () => {
// Second note should confirm configuration
expect(noteCalls[1][0]).toContain("Enabled 1 hook: session-memory");
- expect(noteCalls[1][0]).toMatch(/clawdbot( --profile isolated)? hooks list/);
+ expect(noteCalls[1][0]).toMatch(/(?:clawdbot|moltbot)( --profile isolated)? hooks list/);
});
});
});
diff --git a/src/commands/onboard-hooks.ts b/src/commands/onboard-hooks.ts
index 10cdf1293..9fcc322a7 100644
--- a/src/commands/onboard-hooks.ts
+++ b/src/commands/onboard-hooks.ts
@@ -15,7 +15,7 @@ export async function setupInternalHooks(
"Hooks let you automate actions when agent commands are issued.",
"Example: Save session context to memory when you issue /new.",
"",
- "Learn more: https://docs.clawd.bot/hooks",
+ "Learn more: https://docs.molt.bot/hooks",
].join("\n"),
"Hooks",
);
diff --git a/src/commands/onboard-non-interactive/local.ts b/src/commands/onboard-non-interactive/local.ts
index 8701bac7a..ec78dfba9 100644
--- a/src/commands/onboard-non-interactive/local.ts
+++ b/src/commands/onboard-non-interactive/local.ts
@@ -125,7 +125,7 @@ export async function runNonInteractiveOnboardingLocal(params: {
if (!opts.json) {
runtime.log(
- `Tip: run \`${formatCliCommand("clawdbot configure --section web")}\` to store your Brave API key for web_search. Docs: https://docs.clawd.bot/tools/web`,
+ `Tip: run \`${formatCliCommand("clawdbot configure --section web")}\` to store your Brave API key for web_search. Docs: https://docs.molt.bot/tools/web`,
);
}
}
diff --git a/src/commands/onboard-non-interactive/remote.ts b/src/commands/onboard-non-interactive/remote.ts
index 1426448fc..6807434e0 100644
--- a/src/commands/onboard-non-interactive/remote.ts
+++ b/src/commands/onboard-non-interactive/remote.ts
@@ -47,7 +47,7 @@ export async function runNonInteractiveOnboardingRemote(params: {
runtime.log(`Remote gateway: ${remoteUrl}`);
runtime.log(`Auth: ${payload.auth}`);
runtime.log(
- `Tip: run \`${formatCliCommand("clawdbot configure --section web")}\` to store your Brave API key for web_search. Docs: https://docs.clawd.bot/tools/web`,
+ `Tip: run \`${formatCliCommand("clawdbot configure --section web")}\` to store your Brave API key for web_search. Docs: https://docs.molt.bot/tools/web`,
);
}
}
diff --git a/src/commands/onboard-remote.ts b/src/commands/onboard-remote.ts
index 24c8773c8..cb71cabdf 100644
--- a/src/commands/onboard-remote.ts
+++ b/src/commands/onboard-remote.ts
@@ -43,7 +43,7 @@ export async function promptRemoteGatewayConfig(
await prompter.note(
[
"Bonjour discovery requires dns-sd (macOS) or avahi-browse (Linux).",
- "Docs: https://docs.clawd.bot/gateway/discovery",
+ "Docs: https://docs.molt.bot/gateway/discovery",
].join("\n"),
"Discovery",
);
@@ -96,7 +96,7 @@ export async function promptRemoteGatewayConfig(
`ssh -N -L 18789:127.0.0.1:18789 @${host}${
selectedBeacon.sshPort ? ` -p ${selectedBeacon.sshPort}` : ""
}`,
- "Docs: https://docs.clawd.bot/gateway/remote",
+ "Docs: https://docs.molt.bot/gateway/remote",
].join("\n"),
"SSH tunnel",
);
diff --git a/src/commands/onboard-skills.ts b/src/commands/onboard-skills.ts
index ce3b06123..8d90dccee 100644
--- a/src/commands/onboard-skills.ts
+++ b/src/commands/onboard-skills.ts
@@ -156,7 +156,7 @@ export async function setupSkills(
runtime.log(
`Tip: run \`${formatCliCommand("clawdbot doctor")}\` to review skills + requirements.`,
);
- runtime.log("Docs: https://docs.clawd.bot/skills");
+ runtime.log("Docs: https://docs.molt.bot/skills");
}
}
}
diff --git a/src/commands/onboard.ts b/src/commands/onboard.ts
index 348aca613..6ede2b768 100644
--- a/src/commands/onboard.ts
+++ b/src/commands/onboard.ts
@@ -44,7 +44,7 @@ export async function onboardCommand(opts: OnboardOptions, runtime: RuntimeEnv =
runtime.error(
[
"Non-interactive onboarding requires explicit risk acknowledgement.",
- "Read: https://docs.clawd.bot/security",
+ "Read: https://docs.molt.bot/security",
`Re-run with: ${formatCliCommand("clawdbot onboard --non-interactive --accept-risk ...")}`,
].join("\n"),
);
@@ -65,7 +65,7 @@ export async function onboardCommand(opts: OnboardOptions, runtime: RuntimeEnv =
[
"Windows detected.",
"WSL2 is strongly recommended; native Windows is untested and more problematic.",
- "Guide: https://docs.clawd.bot/windows",
+ "Guide: https://docs.molt.bot/windows",
].join("\n"),
);
}
diff --git a/src/commands/sandbox-explain.test.ts b/src/commands/sandbox-explain.test.ts
index d3e5ea2ee..a2fa611d8 100644
--- a/src/commands/sandbox-explain.test.ts
+++ b/src/commands/sandbox-explain.test.ts
@@ -36,7 +36,7 @@ describe("sandbox explain command", () => {
const out = logs.join("");
const parsed = JSON.parse(out);
- expect(parsed).toHaveProperty("docsUrl", "https://docs.clawd.bot/sandbox");
+ expect(parsed).toHaveProperty("docsUrl", "https://docs.molt.bot/sandbox");
expect(parsed).toHaveProperty("sandbox.mode", "all");
expect(parsed).toHaveProperty("sandbox.tools.sources.allow.source");
expect(Array.isArray(parsed.fixIt)).toBe(true);
diff --git a/src/commands/sandbox-explain.ts b/src/commands/sandbox-explain.ts
index daaa9e483..f7c4c1cdb 100644
--- a/src/commands/sandbox-explain.ts
+++ b/src/commands/sandbox-explain.ts
@@ -30,7 +30,7 @@ type SandboxExplainOptions = {
json: boolean;
};
-const SANDBOX_DOCS_URL = "https://docs.clawd.bot/sandbox";
+const SANDBOX_DOCS_URL = "https://docs.molt.bot/sandbox";
function normalizeExplainSessionKey(params: {
cfg: ClawdbotConfig;
@@ -307,7 +307,7 @@ export async function sandboxExplainCommand(
lines.push(heading("Fix-it:"));
for (const key of payload.fixIt) lines.push(` - ${key}`);
lines.push("");
- lines.push(`${key("Docs:")} ${formatDocsLink("/sandbox", "docs.clawd.bot/sandbox")}`);
+ lines.push(`${key("Docs:")} ${formatDocsLink("/sandbox", "docs.molt.bot/sandbox")}`);
runtime.log(`${lines.join("\n")}\n`);
}
diff --git a/src/commands/status-all/diagnosis.ts b/src/commands/status-all/diagnosis.ts
index 90912da1b..5e73e3743 100644
--- a/src/commands/status-all/diagnosis.ts
+++ b/src/commands/status-all/diagnosis.ts
@@ -234,6 +234,6 @@ export async function appendStatusAllDiagnosis(params: {
lines.push("");
lines.push(muted("Pasteable debug report. Auth tokens redacted."));
- lines.push("Troubleshooting: https://docs.clawd.bot/troubleshooting");
+ lines.push("Troubleshooting: https://docs.molt.bot/troubleshooting");
lines.push("");
}
diff --git a/src/commands/status.command.ts b/src/commands/status.command.ts
index 1ce771ac8..c36b91c99 100644
--- a/src/commands/status.command.ts
+++ b/src/commands/status.command.ts
@@ -560,8 +560,8 @@ export async function statusCommand(
}
runtime.log("");
- runtime.log("FAQ: https://docs.clawd.bot/faq");
- runtime.log("Troubleshooting: https://docs.clawd.bot/troubleshooting");
+ runtime.log("FAQ: https://docs.molt.bot/faq");
+ runtime.log("Troubleshooting: https://docs.molt.bot/troubleshooting");
runtime.log("");
const updateHint = formatUpdateAvailableHint(update);
if (updateHint) {
diff --git a/src/commands/status.test.ts b/src/commands/status.test.ts
index ca9d8ae96..047f43a07 100644
--- a/src/commands/status.test.ts
+++ b/src/commands/status.test.ts
@@ -330,6 +330,8 @@ describe("statusCommand", () => {
expect(
logs.some(
(l) =>
+ l.includes("moltbot status --all") ||
+ l.includes("moltbot --profile isolated status --all") ||
l.includes("clawdbot status --all") ||
l.includes("clawdbot --profile isolated status --all"),
),
diff --git a/src/hooks/bundled/README.md b/src/hooks/bundled/README.md
index 48ad5ea95..77df25ee4 100644
--- a/src/hooks/bundled/README.md
+++ b/src/hooks/bundled/README.md
@@ -39,7 +39,7 @@ Swaps injected `SOUL.md` content with `SOUL_EVIL.md` during a purge window or by
**Events**: `agent:bootstrap`
**What it does**: Overrides the injected SOUL content before the system prompt is built.
**Output**: No files written; swaps happen in-memory only.
-**Docs**: https://docs.clawd.bot/hooks/soul-evil
+**Docs**: https://docs.molt.bot/hooks/soul-evil
**Enable**:
@@ -82,7 +82,7 @@ session-memory/
---
name: my-hook
description: "Short description"
-homepage: https://docs.clawd.bot/hooks#my-hook
+homepage: https://docs.molt.bot/hooks#my-hook
metadata:
{ "clawdbot": { "emoji": "🔗", "events": ["command:new"], "requires": { "bins": ["node"] } } }
---
@@ -221,4 +221,4 @@ Test your hooks by:
## Documentation
-Full documentation: https://docs.clawd.bot/hooks
+Full documentation: https://docs.molt.bot/hooks
diff --git a/src/hooks/bundled/boot-md/HOOK.md b/src/hooks/bundled/boot-md/HOOK.md
index dac210b62..2572c50cc 100644
--- a/src/hooks/bundled/boot-md/HOOK.md
+++ b/src/hooks/bundled/boot-md/HOOK.md
@@ -1,7 +1,7 @@
---
name: boot-md
description: "Run BOOT.md on gateway startup"
-homepage: https://docs.clawd.bot/hooks#boot-md
+homepage: https://docs.molt.bot/hooks#boot-md
metadata:
{
"clawdbot":
diff --git a/src/hooks/bundled/command-logger/HOOK.md b/src/hooks/bundled/command-logger/HOOK.md
index 10034fab8..bf33cdeff 100644
--- a/src/hooks/bundled/command-logger/HOOK.md
+++ b/src/hooks/bundled/command-logger/HOOK.md
@@ -1,7 +1,7 @@
---
name: command-logger
description: "Log all command events to a centralized audit file"
-homepage: https://docs.clawd.bot/hooks#command-logger
+homepage: https://docs.molt.bot/hooks#command-logger
metadata:
{
"clawdbot":
diff --git a/src/hooks/bundled/session-memory/HOOK.md b/src/hooks/bundled/session-memory/HOOK.md
index cc3eab0a2..bb3ac1468 100644
--- a/src/hooks/bundled/session-memory/HOOK.md
+++ b/src/hooks/bundled/session-memory/HOOK.md
@@ -1,7 +1,7 @@
---
name: session-memory
description: "Save session context to memory when /new command is issued"
-homepage: https://docs.clawd.bot/hooks#session-memory
+homepage: https://docs.molt.bot/hooks#session-memory
metadata:
{
"clawdbot":
diff --git a/src/hooks/bundled/soul-evil/HOOK.md b/src/hooks/bundled/soul-evil/HOOK.md
index 776163bd0..7bb50620b 100644
--- a/src/hooks/bundled/soul-evil/HOOK.md
+++ b/src/hooks/bundled/soul-evil/HOOK.md
@@ -1,7 +1,7 @@
---
name: soul-evil
description: "Swap SOUL.md with SOUL_EVIL.md during a purge window or by random chance"
-homepage: https://docs.clawd.bot/hooks/soul-evil
+homepage: https://docs.molt.bot/hooks/soul-evil
metadata:
{
"clawdbot":
diff --git a/src/hooks/bundled/soul-evil/README.md b/src/hooks/bundled/soul-evil/README.md
index 3f0e09a85..a49bfe33d 100644
--- a/src/hooks/bundled/soul-evil/README.md
+++ b/src/hooks/bundled/soul-evil/README.md
@@ -2,7 +2,7 @@
Small persona swap hook for Clawdbot.
-Docs: https://docs.clawd.bot/hooks/soul-evil
+Docs: https://docs.molt.bot/hooks/soul-evil
## Setup
diff --git a/src/hooks/frontmatter.test.ts b/src/hooks/frontmatter.test.ts
index 761eaa75f..91545796d 100644
--- a/src/hooks/frontmatter.test.ts
+++ b/src/hooks/frontmatter.test.ts
@@ -233,7 +233,7 @@ describe("resolveClawdbotMetadata", () => {
const content = `---
name: session-memory
description: "Save session context to memory when /new command is issued"
-homepage: https://docs.clawd.bot/hooks#session-memory
+homepage: https://docs.molt.bot/hooks#session-memory
metadata:
{
"clawdbot":
diff --git a/src/infra/clawdbot-root.ts b/src/infra/clawdbot-root.ts
index 9a3443ffb..d7d20467f 100644
--- a/src/infra/clawdbot-root.ts
+++ b/src/infra/clawdbot-root.ts
@@ -2,6 +2,8 @@ import fs from "node:fs/promises";
import path from "node:path";
import { fileURLToPath } from "node:url";
+const CORE_PACKAGE_NAMES = new Set(["moltbot", "clawdbot"]);
+
async function readPackageName(dir: string): Promise {
try {
const raw = await fs.readFile(path.join(dir, "package.json"), "utf-8");
@@ -16,7 +18,7 @@ async function findPackageRoot(startDir: string, maxDepth = 12): Promise {
@@ -714,7 +732,8 @@ export async function runGatewayUpdate(opts: UpdateRunnerOptions = {}): Promise<
const beforeVersion = await readPackageVersion(pkgRoot);
const globalManager = await detectGlobalInstallManagerForRoot(runCommand, pkgRoot, timeoutMs);
if (globalManager) {
- const spec = `clawdbot@${normalizeTag(opts.tag)}`;
+ const packageName = (await readPackageName(pkgRoot)) ?? DEFAULT_PACKAGE_NAME;
+ const spec = `${packageName}@${normalizeTag(opts.tag)}`;
const updateStep = await runStep({
runCommand,
name: "global update",
diff --git a/src/pairing/pairing-messages.test.ts b/src/pairing/pairing-messages.test.ts
index 416a6ab19..1997a0e30 100644
--- a/src/pairing/pairing-messages.test.ts
+++ b/src/pairing/pairing-messages.test.ts
@@ -52,9 +52,10 @@ describe("buildPairingReply", () => {
expect(text).toContain(testCase.idLine);
expect(text).toContain(`Pairing code: ${testCase.code}`);
// CLI commands should respect CLAWDBOT_PROFILE when set (most tests run with isolated profile)
- expect(text).toContain(
- `clawdbot --profile isolated pairing approve ${testCase.channel} `,
+ const commandRe = new RegExp(
+ `(?:clawdbot|moltbot) --profile isolated pairing approve ${testCase.channel} `,
);
+ expect(text).toMatch(commandRe);
});
}
});
diff --git a/src/plugins/loader.ts b/src/plugins/loader.ts
index 931c15d59..178e2d3c2 100644
--- a/src/plugins/loader.ts
+++ b/src/plugins/loader.ts
@@ -206,7 +206,14 @@ export function loadClawdbotPlugins(options: PluginLoadOptions = {}): PluginRegi
const jiti = createJiti(import.meta.url, {
interopDefault: true,
extensions: [".ts", ".tsx", ".mts", ".cts", ".mtsx", ".ctsx", ".js", ".mjs", ".cjs", ".json"],
- ...(pluginSdkAlias ? { alias: { "clawdbot/plugin-sdk": pluginSdkAlias } } : {}),
+ ...(pluginSdkAlias
+ ? {
+ alias: {
+ "clawdbot/plugin-sdk": pluginSdkAlias,
+ "moltbot/plugin-sdk": pluginSdkAlias,
+ },
+ }
+ : {}),
});
const manifestByRoot = new Map(
diff --git a/src/telegram/bot.media.downloads-media-file-path-no-file-download.test.ts b/src/telegram/bot.media.downloads-media-file-path-no-file-download.test.ts
index 165488426..58ecc8d7a 100644
--- a/src/telegram/bot.media.downloads-media-file-path-no-file-download.test.ts
+++ b/src/telegram/bot.media.downloads-media-file-path-no-file-download.test.ts
@@ -105,7 +105,8 @@ vi.mock("../auto-reply/reply.js", () => {
});
describe("telegram inbound media", () => {
- const INBOUND_MEDIA_TEST_TIMEOUT_MS = process.platform === "win32" ? 30_000 : 20_000;
+ // Parallel vitest shards can make this suite slower than the standalone run.
+ const INBOUND_MEDIA_TEST_TIMEOUT_MS = process.platform === "win32" ? 60_000 : 45_000;
it(
"downloads media via file_path (no file.download)",
diff --git a/src/terminal/links.ts b/src/terminal/links.ts
index b26ff37bb..0d965633a 100644
--- a/src/terminal/links.ts
+++ b/src/terminal/links.ts
@@ -1,6 +1,6 @@
import { formatTerminalLink } from "../utils.js";
-export const DOCS_ROOT = "https://docs.clawd.bot";
+export const DOCS_ROOT = "https://docs.molt.bot";
export function formatDocsLink(
path: string,
diff --git a/src/wizard/onboarding.finalize.ts b/src/wizard/onboarding.finalize.ts
index 32ab53dcf..670b4eaf6 100644
--- a/src/wizard/onboarding.finalize.ts
+++ b/src/wizard/onboarding.finalize.ts
@@ -214,8 +214,8 @@ export async function finalizeOnboardingWizard(options: FinalizeOnboardingOption
await prompter.note(
[
"Docs:",
- "https://docs.clawd.bot/gateway/health",
- "https://docs.clawd.bot/gateway/troubleshooting",
+ "https://docs.molt.bot/gateway/health",
+ "https://docs.molt.bot/gateway/troubleshooting",
].join("\n"),
"Health check help",
);
@@ -277,7 +277,7 @@ export async function finalizeOnboardingWizard(options: FinalizeOnboardingOption
tokenParam ? `Web UI (with token): ${authedUrl}` : undefined,
`Gateway WS: ${links.wsUrl}`,
gatewayStatusLine,
- "Docs: https://docs.clawd.bot/web/control-ui",
+ "Docs: https://docs.molt.bot/web/control-ui",
]
.filter(Boolean)
.join("\n"),
@@ -383,14 +383,14 @@ export async function finalizeOnboardingWizard(options: FinalizeOnboardingOption
}
await prompter.note(
- ["Back up your agent workspace.", "Docs: https://docs.clawd.bot/concepts/agent-workspace"].join(
+ ["Back up your agent workspace.", "Docs: https://docs.molt.bot/concepts/agent-workspace"].join(
"\n",
),
"Workspace backup",
);
await prompter.note(
- "Running agents on your computer is risky — harden your setup: https://docs.clawd.bot/security",
+ "Running agents on your computer is risky — harden your setup: https://docs.molt.bot/security",
"Security",
);
@@ -443,7 +443,7 @@ export async function finalizeOnboardingWizard(options: FinalizeOnboardingOption
webSearchKey
? "API key: stored in config (tools.web.search.apiKey)."
: "API key: provided via BRAVE_API_KEY env var (Gateway environment).",
- "Docs: https://docs.clawd.bot/tools/web",
+ "Docs: https://docs.molt.bot/tools/web",
].join("\n")
: [
"If you want your agent to be able to search the web, you’ll need an API key.",
@@ -455,13 +455,13 @@ export async function finalizeOnboardingWizard(options: FinalizeOnboardingOption
"- Enable web_search and paste your Brave Search API key",
"",
"Alternative: set BRAVE_API_KEY in the Gateway environment (no config changes).",
- "Docs: https://docs.clawd.bot/tools/web",
+ "Docs: https://docs.molt.bot/tools/web",
].join("\n"),
"Web search (optional)",
);
await prompter.note(
- 'What now: https://clawd.bot/showcase ("What People Are Building").',
+ 'What now: https://molt.bot/showcase ("What People Are Building").',
"What now",
);
diff --git a/src/wizard/onboarding.gateway-config.ts b/src/wizard/onboarding.gateway-config.ts
index c68836b32..f8d56af62 100644
--- a/src/wizard/onboarding.gateway-config.ts
+++ b/src/wizard/onboarding.gateway-config.ts
@@ -145,9 +145,7 @@ export async function configureGatewayForOnboarding(
let tailscaleResetOnExit = flow === "quickstart" ? quickstartGateway.tailscaleResetOnExit : false;
if (tailscaleMode !== "off" && flow !== "quickstart") {
await prompter.note(
- ["Docs:", "https://docs.clawd.bot/gateway/tailscale", "https://docs.clawd.bot/web"].join(
- "\n",
- ),
+ ["Docs:", "https://docs.molt.bot/gateway/tailscale", "https://docs.molt.bot/web"].join("\n"),
"Tailscale",
);
tailscaleResetOnExit = Boolean(
diff --git a/src/wizard/onboarding.ts b/src/wizard/onboarding.ts
index 39d17befa..52f9285aa 100644
--- a/src/wizard/onboarding.ts
+++ b/src/wizard/onboarding.ts
@@ -70,7 +70,7 @@ async function requireRiskAcknowledgement(params: {
"clawdbot security audit --deep",
"clawdbot security audit --fix",
"",
- "Must read: https://docs.clawd.bot/gateway/security",
+ "Must read: https://docs.molt.bot/gateway/security",
].join("\n"),
"Security",
);
@@ -103,7 +103,7 @@ export async function runOnboardingWizard(
[
...snapshot.issues.map((iss) => `- ${iss.path}: ${iss.message}`),
"",
- "Docs: https://docs.clawd.bot/gateway/configuration",
+ "Docs: https://docs.molt.bot/gateway/configuration",
].join("\n"),
"Config issues",
);
diff --git a/ui/src/ui/app-render.ts b/ui/src/ui/app-render.ts
index fe67c86f1..49f72de8c 100644
--- a/ui/src/ui/app-render.ts
+++ b/ui/src/ui/app-render.ts
@@ -180,7 +180,7 @@ export function renderApp(state: AppViewState) {
·
Date: Tue, 27 Jan 2026 12:19:58 +0000
Subject: [PATCH 2/3] refactor: rename clawdbot to moltbot with legacy compat
---
AGENTS.md | 36 +-
CHANGELOG.md | 120 ++--
CONTRIBUTING.md | 12 +-
Dockerfile.sandbox-browser | 6 +-
SECURITY.md | 14 +-
appcast.xml | 36 +-
apps/android/app/build.gradle.kts | 2 +-
apps/android/app/src/main/AndroidManifest.xml | 2 +-
.../java/com/clawdbot/android/MainActivity.kt | 4 +-
.../clawdbot/android/NodeForegroundService.kt | 6 +-
.../java/com/clawdbot/android/NodeRuntime.kt | 110 ++--
.../clawdbot/android/PermissionRequester.kt | 2 +-
.../android/ScreenCaptureRequester.kt | 2 +-
.../java/com/clawdbot/android/SecurePrefs.kt | 2 +-
.../android/gateway/DeviceIdentityStore.kt | 2 +-
.../android/gateway/GatewayDiscovery.kt | 6 +-
.../android/gateway/GatewaySession.kt | 4 +-
.../android/node/CameraCaptureManager.kt | 4 +-
.../clawdbot/android/node/CanvasController.kt | 6 +-
.../android/node/ScreenRecordManager.kt | 4 +-
.../protocol/ClawdbotCanvasA2UIAction.kt | 4 +-
.../protocol/ClawdbotProtocolConstants.kt | 14 +-
.../com/clawdbot/android/ui/ClawdbotTheme.kt | 2 +-
.../com/clawdbot/android/ui/RootScreen.kt | 14 +-
.../com/clawdbot/android/ui/SettingsSheet.kt | 6 +-
.../app/src/main/res/values/strings.xml | 2 +-
.../app/src/main/res/values/themes.xml | 2 +-
.../main/res/xml/network_security_config.xml | 2 +-
.../android/gateway/BonjourEscapesTest.kt | 2 +-
.../protocol/ClawdbotCanvasA2UIActionTest.kt | 14 +-
.../protocol/ClawdbotProtocolConstantsTest.kt | 28 +-
apps/android/settings.gradle.kts | 2 +-
.../ios/Sources/Camera/CameraController.swift | 12 +-
apps/ios/Sources/Chat/ChatSheet.swift | 10 +-
.../Chat/IOSGatewayChatTransport.swift | 32 +-
apps/ios/Sources/ClawdbotApp.swift | 2 +-
.../Gateway/GatewayConnectionController.swift | 54 +-
.../Gateway/GatewayDiscoveryModel.swift | 8 +-
apps/ios/Sources/Info.plist | 16 +-
.../Sources/Location/LocationService.swift | 10 +-
apps/ios/Sources/Model/NodeAppModel.swift | 146 ++---
.../ios/Sources/Screen/ScreenController.swift | 18 +-
.../Sources/Screen/ScreenRecordService.swift | 2 +-
apps/ios/Sources/Screen/ScreenTab.swift | 2 +-
apps/ios/Sources/Screen/ScreenWebView.swift | 2 +-
apps/ios/Sources/Settings/SettingsTab.swift | 20 +-
.../Settings/VoiceWakeWordsSettingsView.swift | 2 +-
apps/ios/Sources/Voice/TalkModeManager.swift | 4 +-
apps/ios/Tests/AppCoverageTests.swift | 2 +-
.../Tests/CameraControllerClampTests.swift | 2 +-
.../Tests/CameraControllerErrorTests.swift | 2 +-
apps/ios/Tests/DeepLinkParserTests.swift | 16 +-
.../GatewayConnectionControllerTests.swift | 20 +-
.../Tests/GatewayDiscoveryModelTests.swift | 2 +-
apps/ios/Tests/GatewayEndpointIDTests.swift | 14 +-
.../ios/Tests/GatewaySettingsStoreTests.swift | 2 +-
.../Tests/IOSGatewayChatTransportTests.swift | 4 +-
apps/ios/Tests/Info.plist | 2 +-
apps/ios/Tests/KeychainStoreTests.swift | 2 +-
apps/ios/Tests/NodeAppModelInvokeTests.swift | 34 +-
apps/ios/Tests/ScreenControllerTests.swift | 2 +-
apps/ios/Tests/ScreenRecordServiceTests.swift | 2 +-
.../SettingsNetworkingHelpersTests.swift | 2 +-
apps/ios/Tests/SwiftUIRenderSmokeTests.swift | 6 +-
.../ios/Tests/VoiceWakeGatewaySyncTests.swift | 2 +-
.../VoiceWakeManagerExtractCommandTests.swift | 2 +-
.../Tests/VoiceWakeManagerStateTests.swift | 2 +-
.../ios/Tests/VoiceWakePreferencesTests.swift | 2 +-
apps/ios/fastlane/Fastfile | 4 +-
apps/ios/fastlane/SETUP.md | 2 +-
apps/ios/project.yml | 46 +-
apps/macos/Icon.icon/icon.json | 4 +-
apps/macos/Package.swift | 54 +-
.../Sources/Clawdbot/AboutSettings.swift | 10 +-
.../Sources/Clawdbot/AgentEventsWindow.swift | 8 +-
.../Sources/Clawdbot/AgentWorkspace.swift | 6 +-
.../Clawdbot/AnthropicAuthControls.swift | 18 +-
.../Sources/Clawdbot/AnthropicOAuth.swift | 18 +-
.../Sources/Clawdbot/AnyCodable+Helpers.swift | 20 +-
apps/macos/Sources/Clawdbot/AppState.swift | 20 +-
.../Sources/Clawdbot/CLIInstallPrompter.swift | 2 +-
.../macos/Sources/Clawdbot/CLIInstaller.swift | 6 +-
.../Clawdbot/CameraCaptureService.swift | 8 +-
.../CanvasA2UIActionMessageHandler.swift | 18 +-
.../Sources/Clawdbot/CanvasManager.swift | 8 +-
.../macos/Sources/Clawdbot/CanvasScheme.swift | 2 +-
.../Clawdbot/CanvasSchemeHandler.swift | 4 +-
.../CanvasWindowController+Helpers.swift | 2 +-
.../CanvasWindowController+Navigation.swift | 2 +-
.../CanvasWindowController+Window.swift | 4 +-
.../Clawdbot/CanvasWindowController.swift | 16 +-
.../ChannelsSettings+ChannelState.swift | 2 +-
.../Clawdbot/ChannelsStore+Config.swift | 4 +-
.../Clawdbot/ChannelsStore+Lifecycle.swift | 2 +-
.../Sources/Clawdbot/ChannelsStore.swift | 2 +-
.../Sources/Clawdbot/ClawdbotConfigFile.swift | 10 +-
.../Sources/Clawdbot/ClawdbotPaths.swift | 10 +-
.../Sources/Clawdbot/CommandResolver.swift | 68 +--
.../Sources/Clawdbot/ConfigSettings.swift | 2 +-
apps/macos/Sources/Clawdbot/ConfigStore.swift | 6 +-
.../Clawdbot/ConnectionModeResolver.swift | 2 +-
apps/macos/Sources/Clawdbot/Constants.swift | 70 +--
.../Sources/Clawdbot/ControlChannel.swift | 24 +-
.../Clawdbot/CronJobEditor+Helpers.swift | 2 +-
.../Sources/Clawdbot/CronJobEditor.swift | 2 +-
.../Sources/Clawdbot/CronJobsStore.swift | 4 +-
.../Clawdbot/CronSettings+Actions.swift | 2 +-
.../Clawdbot/CronSettings+Testing.swift | 2 +-
.../macos/Sources/Clawdbot/DebugActions.swift | 8 +-
.../Sources/Clawdbot/DebugSettings.swift | 26 +-
apps/macos/Sources/Clawdbot/DeepLinks.swift | 6 +-
.../DevicePairingApprovalPrompter.swift | 4 +-
.../Sources/Clawdbot/DiagnosticsFileLog.swift | 2 +-
.../Sources/Clawdbot/ExecApprovals.swift | 4 +-
.../ExecApprovalsGatewayPrompter.swift | 4 +-
.../Clawdbot/ExecApprovalsSocket.swift | 2 +-
.../Sources/Clawdbot/GatewayConnection.swift | 20 +-
.../Clawdbot/GatewayDiscoveryHelpers.swift | 2 +-
.../Clawdbot/GatewayDiscoveryMenu.swift | 4 +-
.../Clawdbot/GatewayEndpointStore.swift | 28 +-
.../Sources/Clawdbot/GatewayEnvironment.swift | 20 +-
.../Sources/Clawdbot/GeneralSettings.swift | 30 +-
apps/macos/Sources/Clawdbot/HealthStore.swift | 8 +-
.../Sources/Clawdbot/InstancesSettings.swift | 2 +-
.../Sources/Clawdbot/InstancesStore.swift | 6 +-
.../Sources/Clawdbot/LaunchAgentManager.swift | 2 +-
.../Sources/Clawdbot/LaunchdManager.swift | 4 +-
apps/macos/Sources/Clawdbot/LogLocator.swift | 10 +-
.../Clawdbot/Logging/ClawdbotLogging.swift | 16 +-
apps/macos/Sources/Clawdbot/MenuBar.swift | 4 +-
.../Sources/Clawdbot/MenuContentView.swift | 10 +-
.../Sources/Clawdbot/ModelCatalogLoader.swift | 2 +-
.../NodeMode/MacNodeLocationService.swift | 6 +-
.../NodeMode/MacNodeModeCoordinator.swift | 52 +-
.../Clawdbot/NodeMode/MacNodeRuntime.swift | 136 ++---
.../MacNodeRuntimeMainActorServices.swift | 6 +-
.../NodePairingApprovalPrompter.swift | 8 +-
.../Clawdbot/NotificationManager.swift | 2 +-
apps/macos/Sources/Clawdbot/Onboarding.swift | 18 +-
.../Clawdbot/OnboardingView+Actions.swift | 12 +-
.../Clawdbot/OnboardingView+Chat.swift | 2 +-
.../Clawdbot/OnboardingView+Layout.swift | 2 +-
.../Clawdbot/OnboardingView+Monitoring.swift | 12 +-
.../Clawdbot/OnboardingView+Pages.swift | 42 +-
.../Clawdbot/OnboardingView+Testing.swift | 10 +-
.../Clawdbot/OnboardingView+Wizard.swift | 2 +-
.../Sources/Clawdbot/OnboardingWidgets.swift | 2 +-
.../Sources/Clawdbot/OnboardingWizard.swift | 10 +-
.../PeekabooBridgeHostCoordinator.swift | 6 +-
.../Sources/Clawdbot/PermissionManager.swift | 4 +-
.../Clawdbot/PermissionsSettings.swift | 24 +-
.../macos/Sources/Clawdbot/PortGuardian.swift | 10 +-
.../Clawdbot/ProcessInfo+Clawdbot.swift | 2 +-
.../Sources/Clawdbot/RemotePortTunnel.swift | 2 +-
.../Clawdbot/RemoteTunnelManager.swift | 2 +-
.../Sources/Clawdbot/Resources/Info.plist | 30 +-
.../Sources/Clawdbot/RuntimeLocator.swift | 4 +-
.../Clawdbot/ScreenRecordService.swift | 2 +-
.../Clawdbot/SessionMenuPreviewView.swift | 30 +-
.../Sources/Clawdbot/SettingsRootView.swift | 6 +-
.../Sources/Clawdbot/ShellExecutor.swift | 2 +-
.../macos/Sources/Clawdbot/SkillsModels.swift | 2 +-
.../Sources/Clawdbot/SkillsSettings.swift | 12 +-
.../TailscaleIntegrationSection.swift | 6 +-
.../Sources/Clawdbot/TalkModeRuntime.swift | 8 +-
.../VoiceWakeGlobalSettingsSync.swift | 2 +-
.../Sources/Clawdbot/VoiceWakeOverlay.swift | 2 +-
.../Sources/Clawdbot/VoiceWakeSettings.swift | 2 +-
.../Sources/Clawdbot/WebChatSwiftUI.swift | 40 +-
.../Sources/Clawdbot/WorkActivityStore.swift | 16 +-
.../GatewayDiscoveryModel.swift | 16 +-
.../WideAreaGatewayDiscovery.swift | 12 +-
apps/macos/Sources/ClawdbotIPC/IPC.swift | 4 +-
.../ClawdbotMacCLI/ConnectCommand.swift | 16 +-
.../ClawdbotMacCLI/DiscoverCommand.swift | 6 +-
.../Sources/ClawdbotMacCLI/EntryPoint.swift | 20 +-
.../ClawdbotMacCLI/GatewayConfig.swift | 2 +-
.../Sources/ClawdbotMacCLI/TypeAliases.swift | 8 +-
.../ClawdbotMacCLI/WizardCommand.swift | 12 +-
.../AgentEventStoreTests.swift | 8 +-
.../AgentWorkspaceTests.swift | 12 +-
.../AnthropicAuthControlsSmokeTests.swift | 2 +-
.../AnthropicAuthResolverTests.swift | 6 +-
.../AnthropicOAuthCodeStateTests.swift | 2 +-
.../AnyCodableEncodingTests.swift | 8 +-
.../ClawdbotIPCTests/CLIInstallerTests.swift | 6 +-
.../CameraCaptureServiceTests.swift | 2 +-
.../ClawdbotIPCTests/CameraIPCTests.swift | 2 +-
.../CanvasFileWatcherTests.swift | 4 +-
.../ClawdbotIPCTests/CanvasIPCTests.swift | 2 +-
.../CanvasWindowSmokeTests.swift | 8 +-
.../ChannelsSettingsSmokeTests.swift | 8 +-
.../ClawdbotConfigFileTests.swift | 40 +-
.../ClawdbotOAuthStoreTests.swift | 24 +-
.../CommandResolverTests.swift | 28 +-
.../ClawdbotIPCTests/ConfigStoreTests.swift | 2 +-
.../CritterIconRendererTests.swift | 2 +-
.../CronJobEditorSmokeTests.swift | 2 +-
.../ClawdbotIPCTests/CronModelsTests.swift | 2 +-
.../DeviceModelCatalogTests.swift | 2 +-
.../ClawdbotIPCTests/ExecAllowlistTests.swift | 2 +-
.../ExecApprovalHelpersTests.swift | 2 +-
.../ExecApprovalsGatewayPrompterTests.swift | 2 +-
.../FileHandleLegacyAPIGuardTests.swift | 2 +-
.../FileHandleSafeReadTests.swift | 2 +-
.../GatewayAgentChannelTests.swift | 2 +-
.../GatewayAutostartPolicyTests.swift | 2 +-
.../GatewayChannelConfigureTests.swift | 4 +-
.../GatewayChannelConnectTests.swift | 4 +-
.../GatewayChannelRequestTests.swift | 4 +-
.../GatewayChannelShutdownTests.swift | 4 +-
.../GatewayConnectionControlTests.swift | 6 +-
.../GatewayDiscoveryModelTests.swift | 12 +-
.../GatewayEndpointStoreTests.swift | 2 +-
.../GatewayEnvironmentTests.swift | 2 +-
.../GatewayFrameDecodeTests.swift | 2 +-
.../GatewayLaunchAgentManagerTests.swift | 10 +-
.../GatewayProcessManagerTests.swift | 4 +-
.../ClawdbotIPCTests/HealthDecodeTests.swift | 2 +-
.../HealthStoreStateTests.swift | 2 +-
.../HoverHUDControllerTests.swift | 2 +-
.../InstancesSettingsSmokeTests.swift | 2 +-
.../InstancesStoreTests.swift | 12 +-
.../ClawdbotIPCTests/LogLocatorTests.swift | 4 +-
.../LowCoverageHelperTests.swift | 6 +-
.../LowCoverageViewSmokeTests.swift | 4 +-
.../MacGatewayChatTransportMappingTests.swift | 20 +-
.../MacNodeRuntimeTests.swift | 22 +-
.../MasterDiscoveryMenuSmokeTests.swift | 4 +-
.../MenuContentSmokeTests.swift | 2 +-
.../MenuSessionsInjectorTests.swift | 2 +-
.../ModelCatalogLoaderTests.swift | 2 +-
.../NodeManagerPathsTests.swift | 2 +-
.../NodePairingApprovalPrompterTests.swift | 2 +-
.../NodePairingReconcilePolicyTests.swift | 2 +-
.../OnboardingCoverageTests.swift | 2 +-
.../OnboardingViewSmokeTests.swift | 4 +-
.../OnboardingWizardStepViewTests.swift | 6 +-
.../PermissionManagerLocationTests.swift | 2 +-
.../PermissionManagerTests.swift | 4 +-
.../RemotePortTunnelTests.swift | 2 +-
.../RuntimeLocatorTests.swift | 2 +-
.../ScreenshotSizeTests.swift | 2 +-
.../Tests/ClawdbotIPCTests/SemverTests.swift | 2 +-
.../ClawdbotIPCTests/SessionDataTests.swift | 2 +-
.../SessionMenuPreviewTests.swift | 2 +-
.../SettingsViewSmokeTests.swift | 4 +-
.../SkillsSettingsSmokeTests.swift | 12 +-
.../TailscaleIntegrationSectionTests.swift | 4 +-
.../TalkAudioPlayerTests.swift | 2 +-
.../ClawdbotIPCTests/TestIsolation.swift | 2 +-
.../ClawdbotIPCTests/UtilitiesTests.swift | 10 +-
.../VoicePushToTalkHotkeyTests.swift | 2 +-
.../VoicePushToTalkTests.swift | 2 +-
.../VoiceWakeForwarderTests.swift | 2 +-
.../VoiceWakeGlobalSettingsSyncTests.swift | 8 +-
.../VoiceWakeHelpersTests.swift | 2 +-
.../VoiceWakeOverlayControllerTests.swift | 2 +-
.../VoiceWakeOverlayTests.swift | 2 +-
.../VoiceWakeOverlayViewSmokeTests.swift | 2 +-
.../VoiceWakeRuntimeTests.swift | 2 +-
.../WebChatMainSessionKeyTests.swift | 6 +-
.../WebChatManagerTests.swift | 2 +-
.../WebChatSwiftUISmokeTests.swift | 16 +-
.../WideAreaGatewayDiscoveryTests.swift | 10 +-
.../WindowPlacementTests.swift | 2 +-
.../WorkActivityStoreTests.swift | 6 +-
apps/shared/ClawdbotKit/Package.swift | 26 +-
.../Sources/ClawdbotChatUI/ChatComposer.swift | 32 +-
.../ChatMarkdownPreprocessor.swift | 6 +-
.../ClawdbotChatUI/ChatMarkdownRenderer.swift | 2 +-
.../ClawdbotChatUI/ChatMessageViews.swift | 50 +-
.../Sources/ClawdbotChatUI/ChatModels.swift | 64 +-
.../ClawdbotChatUI/ChatPayloadDecoding.swift | 2 +-
.../Sources/ClawdbotChatUI/ChatSessions.swift | 10 +-
.../Sources/ClawdbotChatUI/ChatSheets.swift | 2 +-
.../Sources/ClawdbotChatUI/ChatTheme.swift | 10 +-
.../ClawdbotChatUI/ChatTransport.swift | 24 +-
.../Sources/ClawdbotChatUI/ChatView.swift | 32 +-
.../ClawdbotChatUI/ChatViewModel.swift | 66 +--
.../Sources/ClawdbotKit/BonjourTypes.swift | 6 +-
.../Sources/ClawdbotKit/BridgeFrames.swift | 4 +-
.../Sources/ClawdbotKit/CameraCommands.swift | 28 +-
.../ClawdbotKit/CanvasA2UIAction.swift | 4 +-
.../ClawdbotKit/CanvasA2UICommands.swift | 6 +-
.../Sources/ClawdbotKit/CanvasA2UIJSONL.swift | 2 +-
.../ClawdbotKit/CanvasCommandParams.swift | 20 +-
.../Sources/ClawdbotKit/CanvasCommands.swift | 2 +-
.../Sources/ClawdbotKit/Capabilities.swift | 2 +-
.../ClawdbotKit/ClawdbotKitResources.swift | 6 +-
.../Sources/ClawdbotKit/DeepLinks.swift | 2 +-
.../Sources/ClawdbotKit/DeviceIdentity.swift | 4 +-
.../Sources/ClawdbotKit/GatewayChannel.swift | 6 +-
.../Sources/ClawdbotKit/GatewayErrors.swift | 2 +-
.../ClawdbotKit/GatewayNodeSession.swift | 4 +-
.../ClawdbotKit/GatewayPayloadDecoding.swift | 6 +-
.../Sources/ClawdbotKit/GatewayPush.swift | 2 +-
.../ClawdbotKit/InstanceIdentity.swift | 4 +-
.../ClawdbotKit/LocationCommands.swift | 12 +-
.../ClawdbotKit/LocationSettings.swift | 2 +-
.../Sources/ClawdbotKit/NodeError.swift | 8 +-
.../Resources/CanvasScaffold/scaffold.html | 36 +-
.../Sources/ClawdbotKit/ScreenCommands.swift | 4 +-
.../Sources/ClawdbotKit/StoragePaths.swift | 10 +-
.../Sources/ClawdbotKit/SystemCommands.swift | 20 +-
.../Sources/ClawdbotKit/ToolDisplay.swift | 2 +-
.../AssistantTextParserTests.swift | 2 +-
.../BonjourEscapesTests.swift | 4 +-
.../CanvasA2UIActionTests.swift | 20 +-
.../ClawdbotKitTests/CanvasA2UITests.swift | 14 +-
.../CanvasSnapshotFormatTests.swift | 4 +-
.../ChatMarkdownPreprocessorTests.swift | 2 +-
.../ClawdbotKitTests/ChatThemeTests.swift | 6 +-
.../ClawdbotKitTests/ChatViewModelTests.swift | 94 +--
.../ElevenLabsTTSValidationTests.swift | 2 +-
.../GatewayNodeSessionTests.swift | 4 +-
.../JPEGTranscoderTests.swift | 2 +-
.../ClawdbotKitTests/TalkDirectiveTests.swift | 2 +-
.../TalkHistoryTimestampTests.swift | 2 +-
.../TalkPromptBuilderTests.swift | 2 +-
.../ToolDisplayRegistryTests.swift | 4 +-
.../ClawdbotKit/Tools/CanvasA2UI/bootstrap.js | 43 +-
.../Tools/CanvasA2UI/rolldown.config.mjs | 2 +-
assets/chrome-extension/background.js | 10 +-
assets/chrome-extension/manifest.json | 6 +-
assets/chrome-extension/options.html | 8 +-
assets/chrome-extension/options.js | 2 +-
docker-compose.yml | 8 +-
docker-setup.sh | 20 +-
docs.acp.md | 44 +-
docs/_config.yml | 4 +-
docs/_layouts/default.html | 18 +-
docs/assets/theme.js | 2 +-
docs/automation/auth-monitoring.md | 14 +-
docs/automation/cron-jobs.md | 26 +-
docs/automation/cron-vs-heartbeat.md | 14 +-
docs/automation/gmail-pubsub.md | 42 +-
docs/automation/poll.md | 12 +-
docs/automation/webhook.md | 10 +-
docs/bedrock.md | 20 +-
docs/brave-search.md | 2 +-
docs/broadcast-groups.md | 6 +-
docs/channels/bluebubbles.md | 24 +-
docs/channels/discord.md | 26 +-
docs/channels/googlechat.md | 28 +-
docs/channels/imessage.md | 20 +-
docs/channels/index.md | 8 +-
docs/channels/line.md | 12 +-
docs/channels/location.md | 2 +-
docs/channels/matrix.md | 24 +-
docs/channels/mattermost.md | 16 +-
docs/channels/msteams.md | 50 +-
docs/channels/nextcloud-talk.md | 14 +-
docs/channels/nostr.md | 18 +-
docs/channels/signal.md | 18 +-
docs/channels/slack.md | 26 +-
docs/channels/telegram.md | 44 +-
docs/channels/tlon.md | 10 +-
docs/channels/troubleshooting.md | 4 +-
docs/channels/twitch.md | 22 +-
docs/channels/whatsapp.md | 46 +-
docs/channels/zalo.md | 16 +-
docs/channels/zalouser.md | 24 +-
docs/cli/acp.md | 48 +-
docs/cli/agent.md | 12 +-
docs/cli/agents.md | 18 +-
docs/cli/approvals.md | 26 +-
docs/cli/browser.md | 48 +-
docs/cli/channels.md | 42 +-
docs/cli/config.md | 30 +-
docs/cli/configure.md | 12 +-
docs/cli/cron.md | 10 +-
docs/cli/dashboard.md | 8 +-
docs/cli/devices.md | 26 +-
docs/cli/directory.md | 24 +-
docs/cli/dns.md | 10 +-
docs/cli/docs.md | 10 +-
docs/cli/doctor.md | 12 +-
docs/cli/gateway.md | 48 +-
docs/cli/health.md | 10 +-
docs/cli/hooks.md | 54 +-
docs/cli/index.md | 78 +--
docs/cli/logs.md | 12 +-
docs/cli/memory.md | 22 +-
docs/cli/message.md | 22 +-
docs/cli/models.md | 30 +-
docs/cli/node.md | 24 +-
docs/cli/nodes.md | 28 +-
docs/cli/onboard.md | 14 +-
docs/cli/pairing.md | 8 +-
docs/cli/plugins.md | 32 +-
docs/cli/reset.md | 10 +-
docs/cli/sandbox.md | 56 +-
docs/cli/security.md | 10 +-
docs/cli/sessions.md | 10 +-
docs/cli/setup.md | 12 +-
docs/cli/skills.md | 12 +-
docs/cli/status.md | 14 +-
docs/cli/system.md | 12 +-
docs/cli/tui.md | 10 +-
docs/cli/uninstall.md | 10 +-
docs/cli/update.md | 40 +-
docs/cli/voicecall.md | 18 +-
docs/cli/webhooks.md | 10 +-
docs/concepts/agent-loop.md | 10 +-
docs/concepts/agent-workspace.md | 22 +-
docs/concepts/agent.md | 20 +-
docs/concepts/architecture.md | 2 +-
docs/concepts/channel-routing.md | 4 +-
docs/concepts/compaction.md | 10 +-
docs/concepts/context.md | 12 +-
docs/concepts/group-messages.md | 10 +-
docs/concepts/groups.md | 10 +-
docs/concepts/markdown-formatting.md | 2 +-
docs/concepts/memory.md | 24 +-
docs/concepts/messages.md | 8 +-
docs/concepts/model-failover.md | 22 +-
docs/concepts/model-providers.md | 42 +-
docs/concepts/models.md | 46 +-
docs/concepts/multi-agent.md | 10 +-
docs/concepts/oauth.md | 36 +-
docs/concepts/presence.md | 4 +-
docs/concepts/retry.md | 2 +-
docs/concepts/session-pruning.md | 2 +-
docs/concepts/session-tool.md | 8 +-
docs/concepts/session.md | 22 +-
docs/concepts/streaming.md | 6 +-
docs/concepts/system-prompt.md | 22 +-
docs/concepts/timezone.md | 4 +-
docs/concepts/typebox.md | 4 +-
docs/concepts/typing-indicators.md | 4 +-
docs/concepts/usage-tracking.md | 6 +-
docs/date-time.md | 4 +-
docs/debug/node-issue.md | 8 +-
docs/debugging.md | 18 +-
docs/diagnostics/flags.md | 10 +-
docs/docs.json | 6 +-
docs/environment.md | 6 +-
docs/experiments/plans/cron-add-hardening.md | 2 +-
.../plans/openresponses-gateway.md | 4 +-
docs/experiments/research/memory.md | 12 +-
docs/gateway/authentication.md | 38 +-
docs/gateway/background-process.md | 2 +-
docs/gateway/bonjour.md | 42 +-
docs/gateway/bridge-protocol.md | 4 +-
docs/gateway/cli-backends.md | 24 +-
docs/gateway/configuration-examples.md | 20 +-
docs/gateway/configuration.md | 176 +++---
docs/gateway/discovery.md | 12 +-
docs/gateway/doctor.md | 42 +-
docs/gateway/gateway-lock.md | 2 +-
docs/gateway/health.md | 18 +-
docs/gateway/heartbeat.md | 10 +-
docs/gateway/index.md | 96 +--
docs/gateway/local-models.md | 4 +-
docs/gateway/logging.md | 16 +-
docs/gateway/multiple-gateways.md | 32 +-
docs/gateway/openai-http-api.md | 20 +-
docs/gateway/openresponses-http-api.md | 20 +-
docs/gateway/pairing.md | 10 +-
docs/gateway/protocol.md | 6 +-
docs/gateway/remote-gateway-readme.md | 16 +-
docs/gateway/remote.md | 6 +-
.../sandbox-vs-tool-policy-vs-elevated.md | 14 +-
docs/gateway/sandboxing.md | 10 +-
docs/gateway/security/formal-verification.md | 14 +-
docs/gateway/security/index.md | 60 +-
docs/gateway/tailscale.md | 14 +-
docs/gateway/tools-invoke-http-api.md | 6 +-
docs/gateway/troubleshooting.md | 192 +++---
docs/help/faq.md | 548 +++++++++---------
docs/help/troubleshooting.md | 20 +-
docs/hooks.md | 86 +--
docs/hooks/soul-evil.md | 4 +-
docs/index.md | 66 +--
docs/install/ansible.md | 70 +--
docs/install/development-channels.md | 20 +-
docs/install/docker.md | 54 +-
docs/install/index.md | 40 +-
docs/install/installer.md | 22 +-
docs/install/migrating.md | 34 +-
docs/install/nix.md | 32 +-
docs/install/node.md | 8 +-
docs/install/uninstall.md | 42 +-
docs/install/updating.md | 12 +-
docs/logging.md | 116 ++--
docs/multi-agent-sandbox-tools.md | 10 +-
docs/network.md | 2 +-
docs/nodes/audio.md | 4 +-
docs/nodes/camera.md | 36 +-
docs/nodes/images.md | 8 +-
docs/nodes/index.md | 100 ++--
docs/nodes/location-command.md | 4 +-
docs/nodes/media-understanding.md | 10 +-
docs/nodes/talk.md | 2 +-
docs/nodes/voicewake.md | 2 +-
docs/northflank.mdx | 18 +-
docs/perplexity.md | 4 +-
docs/platforms/android.md | 26 +-
docs/platforms/digitalocean.md | 46 +-
docs/platforms/exe-dev.md | 46 +-
docs/platforms/fly.md | 46 +-
docs/platforms/gcp.md | 70 +--
docs/platforms/hetzner.md | 40 +-
docs/platforms/index.md | 14 +-
docs/platforms/ios.md | 26 +-
docs/platforms/linux.md | 22 +-
docs/platforms/mac/bundled-gateway.md | 22 +-
docs/platforms/mac/canvas.md | 28 +-
docs/platforms/mac/child-process.md | 2 +-
docs/platforms/mac/dev-setup.md | 20 +-
docs/platforms/mac/health.md | 4 +-
docs/platforms/mac/icon.md | 2 +-
docs/platforms/mac/logging.md | 8 +-
docs/platforms/mac/menu-bar.md | 2 +-
docs/platforms/mac/peekaboo.md | 18 +-
docs/platforms/mac/permissions.md | 2 +-
docs/platforms/mac/release.md | 32 +-
docs/platforms/mac/remote.md | 28 +-
docs/platforms/mac/signing.md | 12 +-
docs/platforms/mac/skills.md | 4 +-
docs/platforms/mac/webchat.md | 2 +-
docs/platforms/mac/xpc.md | 8 +-
docs/platforms/macos-vm.md | 54 +-
docs/platforms/macos.md | 28 +-
docs/platforms/oracle.md | 62 +-
docs/platforms/raspberry-pi.md | 42 +-
docs/platforms/windows.md | 22 +-
docs/plugin.md | 114 ++--
docs/plugins/agent-tools.md | 2 +-
docs/plugins/manifest.md | 8 +-
docs/plugins/voice-call.md | 24 +-
docs/plugins/zalouser.md | 18 +-
docs/prose.md | 18 +-
docs/providers/anthropic.md | 32 +-
docs/providers/claude-max-api-proxy.md | 8 +-
docs/providers/deepgram.md | 4 +-
docs/providers/github-copilot.md | 22 +-
docs/providers/glm.md | 8 +-
docs/providers/index.md | 6 +-
docs/providers/minimax.md | 18 +-
docs/providers/models.md | 6 +-
docs/providers/moonshot.md | 4 +-
docs/providers/ollama.md | 22 +-
docs/providers/openai.md | 12 +-
docs/providers/opencode.md | 6 +-
docs/providers/openrouter.md | 6 +-
docs/providers/qwen.md | 12 +-
docs/providers/synthetic.md | 8 +-
docs/providers/venice.md | 42 +-
docs/providers/vercel-ai-gateway.md | 6 +-
docs/providers/zai.md | 10 +-
docs/railway.mdx | 10 +-
docs/refactor/plugin-sdk.md | 20 +-
docs/refactor/strict-config.md | 22 +-
docs/reference/AGENTS.default.md | 20 +-
docs/reference/RELEASING.md | 50 +-
docs/reference/api-usage-costs.md | 12 +-
docs/reference/device-models.md | 14 +-
docs/reference/rpc.md | 6 +-
.../session-management-compaction.md | 34 +-
docs/reference/templates/AGENTS.dev.md | 2 +-
docs/reference/templates/BOOT.md | 2 +-
docs/reference/templates/TOOLS.dev.md | 2 +-
docs/reference/templates/USER.dev.md | 4 +-
docs/reference/test.md | 4 +-
docs/reference/transcript-hygiene.md | 2 +-
docs/render.mdx | 18 +-
docs/scripts.md | 2 +-
docs/security/formal-verification.md | 14 +-
docs/start/clawd.md | 54 +-
docs/start/getting-started.md | 46 +-
docs/start/hubs.md | 4 +-
docs/start/onboarding.md | 8 +-
docs/start/pairing.md | 16 +-
docs/start/setup.md | 30 +-
docs/start/showcase.md | 64 +-
docs/start/wizard.md | 44 +-
docs/testing.md | 20 +-
docs/token-use.md | 14 +-
docs/tools/agent-send.md | 20 +-
docs/tools/browser-linux-troubleshooting.md | 16 +-
docs/tools/browser-login.md | 8 +-
docs/tools/browser.md | 214 +++----
docs/tools/chrome-extension.md | 32 +-
docs/tools/clawdhub.md | 14 +-
docs/tools/creating-skills.md | 8 +-
docs/tools/exec-approvals.md | 4 +-
docs/tools/exec.md | 6 +-
docs/tools/firecrawl.md | 4 +-
docs/tools/index.md | 24 +-
docs/tools/llm-task.md | 2 +-
docs/tools/lobster.md | 16 +-
docs/tools/skills-config.md | 2 +-
docs/tools/skills.md | 42 +-
docs/tools/slash-commands.md | 14 +-
docs/tools/web.md | 12 +-
docs/tts.md | 18 +-
docs/tui.md | 14 +-
docs/vps.md | 2 +-
docs/web/control-ui.md | 16 +-
docs/web/dashboard.md | 8 +-
docs/web/index.md | 8 +-
extensions/bluebubbles/index.ts | 4 +-
extensions/bluebubbles/package.json | 4 +-
extensions/bluebubbles/src/accounts.ts | 16 +-
extensions/bluebubbles/src/actions.test.ts | 44 +-
extensions/bluebubbles/src/actions.ts | 10 +-
extensions/bluebubbles/src/attachments.ts | 4 +-
extensions/bluebubbles/src/channel.ts | 32 +-
extensions/bluebubbles/src/chat.ts | 4 +-
extensions/bluebubbles/src/media-send.ts | 4 +-
extensions/bluebubbles/src/monitor.test.ts | 94 +--
extensions/bluebubbles/src/monitor.ts | 10 +-
extensions/bluebubbles/src/onboarding.ts | 14 +-
extensions/bluebubbles/src/reactions.ts | 4 +-
extensions/bluebubbles/src/send.ts | 4 +-
extensions/copilot-proxy/package.json | 4 +-
extensions/diagnostics-otel/index.ts | 4 +-
extensions/diagnostics-otel/package.json | 4 +-
.../diagnostics-otel/src/service.test.ts | 24 +-
extensions/diagnostics-otel/src/service.ts | 168 +++---
extensions/discord/index.ts | 4 +-
extensions/discord/package.json | 4 +-
extensions/google-antigravity-auth/index.ts | 2 +-
.../google-antigravity-auth/package.json | 4 +-
extensions/google-gemini-cli-auth/oauth.ts | 4 +-
.../google-gemini-cli-auth/package.json | 4 +-
extensions/googlechat/index.ts | 6 +-
extensions/googlechat/package.json | 8 +-
extensions/googlechat/src/accounts.ts | 16 +-
extensions/googlechat/src/actions.ts | 12 +-
extensions/googlechat/src/api.ts | 2 +-
extensions/googlechat/src/channel.ts | 42 +-
extensions/googlechat/src/monitor.ts | 16 +-
extensions/googlechat/src/onboarding.ts | 20 +-
extensions/imessage/index.ts | 4 +-
extensions/imessage/package.json | 4 +-
extensions/line/index.ts | 4 +-
extensions/line/package.json | 6 +-
extensions/line/src/card-command.ts | 4 +-
extensions/line/src/channel.logout.test.ts | 8 +-
.../line/src/channel.sendPayload.test.ts | 16 +-
extensions/line/src/channel.ts | 8 +-
extensions/llm-task/index.ts | 4 +-
extensions/llm-task/package.json | 4 +-
extensions/llm-task/src/llm-task-tool.ts | 10 +-
extensions/lobster/index.ts | 4 +-
extensions/lobster/package.json | 2 +-
extensions/lobster/src/lobster-tool.test.ts | 14 +-
extensions/lobster/src/lobster-tool.ts | 4 +-
extensions/matrix/CHANGELOG.md | 18 +-
extensions/matrix/index.ts | 4 +-
extensions/matrix/package.json | 6 +-
extensions/matrix/src/matrix/client/config.ts | 2 +-
.../matrix/src/matrix/monitor/handler.ts | 4 +-
extensions/matrix/src/onboarding.ts | 2 +-
extensions/mattermost/index.ts | 4 +-
extensions/mattermost/package.json | 4 +-
.../mattermost/src/mattermost/accounts.ts | 16 +-
.../src/mattermost/monitor-helpers.ts | 10 +-
.../mattermost/src/mattermost/monitor.ts | 4 +-
.../mattermost/src/onboarding-helpers.ts | 6 +-
extensions/mattermost/src/onboarding.ts | 4 +-
extensions/memory-core/index.ts | 4 +-
extensions/memory-core/package.json | 6 +-
extensions/memory-lancedb/index.test.ts | 4 +-
extensions/memory-lancedb/index.ts | 6 +-
extensions/memory-lancedb/package.json | 4 +-
extensions/msteams/CHANGELOG.md | 14 +-
extensions/msteams/index.ts | 4 +-
extensions/msteams/package.json | 6 +-
.../msteams/src/channel.directory.test.ts | 4 +-
extensions/msteams/src/channel.ts | 4 +-
.../msteams/src/conversation-store-fs.test.ts | 2 +-
extensions/msteams/src/graph-upload.ts | 8 +-
extensions/msteams/src/monitor-handler.ts | 4 +-
extensions/msteams/src/monitor.ts | 4 +-
extensions/msteams/src/onboarding.ts | 18 +-
extensions/msteams/src/polls-store.test.ts | 2 +-
extensions/msteams/src/polls.test.ts | 4 +-
extensions/msteams/src/polls.ts | 16 +-
extensions/msteams/src/reply-dispatcher.ts | 4 +-
extensions/msteams/src/send-context.ts | 4 +-
extensions/msteams/src/send.ts | 8 +-
extensions/nextcloud-talk/index.ts | 4 +-
extensions/nextcloud-talk/package.json | 4 +-
extensions/nextcloud-talk/src/channel.ts | 14 +-
extensions/nextcloud-talk/src/inbound.ts | 14 +-
extensions/nextcloud-talk/src/onboarding.ts | 2 +-
extensions/nostr/CHANGELOG.md | 8 +-
extensions/nostr/index.ts | 10 +-
extensions/nostr/package.json | 6 +-
extensions/nostr/src/channel.ts | 2 +-
.../nostr/src/nostr-state-store.test.ts | 2 +-
extensions/nostr/src/types.ts | 8 +-
extensions/open-prose/index.ts | 4 +-
extensions/open-prose/package.json | 2 +-
extensions/open-prose/skills/prose/SKILL.md | 10 +-
extensions/open-prose/skills/prose/prose.md | 8 +-
extensions/signal/index.ts | 4 +-
extensions/signal/package.json | 4 +-
extensions/slack/index.ts | 4 +-
extensions/slack/package.json | 4 +-
extensions/telegram/index.ts | 4 +-
extensions/telegram/package.json | 4 +-
extensions/telegram/src/channel.ts | 4 +-
extensions/tlon/index.ts | 4 +-
extensions/tlon/package.json | 4 +-
extensions/tlon/src/channel.ts | 26 +-
extensions/tlon/src/monitor/index.ts | 6 +-
extensions/tlon/src/onboarding.ts | 6 +-
extensions/tlon/src/types.ts | 6 +-
extensions/twitch/CHANGELOG.md | 2 +-
extensions/twitch/index.ts | 4 +-
extensions/twitch/package.json | 6 +-
extensions/twitch/src/actions.ts | 2 +-
extensions/twitch/src/config.ts | 6 +-
extensions/twitch/src/monitor.ts | 6 +-
extensions/twitch/src/onboarding.ts | 18 +-
extensions/twitch/src/outbound.test.ts | 4 +-
extensions/twitch/src/outbound.ts | 4 +-
extensions/twitch/src/plugin.test.ts | 4 +-
extensions/twitch/src/plugin.ts | 16 +-
extensions/twitch/src/send.test.ts | 4 +-
extensions/twitch/src/send.ts | 10 +-
extensions/twitch/src/token.test.ts | 16 +-
extensions/twitch/src/token.ts | 6 +-
extensions/twitch/src/twitch-client.ts | 6 +-
extensions/twitch/src/types.ts | 6 +-
extensions/twitch/src/utils/markdown.ts | 2 +-
extensions/voice-call/CHANGELOG.md | 22 +-
extensions/voice-call/package.json | 4 +-
extensions/voice-call/src/core-bridge.ts | 6 +-
extensions/voice-call/src/manager.test.ts | 4 +-
.../voice-call/src/response-generator.ts | 2 +-
extensions/whatsapp/index.ts | 4 +-
extensions/whatsapp/package.json | 4 +-
extensions/zalo/CHANGELOG.md | 18 +-
extensions/zalo/index.ts | 4 +-
extensions/zalo/package.json | 6 +-
extensions/zalo/src/accounts.ts | 16 +-
extensions/zalo/src/actions.ts | 8 +-
extensions/zalo/src/channel.directory.test.ts | 4 +-
extensions/zalo/src/channel.ts | 36 +-
extensions/zalo/src/monitor.ts | 18 +-
extensions/zalo/src/monitor.webhook.test.ts | 4 +-
extensions/zalo/src/onboarding.ts | 48 +-
extensions/zalo/src/send.ts | 4 +-
extensions/zalouser/CHANGELOG.md | 8 +-
extensions/zalouser/index.ts | 4 +-
extensions/zalouser/package.json | 6 +-
extensions/zalouser/src/accounts.ts | 18 +-
extensions/zalouser/src/channel.ts | 48 +-
extensions/zalouser/src/monitor.ts | 8 +-
extensions/zalouser/src/onboarding.ts | 56 +-
extensions/zalouser/src/status-issues.ts | 2 +-
fly.private.toml | 6 +-
fly.toml | 6 +-
package.json | 16 +-
packages/clawdbot/package.json | 4 +-
render.yaml | 4 +-
scripts/auth-monitor.sh | 18 +-
scripts/build-and-run-mac.sh | 6 +-
scripts/build_icon.sh | 6 +-
scripts/changelog-to-html.sh | 10 +-
scripts/claude-auth-status.sh | 38 +-
scripts/clawlog.sh | 6 +-
scripts/codesign-mac-app.sh | 12 +-
scripts/create-dmg.sh | 14 +-
scripts/debug-claude-usage.ts | 2 +-
scripts/docker/cleanup-smoke/Dockerfile | 6 +-
scripts/docker/cleanup-smoke/run.sh | 8 +-
scripts/docker/install-sh-e2e/Dockerfile | 6 +-
scripts/docker/install-sh-e2e/run.sh | 30 +-
scripts/docker/install-sh-nonroot/Dockerfile | 6 +-
scripts/docker/install-sh-nonroot/run.sh | 14 +-
scripts/docker/install-sh-smoke/Dockerfile | 6 +-
scripts/docker/install-sh-smoke/run.sh | 12 +-
scripts/e2e/doctor-install-switch-docker.sh | 22 +-
scripts/e2e/gateway-network-docker.sh | 6 +-
scripts/e2e/onboard-docker.sh | 30 +-
scripts/e2e/plugins-docker.sh | 22 +-
scripts/e2e/qr-import-docker.sh | 2 +-
scripts/make_appcast.sh | 8 +-
scripts/mobile-reauth.sh | 8 +-
scripts/notarize-mac-artifact.sh | 2 +-
scripts/package-mac-app.sh | 44 +-
scripts/package-mac-dist.sh | 14 +-
scripts/protocol-gen.ts | 4 +-
scripts/release-check.ts | 2 +-
scripts/restart-mac.sh | 42 +-
scripts/run-node.mjs | 2 +-
scripts/sandbox-browser-entrypoint.sh | 2 +-
scripts/sandbox-browser-setup.sh | 2 +-
scripts/sandbox-common-setup.sh | 6 +-
scripts/sandbox-setup.sh | 2 +-
scripts/setup-auth-system.sh | 18 +-
scripts/sync-plugin-versions.ts | 2 +-
scripts/systemd/clawdbot-auth-monitor.service | 6 +-
scripts/systemd/clawdbot-auth-monitor.timer | 2 +-
scripts/termux-auth-widget.sh | 14 +-
scripts/termux-quick-auth.sh | 4 +-
scripts/termux-sync-widget.sh | 14 +-
scripts/test-cleanup-docker.sh | 2 +-
scripts/test-force.ts | 2 +-
scripts/test-install-sh-docker.sh | 4 +-
scripts/test-install-sh-e2e-docker.sh | 2 +-
scripts/test-live-gateway-models-docker.sh | 2 +-
scripts/test-live-models-docker.sh | 2 +-
scripts/update-clawtributors.ts | 2 +-
scripts/zai-fallback-repro.ts | 8 +-
src/acp/client.ts | 10 +-
src/acp/server.ts | 2 +-
src/acp/types.ts | 4 +-
src/agents/agent-paths.test.ts | 12 +-
src/agents/agent-paths.ts | 6 +-
src/agents/agent-scope.test.ts | 22 +-
src/agents/agent-scope.ts | 26 +-
src/agents/anthropic.setup-token.live.test.ts | 10 +-
src/agents/apply-patch.test.ts | 2 +-
src/agents/auth-health.ts | 6 +-
src/agents/auth-profiles.chutes.test.ts | 2 +-
...th-profiles.ensureauthprofilestore.test.ts | 4 +-
...th-profiles.markauthprofilefailure.test.ts | 6 +-
src/agents/auth-profiles/display.ts | 4 +-
src/agents/auth-profiles/doctor.ts | 6 +-
.../oauth.fallback-to-main-agent.test.ts | 2 +-
src/agents/auth-profiles/oauth.ts | 6 +-
src/agents/auth-profiles/order.ts | 4 +-
src/agents/auth-profiles/paths.ts | 6 +-
src/agents/auth-profiles/repair.ts | 8 +-
.../auth-profiles/session-override.test.ts | 6 +-
src/agents/auth-profiles/session-override.ts | 4 +-
src/agents/auth-profiles/types.ts | 6 +-
src/agents/auth-profiles/usage.ts | 6 +-
.../bash-tools.exec.approval-id.test.ts | 4 +-
src/agents/bash-tools.test.ts | 2 +-
src/agents/bootstrap-files.test.ts | 4 +-
src/agents/bootstrap-files.ts | 6 +-
src/agents/bootstrap-hooks.ts | 4 +-
src/agents/cache-trace.test.ts | 4 +-
src/agents/cache-trace.ts | 4 +-
src/agents/channel-tools.ts | 16 +-
src/agents/claude-cli-runner.test.ts | 4 +-
src/agents/clawdbot-gateway-tool.test.ts | 12 +-
src/agents/clawdbot-tools.agents.test.ts | 10 +-
src/agents/clawdbot-tools.camera.test.ts | 8 +-
.../clawdbot-tools.session-status.test.ts | 18 +-
src/agents/clawdbot-tools.sessions.test.ts | 18 +-
...ws-cross-agent-spawning-configured.test.ts | 8 +-
...ounces-agent-wait-lifecycle-events.test.ts | 6 +-
...-spawn-applies-model-child-session.test.ts | 12 +-
...n-normalizes-allowlisted-agent-ids.test.ts | 12 +-
...n-prefers-per-agent-subagent-model.test.ts | 10 +-
...resolves-main-announce-target-from.test.ts | 8 +-
src/agents/cli-backends.ts | 6 +-
src/agents/cli-credentials.test.ts | 6 +-
src/agents/cli-runner.ts | 10 +-
src/agents/cli-runner/helpers.ts | 12 +-
src/agents/context-window-guard.test.ts | 6 +-
src/agents/context-window-guard.ts | 4 +-
src/agents/context.ts | 8 +-
src/agents/docs-path.ts | 6 +-
src/agents/identity-avatar.test.ts | 16 +-
src/agents/identity-avatar.ts | 6 +-
src/agents/identity.test.ts | 6 +-
src/agents/identity.ts | 23 +-
src/agents/memory-search.ts | 4 +-
src/agents/minimax-vlm.ts | 2 +-
src/agents/model-auth.test.ts | 4 +-
src/agents/model-auth.ts | 16 +-
src/agents/model-catalog.test.ts | 10 +-
src/agents/model-catalog.ts | 12 +-
src/agents/model-fallback.test.ts | 14 +-
src/agents/model-fallback.ts | 12 +-
src/agents/model-selection.test.ts | 14 +-
src/agents/model-selection.ts | 22 +-
...s-github-copilot-provider-token-is.test.ts | 14 +-
...fault-baseurl-token-exchange-fails.test.ts | 18 +-
...ssing-provider-apikey-from-env-var.test.ts | 24 +-
...ini-3-ids-preview-google-providers.test.ts | 16 +-
src/agents/models-config.providers.ts | 14 +-
...s-writing-models-json-no-env-token.test.ts | 34 +-
src/agents/models-config.ts | 12 +-
...-github-copilot-profile-env-tokens.test.ts | 18 +-
src/agents/models.profiles.live.test.ts | 8 +-
.../{clawdbot-tools.ts => moltbot-tools.ts} | 6 +-
...d-helpers.resolvebootstrapmaxchars.test.ts | 6 +-
src/agents/pi-embedded-helpers/bootstrap.ts | 4 +-
src/agents/pi-embedded-helpers/errors.ts | 4 +-
src/agents/pi-embedded-helpers/openai.ts | 2 +-
...i-embedded-runner-extraparams.live.test.ts | 4 +-
...-runner.applygoogleturnorderingfix.test.ts | 10 +-
...ed-runner.buildembeddedsandboxinfo.test.ts | 36 +-
...-runner.createsystempromptoverride.test.ts | 10 +-
...s-back-provider-default-per-dm-not.test.ts | 20 +-
...-undefined-sessionkey-is-undefined.test.ts | 32 +-
...-embedded-runner.limithistoryturns.test.ts | 10 +-
...dded-runner.resolvesessionagentids.test.ts | 12 +-
...ded-pi-agent.auth-profile-rotation.test.ts | 38 +-
.../pi-embedded-runner.splitsdktools.test.ts | 10 +-
src/agents/pi-embedded-runner.test.ts | 12 +-
src/agents/pi-embedded-runner/cache-ttl.ts | 2 +-
src/agents/pi-embedded-runner/compact.ts | 20 +-
src/agents/pi-embedded-runner/extensions.ts | 10 +-
src/agents/pi-embedded-runner/extra-params.ts | 6 +-
src/agents/pi-embedded-runner/history.ts | 6 +-
src/agents/pi-embedded-runner/model.ts | 10 +-
.../run.overflow-compaction.test.ts | 4 +-
src/agents/pi-embedded-runner/run.ts | 8 +-
src/agents/pi-embedded-runner/run/attempt.ts | 12 +-
src/agents/pi-embedded-runner/run/params.ts | 4 +-
src/agents/pi-embedded-runner/run/payloads.ts | 4 +-
src/agents/pi-embedded-runner/run/types.ts | 4 +-
src/agents/pi-embedded-runner/utils.ts | 6 +-
src/agents/pi-settings.ts | 4 +-
src/agents/pi-tools-agent-config.test.ts | 70 +--
...aliases-schemas-without-dropping-b.test.ts | 24 +-
...aliases-schemas-without-dropping-d.test.ts | 40 +-
...aliases-schemas-without-dropping-f.test.ts | 20 +-
...e-aliases-schemas-without-dropping.test.ts | 28 +-
src/agents/pi-tools.policy.ts | 8 +-
src/agents/pi-tools.read.ts | 4 +-
src/agents/pi-tools.safe-bins.test.ts | 12 +-
src/agents/pi-tools.ts | 16 +-
src/agents/pi-tools.workspace-paths.test.ts | 46 +-
...n-status-default-sandbox-allowlist.test.ts | 8 +-
...nt-specific-docker-settings-beyond.test.ts | 10 +-
...d-use-agent-specific-workspaceroot.test.ts | 8 +-
...use-global-sandbox-config-no-agent.test.ts | 8 +-
src/agents/sandbox-create-args.test.ts | 34 +-
src/agents/sandbox-explain.test.ts | 10 +-
src/agents/sandbox-skills.test.ts | 8 +-
.../sandbox.resolveSandboxContext.test.ts | 20 +-
src/agents/sandbox/browser.ts | 2 +-
src/agents/sandbox/config.ts | 7 +-
src/agents/sandbox/constants.ts | 14 +-
src/agents/sandbox/context.ts | 6 +-
src/agents/sandbox/docker.ts | 16 +-
src/agents/sandbox/runtime-status.ts | 18 +-
src/agents/sandbox/tool-policy.ts | 4 +-
...ult-guard.tool-result-persist-hook.test.ts | 8 +-
src/agents/session-transcript-repair.ts | 2 +-
src/agents/session-write-lock.test.ts | 12 +-
src/agents/shell-utils.test.ts | 2 +-
src/agents/skills-install.ts | 6 +-
src/agents/skills-status.ts | 30 +-
.../skills.applyskillenvoverrides.test.ts | 8 +-
...without-affecting-workspace-skills.test.ts | 2 +-
...rs-workspace-skills-managed-skills.test.ts | 18 +-
...pty-prompt-skills-dirs-are-missing.test.ts | 8 +-
...erged-skills-into-target-workspace.test.ts | 10 +-
...skills.buildworkspaceskillcommands.test.ts | 6 +-
...skills.buildworkspaceskillsnapshot.test.ts | 4 +-
.../skills.buildworkspaceskillstatus.test.ts | 14 +-
.../skills.loadworkspaceskillentries.test.ts | 10 +-
.../skills.resolveskillspromptforrun.test.ts | 2 +-
src/agents/skills.ts | 6 +-
src/agents/skills/config.ts | 28 +-
src/agents/skills/env-overrides.ts | 8 +-
src/agents/skills/frontmatter.ts | 37 +-
src/agents/skills/plugin-skills.ts | 4 +-
src/agents/skills/refresh.ts | 6 +-
src/agents/skills/types.ts | 4 +-
src/agents/skills/workspace.ts | 34 +-
.../subagent-registry.persistence.test.ts | 8 +-
src/agents/subagent-registry.store.ts | 4 +-
src/agents/system-prompt-params.test.ts | 10 +-
src/agents/system-prompt-params.ts | 6 +-
src/agents/system-prompt.test.ts | 14 +-
src/agents/system-prompt.ts | 38 +-
src/agents/timeout.ts | 6 +-
src/agents/tool-images.ts | 2 +-
src/agents/tool-policy.test.ts | 4 +-
src/agents/tool-policy.ts | 4 +-
src/agents/tools/browser-tool.ts | 8 +-
src/agents/tools/discord-actions.ts | 4 +-
src/agents/tools/gateway-tool.ts | 4 +-
src/agents/tools/image-tool.helpers.ts | 6 +-
src/agents/tools/image-tool.test.ts | 38 +-
src/agents/tools/image-tool.ts | 18 +-
src/agents/tools/memory-tool.ts | 6 +-
src/agents/tools/message-tool.ts | 8 +-
src/agents/tools/nodes-tool.ts | 4 +-
src/agents/tools/session-status-tool.ts | 10 +-
src/agents/tools/sessions-helpers.ts | 6 +-
src/agents/tools/sessions-send-helpers.ts | 4 +-
src/agents/tools/slack-actions.test.ts | 46 +-
src/agents/tools/slack-actions.ts | 4 +-
src/agents/tools/telegram-actions.test.ts | 48 +-
src/agents/tools/telegram-actions.ts | 4 +-
src/agents/tools/tts-tool.ts | 4 +-
src/agents/tools/web-fetch.ts | 8 +-
src/agents/tools/web-search.ts | 12 +-
src/agents/tools/whatsapp-actions.test.ts | 6 +-
src/agents/tools/whatsapp-actions.ts | 4 +-
src/agents/workspace.test.ts | 6 +-
src/auto-reply/chunk.ts | 6 +-
src/auto-reply/command-auth.ts | 12 +-
src/auto-reply/command-control.test.ts | 18 +-
src/auto-reply/command-detection.ts | 8 +-
src/auto-reply/commands-registry.data.ts | 2 +-
src/auto-reply/commands-registry.test.ts | 12 +-
src/auto-reply/commands-registry.ts | 22 +-
src/auto-reply/commands-registry.types.ts | 6 +-
src/auto-reply/dispatch.ts | 8 +-
src/auto-reply/envelope.ts | 4 +-
src/auto-reply/inbound-debounce.ts | 4 +-
src/auto-reply/inbound.test.ts | 14 +-
src/auto-reply/reply.block-streaming.test.ts | 2 +-
...ts-thinking-xhigh-codex-models.e2e.test.ts | 2 +-
...ixed-messages-acks-immediately.e2e.test.ts | 2 +-
...ow-reasoning-capable-models-no.e2e.test.ts | 2 +-
...nline-model-uses-default-model.e2e.test.ts | 2 +-
...-allowlisted-models-model-list.e2e.test.ts | 2 +-
...s-fuzzy-selection-is-ambiguous.e2e.test.ts | 2 +-
...gent-allowlist-addition-global.e2e.test.ts | 2 +-
...-alongside-directive-only-acks.e2e.test.ts | 2 +-
...nt-elevated-level-as-off-after.e2e.test.ts | 2 +-
...t-verbose-level-verbose-has-no.e2e.test.ts | 2 +-
...-model-matches-model-directive.e2e.test.ts | 2 +-
...rbose-during-flight-run-toggle.e2e.test.ts | 2 +-
src/auto-reply/reply.heartbeat-typing.test.ts | 2 +-
src/auto-reply/reply.media-note.test.ts | 2 +-
src/auto-reply/reply.queue.test.ts | 2 +-
src/auto-reply/reply.raw-body.test.ts | 2 +-
...y.triggers.group-intro-prompts.e2e.test.ts | 2 +-
...tivation-from-allowfrom-groups.e2e.test.ts | 4 +-
...ed-sender-toggle-elevated-mode.e2e.test.ts | 2 +-
...ted-off-groups-without-mention.e2e.test.ts | 2 +-
...summary-current-model-provider.e2e.test.ts | 2 +-
...ommands-strips-it-before-agent.e2e.test.ts | 2 +-
...ed-directive-unapproved-sender.e2e.test.ts | 2 +-
...or-cause-embedded-agent-throws.e2e.test.ts | 4 +-
...ne-status-unauthorized-senders.e2e.test.ts | 2 +-
...uth-profile-key-snippet-status.e2e.test.ts | 2 +-
....runs-compact-as-gated-command.e2e.test.ts | 4 +-
...uns-greeting-prompt-bare-reset.e2e.test.ts | 8 +-
...lt-model-status-not-configured.e2e.test.ts | 4 +-
...-model-picker-grouped-by-model.e2e.test.ts | 2 +-
...bound-media-into-sandbox-workspace.test.ts | 2 +-
...ets-active-session-native-stop.e2e.test.ts | 2 +-
src/auto-reply/reply/abort.test.ts | 18 +-
src/auto-reply/reply/abort.ts | 8 +-
.../reply/agent-runner-execution.ts | 2 +-
src/auto-reply/reply/agent-runner-memory.ts | 4 +-
.../reply/agent-runner-utils.test.ts | 6 +-
src/auto-reply/reply/agent-runner-utils.ts | 4 +-
...emini-sessions-deletes-transcripts.test.ts | 4 +-
...ction-failure-by-resetting-session.test.ts | 6 +-
...tbeat.signals-typing-block-replies.test.ts | 2 +-
...eplies-even-if-session-reset-fails.test.ts | 2 +-
...n-count-flush-compaction-completes.test.ts | 2 +-
...lush-turn-updates-session-metadata.test.ts | 4 +-
...h.skips-memory-flush-cli-providers.test.ts | 2 +-
...ry-flush-sandbox-workspace-is-read.test.ts | 4 +-
...nfigured-prompts-memory-flush-runs.test.ts | 4 +-
.../agent-runner.messaging-tools.test.ts | 2 +-
src/auto-reply/reply/bash-command.ts | 10 +-
src/auto-reply/reply/block-streaming.ts | 8 +-
src/auto-reply/reply/commands-allowlist.ts | 8 +-
src/auto-reply/reply/commands-approve.test.ts | 8 +-
src/auto-reply/reply/commands-compact.ts | 4 +-
.../reply/commands-context-report.ts | 4 +-
src/auto-reply/reply/commands-context.ts | 4 +-
src/auto-reply/reply/commands-models.ts | 4 +-
src/auto-reply/reply/commands-parsing.test.ts | 6 +-
src/auto-reply/reply/commands-policy.test.ts | 12 +-
src/auto-reply/reply/commands-session.ts | 8 +-
src/auto-reply/reply/commands-status.ts | 6 +-
src/auto-reply/reply/commands-types.ts | 4 +-
src/auto-reply/reply/commands.test.ts | 48 +-
.../reply/directive-handling.auth.ts | 6 +-
.../reply/directive-handling.fast-lane.ts | 6 +-
.../reply/directive-handling.impl.ts | 6 +-
.../reply/directive-handling.model-picker.ts | 4 +-
.../reply/directive-handling.model.test.ts | 10 +-
.../reply/directive-handling.model.ts | 8 +-
.../reply/directive-handling.parse.ts | 4 +-
.../reply/directive-handling.persist.ts | 8 +-
.../directive-handling.queue-validation.ts | 4 +-
.../reply/directive-handling.shared.ts | 2 +-
.../reply/dispatch-from-config.test.ts | 26 +-
src/auto-reply/reply/dispatch-from-config.ts | 6 +-
src/auto-reply/reply/followup-runner.test.ts | 4 +-
.../reply/get-reply-directives-apply.ts | 6 +-
src/auto-reply/reply/get-reply-directives.ts | 6 +-
.../reply/get-reply-inline-actions.ts | 8 +-
src/auto-reply/reply/get-reply-run.ts | 8 +-
src/auto-reply/reply/get-reply.ts | 4 +-
src/auto-reply/reply/groups.ts | 8 +-
src/auto-reply/reply/memory-flush.ts | 4 +-
src/auto-reply/reply/mentions.ts | 8 +-
.../model-selection.inherit-parent.test.ts | 12 +-
src/auto-reply/reply/model-selection.ts | 8 +-
src/auto-reply/reply/provider-dispatcher.ts | 6 +-
.../reply/queue.collect-routing.test.ts | 4 +-
src/auto-reply/reply/queue/types.ts | 6 +-
src/auto-reply/reply/reply-elevated.ts | 6 +-
src/auto-reply/reply/reply-routing.test.ts | 12 +-
src/auto-reply/reply/reply-threading.ts | 4 +-
.../reply/response-prefix-template.test.ts | 12 +-
src/auto-reply/reply/route-reply.test.ts | 12 +-
src/auto-reply/reply/route-reply.ts | 4 +-
src/auto-reply/reply/session-reset-model.ts | 4 +-
src/auto-reply/reply/session-resets.test.ts | 24 +-
src/auto-reply/reply/session-updates.ts | 10 +-
src/auto-reply/reply/session.test.ts | 58 +-
src/auto-reply/reply/session.ts | 4 +-
src/auto-reply/reply/stage-sandbox-media.ts | 4 +-
src/auto-reply/skill-commands.test.ts | 2 +-
src/auto-reply/skill-commands.ts | 6 +-
src/auto-reply/status.test.ts | 22 +-
src/auto-reply/status.ts | 18 +-
src/auto-reply/templating.ts | 2 +-
src/browser/chrome.test.ts | 10 +-
src/browser/client-fetch.ts | 2 +-
src/browser/config.ts | 6 +-
src/browser/extension-relay.ts | 6 +-
src/browser/profiles-service.ts | 6 +-
src/browser/pw-tools-core.downloads.ts | 2 +-
src/browser/pw-tools-core.interactions.ts | 10 +-
src/browser/pw-tools-core.responses.ts | 2 +-
src/browser/routes/agent.debug.ts | 2 +-
src/browser/server-context.ts | 6 +-
src/canvas-host/a2ui.ts | 44 +-
src/canvas-host/a2ui/.bundle.hash | 2 +-
src/canvas-host/a2ui/index.html | 56 +-
src/canvas-host/server.test.ts | 28 +-
src/canvas-host/server.ts | 43 +-
src/channels/dock.ts | 6 +-
src/channels/plugins/actions/discord.test.ts | 14 +-
src/channels/plugins/actions/signal.test.ts | 18 +-
src/channels/plugins/actions/telegram.test.ts | 12 +-
src/channels/plugins/catalog.test.ts | 8 +-
src/channels/plugins/catalog.ts | 21 +-
src/channels/plugins/config-helpers.ts | 22 +-
src/channels/plugins/config-writes.ts | 4 +-
src/channels/plugins/directory-config.ts | 4 +-
src/channels/plugins/group-mentions.ts | 6 +-
src/channels/plugins/helpers.ts | 8 +-
src/channels/plugins/media-limits.ts | 6 +-
src/channels/plugins/message-actions.ts | 8 +-
src/channels/plugins/onboarding-types.ts | 22 +-
src/channels/plugins/onboarding/discord.ts | 18 +-
src/channels/plugins/onboarding/imessage.ts | 14 +-
src/channels/plugins/onboarding/signal.ts | 16 +-
src/channels/plugins/onboarding/slack.ts | 26 +-
src/channels/plugins/onboarding/telegram.ts | 14 +-
src/channels/plugins/onboarding/whatsapp.ts | 22 +-
.../plugins/outbound/telegram.test.ts | 6 +-
src/channels/plugins/pairing-message.ts | 2 +-
src/channels/plugins/pairing.ts | 4 +-
src/channels/plugins/setup-helpers.ts | 20 +-
src/channels/plugins/slack.actions.test.ts | 4 +-
.../plugins/status-issues/bluebubbles.ts | 2 +-
.../plugins/status-issues/whatsapp.ts | 4 +-
src/channels/plugins/status.ts | 4 +-
src/channels/plugins/types.adapters.ts | 84 +--
src/channels/plugins/types.core.ts | 28 +-
src/channels/plugins/whatsapp-heartbeat.ts | 6 +-
src/channels/reply-prefix.ts | 4 +-
src/cli/argv.test.ts | 120 ++--
src/cli/argv.ts | 4 +-
src/cli/banner.ts | 2 +-
.../register.files-downloads.ts | 2 +-
src/cli/browser-cli-examples.ts | 58 +-
src/cli/browser-cli-extension.test.ts | 4 +-
src/cli/browser-cli-extension.ts | 12 +-
src/cli/browser-cli.ts | 2 +-
src/cli/cli-name.ts | 28 +
src/cli/command-format.ts | 2 +-
src/cli/config-cli.ts | 2 +-
src/cli/daemon-cli.coverage.test.ts | 8 +-
src/cli/daemon-cli/install.ts | 2 +-
src/cli/daemon-cli/shared.ts | 6 +-
src/cli/daemon-cli/status.print.ts | 10 +-
src/cli/dns-cli.test.ts | 2 +-
src/cli/dns-cli.ts | 12 +-
src/cli/docs-cli.ts | 2 +-
src/cli/exec-approvals-cli.ts | 8 +-
src/cli/gateway-cli.coverage.test.ts | 8 +-
src/cli/gateway-cli/dev.ts | 8 +-
src/cli/gateway-cli/run.ts | 8 +-
src/cli/gateway-cli/shared.ts | 8 +-
src/cli/gateway.sigterm.test.ts | 4 +-
src/cli/hooks-cli.test.ts | 4 +-
src/cli/hooks-cli.ts | 14 +-
src/cli/logs-cli.test.ts | 4 +-
src/cli/logs-cli.ts | 4 +-
src/cli/node-cli/daemon.ts | 4 +-
src/cli/nodes-cli/register.canvas.ts | 2 +-
src/cli/nodes-screen.test.ts | 2 +-
src/cli/nodes-screen.ts | 2 +-
src/cli/pairing-cli.ts | 4 +-
src/cli/plugin-registry.ts | 4 +-
src/cli/plugins-cli.ts | 16 +-
src/cli/profile.test.ts | 44 +-
src/cli/profile.ts | 2 +-
src/cli/program/config-guard.ts | 4 +-
src/cli/program/help.ts | 19 +-
src/cli/program/register.agent.ts | 20 +-
src/cli/program/register.message.ts | 8 +-
src/cli/program/register.setup.ts | 2 +-
.../register.status-health-sessions.ts | 20 +-
src/cli/program/register.subclis.test.ts | 14 +-
src/cli/program/register.subclis.ts | 4 +-
src/cli/run-main.ts | 6 +-
src/cli/sandbox-cli.ts | 36 +-
src/cli/security-cli.ts | 6 +-
src/cli/skills-cli.ts | 4 +-
src/cli/tagline.ts | 2 +-
src/cli/update-cli.test.ts | 52 +-
src/cli/update-cli.ts | 65 +--
src/cli/webhooks-cli.ts | 10 +-
src/commands/agent-via-gateway.test.ts | 10 +-
src/commands/agent-via-gateway.ts | 2 +-
src/commands/agent.delivery.test.ts | 16 +-
src/commands/agent.test.ts | 8 +-
src/commands/agent.ts | 2 +-
src/commands/agent/delivery.ts | 4 +-
src/commands/agent/session-store.ts | 4 +-
src/commands/agent/session.ts | 6 +-
src/commands/agents.add.test.ts | 2 +-
src/commands/agents.bindings.ts | 12 +-
src/commands/agents.command-shared.ts | 6 +-
src/commands/agents.commands.add.ts | 2 +-
src/commands/agents.commands.list.ts | 2 +-
src/commands/agents.config.ts | 20 +-
src/commands/agents.identity.test.ts | 14 +-
src/commands/agents.providers.ts | 12 +-
src/commands/agents.test.ts | 10 +-
.../auth-choice.apply.plugin-provider.ts | 8 +-
src/commands/auth-choice.apply.ts | 6 +-
src/commands/auth-choice.default-model.ts | 10 +-
src/commands/auth-choice.model-check.ts | 4 +-
src/commands/auth-choice.test.ts | 16 +-
....adds-non-default-telegram-account.test.ts | 8 +-
...time-errors-channels-status-output.test.ts | 2 +-
src/commands/channels/add-mutators.ts | 10 +-
src/commands/channels/add.ts | 4 +-
src/commands/channels/capabilities.test.ts | 2 +-
src/commands/channels/capabilities.ts | 4 +-
src/commands/channels/remove.ts | 4 +-
src/commands/channels/shared.ts | 6 +-
src/commands/channels/status.ts | 6 +-
src/commands/chutes-oauth.ts | 2 +-
src/commands/cleanup-utils.ts | 4 +-
src/commands/configure.channels.ts | 16 +-
src/commands/configure.gateway-auth.ts | 6 +-
src/commands/configure.gateway.ts | 6 +-
src/commands/configure.wizard.test.ts | 6 +-
src/commands/configure.wizard.ts | 14 +-
src/commands/daemon-install-helpers.test.ts | 8 +-
src/commands/daemon-install-helpers.ts | 6 +-
src/commands/dashboard.test.ts | 4 +-
src/commands/dashboard.ts | 2 +-
src/commands/docs.ts | 6 +-
...octor-auth.deprecated-cli-profiles.test.ts | 2 +-
src/commands/doctor-auth.ts | 30 +-
src/commands/doctor-config-flow.test.ts | 4 +-
src/commands/doctor-config-flow.ts | 30 +-
src/commands/doctor-format.ts | 4 +-
src/commands/doctor-gateway-daemon-flow.ts | 6 +-
src/commands/doctor-gateway-health.ts | 4 +-
src/commands/doctor-gateway-services.ts | 12 +-
src/commands/doctor-legacy-config.test.ts | 4 +-
src/commands/doctor-legacy-config.ts | 8 +-
...form-notes.launchctl-env-overrides.test.ts | 8 +-
src/commands/doctor-platform-notes.ts | 6 +-
src/commands/doctor-sandbox.ts | 16 +-
src/commands/doctor-security.test.ts | 10 +-
src/commands/doctor-security.ts | 16 +-
src/commands/doctor-state-integrity.ts | 4 +-
src/commands/doctor-state-migrations.test.ts | 28 +-
src/commands/doctor-ui.ts | 4 +-
src/commands/doctor-update.ts | 8 +-
src/commands/doctor-workspace-status.ts | 8 +-
src/commands/doctor-workspace.test.ts | 8 +-
src/commands/doctor-workspace.ts | 8 +-
...-back-legacy-sandbox-image-missing.test.ts | 24 +-
...owfrom-channels-whatsapp-allowfrom.test.ts | 28 +-
...-state-migrations-yes-mode-without.test.ts | 24 +-
src/commands/doctor.ts | 28 +-
...agent-sandbox-docker-browser-prune.test.ts | 34 +-
...r.warns-state-directory-is-missing.test.ts | 26 +-
src/commands/gateway-status.ts | 4 +-
src/commands/gateway-status/helpers.ts | 8 +-
.../google-gemini-model-default.test.ts | 8 +-
src/commands/google-gemini-model-default.ts | 6 +-
src/commands/health-format.test.ts | 4 +-
src/commands/health.snapshot.test.ts | 2 +-
src/commands/health.ts | 4 +-
src/commands/model-picker.test.ts | 16 +-
src/commands/model-picker.ts | 20 +-
src/commands/models.list.test.ts | 14 +-
src/commands/models.set.test.ts | 8 +-
src/commands/models/auth.ts | 6 +-
src/commands/models/list.auth-overview.ts | 4 +-
src/commands/models/list.configured.ts | 4 +-
src/commands/models/list.probe.ts | 14 +-
src/commands/models/list.registry.ts | 16 +-
src/commands/models/list.status-command.ts | 14 +-
src/commands/models/list.status.test.ts | 8 +-
src/commands/models/shared.ts | 10 +-
src/commands/onboard-auth.config-core.ts | 32 +-
src/commands/onboard-auth.config-minimax.ts | 22 +-
src/commands/onboard-auth.config-opencode.ts | 6 +-
src/commands/onboard-auth.credentials.ts | 4 +-
src/commands/onboard-auth.test.ts | 4 +-
src/commands/onboard-channels.test.ts | 8 +-
src/commands/onboard-channels.ts | 22 +-
src/commands/onboard-helpers.ts | 12 +-
src/commands/onboard-hooks.test.ts | 20 +-
src/commands/onboard-hooks.ts | 14 +-
...onboard-non-interactive.ai-gateway.test.ts | 8 +-
.../onboard-non-interactive.gateway.test.ts | 4 +-
.../onboard-non-interactive.token.test.ts | 8 +-
src/commands/onboard-non-interactive.ts | 6 +-
.../onboard-non-interactive/api-keys.ts | 6 +-
src/commands/onboard-non-interactive/local.ts | 8 +-
.../local/auth-choice.ts | 8 +-
.../local/daemon-install.ts | 4 +-
.../local/gateway-config.ts | 6 +-
.../local/skills-config.ts | 4 +-
.../local/workspace.ts | 4 +-
.../onboard-non-interactive/remote.ts | 8 +-
src/commands/onboard-remote.ts | 6 +-
src/commands/onboard-skills.ts | 14 +-
src/commands/onboard.ts | 2 +-
.../onboarding/plugin-install.test.ts | 20 +-
src/commands/onboarding/plugin-install.ts | 16 +-
.../openai-codex-model-default.test.ts | 10 +-
src/commands/openai-codex-model-default.ts | 6 +-
.../opencode-zen-model-default.test.ts | 12 +-
src/commands/opencode-zen-model-default.ts | 6 +-
src/commands/reset.ts | 6 +-
src/commands/sandbox-display.ts | 2 +-
src/commands/sandbox-explain.test.ts | 2 +-
src/commands/sandbox-explain.ts | 8 +-
src/commands/setup.ts | 10 +-
src/commands/signal-install.ts | 4 +-
src/commands/status-all.ts | 6 +-
src/commands/status-all/agents.ts | 4 +-
src/commands/status-all/channels.ts | 16 +-
src/commands/status-all/report-lines.ts | 2 +-
src/commands/status.command.ts | 14 +-
src/commands/status.link-channel.ts | 4 +-
src/commands/status.test.ts | 18 +-
src/commands/status.update.ts | 6 +-
src/commands/uninstall.ts | 6 +-
src/compat/legacy-names.ts | 9 +
src/config/agent-dirs.ts | 8 +-
src/config/agent-limits.ts | 6 +-
src/config/channel-capabilities.test.ts | 10 +-
src/config/channel-capabilities.ts | 4 +-
.../config.agent-concurrency-defaults.test.ts | 2 +-
src/config/config.backup-rotation.test.ts | 6 +-
src/config/config.compaction-settings.test.ts | 4 +-
src/config/config.discord.test.ts | 2 +-
src/config/config.env-vars.test.ts | 6 +-
src/config/config.identity-defaults.test.ts | 20 +-
...etection.accepts-imessage-dmpolicy.test.ts | 16 +-
...ig.multi-agent-agentdir-validation.test.ts | 4 +-
.../config.nix-integration-u3-u5-u9.test.ts | 50 +-
src/config/config.plugin-validation.test.ts | 2 +-
...preservation-on-validation-failure.test.ts | 2 +-
src/config/config.pruning-defaults.test.ts | 8 +-
.../config.skills-entries-config.test.ts | 6 +-
.../config.telegram-custom-commands.test.ts | 6 +-
src/config/config.ts | 2 +-
src/config/defaults.ts | 24 +-
src/config/env-vars.ts | 4 +-
src/config/group-policy.ts | 10 +-
src/config/includes.test.ts | 10 +-
src/config/io.ts | 34 +-
src/config/legacy-migrate.ts | 4 +-
src/config/logging.ts | 6 +-
src/config/markdown-tables.ts | 4 +-
src/config/merge-config.ts | 6 +-
src/config/model-alias-defaults.test.ts | 10 +-
src/config/normalize-paths.test.ts | 4 +-
src/config/normalize-paths.ts | 4 +-
src/config/paths.ts | 16 +-
src/config/plugin-auto-enable.ts | 40 +-
src/config/runtime-overrides.test.ts | 8 +-
src/config/runtime-overrides.ts | 6 +-
src/config/schema.ts | 16 +-
src/config/sessions.test.ts | 20 +-
src/config/sessions/transcript.ts | 2 +-
src/config/test-helpers.ts | 2 +-
src/config/types.clawdbot.ts | 8 +-
src/config/types.gateway.ts | 2 +-
src/config/types.imessage.ts | 2 +-
src/config/types.whatsapp.ts | 2 +-
src/config/validation.ts | 18 +-
src/config/version.ts | 10 +-
src/config/zod-schema.ts | 2 +-
src/cron/cron-protocol-conformance.test.ts | 9 +-
...onse-has-heartbeat-ok-but-includes.test.ts | 12 +-
...p-recipient-besteffortdeliver-true.test.ts | 12 +-
....uses-last-non-empty-agent-text-as.test.ts | 12 +-
src/cron/isolated-agent/delivery-target.ts | 4 +-
src/cron/isolated-agent/run.ts | 6 +-
src/cron/isolated-agent/session.ts | 4 +-
src/cron/run-log.test.ts | 4 +-
.../service.prevents-duplicate-timers.test.ts | 2 +-
...runs-one-shot-main-job-disables-it.test.ts | 2 +-
...s-main-jobs-empty-systemevent-text.test.ts | 2 +-
src/daemon/constants.test.ts | 24 +-
src/daemon/constants.ts | 24 +-
src/daemon/inspect.ts | 22 +-
src/daemon/launchd.test.ts | 4 +-
src/daemon/paths.test.ts | 12 +-
src/daemon/program-args.test.ts | 16 +-
src/daemon/program-args.ts | 2 +-
src/daemon/schtasks.test.ts | 32 +-
src/daemon/service-env.test.ts | 6 +-
src/daemon/systemd-hints.ts | 2 +-
src/daemon/systemd-unit.test.ts | 14 +-
src/daemon/systemd-unit.ts | 2 +-
src/daemon/systemd.test.ts | 12 +-
src/discord/accounts.ts | 16 +-
src/discord/audit.test.ts | 2 +-
src/discord/audit.ts | 4 +-
src/discord/monitor.slash.test.ts | 2 +-
...ild-messages-mentionpatterns-match.test.ts | 16 +-
...ends-status-replies-responseprefix.test.ts | 14 +-
src/discord/monitor/exec-approvals.ts | 4 +-
.../message-handler.inbound-contract.test.ts | 2 +-
.../message-handler.preflight.types.ts | 4 +-
.../monitor/message-handler.process.test.ts | 2 +-
src/discord/monitor/message-handler.ts | 2 +-
src/discord/monitor/native-command.ts | 4 +-
src/discord/monitor/provider.ts | 4 +-
src/discord/send.creates-thread.test.ts | 8 +-
src/discord/token.test.ts | 8 +-
src/discord/token.ts | 4 +-
src/docker-setup.test.ts | 8 +-
src/entry.ts | 8 +-
src/gateway/assistant-identity.test.ts | 8 +-
src/gateway/assistant-identity.ts | 4 +-
src/gateway/boot.test.ts | 6 +-
src/gateway/boot.ts | 4 +-
src/gateway/call.ts | 6 +-
src/gateway/config-reload.ts | 10 +-
src/gateway/control-ui.ts | 6 +-
src/gateway/gateway-cli-backend.live.test.ts | 4 +-
.../gateway-models.profiles.live.test.ts | 46 +-
src/gateway/gateway.e2e.test.ts | 6 +-
src/gateway/hooks-mapping.test.ts | 4 +-
src/gateway/hooks-mapping.ts | 8 +-
src/gateway/hooks.test.ts | 10 +-
src/gateway/hooks.ts | 8 +-
src/gateway/http-utils.ts | 8 +-
src/gateway/node-command-policy.ts | 4 +-
src/gateway/openai-http.e2e.test.ts | 42 +-
src/gateway/openai-http.ts | 6 +-
src/gateway/openresponses-http.e2e.test.ts | 48 +-
src/gateway/openresponses-http.ts | 8 +-
src/gateway/protocol/client-info.ts | 10 +-
src/gateway/server-channels.ts | 4 +-
src/gateway/server-discovery.ts | 10 +-
src/gateway/server-http.ts | 2 +-
src/gateway/server-methods/channels.ts | 4 +-
src/gateway/server-methods/config.ts | 16 +-
src/gateway/server-methods/logs.test.ts | 8 +-
src/gateway/server-methods/logs.ts | 2 +-
src/gateway/server-methods/skills.ts | 12 +-
src/gateway/server-methods/update.ts | 4 +-
src/gateway/server-plugins.test.ts | 6 +-
src/gateway/server-plugins.ts | 4 +-
src/gateway/server-runtime-state.ts | 2 +-
src/gateway/server-startup.ts | 4 +-
...r.agent.gateway-server-agent-a.e2e.test.ts | 28 +-
...r.agent.gateway-server-agent-b.e2e.test.ts | 10 +-
src/gateway/server.auth.e2e.test.ts | 8 +-
...ver.chat.gateway-server-chat-b.e2e.test.ts | 2 +-
...erver.chat.gateway-server-chat.e2e.test.ts | 10 +-
src/gateway/server.config-patch.e2e.test.ts | 4 +-
src/gateway/server.cron.e2e.test.ts | 4 +-
src/gateway/server.health.e2e.test.ts | 2 +-
src/gateway/server.hooks.e2e.test.ts | 2 +-
src/gateway/server.impl.ts | 12 +-
src/gateway/server.ios-client-id.e2e.test.ts | 8 +-
.../server.models-voicewake-misc.e2e.test.ts | 4 +-
src/gateway/server.sessions-send.e2e.test.ts | 10 +-
...ions.gateway-server-sessions-a.e2e.test.ts | 6 +-
src/gateway/server/health-state.ts | 6 +-
src/gateway/session-utils.fs.test.ts | 6 +-
src/gateway/session-utils.test.ts | 14 +-
src/gateway/session-utils.ts | 27 +-
src/gateway/sessions-patch.test.ts | 12 +-
src/gateway/sessions-patch.ts | 4 +-
src/gateway/sessions-resolve.ts | 4 +-
src/gateway/test-helpers.mocks.ts | 10 +-
src/gateway/test-helpers.server.ts | 4 +-
src/gateway/tools-invoke-http.test.ts | 6 +-
src/gateway/tools-invoke-http.ts | 10 +-
src/git-hooks.test.ts | 2 +-
src/hooks/bundled-dir.ts | 2 +-
src/hooks/bundled/boot-md/HOOK.md | 4 +-
src/hooks/bundled/boot-md/handler.ts | 4 +-
src/hooks/bundled/command-logger/HOOK.md | 8 +-
src/hooks/bundled/session-memory/HOOK.md | 6 +-
src/hooks/bundled/session-memory/handler.ts | 8 +-
src/hooks/bundled/soul-evil/HOOK.md | 8 +-
src/hooks/bundled/soul-evil/handler.test.ts | 6 +-
src/hooks/bundled/soul-evil/handler.ts | 4 +-
src/hooks/config.ts | 24 +-
src/hooks/frontmatter.test.ts | 78 +--
src/hooks/frontmatter.ts | 39 +-
src/hooks/gmail-ops.ts | 12 +-
src/hooks/gmail-setup-utils.test.ts | 2 +-
src/hooks/gmail-watcher.ts | 4 +-
src/hooks/gmail.test.ts | 18 +-
src/hooks/gmail.ts | 4 +-
src/hooks/hooks-install.e2e.test.ts | 6 +-
src/hooks/hooks-status.ts | 32 +-
src/hooks/install.test.ts | 16 +-
src/hooks/install.ts | 18 +-
src/hooks/installs.ts | 4 +-
src/hooks/internal-hooks.ts | 6 +-
src/hooks/llm-slug-generator.ts | 6 +-
src/hooks/loader.test.ts | 22 +-
src/hooks/loader.ts | 13 +-
src/hooks/plugin-hooks.ts | 26 +-
src/hooks/soul-evil.test.ts | 10 +-
src/hooks/types.ts | 6 +-
src/hooks/workspace.ts | 32 +-
src/imessage/accounts.ts | 16 +-
...essages-without-mention-by-default.test.ts | 2 +-
...last-route-chat-id-direct-messages.test.ts | 2 +-
src/imessage/monitor/monitor-provider.ts | 4 +-
src/imessage/monitor/types.ts | 4 +-
src/index.ts | 8 +-
src/infra/archive.test.ts | 2 +-
src/infra/bonjour-discovery.test.ts | 47 +-
src/infra/bonjour-discovery.ts | 18 +-
src/infra/bonjour.test.ts | 10 +-
src/infra/bonjour.ts | 10 +-
src/infra/brew.test.ts | 4 +-
src/infra/channel-summary.ts | 14 +-
src/infra/control-ui-assets.test.ts | 4 +-
src/infra/device-pairing.test.ts | 2 +-
src/infra/diagnostic-events.ts | 4 +-
src/infra/diagnostic-flags.test.ts | 4 +-
src/infra/diagnostic-flags.ts | 6 +-
src/infra/dotenv.test.ts | 4 +-
src/infra/exec-approval-forwarder.test.ts | 6 +-
src/infra/exec-approval-forwarder.ts | 10 +-
src/infra/exec-approvals.test.ts | 2 +-
src/infra/gateway-lock.test.ts | 4 +-
src/infra/gateway-lock.ts | 2 +-
...espects-ackmaxchars-heartbeat-acks.test.ts | 34 +-
...tbeat-runner.returns-default-unset.test.ts | 70 +--
src/infra/heartbeat-runner.scheduler.test.ts | 6 +-
...ner.sender-prefers-delivery-target.test.ts | 6 +-
src/infra/heartbeat-runner.ts | 35 +-
src/infra/heartbeat-visibility.test.ts | 28 +-
src/infra/heartbeat-visibility.ts | 4 +-
src/infra/is-main.test.ts | 2 +-
src/infra/machine-name.ts | 2 +-
.../{clawdbot-root.ts => moltbot-root.ts} | 4 +-
src/infra/outbound/agent-delivery.test.ts | 6 +-
src/infra/outbound/agent-delivery.ts | 4 +-
src/infra/outbound/channel-selection.ts | 8 +-
src/infra/outbound/deliver.test.ts | 24 +-
src/infra/outbound/deliver.ts | 8 +-
src/infra/outbound/directory-cache.ts | 12 +-
.../outbound/message-action-runner.test.ts | 14 +-
.../message-action-runner.threading.test.ts | 4 +-
src/infra/outbound/message-action-runner.ts | 18 +-
src/infra/outbound/message.ts | 6 +-
src/infra/outbound/outbound-policy.test.ts | 10 +-
src/infra/outbound/outbound-policy.ts | 6 +-
src/infra/outbound/outbound-send-service.ts | 4 +-
src/infra/outbound/outbound-session.test.ts | 12 +-
src/infra/outbound/outbound-session.ts | 10 +-
src/infra/outbound/target-resolver.test.ts | 4 +-
src/infra/outbound/target-resolver.ts | 12 +-
src/infra/outbound/targets.test.ts | 4 +-
src/infra/outbound/targets.ts | 10 +-
src/infra/path-env.test.ts | 26 +-
src/infra/path-env.ts | 18 +-
src/infra/ports-format.ts | 4 +-
src/infra/ports.test.ts | 2 +-
src/infra/ports.ts | 4 +-
src/infra/provider-usage.fetch.claude.ts | 2 +-
src/infra/provider-usage.fetch.minimax.ts | 2 +-
src/infra/provider-usage.test.ts | 2 +-
src/infra/restart-sentinel.test.ts | 2 +-
src/infra/restart-sentinel.ts | 2 +-
src/infra/restart.ts | 2 +-
src/infra/runtime-guard.ts | 4 +-
src/infra/session-cost-usage.test.ts | 8 +-
src/infra/session-cost-usage.ts | 8 +-
src/infra/shell-env.ts | 2 +-
src/infra/skills-remote.ts | 14 +-
src/infra/state-migrations.fs.test.ts | 2 +-
src/infra/state-migrations.ts | 8 +-
src/infra/system-events.test.ts | 4 +-
src/infra/system-presence.test.ts | 4 +-
src/infra/tailscale.ts | 2 +-
src/infra/tls/gateway.ts | 2 +-
src/infra/unhandled-rejections.ts | 8 +-
src/infra/update-check.ts | 2 +-
src/infra/update-global.ts | 10 +-
src/infra/update-runner.test.ts | 46 +-
src/infra/update-runner.ts | 12 +-
src/infra/update-startup.test.ts | 18 +-
src/infra/update-startup.ts | 6 +-
src/infra/voicewake.test.ts | 6 +-
src/infra/warnings.ts | 2 +-
src/infra/widearea-dns.test.ts | 16 +-
src/infra/widearea-dns.ts | 20 +-
src/line/accounts.test.ts | 20 +-
src/line/accounts.ts | 8 +-
src/line/bot-handlers.ts | 4 +-
src/line/bot-message-context.test.ts | 6 +-
src/line/bot-message-context.ts | 6 +-
src/line/bot.ts | 4 +-
src/line/monitor.ts | 4 +-
src/line/probe.test.ts | 4 +-
src/link-understanding/apply.ts | 4 +-
src/link-understanding/runner.ts | 4 +-
src/logger.test.ts | 6 +-
src/logging/config.ts | 4 +-
src/logging/console-capture.test.ts | 2 +-
src/logging/console.ts | 6 +-
src/logging/logger.ts | 14 +-
src/logging/redact.ts | 6 +-
src/macos/gateway-daemon.ts | 4 +-
src/macos/relay.ts | 11 +-
src/markdown/frontmatter.test.ts | 16 +-
src/media-understanding/apply.test.ts | 40 +-
src/media-understanding/apply.ts | 4 +-
src/media-understanding/attachments.ts | 2 +-
src/media-understanding/providers/image.ts | 4 +-
src/media-understanding/resolve.test.ts | 14 +-
src/media-understanding/resolve.ts | 14 +-
.../runner.auto-audio.test.ts | 10 +-
.../runner.deepgram.test.ts | 6 +-
src/media-understanding/runner.ts | 20 +-
.../runner.vision-skip.test.ts | 4 +-
src/media-understanding/types.ts | 2 +-
src/media/host.ts | 2 +-
src/media/image-ops.ts | 2 +-
src/media/input-files.ts | 2 +-
src/media/store.header-ext.test.ts | 2 +-
src/media/store.redirect.test.ts | 2 +-
src/media/store.test.ts | 2 +-
src/memory/batch-gemini.ts | 2 +-
src/memory/batch-openai.ts | 2 +-
src/memory/embeddings.ts | 6 +-
src/memory/index.test.ts | 2 +-
src/memory/manager.async-search.test.ts | 2 +-
src/memory/manager.atomic-reindex.test.ts | 2 +-
src/memory/manager.batch.test.ts | 2 +-
src/memory/manager.embedding-batches.test.ts | 2 +-
.../manager.sync-errors-do-not-crash.test.ts | 2 +-
src/memory/manager.ts | 8 +-
src/memory/manager.vector-dedupe.test.ts | 2 +-
src/memory/search-manager.ts | 4 +-
src/node-host/runner.ts | 4 +-
src/pairing/pairing-messages.test.ts | 2 +-
src/pairing/pairing-messages.ts | 4 +-
src/pairing/pairing-store.test.ts | 2 +-
src/plugin-sdk/index.ts | 8 +-
src/plugins/cli.test.ts | 2 +-
src/plugins/cli.ts | 8 +-
src/plugins/commands.ts | 10 +-
src/plugins/config-schema.ts | 4 +-
src/plugins/config-state.ts | 4 +-
src/plugins/discovery.test.ts | 30 +-
src/plugins/discovery.ts | 16 +-
src/plugins/enable.ts | 10 +-
src/plugins/install.test.ts | 28 +-
src/plugins/install.ts | 18 +-
src/plugins/installs.ts | 6 +-
src/plugins/loader.test.ts | 42 +-
src/plugins/loader.ts | 26 +-
src/plugins/manifest-registry.ts | 8 +-
src/plugins/manifest.ts | 25 +-
src/plugins/providers.ts | 4 +-
src/plugins/registry.ts | 72 +--
src/plugins/runtime.ts | 2 +-
src/plugins/services.ts | 10 +-
src/plugins/slots.test.ts | 10 +-
src/plugins/slots.ts | 6 +-
src/plugins/status.ts | 4 +-
src/plugins/tools.optional.test.ts | 4 +-
src/plugins/tools.ts | 8 +-
src/plugins/types.ts | 86 +--
src/plugins/update.ts | 16 +-
src/postinstall-patcher.test.ts | 2 +-
src/providers/github-copilot-token.test.ts | 4 +-
src/providers/qwen-portal-oauth.ts | 2 +-
src/routing/bindings.ts | 10 +-
src/routing/resolve-route.test.ts | 24 +-
src/routing/resolve-route.ts | 8 +-
src/scripts/canvas-a2ui-copy.test.ts | 4 +-
src/security/audit-extra.ts | 36 +-
src/security/audit.test.ts | 110 ++--
src/security/audit.ts | 24 +-
src/security/fix.test.ts | 20 +-
src/security/fix.ts | 14 +-
src/sessions/send-policy.test.ts | 10 +-
src/sessions/send-policy.ts | 4 +-
src/signal/accounts.ts | 16 +-
...-only-senders-uuid-allowlist-entry.test.ts | 2 +-
...ends-tool-summaries-responseprefix.test.ts | 8 +-
src/signal/monitor.ts | 4 +-
src/signal/monitor/event-handler.types.ts | 4 +-
src/signal/reaction-level.ts | 4 +-
src/slack/accounts.ts | 16 +-
src/slack/channel-migration.ts | 6 +-
src/slack/monitor.test-helpers.ts | 2 +-
...onitor.threading.missing-thread-ts.test.ts | 2 +-
src/slack/monitor/context.test.ts | 4 +-
src/slack/monitor/context.ts | 6 +-
.../prepare.inbound-contract.test.ts | 6 +-
.../monitor/slash.command-arg-menus.test.ts | 8 +-
src/slack/monitor/slash.ts | 2 +-
src/slack/monitor/types.ts | 4 +-
src/slack/threading-tool-context.test.ts | 16 +-
src/slack/threading-tool-context.ts | 4 +-
src/telegram/accounts.test.ts | 10 +-
src/telegram/accounts.ts | 16 +-
src/telegram/bot-message-context.ts | 10 +-
.../bot-native-commands.plugin-auth.test.ts | 4 +-
src/telegram/bot-native-commands.ts | 6 +-
...patterns-match-without-botusername.test.ts | 14 +-
...topic-skill-filters-system-prompts.test.ts | 8 +-
...-all-group-messages-grouppolicy-is.test.ts | 20 +-
...e-callback-query-updates-by-update.test.ts | 8 +-
...gram-bot.installs-grammy-throttler.test.ts | 14 +-
...lowfrom-entries-case-insensitively.test.ts | 14 +-
...-case-insensitively-grouppolicy-is.test.ts | 16 +-
...-dms-by-telegram-accountid-binding.test.ts | 12 +-
...ies-without-native-reply-threading.test.ts | 20 +-
...s-media-file-path-no-file-download.test.ts | 26 +-
...udes-location-text-ctx-fields-pins.test.ts | 4 +-
src/telegram/bot.test.ts | 122 ++--
src/telegram/bot.ts | 4 +-
src/telegram/bot/helpers.test.ts | 10 +-
src/telegram/draft-chunking.test.ts | 6 +-
src/telegram/draft-chunking.ts | 4 +-
src/telegram/group-migration.ts | 6 +-
src/telegram/inline-buttons.ts | 6 +-
src/telegram/monitor.ts | 6 +-
src/telegram/pairing-store.test.ts | 2 +-
src/telegram/pairing-store.ts | 4 +-
src/telegram/reaction-level.test.ts | 16 +-
src/telegram/reaction-level.ts | 4 +-
src/telegram/sticker-cache.test.ts | 4 +-
src/telegram/sticker-cache.ts | 8 +-
src/telegram/token.test.ts | 14 +-
src/telegram/token.ts | 4 +-
src/telegram/update-offset-store.test.ts | 2 +-
src/telegram/webhook.ts | 4 +-
src/test-helpers/workspace.ts | 2 +-
src/tts/tts.ts | 16 +-
src/tui/commands.ts | 4 +-
src/tui/gateway-chat.ts | 2 +-
src/tui/tui.ts | 2 +-
src/utils.test.ts | 10 +-
src/utils/usage-format.test.ts | 4 +-
src/utils/usage-format.ts | 4 +-
src/version.ts | 2 +-
src/web/accounts.ts | 20 +-
src/web/accounts.whatsapp-auth.test.ts | 4 +-
src/web/active-listener.ts | 2 +-
src/web/auth-store.ts | 2 +-
...asts-sequentially-configured-order.test.ts | 12 +-
...wn-broadcast-agent-ids-agents-list.test.ts | 8 +-
.../auto-reply.partial-reply-gating.test.ts | 14 +-
.../auto-reply.typing-controller-idle.test.ts | 8 +-
...compresses-common-formats-jpeg-cap.test.ts | 4 +-
...y.falls-back-text-media-send-fails.test.ts | 4 +-
...efixes-body-same-phone-marker-from.test.ts | 4 +-
....reconnects-after-connection-close.test.ts | 8 +-
...oup-chats-injects-history-replying.test.ts | 8 +-
...mmaries-immediately-responseprefix.test.ts | 6 +-
...-activation-silent-token-preserves.test.ts | 8 +-
...gent-mention-patterns-group-gating.test.ts | 4 +-
src/web/auto-reply/monitor.ts | 2 +-
.../auto-reply/monitor/group-gating.test.ts | 2 +-
src/web/auto-reply/monitor/process-message.ts | 2 +-
src/web/auto-reply/session-snapshot.test.ts | 2 +-
src/web/inbound.media.test.ts | 2 +-
src/web/login.ts | 2 +-
src/web/media.test.ts | 2 +-
...ssages-from-senders-allowfrom-list.test.ts | 2 +-
...unauthorized-senders-not-allowfrom.test.ts | 2 +-
...captures-media-path-image-messages.test.ts | 4 +-
...tor-inbox.streams-inbound-messages.test.ts | 2 +-
src/web/qr-image.test.ts | 2 +-
src/web/reconnect.test.ts | 4 +-
src/web/reconnect.ts | 6 +-
src/web/session.ts | 4 +-
src/web/test-helpers.ts | 8 +-
src/wizard/onboarding.finalize.ts | 32 +-
src/wizard/onboarding.gateway-config.ts | 8 +-
src/wizard/onboarding.test.ts | 6 +-
src/wizard/onboarding.ts | 20 +-
test/gateway.multi.e2e.test.ts | 4 +-
test/helpers/temp-home.ts | 2 +-
test/media-understanding.auto.e2e.test.ts | 20 +-
test/provider-timeout.e2e.test.ts | 4 +-
test/setup.ts | 8 +-
test/test-env.ts | 2 +-
ui/index.html | 4 +-
ui/package.json | 2 +-
ui/src/styles/base.css | 2 +-
ui/src/ui/app-channels.ts | 26 +-
ui/src/ui/app-chat.ts | 10 +-
ui/src/ui/app-gateway.ts | 18 +-
ui/src/ui/app-polling.ts | 8 +-
ui/src/ui/app-render.ts | 4 +-
ui/src/ui/app-scroll.ts | 2 +-
ui/src/ui/app-settings.ts | 46 +-
ui/src/ui/app.ts | 4 +-
ui/src/ui/chat-markdown.browser.test.ts | 10 +-
ui/src/ui/controllers/chat.ts | 2 +-
ui/src/ui/device-auth.ts | 2 +-
ui/src/ui/device-identity.ts | 2 +-
ui/src/ui/focus-mode.browser.test.ts | 10 +-
ui/src/ui/navigation.browser.test.ts | 26 +-
ui/src/ui/navigation.test.ts | 10 +-
ui/src/ui/navigation.ts | 2 +-
ui/src/ui/storage.ts | 2 +-
ui/src/ui/views/chat.test.ts | 2 +-
ui/src/ui/views/debug.ts | 2 +-
ui/src/ui/views/overview.ts | 6 +-
vitest.config.ts | 2 +-
vitest.e2e.config.ts | 2 +-
vitest.live.config.ts | 2 +-
1839 files changed, 11250 insertions(+), 11199 deletions(-)
rename src/agents/{clawdbot-tools.ts => moltbot-tools.ts} (97%)
create mode 100644 src/cli/cli-name.ts
create mode 100644 src/compat/legacy-names.ts
rename src/infra/{clawdbot-root.ts => moltbot-root.ts} (93%)
diff --git a/AGENTS.md b/AGENTS.md
index c35e996c7..44b0149fd 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -1,5 +1,5 @@
# Repository Guidelines
-- Repo: https://github.com/clawdbot/clawdbot
+- Repo: https://github.com/moltbot/moltbot
- GitHub issues/comments/PR comments: use literal multiline strings or `-F - <<'EOF'` (or $'...') for real newlines; never embed "\\n".
## Project Structure & Module Organization
@@ -7,7 +7,7 @@
- Tests: colocated `*.test.ts`.
- Docs: `docs/` (images, queue, Pi config). Built output lives in `dist/`.
- Plugins/extensions: live under `extensions/*` (workspace packages). Keep plugin-only deps in the extension `package.json`; do not add them to the root `package.json` unless core uses them.
-- Plugins: install runs `npm install --omit=dev` in plugin dir; runtime deps must live in `dependencies`. Avoid `workspace:*` in `dependencies` (npm install breaks); put `clawdbot` in `devDependencies` or `peerDependencies` instead (runtime resolves `clawdbot/plugin-sdk` via jiti alias).
+- Plugins: install runs `npm install --omit=dev` in plugin dir; runtime deps must live in `dependencies`. Avoid `workspace:*` in `dependencies` (npm install breaks); put `moltbot` in `devDependencies` or `peerDependencies` instead (runtime resolves `clawdbot/plugin-sdk` via jiti alias).
- Installers served from `https://molt.bot/*`: live in the sibling repo `../molt.bot` (`public/install.sh`, `public/install-cli.sh`, `public/install.ps1`).
- Messaging channels: always consider **all** built-in + extension channels when refactoring shared logic (routing, allowlists, pairing, command gating, onboarding, docs).
- Core channel docs: `docs/channels/`
@@ -28,12 +28,12 @@
## exe.dev VM ops (general)
- Access: stable path is `ssh exe.dev` then `ssh vm-name` (assume SSH key already set).
- SSH flaky: use exe.dev web terminal or Shelley (web agent); keep a tmux session for long ops.
-- Update: `sudo npm i -g clawdbot@latest` (global install needs root on `/usr/lib/node_modules`).
-- Config: use `clawdbot config set ...`; ensure `gateway.mode=local` is set.
+- Update: `sudo npm i -g moltbot@latest` (global install needs root on `/usr/lib/node_modules`).
+- Config: use `moltbot config set ...`; ensure `gateway.mode=local` is set.
- Discord: store raw token only (no `DISCORD_BOT_TOKEN=` prefix).
- Restart: stop old gateway and run:
- `pkill -9 -f clawdbot-gateway || true; nohup clawdbot gateway run --bind loopback --port 18789 --force > /tmp/clawdbot-gateway.log 2>&1 &`
-- Verify: `clawdbot channels status --probe`, `ss -ltnp | rg 18789`, `tail -n 120 /tmp/clawdbot-gateway.log`.
+ `pkill -9 -f moltbot-gateway || true; nohup moltbot gateway run --bind loopback --port 18789 --force > /tmp/moltbot-gateway.log 2>&1 &`
+- Verify: `moltbot channels status --probe`, `ss -ltnp | rg 18789`, `tail -n 120 /tmp/moltbot-gateway.log`.
## Build, Test, and Development Commands
- Runtime baseline: Node **22+** (keep Node + Bun paths working).
@@ -41,7 +41,7 @@
- Pre-commit hooks: `prek install` (runs same checks as CI)
- Also supported: `bun install` (keep `pnpm-lock.yaml` + Bun patching in sync when touching deps/patches).
- Prefer Bun for TypeScript execution (scripts, dev, tests): `bun ` / `bunx `.
-- Run CLI in dev: `pnpm clawdbot ...` (bun) or `pnpm dev`.
+- Run CLI in dev: `pnpm moltbot ...` (bun) or `pnpm dev`.
- Node remains supported for running built output (`dist/*`) and production installs.
- Mac packaging (dev): `scripts/package-mac-app.sh` defaults to current arch. Release checklist: `docs/platforms/mac/release.md`.
- Type-check/build: `pnpm build` (tsc)
@@ -54,7 +54,7 @@
- Add brief code comments for tricky or non-obvious logic.
- Keep files concise; extract helpers instead of “V2” copies. Use existing patterns for CLI options and dependency injection via `createDefaultDeps`.
- Aim to keep files under ~700 LOC; guideline only (not a hard guardrail). Split/refactor when it improves clarity or testability.
-- Naming: use **Clawdbot** for product/app/docs headings; use `clawdbot` for CLI command, package/binary, paths, and config keys.
+- Naming: use **Moltbot** for product/app/docs headings; use `moltbot` for CLI command, package/binary, paths, and config keys.
## Release Channels (Naming)
- stable: tagged releases only (e.g. `vYYYY.M.D`), npm dist-tag `latest`.
@@ -66,7 +66,7 @@
- Naming: match source names with `*.test.ts`; e2e in `*.e2e.test.ts`.
- Run `pnpm test` (or `pnpm test:coverage`) before pushing when you touch logic.
- Do not set test workers above 16; tried already.
-- Live tests (real keys): `CLAWDBOT_LIVE_TEST=1 pnpm test:live` (Clawdbot-only) or `LIVE=1 pnpm test:live` (includes provider live tests). Docker: `pnpm test:docker:live-models`, `pnpm test:docker:live-gateway`. Onboarding Docker E2E: `pnpm test:docker:onboard`.
+- Live tests (real keys): `CLAWDBOT_LIVE_TEST=1 pnpm test:live` (Moltbot-only) or `LIVE=1 pnpm test:live` (includes provider live tests). Docker: `pnpm test:docker:live-models`, `pnpm test:docker:live-gateway`. Onboarding Docker E2E: `pnpm test:docker:onboard`.
- Full kit + what’s covered: `docs/testing.md`.
- Pure test additions/fixes generally do **not** need a changelog entry unless they alter user-facing behavior or the user asks for one.
- Mobile: before using a simulator, check for connected real devices (iOS + Android) and prefer them when available.
@@ -97,19 +97,19 @@
- **Landing mode:** create an integration branch from `main`, bring in PR commits (**prefer rebase** for linear history; **merge allowed** when complexity/conflicts make it safer), apply fixes, add changelog (+ thanks + PR #), run full gate **locally before committing** (`pnpm lint && pnpm build && pnpm test`), commit, merge back to `main`, then `git switch main` (never stay on a topic branch after landing). Important: contributor needs to be in git graph after this!
## Security & Configuration Tips
-- Web provider stores creds at `~/.clawdbot/credentials/`; rerun `clawdbot login` if logged out.
+- Web provider stores creds at `~/.clawdbot/credentials/`; rerun `moltbot login` if logged out.
- Pi sessions live under `~/.clawdbot/sessions/` by default; the base directory is not configurable.
- Environment variables: see `~/.profile`.
- Never commit or publish real phone numbers, videos, or live configuration values. Use obviously fake placeholders in docs, tests, and examples.
- Release flow: always read `docs/reference/RELEASING.md` and `docs/platforms/mac/release.md` before any release work; do not ask routine questions once those docs answer them.
## Troubleshooting
-- Rebrand/migration issues or legacy config/service warnings: run `clawdbot doctor` (see `docs/gateway/doctor.md`).
+- Rebrand/migration issues or legacy config/service warnings: run `moltbot doctor` (see `docs/gateway/doctor.md`).
## Agent-Specific Notes
- Vocabulary: "makeup" = "mac app".
- Never edit `node_modules` (global/Homebrew/npm/git installs too). Updates overwrite. Skill notes go in `tools.md` or `AGENTS.md`.
-- Signal: "update fly" => `fly ssh console -a flawd-bot -C "bash -lc 'cd /data/clawd/clawdbot && git pull --rebase origin main'"` then `fly machines restart e825232f34d058 -a flawd-bot`.
+- Signal: "update fly" => `fly ssh console -a flawd-bot -C "bash -lc 'cd /data/clawd/moltbot && git pull --rebase origin main'"` then `fly machines restart e825232f34d058 -a flawd-bot`.
- When working on a GitHub Issue or PR, print the full URL at the end of the task.
- When answering questions, respond with high-confidence answers only: verify in code; do not guess.
- Never update the Carbon dependency.
@@ -117,12 +117,12 @@
- Patching dependencies (pnpm patches, overrides, or vendored changes) requires explicit approval; do not do this by default.
- CLI progress: use `src/cli/progress.ts` (`osc-progress` + `@clack/prompts` spinner); don’t hand-roll spinners/bars.
- Status output: keep tables + ANSI-safe wrapping (`src/terminal/table.ts`); `status --all` = read-only/pasteable, `status --deep` = probes.
-- Gateway currently runs only as the menubar app; there is no separate LaunchAgent/helper label installed. Restart via the Clawdbot Mac app or `scripts/restart-mac.sh`; to verify/kill use `launchctl print gui/$UID | grep clawdbot` rather than assuming a fixed label. **When debugging on macOS, start/stop the gateway via the app, not ad-hoc tmux sessions; kill any temporary tunnels before handoff.**
-- macOS logs: use `./scripts/clawlog.sh` to query unified logs for the Clawdbot subsystem; it supports follow/tail/category filters and expects passwordless sudo for `/usr/bin/log`.
+- Gateway currently runs only as the menubar app; there is no separate LaunchAgent/helper label installed. Restart via the Moltbot Mac app or `scripts/restart-mac.sh`; to verify/kill use `launchctl print gui/$UID | grep moltbot` rather than assuming a fixed label. **When debugging on macOS, start/stop the gateway via the app, not ad-hoc tmux sessions; kill any temporary tunnels before handoff.**
+- macOS logs: use `./scripts/clawlog.sh` to query unified logs for the Moltbot subsystem; it supports follow/tail/category filters and expects passwordless sudo for `/usr/bin/log`.
- If shared guardrails are available locally, review them; otherwise follow this repo's guidance.
- SwiftUI state management (iOS/macOS): prefer the `Observation` framework (`@Observable`, `@Bindable`) over `ObservableObject`/`@StateObject`; don’t introduce new `ObservableObject` unless required for compatibility, and migrate existing usages when touching related code.
- Connection providers: when adding a new connection, update every UI surface and docs (macOS app, web UI, mobile if applicable, onboarding/overview docs) and add matching status + configuration forms so provider lists and settings stay in sync.
-- Version locations: `package.json` (CLI), `apps/android/app/build.gradle.kts` (versionName/versionCode), `apps/ios/Sources/Info.plist` + `apps/ios/Tests/Info.plist` (CFBundleShortVersionString/CFBundleVersion), `apps/macos/Sources/Clawdbot/Resources/Info.plist` (CFBundleShortVersionString/CFBundleVersion), `docs/install/updating.md` (pinned npm version), `docs/platforms/mac/release.md` (APP_VERSION/APP_BUILD examples), Peekaboo Xcode projects/Info.plists (MARKETING_VERSION/CURRENT_PROJECT_VERSION).
+- Version locations: `package.json` (CLI), `apps/android/app/build.gradle.kts` (versionName/versionCode), `apps/ios/Sources/Info.plist` + `apps/ios/Tests/Info.plist` (CFBundleShortVersionString/CFBundleVersion), `apps/macos/Sources/Moltbot/Resources/Info.plist` (CFBundleShortVersionString/CFBundleVersion), `docs/install/updating.md` (pinned npm version), `docs/platforms/mac/release.md` (APP_VERSION/APP_BUILD examples), Peekaboo Xcode projects/Info.plists (MARKETING_VERSION/CURRENT_PROJECT_VERSION).
- **Restart apps:** “restart iOS/Android apps” means rebuild (recompile/install) and relaunch, not just kill/launch.
- **Device checks:** before testing, verify connected real devices (iOS/Android) before reaching for simulators/emulators.
- iOS Team ID lookup: `security find-identity -p codesigning -v` → use Apple Development (…) TEAMID. Fallback: `defaults read com.apple.dt.Xcode IDEProvisioningTeamIdentifiers`.
@@ -149,9 +149,9 @@
- Do not rebuild the macOS app over SSH; rebuilds must be run directly on the Mac.
- Never send streaming/partial replies to external messaging surfaces (WhatsApp, Telegram); only final replies should be delivered there. Streaming/tool events may still go to internal UIs/control channel.
- Voice wake forwarding tips:
- - Command template should stay `clawdbot-mac agent --message "${text}" --thinking low`; `VoiceWakeForwarder` already shell-escapes `${text}`. Don’t add extra quotes.
- - launchd PATH is minimal; ensure the app’s launch agent PATH includes standard system paths plus your pnpm bin (typically `$HOME/Library/pnpm`) so `pnpm`/`clawdbot` binaries resolve when invoked via `clawdbot-mac`.
-- For manual `clawdbot message send` messages that include `!`, use the heredoc pattern noted below to avoid the Bash tool’s escaping.
+ - Command template should stay `moltbot-mac agent --message "${text}" --thinking low`; `VoiceWakeForwarder` already shell-escapes `${text}`. Don’t add extra quotes.
+ - launchd PATH is minimal; ensure the app’s launch agent PATH includes standard system paths plus your pnpm bin (typically `$HOME/Library/pnpm`) so `pnpm`/`moltbot` binaries resolve when invoked via `moltbot-mac`.
+- For manual `moltbot message send` messages that include `!`, use the heredoc pattern noted below to avoid the Bash tool’s escaping.
- Release guardrails: do not change version numbers without operator’s explicit consent; always ask permission before running any npm publish/release step.
## NPM + 1Password (publish/verify)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f8f951133..079c32533 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,7 +6,7 @@ Docs: https://docs.molt.bot
Status: unreleased.
### Changes
-- Rebrand: rename the npm package/CLI to `moltbot`, add a `clawdbot` compatibility shim, and move extensions to the `@moltbot/*` scope.
+- Rebrand: rename the npm package/CLI to `moltbot`, add a `moltbot` compatibility shim, and move extensions to the `@moltbot/*` scope.
- Commands: group /help and /commands output with Telegram paging. (#2504) Thanks @hougangdev.
- macOS: limit project-local `node_modules/.bin` PATH preference to debug builds (reduce PATH hijacking risk).
- Tools: add per-sender group tool policies and fix precedence. (#1757) Thanks @adam91holt.
@@ -195,9 +195,9 @@ Status: unreleased.
### Changes
- Channels: allow per-group tool allow/deny policies across built-in + plugin channels. (#1546) Thanks @adam91holt. https://docs.molt.bot/multi-agent-sandbox-tools
- Agents: add Bedrock auto-discovery defaults + config overrides. (#1553) Thanks @fal3. https://docs.molt.bot/bedrock
-- CLI: add `clawdbot system` for system events + heartbeat controls; remove standalone `wake`. (commit 71203829d) https://docs.molt.bot/cli/system
-- CLI: add live auth probes to `clawdbot models status` for per-profile verification. (commit 40181afde) https://docs.molt.bot/cli/models
-- CLI: restart the gateway by default after `clawdbot update`; add `--no-restart` to skip it. (commit 2c85b1b40)
+- CLI: add `moltbot system` for system events + heartbeat controls; remove standalone `wake`. (commit 71203829d) https://docs.molt.bot/cli/system
+- CLI: add live auth probes to `moltbot models status` for per-profile verification. (commit 40181afde) https://docs.molt.bot/cli/models
+- CLI: restart the gateway by default after `moltbot update`; add `--no-restart` to skip it. (commit 2c85b1b40)
- Browser: add node-host proxy auto-routing for remote gateways (configurable per gateway/node). (commit c3cb26f7c)
- Plugins: add optional `llm-task` JSON-only tool for workflows. (#1498) Thanks @vignesh07. https://docs.molt.bot/tools/llm-task
- Markdown: add per-channel table conversion (bullets for Signal/WhatsApp, code blocks elsewhere). (#1495) Thanks @odysseus0.
@@ -237,7 +237,7 @@ Status: unreleased.
- UI: keep the Control UI sidebar visible while scrolling long pages. (#1515) Thanks @pookNast.
- UI: cache Control UI markdown rendering + memoize chat text extraction to reduce Safari typing jank. (commit d57cb2e1a)
- TUI: forward unknown slash commands, include Gateway commands in autocomplete, and render slash replies as system output. (commit 1af227b61, commit 8195497ce, commit 6fba598ea)
-- CLI: auth probe output polish (table output, inline errors, reduced noise, and wrap fixes in `clawdbot models status`). (commit da3f2b489, commit 00ae21bed, commit 31e59cd58, commit f7dc27f2d, commit 438e782f8, commit 886752217, commit aabe0bed3, commit 81535d512, commit c63144ab1)
+- CLI: auth probe output polish (table output, inline errors, reduced noise, and wrap fixes in `moltbot models status`). (commit da3f2b489, commit 00ae21bed, commit 31e59cd58, commit f7dc27f2d, commit 438e782f8, commit 886752217, commit aabe0bed3, commit 81535d512, commit c63144ab1)
- Media: only parse `MEDIA:` tags when they start the line to avoid stripping prose mentions. (#1206)
- Media: preserve PNG alpha when possible; fall back to JPEG when still over size cap. (#1491) Thanks @robbyczgw-cla.
- Skills: gate bird Homebrew install to macOS. (#1569) Thanks @bradleypriest.
@@ -296,12 +296,12 @@ Status: unreleased.
- Exec approvals: support wildcard agent allowlists (`*`) across all agents.
- Exec approvals: allowlist matches resolved binary paths only, add safe stdin-only bins, and tighten allowlist shell parsing.
- Nodes: expose node PATH in status/describe and bootstrap PATH for node-host execution.
-- CLI: flatten node service commands under `clawdbot node` and remove `service node` docs.
-- CLI: move gateway service commands under `clawdbot gateway` and add `gateway probe` for reachability.
+- CLI: flatten node service commands under `moltbot node` and remove `service node` docs.
+- CLI: move gateway service commands under `moltbot gateway` and add `gateway probe` for reachability.
- Sessions: add per-channel reset overrides via `session.resetByChannel`. (#1353) Thanks @cash-echo-bot.
- Agents: add identity avatar config support and Control UI avatar rendering. (#1329, #1424) Thanks @dlauer.
- UI: show per-session assistant identity in the Control UI. (#1420) Thanks @robbyczgw-cla.
-- CLI: add `clawdbot update wizard` for interactive channel selection and restart prompts. https://docs.molt.bot/cli/update
+- CLI: add `moltbot update wizard` for interactive channel selection and restart prompts. https://docs.molt.bot/cli/update
- Signal: add typing indicators and DM read receipts via signal-cli.
- MSTeams: add file uploads, adaptive cards, and attachment handling improvements. (#1410) Thanks @Evizero.
- Onboarding: remove the run setup-token auth option (paste setup-token or reuse CLI creds instead).
@@ -342,8 +342,8 @@ Status: unreleased.
- TUI: session picker shows derived titles, fuzzy search, relative times, and last message preview. (#1271) https://docs.molt.bot/tui
- TUI: add a searchable model picker for quicker model selection. (#1198) https://docs.molt.bot/tui
- TUI: add input history (up/down) for submitted messages. (#1348) https://docs.molt.bot/tui
-- ACP: add `clawdbot acp` for IDE integrations. https://docs.molt.bot/cli/acp
-- ACP: add `clawdbot acp client` interactive harness for debugging. https://docs.molt.bot/cli/acp
+- ACP: add `moltbot acp` for IDE integrations. https://docs.molt.bot/cli/acp
+- ACP: add `moltbot acp client` interactive harness for debugging. https://docs.molt.bot/cli/acp
- Skills: add download installs with OS-filtered options. https://docs.molt.bot/tools/skills
- Skills: add the local sherpa-onnx-tts skill. https://docs.molt.bot/tools/skills
- Memory: add hybrid BM25 + vector search (FTS5) with weighted merging and fallback. https://docs.molt.bot/concepts/memory
@@ -374,8 +374,8 @@ Status: unreleased.
- Plugins: migrate the Zalo Personal plugin to the shared plugin SDK runtime. https://docs.molt.bot/plugins/zalouser
- Plugins: allow optional agent tools with explicit allowlists and add the plugin tool authoring guide. https://docs.molt.bot/plugins/agent-tools
- Plugins: auto-enable bundled channel/provider plugins when configuration is present.
-- Plugins: sync plugin sources on channel switches and update npm-installed plugins during `clawdbot update`.
-- Plugins: share npm plugin update logic between `clawdbot update` and `clawdbot plugins update`.
+- Plugins: sync plugin sources on channel switches and update npm-installed plugins during `moltbot update`.
+- Plugins: share npm plugin update logic between `moltbot update` and `moltbot plugins update`.
- Gateway/API: add `/v1/responses` (OpenResponses) with item-based input + semantic streaming events. (#1229)
- Gateway/API: expand `/v1/responses` to support file/image inputs, tool_choice, usage, and output limits. (#1229)
@@ -384,7 +384,7 @@ Status: unreleased.
- Exec: add host/security/ask routing for gateway + node exec. https://docs.molt.bot/tools/exec
- Exec: add `/exec` directive for per-session exec defaults (host/security/ask/node). https://docs.molt.bot/tools/exec
- Exec approvals: migrate approvals to `~/.clawdbot/exec-approvals.json` with per-agent allowlists + skill auto-allow toggle, and add approvals UI + node exec lifecycle events. https://docs.molt.bot/tools/exec-approvals
-- Nodes: add headless node host (`clawdbot node start`) for `system.run`/`system.which`. https://docs.molt.bot/cli/node
+- Nodes: add headless node host (`moltbot node start`) for `system.run`/`system.which`. https://docs.molt.bot/cli/node
- Nodes: add node daemon service install/status/start/stop/restart. https://docs.molt.bot/cli/node
- Bridge: add `skills.bins` RPC to support node host auto-allow skill bins.
- Sessions: add daily reset policy with per-type overrides and idle windows (default 4am local), preserving legacy idle-only configs. (#1146) https://docs.molt.bot/concepts/session
@@ -414,10 +414,10 @@ Status: unreleased.
- Swabble: use the tagged Commander Swift package release.
### Breaking
-- **BREAKING:** Reject invalid/unknown config entries and refuse to start the gateway for safety. Run `clawdbot doctor --fix` to repair, then update plugins (`clawdbot plugins update`) if you use any.
+- **BREAKING:** Reject invalid/unknown config entries and refuse to start the gateway for safety. Run `moltbot doctor --fix` to repair, then update plugins (`moltbot plugins update`) if you use any.
### Fixes
-- Discovery: shorten Bonjour DNS-SD service type to `_clawdbot-gw._tcp` and update discovery clients/docs.
+- Discovery: shorten Bonjour DNS-SD service type to `_moltbot-gw._tcp` and update discovery clients/docs.
- Diagnostics: export OTLP logs, correct queue depth tracking, and document message-flow telemetry.
- Diagnostics: emit message-flow diagnostics across channels via shared dispatch. (#1244)
- Diagnostics: gate heartbeat/webhook logging. (#1244)
@@ -444,7 +444,7 @@ Status: unreleased.
- Plugins: add Nextcloud Talk manifest for plugin config validation. (#1297)
- Plugins: surface plugin load/register/config errors in gateway logs with plugin/source context.
- CLI: preserve cron delivery settings when editing message payloads. (#1322)
-- CLI: keep `clawdbot logs` output resilient to broken pipes while preserving progress output.
+- CLI: keep `moltbot logs` output resilient to broken pipes while preserving progress output.
- CLI: avoid duplicating --profile/--dev flags when formatting commands.
- CLI: centralize CLI command registration to keep fast-path routing and program wiring in sync. (#1207)
- CLI: keep banners on routed commands, restore config guarding outside fast-path routing, and tighten fast-path flag parsing while skipping console capture for extra speed. (#1195)
@@ -462,7 +462,7 @@ Status: unreleased.
- TUI: show generic empty-state text for searchable pickers. (#1201)
- TUI: highlight model search matches and stabilize search ordering.
- Configure: hide OpenRouter auto routing model from the model picker. (#1182)
-- Memory: show total file counts + scan issues in `clawdbot memory status`.
+- Memory: show total file counts + scan issues in `moltbot memory status`.
- Memory: fall back to non-batch embeddings after repeated batch failures.
- Memory: apply OpenAI batch defaults even without explicit remote config.
- Memory: index atomically so failed reindex preserves the previous memory database. (#1151)
@@ -472,7 +472,7 @@ Status: unreleased.
- Memory: split overly long lines to keep embeddings under token limits.
- Memory: skip empty chunks to avoid invalid embedding inputs.
- Memory: split embedding batches to avoid OpenAI token limits during indexing.
-- Memory: probe sqlite-vec availability in `clawdbot memory status`.
+- Memory: probe sqlite-vec availability in `moltbot memory status`.
- Exec approvals: enforce allowlist when ask is off.
- Exec approvals: prefer raw command for node approvals/events.
- Tools: show exec elevated flag before the command and keep it outside markdown in tool summaries.
@@ -524,18 +524,18 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
### Highlights
- Hooks: add hooks system with bundled hooks, CLI tooling, and docs. (#1028) — thanks @ThomsenDrake. https://docs.molt.bot/hooks
- Media: add inbound media understanding (image/audio/video) with provider + CLI fallbacks. https://docs.molt.bot/nodes/media-understanding
-- Plugins: add Zalo Personal plugin (`@clawdbot/zalouser`) and unify channel directory for plugins. (#1032) — thanks @suminhthanh. https://docs.molt.bot/plugins/zalouser
+- Plugins: add Zalo Personal plugin (`@moltbot/zalouser`) and unify channel directory for plugins. (#1032) — thanks @suminhthanh. https://docs.molt.bot/plugins/zalouser
- Models: add Vercel AI Gateway auth choice + onboarding updates. (#1016) — thanks @timolins. https://docs.molt.bot/providers/vercel-ai-gateway
- Sessions: add `session.identityLinks` for cross-platform DM session li nking. (#1033) — thanks @thewilloftheshadow. https://docs.molt.bot/concepts/session
- Web search: add `country`/`language` parameters (schema + Brave API) and docs. (#1046) — thanks @YuriNachos. https://docs.molt.bot/tools/web
### Breaking
-- **BREAKING:** `clawdbot message` and message tool now require `target` (dropping `to`/`channelId` for destinations). (#1034) — thanks @tobalsan.
+- **BREAKING:** `moltbot message` and message tool now require `target` (dropping `to`/`channelId` for destinations). (#1034) — thanks @tobalsan.
- **BREAKING:** Channel auth now prefers config over env for Discord/Telegram/Matrix (env is fallback only). (#1040) — thanks @thewilloftheshadow.
- **BREAKING:** Drop legacy `chatType: "room"` support; use `chatType: "channel"`.
- **BREAKING:** remove legacy provider-specific target resolution fallbacks; target resolution is centralized with plugin hints + directory lookups.
-- **BREAKING:** `clawdbot hooks` is now `clawdbot webhooks`; hooks live under `clawdbot hooks`. https://docs.molt.bot/cli/webhooks
-- **BREAKING:** `clawdbot plugins install ` now copies into `~/.clawdbot/extensions` (use `--link` to keep path-based loading).
+- **BREAKING:** `moltbot hooks` is now `moltbot webhooks`; hooks live under `moltbot hooks`. https://docs.molt.bot/cli/webhooks
+- **BREAKING:** `moltbot plugins install ` now copies into `~/.clawdbot/extensions` (use `--link` to keep path-based loading).
### Changes
- Plugins: ship bundled plugins disabled by default and allow overrides by installed versions. (#1066) — thanks @ItzR3NO.
@@ -553,7 +553,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Skills: update coding-agent guidance to prefer PTY-enabled exec runs and simplify tmux usage.
- TUI: refresh session token counts after runs complete or fail. (#1079) — thanks @d-ploutarchos.
- Status: trim `/status` to current-provider usage only and drop the OAuth/token block.
-- Directory: unify `clawdbot directory` across channels and plugin channels.
+- Directory: unify `moltbot directory` across channels and plugin channels.
- UI: allow deleting sessions from the Control UI.
- Memory: add sqlite-vec vector acceleration with CLI status details.
- Memory: add experimental session transcript indexing for memory_search (opt-in via memorySearch.experimental.sessionMemory + sources).
@@ -569,7 +569,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Docs: add `/help` hub, Node/npm PATH guide, and expand directory CLI docs.
- Config: support env var substitution in config values. (#1044) — thanks @sebslight.
- Health: add per-agent session summaries and account-level health details, and allow selective probes. (#1047) — thanks @gumadeiras.
-- Hooks: add hook pack installs (npm/path/zip/tar) with `clawdbot.hooks` manifests and `clawdbot hooks install/update`.
+- Hooks: add hook pack installs (npm/path/zip/tar) with `moltbot.hooks` manifests and `moltbot hooks install/update`.
- Plugins: add zip installs and `--link` to avoid copying local paths.
### Fixes
@@ -603,7 +603,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Security: default-deny slash/control commands unless a channel computed `CommandAuthorized` (fixes accidental “open” behavior), and ensure WhatsApp + Zalo plugin channels gate inline `/…` tokens correctly. https://docs.molt.bot/gateway/security
- Security: redact sensitive text in gateway WS logs.
- Tools: cap pending `exec` process output to avoid unbounded buffers.
-- CLI: speed up `clawdbot sandbox-explain` by avoiding heavy plugin imports when normalizing channel ids.
+- CLI: speed up `moltbot sandbox-explain` by avoiding heavy plugin imports when normalizing channel ids.
- Browser: remote profile tab operations prefer persistent Playwright and avoid silent HTTP fallbacks. (#1057) — thanks @mukhtharcm.
- Browser: remote profile tab ops follow-up: shared Playwright loader, Playwright-based focus, and more coverage (incl. opt-in live Browserless test). (follow-up to #1057) — thanks @mukhtharcm.
- Browser: refresh extension relay tab metadata after navigation so `/json/list` stays current. (#1073) — thanks @roshanasingh4.
@@ -629,19 +629,19 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
## 2026.1.15
### Highlights
-- Plugins: add provider auth registry + `clawdbot models auth login` for plugin-driven OAuth/API key flows.
+- Plugins: add provider auth registry + `moltbot models auth login` for plugin-driven OAuth/API key flows.
- Browser: improve remote CDP/Browserless support (auth passthrough, `wss` upgrade, timeouts, clearer errors).
- Heartbeat: per-agent configuration + 24h duplicate suppression. (#980) — thanks @voidserf.
- Security: audit warns on weak model tiers; app nodes store auth tokens encrypted (Keychain/SecurePrefs).
### Breaking
- **BREAKING:** iOS minimum version is now 18.0 to support Textual markdown rendering in native chat. (#702)
-- **BREAKING:** Microsoft Teams is now a plugin; install `@clawdbot/msteams` via `clawdbot plugins install @clawdbot/msteams`.
+- **BREAKING:** Microsoft Teams is now a plugin; install `@moltbot/msteams` via `moltbot plugins install @moltbot/msteams`.
- **BREAKING:** Channel auth now prefers config over env for Discord/Telegram/Matrix (env is fallback only). (#1040) — thanks @thewilloftheshadow.
### Changes
- UI/Apps: move channel/config settings to schema-driven forms and rename Connections → Channels. (#1040) — thanks @thewilloftheshadow.
-- CLI: set process titles to `clawdbot-` for clearer process listings.
+- CLI: set process titles to `moltbot-` for clearer process listings.
- CLI/macOS: sync remote SSH target/identity to config and let `gateway status` auto-infer SSH targets (ssh-config aware).
- Telegram: scope inline buttons with allowlist default + callback gating in DMs/groups.
- Telegram: default reaction notifications to own.
@@ -649,13 +649,13 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Heartbeat: tighten prompt guidance + suppress duplicate alerts for 24h. (#980) — thanks @voidserf.
- Repo: ignore local identity files to avoid accidental commits. (#1001) — thanks @gerardward2007.
- Sessions/Security: add `session.dmScope` for multi-user DM isolation and audit warnings. (#948) — thanks @Alphonse-arianee.
-- Plugins: add provider auth registry + `clawdbot models auth login` for plugin-driven OAuth/API key flows.
+- Plugins: add provider auth registry + `moltbot models auth login` for plugin-driven OAuth/API key flows.
- Onboarding: switch channels setup to a single-select loop with per-channel actions and disabled hints in the picker.
- TUI: show provider/model labels for the active session and default model.
- Heartbeat: add per-agent heartbeat configuration and multi-agent docs example.
- UI: show gateway auth guidance + doc link on unauthorized Control UI connections.
- UI: add session deletion action in Control UI sessions list. (#1017) — thanks @Szpadel.
-- Security: warn on weak model tiers (Haiku, below GPT-5, below Claude 4.5) in `clawdbot security audit`.
+- Security: warn on weak model tiers (Haiku, below GPT-5, below Claude 4.5) in `moltbot security audit`.
- Apps: store node auth tokens encrypted (Keychain/SecurePrefs).
- Daemon: share profile/state-dir resolution across service helpers and honor `CLAWDBOT_STATE_DIR` for Windows task scripts.
- Docs: clarify multi-gateway rescue bot guidance. (#969) — thanks @bjesuiter.
@@ -665,8 +665,8 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Docs: add Date & Time guide and update prompt/timezone configuration docs.
- Messages: debounce rapid inbound messages across channels with per-connector overrides. (#971) — thanks @juanpablodlc.
- Messages: allow media-only sends (CLI/tool) and show Telegram voice recording status for voice notes. (#957) — thanks @rdev.
-- Auth/Status: keep auth profiles sticky per session (rotate on compaction/new), surface provider usage headers in `/status` and `clawdbot models status`, and update docs.
-- CLI: add `--json` output for `clawdbot daemon` lifecycle/install commands.
+- Auth/Status: keep auth profiles sticky per session (rotate on compaction/new), surface provider usage headers in `/status` and `moltbot models status`, and update docs.
+- CLI: add `--json` output for `moltbot daemon` lifecycle/install commands.
- Memory: make `node-llama-cpp` an optional dependency (avoid Node 25 install failures) and improve local-embeddings fallback/errors.
- Browser: add `snapshot refs=aria` (Playwright aria-ref ids) for self-resolving refs across `snapshot` → `act`.
- Browser: `profile="chrome"` now defaults to host control and returns clearer “attach a tab” errors.
@@ -689,10 +689,10 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- iMessage: treat missing `imsg rpc` support as fatal to avoid restart loops.
- Auth: merge main auth profiles into per-agent stores for sub-agents and document inheritance. (#1013) — thanks @marcmarg.
- Agents: avoid JSON Schema `format` collisions in tool params by renaming snapshot format fields. (#1013) — thanks @marcmarg.
-- Fix: make `clawdbot update` auto-update global installs when installed via a package manager.
+- Fix: make `moltbot update` auto-update global installs when installed via a package manager.
- Fix: list model picker entries as provider/model pairs for explicit selection. (#970) — thanks @mcinteerj.
- Fix: align OpenAI image-gen defaults with DALL-E 3 standard quality and document output formats. (#880) — thanks @mkbehr.
-- Fix: persist `gateway.mode=local` after selecting Local run mode in `clawdbot configure`, even if no other sections are chosen.
+- Fix: persist `gateway.mode=local` after selecting Local run mode in `moltbot configure`, even if no other sections are chosen.
- Daemon: fix profile-aware service label resolution (env-driven) and add coverage for launchd/systemd/schtasks. (#969) — thanks @bjesuiter.
- Agents: avoid false positives when logging unsupported Google tool schema keywords.
- Agents: skip Gemini history downgrades for google-antigravity to preserve tool calls. (#894) — thanks @mukhtharcm.
@@ -718,13 +718,13 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Web search: `web_search`/`web_fetch` tools (Brave API) + first-time setup in onboarding/configure.
- Browser control: Chrome extension relay takeover mode + remote browser control support.
- Plugins: channel plugins (gateway HTTP hooks) + Zalo plugin + onboarding install flow. (#854) — thanks @longmaba.
-- Security: expanded `clawdbot security audit` (+ `--fix`), detect-secrets CI scan, and a `SECURITY.md` reporting policy.
+- Security: expanded `moltbot security audit` (+ `--fix`), detect-secrets CI scan, and a `SECURITY.md` reporting policy.
### Changes
- Docs: clarify per-agent auth stores, sandboxed skill binaries, and elevated semantics.
- Docs: add FAQ entries for missing provider auth after adding agents and Gemini thinking signature errors.
- Agents: add optional auth-profile copy prompt on `agents add` and improve auth error messaging.
-- Security: expand `clawdbot security audit` checks (model hygiene, config includes, plugin allowlists, exposure matrix) and extend `--fix` to tighten more sensitive state paths.
+- Security: expand `moltbot security audit` checks (model hygiene, config includes, plugin allowlists, exposure matrix) and extend `--fix` to tighten more sensitive state paths.
- Security: add `SECURITY.md` reporting policy.
- Channels: add Matrix plugin (external) with docs + onboarding hooks.
- Plugins: add Zalo channel plugin with gateway HTTP hooks and onboarding install prompt. (#854) — thanks @longmaba.
@@ -734,7 +734,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Security: add detect-secrets CI scan and baseline guidance. (#227) — thanks @Hyaxia.
- Tools: add `web_search`/`web_fetch` (Brave API), auto-enable `web_fetch` for sandboxed sessions, and remove the `brave-search` skill.
- CLI/Docs: add a web tools configure section for storing Brave API keys and update onboarding tips.
-- Browser: add Chrome extension relay takeover mode (toolbar button), plus `clawdbot browser extension install/path` and remote browser control (standalone server + token auth).
+- Browser: add Chrome extension relay takeover mode (toolbar button), plus `moltbot browser extension install/path` and remote browser control (standalone server + token auth).
### Fixes
- Sessions: refactor session store updates to lock + mutate per-entry, add chat.inject, and harden subagent cleanup flow. (#944) — thanks @tyler6204.
@@ -831,19 +831,19 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
### New & Improved
- Memory: add custom OpenAI-compatible embedding endpoints; support OpenAI/local `node-llama-cpp` embeddings with per-agent overrides and provider metadata in tools/CLI. (#819) — thanks @mukhtharcm.
-- Memory: new `clawdbot memory` CLI plus `memory_search`/`memory_get` tools with snippets + line ranges; index stored under `~/.clawdbot/memory/{agentId}.sqlite` with watch-on-by-default.
+- Memory: new `moltbot memory` CLI plus `memory_search`/`memory_get` tools with snippets + line ranges; index stored under `~/.clawdbot/memory/{agentId}.sqlite` with watch-on-by-default.
- Agents: strengthen memory recall guidance; make workspace bootstrap truncation configurable (default 20k) with warnings; add default sub-agent model config.
- Tools/Sandbox: add tool profiles + group shorthands; support tool-policy groups in `tools.sandbox.tools`; drop legacy `memory` shorthand; allow Docker bind mounts via `docker.binds`. (#790) — thanks @akonyer.
- Tools: add provider/model-specific tool policy overrides (`tools.byProvider`) to trim tool exposure per provider.
- Tools: add browser `scrollintoview` action; allow Claude/Gemini tool param aliases; allow thinking `xhigh` for GPT-5.2/Codex with safe downgrades. (#793) — thanks @hsrvc; (#444) — thanks @grp06.
-- Gateway/CLI: add Tailscale binary discovery, custom bind mode, and probe auth retry; add `clawdbot dashboard` auto-open flow; default native slash commands to `"auto"` with per-provider overrides. (#740) — thanks @jeffersonwarrior.
+- Gateway/CLI: add Tailscale binary discovery, custom bind mode, and probe auth retry; add `moltbot dashboard` auto-open flow; default native slash commands to `"auto"` with per-provider overrides. (#740) — thanks @jeffersonwarrior.
- Auth/Onboarding: add Chutes OAuth (PKCE + refresh + onboarding choice); normalize API key inputs; default TUI onboarding to `deliver: false`. (#726) — thanks @FrieSei; (#791) — thanks @roshanasingh4.
- Providers: add `discord.allowBots`; trim legacy MiniMax M2 from default catalogs; route MiniMax vision to the Coding Plan VLM endpoint (also accepts `@/path/to/file.png` inputs). (#802) — thanks @zknicker.
- Gateway: allow Tailscale Serve identity headers to satisfy token auth; rebuild Control UI assets when protocol schema is newer. (#823) — thanks @roshanasingh4; (#786) — thanks @meaningfool.
- Heartbeat: default `ackMaxChars` to 300 so short `HEARTBEAT_OK` replies stay internal.
### Installer
-- Install: run `clawdbot doctor --non-interactive` after git installs/updates and nudge daemon restarts when detected.
+- Install: run `moltbot doctor --non-interactive` after git installs/updates and nudge daemon restarts when detected.
### Fixes
- Doctor: warn on pnpm workspace mismatches, missing Control UI assets, and missing tsx binaries; offer UI rebuilds.
@@ -864,7 +864,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Telegram: preserve forum topic thread ids, persist polling offsets, respect account bindings in webhook mode, and show typing indicator in General topics. (#727, #739) — thanks @thewilloftheshadow; (#821) — thanks @gumadeiras; (#779) — thanks @azade-c.
- Slack: accept slash commands with or without leading `/` for custom command configs. (#798) — thanks @thewilloftheshadow.
- Cron: persist disabled jobs correctly; accept `jobId` aliases for update/run/remove params. (#205, #252) — thanks @thewilloftheshadow.
-- Gateway/CLI: honor `CLAWDBOT_LAUNCHD_LABEL` / `CLAWDBOT_SYSTEMD_UNIT` overrides; `agents.list` respects explicit config; reduce noisy loopback WS logs during tests; run `clawdbot doctor --non-interactive` during updates. (#781) — thanks @ronyrus.
+- Gateway/CLI: honor `CLAWDBOT_LAUNCHD_LABEL` / `CLAWDBOT_SYSTEMD_UNIT` overrides; `agents.list` respects explicit config; reduce noisy loopback WS logs during tests; run `moltbot doctor --non-interactive` during updates. (#781) — thanks @ronyrus.
- Onboarding/Control UI: refuse invalid configs (run doctor first); quote Windows browser URLs for OAuth; keep chat scroll position unless the user is near the bottom. (#764) — thanks @mukhtharcm; (#794) — thanks @roshanasingh4; (#217) — thanks @thewilloftheshadow.
- Tools/UI: harden tool input schemas for strict providers; drop null-only union variants for Gemini schema cleanup; treat `maxChars: 0` as unlimited; keep TUI last streamed response instead of "(no output)". (#782) — thanks @AbhisekBasu1; (#796) — thanks @gabriel-trigo; (#747) — thanks @thewilloftheshadow.
- Connections UI: polish multi-account account cards. (#816) — thanks @steipete.
@@ -893,7 +893,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Auto-reply: add compact `/model` picker (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), plus `list|info|enable|disable|doctor` UX.
+- Plugins: add `moltbot plugins install` (path/tgz/npm), plus `list|info|enable|disable|doctor` UX.
- 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.
@@ -906,7 +906,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Agents: add pre-compaction memory flush config (`agents.defaults.compaction.*`) with a soft threshold + system prompt.
- Config: add `$include` directive 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 `clawdbot` CLI when missing in local mode; install via `molt.bot/install-cli.sh` (no onboarding) and use external launchd/CLI instead of the embedded gateway runtime.
+- macOS: prompt to install the global `moltbot` CLI when missing in local mode; install via `molt.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 `--model` flag to cron add/edit commands. (#711) — thanks @mjrussell.
- Cron/CLI: trim model overrides on cron edits and document main-session guidance. (#711) — thanks @mjrussell.
@@ -936,7 +936,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- 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.paths` directory entries as package roots when they contain `package.json` + `clawdbot.extensions`; load plugin packages from config dirs; extract archives without system tar.
+- Plugins: treat `plugins.load.paths` directory entries as package roots when they contain `package.json` + `moltbot.extensions`; load plugin packages from config dirs; extract archives without system tar.
- Config: expand `~` in `CLAWDBOT_CONFIG_PATH` and common path-like config fields (including `plugins.load.paths`); guard invalid `$include` paths. (#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.
@@ -965,9 +965,9 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
## 2026.1.10
### Highlights
-- CLI: `clawdbot status` now table-based + shows OS/update/gateway/daemon/agents/sessions; `status --all` adds a full read-only debug report (tables, log tails, Tailscale summary, and scan progress via OSC-9 + spinner).
+- CLI: `moltbot status` now table-based + shows OS/update/gateway/daemon/agents/sessions; `status --all` adds 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) + `--update` shorthand. (#673) — thanks @fm1randa.
+- CLI: add `moltbot update` (safe-ish git checkout update) + `--update` shorthand. (#673) — thanks @fm1randa.
- Gateway: add OpenAI-compatible `/v1/chat/completions` HTTP endpoint (auth, SSE streaming, per-agent routing). (#680).
### Changes
@@ -977,7 +977,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Agents/Browser: add `browser.target` (sandbox/host/custom) with sandbox host-control gating via `agents.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 reset` and `clawdbot uninstall` flows (interactive + non-interactive) plus docker cleanup smoke test.
+- CLI: add `moltbot reset` and `moltbot uninstall` flows (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 `historyLimit` overrides (fallback to `messages.groupChat.historyLimit`). Set `0` to disable. (#672).
- Gateway/Heartbeat: optionally deliver heartbeat `Reasoning:` output (`agents.defaults.heartbeat.includeReasoning`). (#690)
@@ -986,7 +986,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
### 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 `status` while keeping `status --all` redacted; add troubleshooting link footer; keep log tails pasteable; show gateway auth used when reachable; surface provider runtime errors (Signal/iMessage/Slack); harden `tailscale status --json` parsing; make `status --all` scan progress determinate; and replace the footer with a 3-line “Next steps” recommendation (share/debug/probe).
-- CLI/Gateway: clarify that `clawdbot gateway status` reports RPC health (connect + RPC) and shows RPC failures separately from connect failures.
+- CLI/Gateway: clarify that `moltbot gateway status` reports 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` + `/id` commands to reveal sender id for allowlists; allow `@username` and prefixed ids in `allowFrom` prompts (with stability warning).
- Heartbeat: strip markup-wrapped `HEARTBEAT_OK` so acks don’t leak to external providers (e.g., Telegram).
@@ -999,7 +999,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Agents/Pi: inject config `temperature`/`maxTokens` into 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 status` the first diagnostic step, clarify `status --deep` behavior, and document `/whoami` + `/id`.
+- Docs: make `moltbot status` the first diagnostic step, clarify `status --deep` behavior, and document `/whoami` + `/id`.
- Docs/Testing: clarify live tool+image probes and how to list your testable `provider/model` ids.
- 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.
@@ -1019,7 +1019,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- 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 `reasoning` items 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.
+- Sandbox: add `moltbot 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.
@@ -1031,12 +1031,12 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Gateway/Control UI: sniff image attachments for chat.send, drop non-images, and log mismatches. (#670) — thanks @cristip73.
- macOS: force `restart-mac.sh --sign` to 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 sessions` now includes `elev:*` + `usage:*` flags in the table output.
+- CLI: `moltbot sessions` now includes `elev:*` + `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).
+- Branding: normalize legacy casing/branding to “Moltbot” (CLI, status, docs).
- Auto-reply: fix native `/model` not updating the actual chat session (Telegram/Slack/Discord). (#646)
-- Doctor: offer to run `clawdbot update` first on git installs (keeps doctor output aligned with latest).
-- Doctor: avoid false legacy workspace warning when install dir is `~/clawdbot`. (#660)
+- Doctor: offer to run `moltbot update` first on git installs (keeps doctor output aligned with latest).
+- Doctor: avoid false legacy workspace warning when install dir is `~/moltbot`. (#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.
@@ -1067,12 +1067,12 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Control UI/TUI: queued messages, session links, reasoning view, mobile polish, logs UX.
### Breaking
-- CLI: `clawdbot message` now subcommands (`message send|poll|...`) and requires `--provider` unless only one provider configured.
+- CLI: `moltbot message` now subcommands (`message send|poll|...`) and requires `--provider` unless only one provider configured.
- Commands/Tools: `/restart` and gateway restart tool disabled by default; enable with `commands.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.
+- Models/Auth: setup-token + token auth profiles; `moltbot 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_status` tool (and sandbox allow); adaptive context pruning default; system prompt messaging guidance + no auto self-update; eligible skills list injection; sub-agent context trimmed.
- Commands: `/commands` list; `/models` alias; `/usage` alias; `/debug` runtime overrides + effective config view; `/config` chat 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.
@@ -1104,7 +1104,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- 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.
+- 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 MoltbotKit 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.
@@ -1130,7 +1130,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- 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 relevant `allowFrom` (Discord/Slack: `discord.dm.allowFrom` / `slack.dm.allowFrom`).
- - Approve requests via `clawdbot pairing list ` + `clawdbot pairing approve `.
+ - Approve requests via `moltbot pairing list ` + `moltbot pairing approve `.
- Sandbox: default `agent.sandbox.scope` to `"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`); removed `messages.timestampPrefix`. Add `agent.userTimezone` to 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.
@@ -1144,7 +1144,7 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- **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.
+- **Gateway/CLI UX:** `moltbot 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.
@@ -1186,4 +1186,4 @@ Thanks @AlexMikhalev, @CoreyH, @John-Rood, @KrauseFx, @MaudeBot, @Nachx639, @Nic
- Agent tools: honor `agent.tools` allow/deny policy even when sandbox is off.
- Discord: avoid duplicate replies when OpenAI emits repeated `message_end` events.
- Commands: unify /status (inline) and command auth across providers; group bypass for authorized control commands; remove Discord /clawd slash handler.
-- CLI: run `clawdbot agent` via the Gateway by default; use `--local` to force embedded mode.
+- CLI: run `moltbot agent` via the Gateway by default; use `--local` to force embedded mode.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index d6eb0532f..509d5b11a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,11 +1,11 @@
-# Contributing to Clawdbot
+# Contributing to Moltbot
Welcome to the lobster tank! 🦞
## Quick Links
-- **GitHub:** https://github.com/clawdbot/clawdbot
+- **GitHub:** https://github.com/moltbot/moltbot
- **Discord:** https://discord.gg/qkhbAGHRBT
-- **X/Twitter:** [@steipete](https://x.com/steipete) / [@clawdbot](https://x.com/clawdbot)
+- **X/Twitter:** [@steipete](https://x.com/steipete) / [@moltbot](https://x.com/moltbot)
## Maintainers
@@ -20,11 +20,11 @@ Welcome to the lobster tank! 🦞
## How to Contribute
1. **Bugs & small fixes** → Open a PR!
-2. **New features / architecture** → Start a [GitHub Discussion](https://github.com/clawdbot/clawdbot/discussions) or ask in Discord first
+2. **New features / architecture** → Start a [GitHub Discussion](https://github.com/moltbot/moltbot/discussions) or ask in Discord first
3. **Questions** → Discord #setup-help
## Before You PR
-- Test locally with your Clawdbot instance
+- Test locally with your Moltbot instance
- Run linter: `npm run lint`
- Keep PRs focused (one thing per PR)
- Describe what & why
@@ -49,4 +49,4 @@ We are currently prioritizing:
- **Skills**: Expanding the library of bundled skills and improving the Skill Creation developer experience.
- **Performance**: Optimizing token usage and compaction logic.
-Check the [GitHub Issues](https://github.com/clawdbot/clawdbot/issues) for "good first issue" labels!
+Check the [GitHub Issues](https://github.com/moltbot/moltbot/issues) for "good first issue" labels!
diff --git a/Dockerfile.sandbox-browser b/Dockerfile.sandbox-browser
index 3b18917b1..8d8a08701 100644
--- a/Dockerfile.sandbox-browser
+++ b/Dockerfile.sandbox-browser
@@ -20,9 +20,9 @@ RUN apt-get update \
xvfb \
&& rm -rf /var/lib/apt/lists/*
-COPY scripts/sandbox-browser-entrypoint.sh /usr/local/bin/clawdbot-sandbox-browser
-RUN chmod +x /usr/local/bin/clawdbot-sandbox-browser
+COPY scripts/sandbox-browser-entrypoint.sh /usr/local/bin/moltbot-sandbox-browser
+RUN chmod +x /usr/local/bin/moltbot-sandbox-browser
EXPOSE 9222 5900 6080
-CMD ["clawdbot-sandbox-browser"]
+CMD ["moltbot-sandbox-browser"]
diff --git a/SECURITY.md b/SECURITY.md
index 1d0849a54..414def17f 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -1,6 +1,6 @@
# Security Policy
-If you believe you've found a security issue in Clawdbot, please report it privately.
+If you believe you've found a security issue in Moltbot, please report it privately.
## Reporting
@@ -9,19 +9,19 @@ If you believe you've found a security issue in Clawdbot, please report it priva
## Operational Guidance
-For threat model + hardening guidance (including `clawdbot security audit --deep` and `--fix`), see:
+For threat model + hardening guidance (including `moltbot security audit --deep` and `--fix`), see:
- `https://docs.molt.bot/gateway/security`
### Web Interface Safety
-Clawdbot's web interface is intended for local use only. Do **not** bind it to the public internet; it is not hardened for public exposure.
+Moltbot's web interface is intended for local use only. Do **not** bind it to the public internet; it is not hardened for public exposure.
## Runtime Requirements
### Node.js Version
-Clawdbot requires **Node.js 22.12.0 or later** (LTS). This version includes important security patches:
+Moltbot requires **Node.js 22.12.0 or later** (LTS). This version includes important security patches:
- CVE-2025-59466: async_hooks DoS vulnerability
- CVE-2026-21636: Permission model bypass vulnerability
@@ -34,7 +34,7 @@ node --version # Should be v22.12.0 or later
### Docker Security
-When running Clawdbot in Docker:
+When running Moltbot in Docker:
1. The official image runs as a non-root user (`node`) for reduced attack surface
2. Use `--read-only` flag when possible for additional filesystem protection
@@ -44,8 +44,8 @@ Example secure Docker run:
```bash
docker run --read-only --cap-drop=ALL \
- -v clawdbot-data:/app/data \
- clawdbot/clawdbot:latest
+ -v moltbot-data:/app/data \
+ moltbot/moltbot:latest
```
## Security Scanning
diff --git a/appcast.xml b/appcast.xml
index df325a7b6..568632fd7 100644
--- a/appcast.xml
+++ b/appcast.xml
@@ -1,31 +1,31 @@
- Clawdbot
+ Moltbot
-
2026.1.24-1
Sun, 25 Jan 2026 14:05:25 +0000
- https://raw.githubusercontent.com/clawdbot/clawdbot/main/appcast.xml
+ https://raw.githubusercontent.com/moltbot/moltbot/main/appcast.xml
7952
2026.1.24-1
15.0
- Clawdbot 2026.1.24-1
+ Moltbot 2026.1.24-1
Fixes
Packaging: include dist/shared output in npm tarball (fixes missing reasoning-tags import on install).
-View full changelog
+View full changelog
]]>
-
+
-
2026.1.24
Sun, 25 Jan 2026 13:31:05 +0000
- https://raw.githubusercontent.com/clawdbot/clawdbot/main/appcast.xml
+ https://raw.githubusercontent.com/moltbot/moltbot/main/appcast.xml
7944
2026.1.24
15.0
- Clawdbot 2026.1.24
+ Moltbot 2026.1.24
Highlights
Providers: Ollama discovery + docs; Venice guide upgrades + cross-links. (#1606) Thanks @abhaymundhara. https://docs.molt.bot/providers/ollama https://docs.molt.bot/providers/venice
@@ -93,18 +93,18 @@
Tests: avoid fake-timer dependency in embedded runner stream mock to reduce CI flakes. (#1597) Thanks @rohannagpal.
Tests: increase embedded runner ordering test timeout to reduce CI flakes. (#1597) Thanks @rohannagpal.
-View full changelog
+View full changelog
]]>
-
+
-
2026.1.23
Sat, 24 Jan 2026 13:02:18 +0000
- https://raw.githubusercontent.com/clawdbot/clawdbot/main/appcast.xml
+ https://raw.githubusercontent.com/moltbot/moltbot/main/appcast.xml
7750
2026.1.23
15.0
- Clawdbot 2026.1.23
+ Moltbot 2026.1.23
Highlights
TTS: allow model-driven TTS tags by default for expressive audio replies (laughter, singing cues, etc.).
@@ -117,9 +117,9 @@
Browser: add node-host proxy auto-routing for remote gateways (configurable per gateway/node).
Heartbeat: add per-channel visibility controls (OK/alerts/indicator). (#1452) Thanks @dlauer.
Plugins: add optional llm-task JSON-only tool for workflows. (#1498) Thanks @vignesh07.
-CLI: restart the gateway by default after clawdbot update; add --no-restart to skip it.
-CLI: add live auth probes to clawdbot models status for per-profile verification.
-CLI: add clawdbot system for system events + heartbeat controls; remove standalone wake.
+CLI: restart the gateway by default after moltbot update; add --no-restart to skip it.
+CLI: add live auth probes to moltbot models status for per-profile verification.
+CLI: add moltbot system for system events + heartbeat controls; remove standalone wake.
Agents: add Bedrock auto-discovery defaults + config overrides. (#1553) Thanks @fal3.
Docs: add cron vs heartbeat decision guide (with Lobster workflow notes). (#1533) Thanks @JustYannicc.
Docs: clarify HEARTBEAT.md empty file skips heartbeats, missing file still runs. (#1535) Thanks @JustYannicc.
@@ -154,10 +154,10 @@
Exec: honor tools.exec ask/security defaults for elevated approvals (avoid unwanted prompts).
TUI: forward unknown slash commands (for example, /context) to the Gateway.
TUI: include Gateway slash commands in autocomplete and /help.
-CLI: skip usage lines in clawdbot models status when provider usage is unavailable.
+CLI: skip usage lines in moltbot models status when provider usage is unavailable.
CLI: suppress diagnostic session/run noise during auth probes.
CLI: hide auth probe timeout warnings from embedded runs.
-CLI: render auth probe results as a table in clawdbot models status.
+CLI: render auth probe results as a table in moltbot models status.
CLI: suppress probe-only embedded logs unless --verbose is set.
CLI: move auth probe errors below the table to reduce wrapping.
CLI: prevent ANSI color bleed when table cells wrap.
@@ -180,9 +180,9 @@
Browser: keep extension relay tabs controllable when the extension reuses a session id after switching tabs. (#1160)
Agents: warn and ignore tool allowlists that only reference unknown or unloaded plugin tools. (#1566)
-View full changelog
+View full changelog
]]>
-
+
\ No newline at end of file
diff --git a/apps/android/app/build.gradle.kts b/apps/android/app/build.gradle.kts
index 85dc9c566..b9f7d7682 100644
--- a/apps/android/app/build.gradle.kts
+++ b/apps/android/app/build.gradle.kts
@@ -65,7 +65,7 @@ androidComponents {
val versionName = output.versionName.orNull ?: "0"
val buildType = variant.buildType
- val outputFileName = "clawdbot-${versionName}-${buildType}.apk"
+ val outputFileName = "moltbot-${versionName}-${buildType}.apk"
output.outputFileName = outputFileName
}
}
diff --git a/apps/android/app/src/main/AndroidManifest.xml b/apps/android/app/src/main/AndroidManifest.xml
index df2aa94b3..e0aab841e 100644
--- a/apps/android/app/src/main/AndroidManifest.xml
+++ b/apps/android/app/src/main/AndroidManifest.xml
@@ -32,7 +32,7 @@
android:label="@string/app_name"
android:supportsRtl="true"
android:networkSecurityConfig="@xml/network_security_config"
- android:theme="@style/Theme.ClawdbotNode">
+ android:theme="@style/Theme.MoltbotNode">
Quint(status, server, connected, voiceMode, voiceListening)
}.collect { (status, server, connected, voiceMode, voiceListening) ->
- val title = if (connected) "Clawdbot Node · Connected" else "Clawdbot Node"
+ val title = if (connected) "Moltbot Node · Connected" else "Moltbot Node"
val voiceSuffix =
if (voiceMode == VoiceWakeMode.Always) {
if (voiceListening) " · Voice Wake: Listening" else " · Voice Wake: Paused"
@@ -91,7 +91,7 @@ class NodeForegroundService : Service() {
"Connection",
NotificationManager.IMPORTANCE_LOW,
).apply {
- description = "Clawdbot node connection status"
+ description = "Moltbot node connection status"
setShowBadge(false)
}
mgr.createNotificationChannel(channel)
diff --git a/apps/android/app/src/main/java/com/clawdbot/android/NodeRuntime.kt b/apps/android/app/src/main/java/com/clawdbot/android/NodeRuntime.kt
index 603e4b82b..46e486100 100644
--- a/apps/android/app/src/main/java/com/clawdbot/android/NodeRuntime.kt
+++ b/apps/android/app/src/main/java/com/clawdbot/android/NodeRuntime.kt
@@ -26,14 +26,14 @@ import com.clawdbot.android.BuildConfig
import com.clawdbot.android.node.CanvasController
import com.clawdbot.android.node.ScreenRecordManager
import com.clawdbot.android.node.SmsManager
-import com.clawdbot.android.protocol.ClawdbotCapability
-import com.clawdbot.android.protocol.ClawdbotCameraCommand
-import com.clawdbot.android.protocol.ClawdbotCanvasA2UIAction
-import com.clawdbot.android.protocol.ClawdbotCanvasA2UICommand
-import com.clawdbot.android.protocol.ClawdbotCanvasCommand
-import com.clawdbot.android.protocol.ClawdbotScreenCommand
-import com.clawdbot.android.protocol.ClawdbotLocationCommand
-import com.clawdbot.android.protocol.ClawdbotSmsCommand
+import com.clawdbot.android.protocol.MoltbotCapability
+import com.clawdbot.android.protocol.MoltbotCameraCommand
+import com.clawdbot.android.protocol.MoltbotCanvasA2UIAction
+import com.clawdbot.android.protocol.MoltbotCanvasA2UICommand
+import com.clawdbot.android.protocol.MoltbotCanvasCommand
+import com.clawdbot.android.protocol.MoltbotScreenCommand
+import com.clawdbot.android.protocol.MoltbotLocationCommand
+import com.clawdbot.android.protocol.MoltbotSmsCommand
import com.clawdbot.android.voice.TalkModeManager
import com.clawdbot.android.voice.VoiceWakeManager
import kotlinx.coroutines.CoroutineScope
@@ -451,38 +451,38 @@ class NodeRuntime(context: Context) {
private fun buildInvokeCommands(): List =
buildList {
- add(ClawdbotCanvasCommand.Present.rawValue)
- add(ClawdbotCanvasCommand.Hide.rawValue)
- add(ClawdbotCanvasCommand.Navigate.rawValue)
- add(ClawdbotCanvasCommand.Eval.rawValue)
- add(ClawdbotCanvasCommand.Snapshot.rawValue)
- add(ClawdbotCanvasA2UICommand.Push.rawValue)
- add(ClawdbotCanvasA2UICommand.PushJSONL.rawValue)
- add(ClawdbotCanvasA2UICommand.Reset.rawValue)
- add(ClawdbotScreenCommand.Record.rawValue)
+ add(MoltbotCanvasCommand.Present.rawValue)
+ add(MoltbotCanvasCommand.Hide.rawValue)
+ add(MoltbotCanvasCommand.Navigate.rawValue)
+ add(MoltbotCanvasCommand.Eval.rawValue)
+ add(MoltbotCanvasCommand.Snapshot.rawValue)
+ add(MoltbotCanvasA2UICommand.Push.rawValue)
+ add(MoltbotCanvasA2UICommand.PushJSONL.rawValue)
+ add(MoltbotCanvasA2UICommand.Reset.rawValue)
+ add(MoltbotScreenCommand.Record.rawValue)
if (cameraEnabled.value) {
- add(ClawdbotCameraCommand.Snap.rawValue)
- add(ClawdbotCameraCommand.Clip.rawValue)
+ add(MoltbotCameraCommand.Snap.rawValue)
+ add(MoltbotCameraCommand.Clip.rawValue)
}
if (locationMode.value != LocationMode.Off) {
- add(ClawdbotLocationCommand.Get.rawValue)
+ add(MoltbotLocationCommand.Get.rawValue)
}
if (sms.canSendSms()) {
- add(ClawdbotSmsCommand.Send.rawValue)
+ add(MoltbotSmsCommand.Send.rawValue)
}
}
private fun buildCapabilities(): List =
buildList {
- add(ClawdbotCapability.Canvas.rawValue)
- add(ClawdbotCapability.Screen.rawValue)
- if (cameraEnabled.value) add(ClawdbotCapability.Camera.rawValue)
- if (sms.canSendSms()) add(ClawdbotCapability.Sms.rawValue)
+ add(MoltbotCapability.Canvas.rawValue)
+ add(MoltbotCapability.Screen.rawValue)
+ if (cameraEnabled.value) add(MoltbotCapability.Camera.rawValue)
+ if (sms.canSendSms()) add(MoltbotCapability.Sms.rawValue)
if (voiceWakeMode.value != VoiceWakeMode.Off && hasRecordAudioPermission()) {
- add(ClawdbotCapability.VoiceWake.rawValue)
+ add(MoltbotCapability.VoiceWake.rawValue)
}
if (locationMode.value != LocationMode.Off) {
- add(ClawdbotCapability.Location.rawValue)
+ add(MoltbotCapability.Location.rawValue)
}
}
@@ -506,7 +506,7 @@ class NodeRuntime(context: Context) {
val version = resolvedVersionName()
val release = Build.VERSION.RELEASE?.trim().orEmpty()
val releaseLabel = if (release.isEmpty()) "unknown" else release
- return "ClawdbotAndroid/$version (Android $releaseLabel; SDK ${Build.VERSION.SDK_INT})"
+ return "MoltbotAndroid/$version (Android $releaseLabel; SDK ${Build.VERSION.SDK_INT})"
}
private fun buildClientInfo(clientId: String, clientMode: String): GatewayClientInfo {
@@ -529,7 +529,7 @@ class NodeRuntime(context: Context) {
caps = buildCapabilities(),
commands = buildInvokeCommands(),
permissions = emptyMap(),
- client = buildClientInfo(clientId = "clawdbot-android", clientMode = "node"),
+ client = buildClientInfo(clientId = "moltbot-android", clientMode = "node"),
userAgent = buildUserAgent(),
)
}
@@ -541,7 +541,7 @@ class NodeRuntime(context: Context) {
caps = emptyList(),
commands = emptyList(),
permissions = emptyMap(),
- client = buildClientInfo(clientId = "clawdbot-control-ui", clientMode = "ui"),
+ client = buildClientInfo(clientId = "moltbot-control-ui", clientMode = "ui"),
userAgent = buildUserAgent(),
)
}
@@ -665,7 +665,7 @@ class NodeRuntime(context: Context) {
val actionId = (userActionObj["id"] as? JsonPrimitive)?.content?.trim().orEmpty().ifEmpty {
java.util.UUID.randomUUID().toString()
}
- val name = ClawdbotCanvasA2UIAction.extractActionName(userActionObj) ?: return@launch
+ val name = MoltbotCanvasA2UIAction.extractActionName(userActionObj) ?: return@launch
val surfaceId =
(userActionObj["surfaceId"] as? JsonPrimitive)?.content?.trim().orEmpty().ifEmpty { "main" }
@@ -675,7 +675,7 @@ class NodeRuntime(context: Context) {
val sessionKey = resolveMainSessionKey()
val message =
- ClawdbotCanvasA2UIAction.formatAgentMessage(
+ MoltbotCanvasA2UIAction.formatAgentMessage(
actionName = name,
sessionKey = sessionKey,
surfaceId = surfaceId,
@@ -709,7 +709,7 @@ class NodeRuntime(context: Context) {
try {
canvas.eval(
- ClawdbotCanvasA2UIAction.jsDispatchA2UIActionStatus(
+ MoltbotCanvasA2UIAction.jsDispatchA2UIActionStatus(
actionId = actionId,
ok = connected && error == null,
error = error,
@@ -827,10 +827,10 @@ class NodeRuntime(context: Context) {
private suspend fun handleInvoke(command: String, paramsJson: String?): GatewaySession.InvokeResult {
if (
- command.startsWith(ClawdbotCanvasCommand.NamespacePrefix) ||
- command.startsWith(ClawdbotCanvasA2UICommand.NamespacePrefix) ||
- command.startsWith(ClawdbotCameraCommand.NamespacePrefix) ||
- command.startsWith(ClawdbotScreenCommand.NamespacePrefix)
+ command.startsWith(MoltbotCanvasCommand.NamespacePrefix) ||
+ command.startsWith(MoltbotCanvasA2UICommand.NamespacePrefix) ||
+ command.startsWith(MoltbotCameraCommand.NamespacePrefix) ||
+ command.startsWith(MoltbotScreenCommand.NamespacePrefix)
) {
if (!isForeground.value) {
return GatewaySession.InvokeResult.error(
@@ -839,13 +839,13 @@ class NodeRuntime(context: Context) {
)
}
}
- if (command.startsWith(ClawdbotCameraCommand.NamespacePrefix) && !cameraEnabled.value) {
+ if (command.startsWith(MoltbotCameraCommand.NamespacePrefix) && !cameraEnabled.value) {
return GatewaySession.InvokeResult.error(
code = "CAMERA_DISABLED",
message = "CAMERA_DISABLED: enable Camera in Settings",
)
}
- if (command.startsWith(ClawdbotLocationCommand.NamespacePrefix) &&
+ if (command.startsWith(MoltbotLocationCommand.NamespacePrefix) &&
locationMode.value == LocationMode.Off
) {
return GatewaySession.InvokeResult.error(
@@ -855,18 +855,18 @@ class NodeRuntime(context: Context) {
}
return when (command) {
- ClawdbotCanvasCommand.Present.rawValue -> {
+ MoltbotCanvasCommand.Present.rawValue -> {
val url = CanvasController.parseNavigateUrl(paramsJson)
canvas.navigate(url)
GatewaySession.InvokeResult.ok(null)
}
- ClawdbotCanvasCommand.Hide.rawValue -> GatewaySession.InvokeResult.ok(null)
- ClawdbotCanvasCommand.Navigate.rawValue -> {
+ MoltbotCanvasCommand.Hide.rawValue -> GatewaySession.InvokeResult.ok(null)
+ MoltbotCanvasCommand.Navigate.rawValue -> {
val url = CanvasController.parseNavigateUrl(paramsJson)
canvas.navigate(url)
GatewaySession.InvokeResult.ok(null)
}
- ClawdbotCanvasCommand.Eval.rawValue -> {
+ MoltbotCanvasCommand.Eval.rawValue -> {
val js =
CanvasController.parseEvalJs(paramsJson)
?: return GatewaySession.InvokeResult.error(
@@ -884,7 +884,7 @@ class NodeRuntime(context: Context) {
}
GatewaySession.InvokeResult.ok("""{"result":${result.toJsonString()}}""")
}
- ClawdbotCanvasCommand.Snapshot.rawValue -> {
+ MoltbotCanvasCommand.Snapshot.rawValue -> {
val snapshotParams = CanvasController.parseSnapshotParams(paramsJson)
val base64 =
try {
@@ -901,7 +901,7 @@ class NodeRuntime(context: Context) {
}
GatewaySession.InvokeResult.ok("""{"format":"${snapshotParams.format.rawValue}","base64":"$base64"}""")
}
- ClawdbotCanvasA2UICommand.Reset.rawValue -> {
+ MoltbotCanvasA2UICommand.Reset.rawValue -> {
val a2uiUrl = resolveA2uiHostUrl()
?: return GatewaySession.InvokeResult.error(
code = "A2UI_HOST_NOT_CONFIGURED",
@@ -917,7 +917,7 @@ class NodeRuntime(context: Context) {
val res = canvas.eval(a2uiResetJS)
GatewaySession.InvokeResult.ok(res)
}
- ClawdbotCanvasA2UICommand.Push.rawValue, ClawdbotCanvasA2UICommand.PushJSONL.rawValue -> {
+ MoltbotCanvasA2UICommand.Push.rawValue, MoltbotCanvasA2UICommand.PushJSONL.rawValue -> {
val messages =
try {
decodeA2uiMessages(command, paramsJson)
@@ -940,7 +940,7 @@ class NodeRuntime(context: Context) {
val res = canvas.eval(js)
GatewaySession.InvokeResult.ok(res)
}
- ClawdbotCameraCommand.Snap.rawValue -> {
+ MoltbotCameraCommand.Snap.rawValue -> {
showCameraHud(message = "Taking photo…", kind = CameraHudKind.Photo)
triggerCameraFlash()
val res =
@@ -954,7 +954,7 @@ class NodeRuntime(context: Context) {
showCameraHud(message = "Photo captured", kind = CameraHudKind.Success, autoHideMs = 1600)
GatewaySession.InvokeResult.ok(res.payloadJson)
}
- ClawdbotCameraCommand.Clip.rawValue -> {
+ MoltbotCameraCommand.Clip.rawValue -> {
val includeAudio = paramsJson?.contains("\"includeAudio\":true") != false
if (includeAudio) externalAudioCaptureActive.value = true
try {
@@ -973,7 +973,7 @@ class NodeRuntime(context: Context) {
if (includeAudio) externalAudioCaptureActive.value = false
}
}
- ClawdbotLocationCommand.Get.rawValue -> {
+ MoltbotLocationCommand.Get.rawValue -> {
val mode = locationMode.value
if (!isForeground.value && mode != LocationMode.Always) {
return GatewaySession.InvokeResult.error(
@@ -1026,7 +1026,7 @@ class NodeRuntime(context: Context) {
GatewaySession.InvokeResult.error(code = "LOCATION_UNAVAILABLE", message = message)
}
}
- ClawdbotScreenCommand.Record.rawValue -> {
+ MoltbotScreenCommand.Record.rawValue -> {
// Status pill mirrors screen recording state so it stays visible without overlay stacking.
_screenRecordActive.value = true
try {
@@ -1042,7 +1042,7 @@ class NodeRuntime(context: Context) {
_screenRecordActive.value = false
}
}
- ClawdbotSmsCommand.Send.rawValue -> {
+ MoltbotSmsCommand.Send.rawValue -> {
val res = sms.send(paramsJson)
if (res.ok) {
GatewaySession.InvokeResult.ok(res.payloadJson)
@@ -1115,7 +1115,7 @@ class NodeRuntime(context: Context) {
val raw = if (nodeRaw.isNotBlank()) nodeRaw else operatorRaw
if (raw.isBlank()) return null
val base = raw.trimEnd('/')
- return "${base}/__clawdbot__/a2ui/?platform=android"
+ return "${base}/__moltbot__/a2ui/?platform=android"
}
private suspend fun ensureA2uiReady(a2uiUrl: String): Boolean {
@@ -1150,7 +1150,7 @@ class NodeRuntime(context: Context) {
val jsonlField = (obj["jsonl"] as? JsonPrimitive)?.content?.trim().orEmpty()
val hasMessagesArray = obj["messages"] is JsonArray
- if (command == ClawdbotCanvasA2UICommand.PushJSONL.rawValue || (!hasMessagesArray && jsonlField.isNotBlank())) {
+ if (command == MoltbotCanvasA2UICommand.PushJSONL.rawValue || (!hasMessagesArray && jsonlField.isNotBlank())) {
val jsonl = jsonlField
if (jsonl.isBlank()) throw IllegalArgumentException("INVALID_REQUEST: jsonl required")
val messages =
@@ -1218,7 +1218,7 @@ private const val a2uiResetJS: String =
"""
(() => {
try {
- if (!globalThis.clawdbotA2UI) return { ok: false, error: "missing clawdbotA2UI" };
+ if (!globalThis.clawdbotA2UI) return { ok: false, error: "missing moltbotA2UI" };
return globalThis.clawdbotA2UI.reset();
} catch (e) {
return { ok: false, error: String(e?.message ?? e) };
@@ -1230,7 +1230,7 @@ private fun a2uiApplyMessagesJS(messagesJson: String): String {
return """
(() => {
try {
- if (!globalThis.clawdbotA2UI) return { ok: false, error: "missing clawdbotA2UI" };
+ if (!globalThis.clawdbotA2UI) return { ok: false, error: "missing moltbotA2UI" };
const messages = $messagesJson;
return globalThis.clawdbotA2UI.applyMessages(messages);
} catch (e) {
diff --git a/apps/android/app/src/main/java/com/clawdbot/android/PermissionRequester.kt b/apps/android/app/src/main/java/com/clawdbot/android/PermissionRequester.kt
index fa294aa24..5e95d7b27 100644
--- a/apps/android/app/src/main/java/com/clawdbot/android/PermissionRequester.kt
+++ b/apps/android/app/src/main/java/com/clawdbot/android/PermissionRequester.kt
@@ -115,7 +115,7 @@ class PermissionRequester(private val activity: ComponentActivity) {
private fun buildRationaleMessage(permissions: List): String {
val labels = permissions.map { permissionLabel(it) }
- return "Clawdbot needs ${labels.joinToString(", ")} permissions to continue."
+ return "Moltbot needs ${labels.joinToString(", ")} permissions to continue."
}
private fun buildSettingsMessage(permissions: List): String {
diff --git a/apps/android/app/src/main/java/com/clawdbot/android/ScreenCaptureRequester.kt b/apps/android/app/src/main/java/com/clawdbot/android/ScreenCaptureRequester.kt
index d270d5273..f7cf6708c 100644
--- a/apps/android/app/src/main/java/com/clawdbot/android/ScreenCaptureRequester.kt
+++ b/apps/android/app/src/main/java/com/clawdbot/android/ScreenCaptureRequester.kt
@@ -55,7 +55,7 @@ class ScreenCaptureRequester(private val activity: ComponentActivity) {
suspendCancellableCoroutine { cont ->
AlertDialog.Builder(activity)
.setTitle("Screen recording required")
- .setMessage("Clawdbot needs to record the screen for this command.")
+ .setMessage("Moltbot needs to record the screen for this command.")
.setPositiveButton("Continue") { _, _ -> cont.resume(true) }
.setNegativeButton("Not now") { _, _ -> cont.resume(false) }
.setOnCancelListener { cont.resume(false) }
diff --git a/apps/android/app/src/main/java/com/clawdbot/android/SecurePrefs.kt b/apps/android/app/src/main/java/com/clawdbot/android/SecurePrefs.kt
index cd6270dd5..1c464f961 100644
--- a/apps/android/app/src/main/java/com/clawdbot/android/SecurePrefs.kt
+++ b/apps/android/app/src/main/java/com/clawdbot/android/SecurePrefs.kt
@@ -31,7 +31,7 @@ class SecurePrefs(context: Context) {
private val prefs =
EncryptedSharedPreferences.create(
context,
- "clawdbot.node.secure",
+ "moltbot.node.secure",
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM,
diff --git a/apps/android/app/src/main/java/com/clawdbot/android/gateway/DeviceIdentityStore.kt b/apps/android/app/src/main/java/com/clawdbot/android/gateway/DeviceIdentityStore.kt
index 72500b750..4499e0ce7 100644
--- a/apps/android/app/src/main/java/com/clawdbot/android/gateway/DeviceIdentityStore.kt
+++ b/apps/android/app/src/main/java/com/clawdbot/android/gateway/DeviceIdentityStore.kt
@@ -21,7 +21,7 @@ data class DeviceIdentity(
class DeviceIdentityStore(context: Context) {
private val json = Json { ignoreUnknownKeys = true }
- private val identityFile = File(context.filesDir, "clawdbot/identity/device.json")
+ private val identityFile = File(context.filesDir, "moltbot/identity/device.json")
@Synchronized
fun loadOrCreate(): DeviceIdentity {
diff --git a/apps/android/app/src/main/java/com/clawdbot/android/gateway/GatewayDiscovery.kt b/apps/android/app/src/main/java/com/clawdbot/android/gateway/GatewayDiscovery.kt
index 121a95485..b1d50e28b 100644
--- a/apps/android/app/src/main/java/com/clawdbot/android/gateway/GatewayDiscovery.kt
+++ b/apps/android/app/src/main/java/com/clawdbot/android/gateway/GatewayDiscovery.kt
@@ -51,9 +51,9 @@ class GatewayDiscovery(
private val nsd = context.getSystemService(NsdManager::class.java)
private val connectivity = context.getSystemService(ConnectivityManager::class.java)
private val dns = DnsResolver.getInstance()
- private val serviceType = "_clawdbot-gw._tcp."
- private val wideAreaDomain = "clawdbot.internal."
- private val logTag = "Clawdbot/GatewayDiscovery"
+ private val serviceType = "_moltbot-gw._tcp."
+ private val wideAreaDomain = "moltbot.internal."
+ private val logTag = "Moltbot/GatewayDiscovery"
private val localById = ConcurrentHashMap()
private val unicastById = ConcurrentHashMap()
diff --git a/apps/android/app/src/main/java/com/clawdbot/android/gateway/GatewaySession.kt b/apps/android/app/src/main/java/com/clawdbot/android/gateway/GatewaySession.kt
index ddd249a8e..a54460e0a 100644
--- a/apps/android/app/src/main/java/com/clawdbot/android/gateway/GatewaySession.kt
+++ b/apps/android/app/src/main/java/com/clawdbot/android/gateway/GatewaySession.kt
@@ -148,7 +148,7 @@ class GatewaySession(
try {
conn.request("node.event", params, timeoutMs = 8_000)
} catch (err: Throwable) {
- Log.w("ClawdbotGateway", "node.event failed: ${err.message ?: err::class.java.simpleName}")
+ Log.w("MoltbotGateway", "node.event failed: ${err.message ?: err::class.java.simpleName}")
}
}
@@ -181,7 +181,7 @@ class GatewaySession(
private val connectNonceDeferred = CompletableDeferred()
private val client: OkHttpClient = buildClient()
private var socket: WebSocket? = null
- private val loggerTag = "ClawdbotGateway"
+ private val loggerTag = "MoltbotGateway"
val remoteAddress: String =
if (endpoint.host.contains(":")) {
diff --git a/apps/android/app/src/main/java/com/clawdbot/android/node/CameraCaptureManager.kt b/apps/android/app/src/main/java/com/clawdbot/android/node/CameraCaptureManager.kt
index 0361c2e55..f4c4d5794 100644
--- a/apps/android/app/src/main/java/com/clawdbot/android/node/CameraCaptureManager.kt
+++ b/apps/android/app/src/main/java/com/clawdbot/android/node/CameraCaptureManager.kt
@@ -155,7 +155,7 @@ class CameraCaptureManager(private val context: Context) {
provider.unbindAll()
provider.bindToLifecycle(owner, selector, videoCapture)
- val file = File.createTempFile("clawdbot-clip-", ".mp4")
+ val file = File.createTempFile("moltbot-clip-", ".mp4")
val outputOptions = FileOutputOptions.Builder(file).build()
val finalized = kotlinx.coroutines.CompletableDeferred()
@@ -285,7 +285,7 @@ private suspend fun Context.cameraProvider(): ProcessCameraProvider =
/** Returns (jpegBytes, exifOrientation) so caller can rotate the decoded bitmap. */
private suspend fun ImageCapture.takeJpegWithExif(executor: Executor): Pair =
suspendCancellableCoroutine { cont ->
- val file = File.createTempFile("clawdbot-snap-", ".jpg")
+ val file = File.createTempFile("moltbot-snap-", ".jpg")
val options = ImageCapture.OutputFileOptions.Builder(file).build()
takePicture(
options,
diff --git a/apps/android/app/src/main/java/com/clawdbot/android/node/CanvasController.kt b/apps/android/app/src/main/java/com/clawdbot/android/node/CanvasController.kt
index c7c7a76e1..4c955f7ea 100644
--- a/apps/android/app/src/main/java/com/clawdbot/android/node/CanvasController.kt
+++ b/apps/android/app/src/main/java/com/clawdbot/android/node/CanvasController.kt
@@ -84,12 +84,12 @@ class CanvasController {
withWebViewOnMain { wv ->
if (currentUrl == null) {
if (BuildConfig.DEBUG) {
- Log.d("ClawdbotCanvas", "load scaffold: $scaffoldAssetUrl")
+ Log.d("MoltbotCanvas", "load scaffold: $scaffoldAssetUrl")
}
wv.loadUrl(scaffoldAssetUrl)
} else {
if (BuildConfig.DEBUG) {
- Log.d("ClawdbotCanvas", "load url: $currentUrl")
+ Log.d("MoltbotCanvas", "load url: $currentUrl")
}
wv.loadUrl(currentUrl)
}
@@ -106,7 +106,7 @@ class CanvasController {
val js = """
(() => {
try {
- const api = globalThis.__clawdbot;
+ const api = globalThis.__moltbot;
if (!api) return;
if (typeof api.setDebugStatusEnabled === 'function') {
api.setDebugStatusEnabled(${if (enabled) "true" else "false"});
diff --git a/apps/android/app/src/main/java/com/clawdbot/android/node/ScreenRecordManager.kt b/apps/android/app/src/main/java/com/clawdbot/android/node/ScreenRecordManager.kt
index 82e805530..4486fc5f0 100644
--- a/apps/android/app/src/main/java/com/clawdbot/android/node/ScreenRecordManager.kt
+++ b/apps/android/app/src/main/java/com/clawdbot/android/node/ScreenRecordManager.kt
@@ -63,7 +63,7 @@ class ScreenRecordManager(private val context: Context) {
val height = metrics.heightPixels
val densityDpi = metrics.densityDpi
- val file = File.createTempFile("clawdbot-screen-", ".mp4")
+ val file = File.createTempFile("moltbot-screen-", ".mp4")
if (includeAudio) ensureMicPermission()
val recorder = createMediaRecorder()
@@ -90,7 +90,7 @@ class ScreenRecordManager(private val context: Context) {
val surface = recorder.surface
virtualDisplay =
projection.createVirtualDisplay(
- "clawdbot-screen",
+ "moltbot-screen",
width,
height,
densityDpi,
diff --git a/apps/android/app/src/main/java/com/clawdbot/android/protocol/ClawdbotCanvasA2UIAction.kt b/apps/android/app/src/main/java/com/clawdbot/android/protocol/ClawdbotCanvasA2UIAction.kt
index a6d6ee136..4ff1a7421 100644
--- a/apps/android/app/src/main/java/com/clawdbot/android/protocol/ClawdbotCanvasA2UIAction.kt
+++ b/apps/android/app/src/main/java/com/clawdbot/android/protocol/ClawdbotCanvasA2UIAction.kt
@@ -3,7 +3,7 @@ package com.clawdbot.android.protocol
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonPrimitive
-object ClawdbotCanvasA2UIAction {
+object MoltbotCanvasA2UIAction {
fun extractActionName(userAction: JsonObject): String? {
val name =
(userAction["name"] as? JsonPrimitive)
@@ -61,6 +61,6 @@ object ClawdbotCanvasA2UIAction {
val err = (error ?: "").replace("\\", "\\\\").replace("\"", "\\\"")
val okLiteral = if (ok) "true" else "false"
val idEscaped = actionId.replace("\\", "\\\\").replace("\"", "\\\"")
- return "window.dispatchEvent(new CustomEvent('clawdbot:a2ui-action-status', { detail: { id: \"${idEscaped}\", ok: ${okLiteral}, error: \"${err}\" } }));"
+ return "window.dispatchEvent(new CustomEvent('moltbot:a2ui-action-status', { detail: { id: \"${idEscaped}\", ok: ${okLiteral}, error: \"${err}\" } }));"
}
}
diff --git a/apps/android/app/src/main/java/com/clawdbot/android/protocol/ClawdbotProtocolConstants.kt b/apps/android/app/src/main/java/com/clawdbot/android/protocol/ClawdbotProtocolConstants.kt
index bfdb5f782..09a8bb49d 100644
--- a/apps/android/app/src/main/java/com/clawdbot/android/protocol/ClawdbotProtocolConstants.kt
+++ b/apps/android/app/src/main/java/com/clawdbot/android/protocol/ClawdbotProtocolConstants.kt
@@ -1,6 +1,6 @@
package com.clawdbot.android.protocol
-enum class ClawdbotCapability(val rawValue: String) {
+enum class MoltbotCapability(val rawValue: String) {
Canvas("canvas"),
Camera("camera"),
Screen("screen"),
@@ -9,7 +9,7 @@ enum class ClawdbotCapability(val rawValue: String) {
Location("location"),
}
-enum class ClawdbotCanvasCommand(val rawValue: String) {
+enum class MoltbotCanvasCommand(val rawValue: String) {
Present("canvas.present"),
Hide("canvas.hide"),
Navigate("canvas.navigate"),
@@ -22,7 +22,7 @@ enum class ClawdbotCanvasCommand(val rawValue: String) {
}
}
-enum class ClawdbotCanvasA2UICommand(val rawValue: String) {
+enum class MoltbotCanvasA2UICommand(val rawValue: String) {
Push("canvas.a2ui.push"),
PushJSONL("canvas.a2ui.pushJSONL"),
Reset("canvas.a2ui.reset"),
@@ -33,7 +33,7 @@ enum class ClawdbotCanvasA2UICommand(val rawValue: String) {
}
}
-enum class ClawdbotCameraCommand(val rawValue: String) {
+enum class MoltbotCameraCommand(val rawValue: String) {
Snap("camera.snap"),
Clip("camera.clip"),
;
@@ -43,7 +43,7 @@ enum class ClawdbotCameraCommand(val rawValue: String) {
}
}
-enum class ClawdbotScreenCommand(val rawValue: String) {
+enum class MoltbotScreenCommand(val rawValue: String) {
Record("screen.record"),
;
@@ -52,7 +52,7 @@ enum class ClawdbotScreenCommand(val rawValue: String) {
}
}
-enum class ClawdbotSmsCommand(val rawValue: String) {
+enum class MoltbotSmsCommand(val rawValue: String) {
Send("sms.send"),
;
@@ -61,7 +61,7 @@ enum class ClawdbotSmsCommand(val rawValue: String) {
}
}
-enum class ClawdbotLocationCommand(val rawValue: String) {
+enum class MoltbotLocationCommand(val rawValue: String) {
Get("location.get"),
;
diff --git a/apps/android/app/src/main/java/com/clawdbot/android/ui/ClawdbotTheme.kt b/apps/android/app/src/main/java/com/clawdbot/android/ui/ClawdbotTheme.kt
index 0eea8da39..01d5a6796 100644
--- a/apps/android/app/src/main/java/com/clawdbot/android/ui/ClawdbotTheme.kt
+++ b/apps/android/app/src/main/java/com/clawdbot/android/ui/ClawdbotTheme.kt
@@ -9,7 +9,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
@Composable
-fun ClawdbotTheme(content: @Composable () -> Unit) {
+fun MoltbotTheme(content: @Composable () -> Unit) {
val context = LocalContext.current
val isDark = isSystemInDarkTheme()
val colorScheme = if (isDark) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
diff --git a/apps/android/app/src/main/java/com/clawdbot/android/ui/RootScreen.kt b/apps/android/app/src/main/java/com/clawdbot/android/ui/RootScreen.kt
index 96d2543a7..763052559 100644
--- a/apps/android/app/src/main/java/com/clawdbot/android/ui/RootScreen.kt
+++ b/apps/android/app/src/main/java/com/clawdbot/android/ui/RootScreen.kt
@@ -333,7 +333,7 @@ private fun CanvasView(viewModel: MainViewModel, modifier: Modifier = Modifier)
disableForceDarkIfSupported(settings)
}
if (isDebuggable) {
- Log.d("ClawdbotWebView", "userAgent: ${settings.userAgentString}")
+ Log.d("MoltbotWebView", "userAgent: ${settings.userAgentString}")
}
isScrollContainer = true
overScrollMode = View.OVER_SCROLL_IF_CONTENT_SCROLLS
@@ -348,7 +348,7 @@ private fun CanvasView(viewModel: MainViewModel, modifier: Modifier = Modifier)
) {
if (!isDebuggable) return
if (!request.isForMainFrame) return
- Log.e("ClawdbotWebView", "onReceivedError: ${error.errorCode} ${error.description} ${request.url}")
+ Log.e("MoltbotWebView", "onReceivedError: ${error.errorCode} ${error.description} ${request.url}")
}
override fun onReceivedHttpError(
@@ -359,14 +359,14 @@ private fun CanvasView(viewModel: MainViewModel, modifier: Modifier = Modifier)
if (!isDebuggable) return
if (!request.isForMainFrame) return
Log.e(
- "ClawdbotWebView",
+ "MoltbotWebView",
"onReceivedHttpError: ${errorResponse.statusCode} ${errorResponse.reasonPhrase} ${request.url}",
)
}
override fun onPageFinished(view: WebView, url: String?) {
if (isDebuggable) {
- Log.d("ClawdbotWebView", "onPageFinished: $url")
+ Log.d("MoltbotWebView", "onPageFinished: $url")
}
viewModel.canvas.onPageFinished()
}
@@ -377,7 +377,7 @@ private fun CanvasView(viewModel: MainViewModel, modifier: Modifier = Modifier)
): Boolean {
if (isDebuggable) {
Log.e(
- "ClawdbotWebView",
+ "MoltbotWebView",
"onRenderProcessGone didCrash=${detail.didCrash()} priorityAtExit=${detail.rendererPriorityAtExit()}",
)
}
@@ -390,7 +390,7 @@ private fun CanvasView(viewModel: MainViewModel, modifier: Modifier = Modifier)
if (!isDebuggable) return false
val msg = consoleMessage ?: return false
Log.d(
- "ClawdbotWebView",
+ "MoltbotWebView",
"console ${msg.messageLevel()} @ ${msg.sourceId()}:${msg.lineNumber()} ${msg.message()}",
)
return false
@@ -428,7 +428,7 @@ private class CanvasA2UIActionBridge(private val onMessage: (String) -> Unit) {
}
companion object {
- const val interfaceName: String = "clawdbotCanvasA2UIAction"
+ const val interfaceName: String = "moltbotCanvasA2UIAction"
}
}
diff --git a/apps/android/app/src/main/java/com/clawdbot/android/ui/SettingsSheet.kt b/apps/android/app/src/main/java/com/clawdbot/android/ui/SettingsSheet.kt
index e3a9b3ecb..6b3564e14 100644
--- a/apps/android/app/src/main/java/com/clawdbot/android/ui/SettingsSheet.kt
+++ b/apps/android/app/src/main/java/com/clawdbot/android/ui/SettingsSheet.kt
@@ -457,7 +457,7 @@ fun SettingsSheet(viewModel: MainViewModel) {
Column(verticalArrangement = Arrangement.spacedBy(6.dp), modifier = Modifier.fillMaxWidth()) {
ListItem(
headlineContent = { Text("Foreground Only") },
- supportingContent = { Text("Listens only while Clawdbot is open.") },
+ supportingContent = { Text("Listens only while Moltbot is open.") },
trailingContent = {
RadioButton(
selected = voiceWakeMode == VoiceWakeMode.Foreground,
@@ -603,7 +603,7 @@ fun SettingsSheet(viewModel: MainViewModel) {
)
ListItem(
headlineContent = { Text("While Using") },
- supportingContent = { Text("Only while Clawdbot is open.") },
+ supportingContent = { Text("Only while Moltbot is open.") },
trailingContent = {
RadioButton(
selected = locationMode == LocationMode.WhileUsing,
@@ -650,7 +650,7 @@ fun SettingsSheet(viewModel: MainViewModel) {
item {
ListItem(
headlineContent = { Text("Prevent Sleep") },
- supportingContent = { Text("Keeps the screen awake while Clawdbot is open.") },
+ supportingContent = { Text("Keeps the screen awake while Moltbot is open.") },
trailingContent = { Switch(checked = preventSleep, onCheckedChange = viewModel::setPreventSleep) },
)
}
diff --git a/apps/android/app/src/main/res/values/strings.xml b/apps/android/app/src/main/res/values/strings.xml
index 3665960c2..0aae9e739 100644
--- a/apps/android/app/src/main/res/values/strings.xml
+++ b/apps/android/app/src/main/res/values/strings.xml
@@ -1,3 +1,3 @@
- Clawdbot Node
+ Moltbot Node
diff --git a/apps/android/app/src/main/res/values/themes.xml b/apps/android/app/src/main/res/values/themes.xml
index fe7c9b17f..f90f40dc9 100644
--- a/apps/android/app/src/main/res/values/themes.xml
+++ b/apps/android/app/src/main/res/values/themes.xml
@@ -1,5 +1,5 @@
-
-
-
+
+
-
Ready
-
Waiting for agent
+
Ready
+
Waiting for agent