chore: update molt.bot domains

This commit is contained in:
Peter Steinberger 2026-01-27 11:27:41 +00:00
parent f4004054ab
commit 83460df96f
137 changed files with 653 additions and 538 deletions

View File

@ -8,7 +8,7 @@
- Docs: `docs/` (images, queue, Pi config). Built output lives in `dist/`. - 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/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 `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). - 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 docs: `docs/channels/`
- Core channel code: `src/telegram`, `src/discord`, `src/slack`, `src/signal`, `src/imessage`, `src/web` (WhatsApp web), `src/channels`, `src/routing` - 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. - When adding channels/extensions/apps/docs, review `.github/labeler.yml` for label coverage.
## Docs Linking (Mintlify) ## 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)`). - 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)`). - 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. - 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 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.clawd.bot/...` URLs you referenced. - When you touch docs, end the reply with the `https://docs.molt.bot/...` URLs you referenced.
- README (GitHub): keep absolute docs URLs (`https://docs.clawd.bot/...`) so links work on GitHub. - 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”. - 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) ## exe.dev VM ops (general)

View File

@ -1,6 +1,6 @@
# Changelog # Changelog
Docs: https://docs.clawd.bot Docs: https://docs.molt.bot
## 2026.1.26 ## 2026.1.26
Status: unreleased. Status: unreleased.
@ -113,27 +113,27 @@ Status: unreleased.
## 2026.1.24 ## 2026.1.24
### Highlights ### 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. - 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 - 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.clawd.bot/tools/exec-approvals https://docs.clawd.bot/tools/slash-commands - 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.clawd.bot/channels/telegram - Telegram: DM topics as separate sessions + outbound link preview toggle. (#1597, #1700) Thanks @rohannagpal, @zerone0x. https://docs.molt.bot/channels/telegram
### Changes ### Changes
- Channels: add LINE plugin (Messaging API) with rich replies, quick replies, and plugin HTTP registry. (#1630) Thanks @plum-dawg. - 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 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.clawd.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: 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 - 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.clawd.bot/tools/web - 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. - 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. - 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: 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 verbose installer troubleshooting guidance.
- Docs: add macOS VM guide with local/hosted options + VPS/nodes guidance. (#1693) Thanks @f-trycua. - 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. - Docs: update Fly.io guide notes.
- Dev: add prek pre-commit hooks + dependabot config for weekly updates. (#1720) Thanks @dguido. - 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. - 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. - 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. - 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. - 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. - 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: 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: 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: 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. - Telegram: honor per-account proxy for outbound API calls. (#1774) Thanks @radek-paclt.
@ -186,25 +186,25 @@ Status: unreleased.
## 2026.1.23 ## 2026.1.23
### Highlights ### 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 - 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.clawd.bot/gateway/tools-invoke-http-api - 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.clawd.bot/gateway/heartbeat - 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.clawd.bot/platforms/fly - 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.clawd.bot/channels/tlon - Channels: add Tlon/Urbit channel plugin (DMs, group mentions, thread replies). (#1544) Thanks @wca4a. https://docs.molt.bot/channels/tlon
### Changes ### 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 - 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.clawd.bot/bedrock - 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.clawd.bot/cli/system - 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.clawd.bot/cli/models - 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: 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) - 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. - 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: 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. - 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: 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.clawd.bot/gateway/heartbeat - Docs: clarify HEARTBEAT.md empty file skips heartbeats, missing file still runs. (#1535) Thanks @JustYannicc. https://docs.molt.bot/gateway/heartbeat
### Fixes ### Fixes
- Sessions: accept non-UUID sessionIds for history/send/status while preserving agent scoping. (#1518) - Sessions: accept non-UUID sessionIds for history/send/status while preserving agent scoping. (#1518)
@ -282,14 +282,14 @@ Status: unreleased.
## 2026.1.21-2 ## 2026.1.21-2
### Fixes ### 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) - Slack: remove deprecated `filetype` field from `files.uploadV2` to eliminate API warnings. (#1447)
## 2026.1.21 ## 2026.1.21
### Changes ### Changes
- Highlight: Lobster optional plugin tool for typed workflows + approval gates. 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.clawd.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. - 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: 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. - 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. - 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. - 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. - 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. - Signal: add typing indicators and DM read receipts via signal-cli.
- MSTeams: add file uploads, adaptive cards, and attachment handling improvements. (#1410) Thanks @Evizero. - 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). - 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 /model allowlist troubleshooting note. (#1405)
- Docs: add per-message Gmail search example for gog. (#1220) Thanks @mbelinky. - Docs: add per-message Gmail search example for gog. (#1220) Thanks @mbelinky.
### Breaking ### 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 dont have to constantly convert. - **BREAKING:** Envelope and system event timestamps now default to host-local time (was UTC) so agents dont have to constantly convert.
### Fixes ### Fixes
@ -336,68 +336,68 @@ Status: unreleased.
## 2026.1.20 ## 2026.1.20
### Changes ### Changes
- Control UI: add copy-as-markdown with error feedback. (#1345) https://docs.clawd.bot/web/control-ui - 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.clawd.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.clawd.bot/tui - 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.clawd.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.clawd.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.clawd.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.clawd.bot/cli/acp - ACP: add `clawdbot acp` for IDE integrations. https://docs.molt.bot/cli/acp
- ACP: add `clawdbot acp client` interactive harness for debugging. https://docs.clawd.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.clawd.bot/tools/skills - Skills: add download installs with OS-filtered options. https://docs.molt.bot/tools/skills
- Skills: add the local sherpa-onnx-tts skill. https://docs.clawd.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.clawd.bot/concepts/memory - 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.clawd.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.clawd.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.clawd.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.clawd.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.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.molt.bot/concepts/memory
- Memory: add `--verbose` logging for memory status + batch indexing details. https://docs.clawd.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.clawd.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.clawd.bot/tools/browser - 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.clawd.bot/channels/nostr - 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.clawd.bot/channels/matrix - 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.clawd.bot/channels/slack - 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.clawd.bot/channels/telegram - 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: fall back to `/skill` when native command limits are exceeded. (#1287)
- Discord: expose `/skill` globally. (#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 - 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.clawd.bot/plugins/manifest - 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.clawd.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.clawd.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.clawd.bot/web/control-ui - 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.clawd.bot/gateway/configuration - 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.clawd.bot/plugins/agent-tools - 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.clawd.bot/channels/bluebubbles - 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 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 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.clawd.bot/plugins/zalouser - 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.clawd.bot/plugins/agent-tools - 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: 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: 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: 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: 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) - 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 - 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.clawd.bot/cli/security - 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.clawd.bot/tools/exec - 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.clawd.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.clawd.bot/tools/exec-approvals - 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.clawd.bot/cli/node - 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.clawd.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. - 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: 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.clawd.bot/tools/subagents - 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.clawd.bot/concepts/groups - 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.clawd.bot/providers/qwen - 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.clawd.bot/start/onboarding - 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.clawd.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.clawd.bot/platforms/android - 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.clawd.bot/bedrock - 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.clawd.bot/channels/whatsapp - Docs: clarify WhatsApp voice notes. https://docs.molt.bot/channels/whatsapp
- Docs: clarify Windows WSL portproxy LAN access notes. https://docs.clawd.bot/platforms/windows - 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.clawd.bot/tools/browser-login - 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: 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. - 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. - 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 ## 2026.1.16-1
### Highlights ### Highlights
- Hooks: add hooks system with bundled hooks, CLI tooling, and docs. (#1028) — thanks @ThomsenDrake. https://docs.clawd.bot/hooks - 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.clawd.bot/nodes/media-understanding - 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.clawd.bot/plugins/zalouser - 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.clawd.bot/providers/vercel-ai-gateway - 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.clawd.bot/concepts/session - 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.clawd.bot/tools/web - Web search: add `country`/`language` parameters (schema + Brave API) and docs. (#1046) — thanks @YuriNachos. https://docs.molt.bot/tools/web
### Breaking ### Breaking
- **BREAKING:** `clawdbot message` and message tool now require `target` (dropping `to`/`channelId` for destinations). (#1034) — thanks @tobalsan. - **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:** 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:** 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:** 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 <path>` now copies into `~/.clawdbot/extensions` (use `--link` to keep path-based loading). - **BREAKING:** `clawdbot plugins install <path>` now copies into `~/.clawdbot/extensions` (use `--link` to keep path-based loading).
### Changes ### 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: 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: 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: 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 tmux-style `process send-keys` and bracketed paste helpers for PTY sessions.
- Tools: add `process submit` helper to send CR 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. - 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. - Sessions: hard-stop `sessions.delete` cleanup.
- Channels: treat replies to the bot as implicit mentions across supported channels. - Channels: treat replies to the bot as implicit mentions across supported channels.
- Channels: normalize object-format capabilities in channel capability parsing. - 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. - Security: redact sensitive text in gateway WS logs.
- Tools: cap pending `exec` process output to avoid unbounded buffers. - 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 `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. - 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. - 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. - 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. - 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: 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. - 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 ### Installer
- Postinstall: replace `git apply` with builtin JS patcher (works npm/pnpm/bun; no git dependency) plus regression tests. - 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. - 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: 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.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). - Installer UX: add `--install-method git|npm` and auto-detect source checkouts (prompt to update git checkout vs migrate to npm).

235
README.md
View File

@ -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. 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)**. 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. 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):** **Subscriptions (OAuth):**
- **[Anthropic](https://www.anthropic.com/)** (Claude Pro/Max) - **[Anthropic](https://www.anthropic.com/)** (Claude Pro/Max)
- **[OpenAI](https://openai.com/)** (ChatGPT/Codex) - **[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 longcontext strength and better promptinjection 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 longcontext strength and better promptinjection resistance. See [Onboarding](https://docs.molt.bot/start/onboarding).
## Models (selection + auth) ## Models (selection + auth)
- Models config + CLI: [Models](https://docs.clawd.bot/concepts/models) - Models config + CLI: [Models](https://docs.molt.bot/concepts/models)
- Auth profile rotation (OAuth vs API keys) + fallbacks: [Model failover](https://docs.clawd.bot/concepts/model-failover) - Auth profile rotation (OAuth vs API keys) + fallbacks: [Model failover](https://docs.molt.bot/concepts/model-failover)
## Install (recommended) ## Install (recommended)
Runtime: **Node ≥22**. Runtime: **Node ≥22**.
```bash ```bash
npm install -g clawdbot@latest npm install -g moltbot@latest
# or: pnpm add -g clawdbot@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. 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) ## Quick start (TL;DR)
Runtime: **Node ≥22**. 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 ```bash
clawdbot onboard --install-daemon moltbot onboard --install-daemon
clawdbot gateway --port 18789 --verbose moltbot gateway --port 18789 --verbose
# Send a message # 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) # 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 ## 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). - **dev**: moving head of `main`, npm dist-tag `dev` (when published).
Switch channels (git + npm): `clawdbot update --channel stable|beta|dev`. 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) ## From source (development)
@ -92,19 +93,19 @@ pnpm install
pnpm ui:build # auto-installs UI deps on first run pnpm ui:build # auto-installs UI deps on first run
pnpm build pnpm build
pnpm clawdbot onboard --install-daemon pnpm moltbot onboard --install-daemon
# Dev loop (auto-reload on TS changes) # Dev loop (auto-reload on TS changes)
pnpm gateway:watch 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) ## Security defaults (DM access)
Clawdbot connects to real messaging surfaces. Treat inbound DMs as **untrusted input**. 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: 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. - **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 ## Highlights
- **[Local-first Gateway](https://docs.clawd.bot/gateway)** — single control plane for sessions, channels, tools, and events. - **[Local-first Gateway](https://docs.molt.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-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.clawd.bot/gateway/configuration)** — route inbound channels/accounts/peers to isolated agents (workspaces + per-agent sessions). - **[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.clawd.bot/nodes/voicewake) + [Talk Mode](https://docs.clawd.bot/nodes/talk)** — always-on speech for macOS/iOS/Android with ElevenLabs. - **[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.clawd.bot/platforms/mac/canvas)** — agent-driven visual workspace with [A2UI](https://docs.clawd.bot/platforms/mac/canvas#canvas-a2ui). - **[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.clawd.bot/tools)** — browser, canvas, nodes, cron, sessions, and Discord/Slack actions. - **[First-class tools](https://docs.molt.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). - **[Companion apps](https://docs.molt.bot/platforms/macos)** — macOS menu bar app + iOS/Android [nodes](https://docs.molt.bot/nodes).
- **[Onboarding](https://docs.clawd.bot/start/wizard) + [skills](https://docs.clawd.bot/tools/skills)** — wizard-driven setup with bundled/managed/workspace skills. - **[Onboarding](https://docs.molt.bot/start/wizard) + [skills](https://docs.molt.bot/tools/skills)** — wizard-driven setup with bundled/managed/workspace skills.
## Star History ## Star History
@ -131,40 +132,40 @@ Run `clawdbot doctor` to surface risky/misconfigured DM policies.
## Everything we built so far ## Everything we built so far
### Core platform ### 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). - [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.clawd.bot/tools/agent-send): gateway, agent, send, [wizard](https://docs.clawd.bot/start/wizard), and [doctor](https://docs.clawd.bot/gateway/doctor). - [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.clawd.bot/concepts/agent) in RPC mode with tool streaming and block streaming. - [Pi agent runtime](https://docs.molt.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). - [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.clawd.bot/nodes/images): images/audio/video, transcription hooks, size caps, temp file lifecycle. Audio details: [Audio](https://docs.clawd.bot/nodes/audio). - [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
- [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). - [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.clawd.bot/concepts/group-messages): mention gating, reply tags, per-channel chunking and routing. Channel rules: [Channels](https://docs.clawd.bot/channels). - [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 ### 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. - [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.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. - [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.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. - [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.clawd.bot/nodes): system.run/notify + canvas/camera exposure. - [macOS node mode](https://docs.molt.bot/nodes): system.run/notify + canvas/camera exposure.
### Tools + automation ### Tools + automation
- [Browser control](https://docs.clawd.bot/tools/browser): dedicated clawd Chrome/Chromium, snapshots, actions, uploads, profiles. - [Browser control](https://docs.molt.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. - [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.clawd.bot/nodes): camera snap/clip, screen record, [location.get](https://docs.clawd.bot/nodes/location-command), notifications. - [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.clawd.bot/automation/cron-jobs); [webhooks](https://docs.clawd.bot/automation/webhook); [Gmail Pub/Sub](https://docs.clawd.bot/automation/gmail-pubsub). - [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.clawd.bot/tools/skills): bundled, managed, and workspace skills with install gating + UI. - [Skills platform](https://docs.molt.bot/tools/skills): bundled, managed, and workspace skills with install gating + UI.
### Runtime + safety ### 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). - [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.clawd.bot/concepts/presence), [typing indicators](https://docs.clawd.bot/concepts/typing-indicators), and [usage tracking](https://docs.clawd.bot/concepts/usage-tracking). - [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.clawd.bot/concepts/models), [model failover](https://docs.clawd.bot/concepts/model-failover), and [session pruning](https://docs.clawd.bot/concepts/session-pruning). - [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.clawd.bot/gateway/security) and [troubleshooting](https://docs.clawd.bot/channels/troubleshooting). - [Security](https://docs.molt.bot/gateway/security) and [troubleshooting](https://docs.molt.bot/channels/troubleshooting).
### Ops + packaging ### Ops + packaging
- [Control UI](https://docs.clawd.bot/web) + [WebChat](https://docs.clawd.bot/web/webchat) served directly from the Gateway. - [Control UI](https://docs.molt.bot/web) + [WebChat](https://docs.molt.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. - [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.clawd.bot/install/nix) for declarative config; [Docker](https://docs.clawd.bot/install/docker)-based installs. - [Nix mode](https://docs.molt.bot/install/nix) for declarative config; [Docker](https://docs.molt.bot/install/docker)-based installs.
- [Doctor](https://docs.clawd.bot/gateway/doctor) migrations, [logging](https://docs.clawd.bot/logging). - [Doctor](https://docs.molt.bot/gateway/doctor) migrations, [logging](https://docs.molt.bot/logging).
## How it works (short) ## How it works (short)
@ -187,12 +188,12 @@ WhatsApp / Telegram / Slack / Discord / Google Chat / Signal / iMessage / BlueBu
## Key subsystems ## 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)). - **[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.clawd.bot/gateway/tailscale)** — Serve/Funnel for the Gateway dashboard + WS (remote access: [Remote](https://docs.clawd.bot/gateway/remote)). - **[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.clawd.bot/tools/browser)** — clawdmanaged Chrome/Chromium with CDP control. - **[Browser control](https://docs.molt.bot/tools/browser)** — clawdmanaged Chrome/Chromium with CDP control.
- **[Canvas + A2UI](https://docs.clawd.bot/platforms/mac/canvas)** — agentdriven visual workspace (A2UI host: [Canvas/A2UI](https://docs.clawd.bot/platforms/mac/canvas#canvas-a2ui)). - **[Canvas + A2UI](https://docs.molt.bot/platforms/mac/canvas)** — agentdriven visual workspace (A2UI host: [Canvas/A2UI](https://docs.molt.bot/platforms/mac/canvas#canvas-a2ui)).
- **[Voice Wake](https://docs.clawd.bot/nodes/voicewake) + [Talk Mode](https://docs.clawd.bot/nodes/talk)** — alwayson speech and continuous conversation. - **[Voice Wake](https://docs.molt.bot/nodes/voicewake) + [Talk Mode](https://docs.molt.bot/nodes/talk)** — alwayson speech and continuous conversation.
- **[Nodes](https://docs.clawd.bot/nodes)** — Canvas, camera snap/clip, screen record, `location.get`, notifications, plus macOSonly `system.run`/`system.notify`. - **[Nodes](https://docs.molt.bot/nodes)** — Canvas, camera snap/clip, screen record, `location.get`, notifications, plus macOSonly `system.run`/`system.notify`.
## Tailscale access (Gateway dashboard) ## Tailscale access (Gateway dashboard)
@ -208,7 +209,7 @@ Notes:
- Funnel refuses to start unless `gateway.auth.mode: "password"` is set. - Funnel refuses to start unless `gateway.auth.mode: "password"` is set.
- Optional: `gateway.tailscale.resetOnExit` to undo Serve/Funnel on shutdown. - 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) ## Remote Gateway (Linux is great)
@ -218,7 +219,7 @@ Its perfectly fine to run the Gateway on a small Linux instance. Clients (mac
- **Device nodes** run devicelocal actions (`system.run`, camera, screen recording, notifications) via `node.invoke`. - **Device nodes** run devicelocal 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. 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 ## 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 persession elevated access when enabled + allowlisted. - Use `/elevated on|off` to toggle persession elevated access when enabled + allowlisted.
- Gateway persists the persession toggle via `sessions.patch` (WS method) alongside `thinkingLevel`, `verboseLevel`, `model`, `sendPolicy`, and `groupActivation`. - Gateway persists the persession 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) ## 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_history` — fetch transcript logs for a session.
- `sessions_send` — message another session; optional replyback pingpong + announce step (`REPLY_SKIP`, `ANNOUNCE_SKIP`). - `sessions_send` — message another session; optional replyback pingpong + 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) ## Skills registry (ClawdHub)
@ -284,13 +285,13 @@ Note: signed builds required for macOS permissions to stick across rebuilds (see
- Voice trigger forwarding + Canvas surface. - Voice trigger forwarding + Canvas surface.
- Controlled via `clawdbot nodes …`. - 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) ### Android node (optional)
- Pairs via the same Bridge + pairing flow as iOS. - Pairs via the same Bridge + pairing flow as iOS.
- Exposes Canvas, Camera, and Screen capture commands. - 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 ## 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) ## 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 **nonmain sessions** (groups/channels) inside persession Docker sandboxes; bash then runs in Docker for those sessions. - **Group/channel safety:** set `agents.defaults.sandbox.mode: "non-main"` to run **nonmain sessions** (groups/channels) inside persession 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`. - **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`). - Link the device: `pnpm clawdbot channels login` (stores creds in `~/.clawdbot/credentials`).
- Allowlist who can talk to the assistant via `channels.whatsapp.allowFrom`. - 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. - 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). - 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. - 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`). - 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). - 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. - 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. - 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. - macOS only; Messages must be signed in.
- If `channels.imessage.groups` is set, it becomes a group allowlist; include `"*"` to allow all. - 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. - 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"`. - 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. - Uses the Gateway WebSocket; no separate WebChat port/config.
@ -392,69 +393,69 @@ Browser control (optional):
## Docs ## Docs
Use these when youre past the onboarding flow and want the deeper reference. Use these when youre past the onboarding flow and want the deeper reference.
- [Start with the docs index for navigation and “whats where.”](https://docs.clawd.bot) - [Start with the docs index for navigation and “whats where.”](https://docs.molt.bot)
- [Read the architecture overview for the gateway + protocol model.](https://docs.clawd.bot/concepts/architecture) - [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.clawd.bot/gateway/configuration) - [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.clawd.bot/gateway) - [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.clawd.bot/web) - [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.clawd.bot/gateway/remote) - [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.clawd.bot/start/wizard) - [Follow the onboarding wizard flow for a guided setup.](https://docs.molt.bot/start/wizard)
- [Wire external triggers via the webhook surface.](https://docs.clawd.bot/automation/webhook) - [Wire external triggers via the webhook surface.](https://docs.molt.bot/automation/webhook)
- [Set up Gmail Pub/Sub triggers.](https://docs.clawd.bot/automation/gmail-pubsub) - [Set up Gmail Pub/Sub triggers.](https://docs.molt.bot/automation/gmail-pubsub)
- [Learn the macOS menu bar companion details.](https://docs.clawd.bot/platforms/mac/menu-bar) - [Learn the macOS menu bar companion details.](https://docs.molt.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) - [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.clawd.bot/channels/troubleshooting) - [Debug common failures with the troubleshooting guide.](https://docs.molt.bot/channels/troubleshooting)
- [Review security guidance before exposing anything.](https://docs.clawd.bot/gateway/security) - [Review security guidance before exposing anything.](https://docs.molt.bot/gateway/security)
## Advanced docs (discovery + control) ## Advanced docs (discovery + control)
- [Discovery + transports](https://docs.clawd.bot/gateway/discovery) - [Discovery + transports](https://docs.molt.bot/gateway/discovery)
- [Bonjour/mDNS](https://docs.clawd.bot/gateway/bonjour) - [Bonjour/mDNS](https://docs.molt.bot/gateway/bonjour)
- [Gateway pairing](https://docs.clawd.bot/gateway/pairing) - [Gateway pairing](https://docs.molt.bot/gateway/pairing)
- [Remote gateway README](https://docs.clawd.bot/gateway/remote-gateway-readme) - [Remote gateway README](https://docs.molt.bot/gateway/remote-gateway-readme)
- [Control UI](https://docs.clawd.bot/web/control-ui) - [Control UI](https://docs.molt.bot/web/control-ui)
- [Dashboard](https://docs.clawd.bot/web/dashboard) - [Dashboard](https://docs.molt.bot/web/dashboard)
## Operations & troubleshooting ## Operations & troubleshooting
- [Health checks](https://docs.clawd.bot/gateway/health) - [Health checks](https://docs.molt.bot/gateway/health)
- [Gateway lock](https://docs.clawd.bot/gateway/gateway-lock) - [Gateway lock](https://docs.molt.bot/gateway/gateway-lock)
- [Background process](https://docs.clawd.bot/gateway/background-process) - [Background process](https://docs.molt.bot/gateway/background-process)
- [Browser troubleshooting (Linux)](https://docs.clawd.bot/tools/browser-linux-troubleshooting) - [Browser troubleshooting (Linux)](https://docs.molt.bot/tools/browser-linux-troubleshooting)
- [Logging](https://docs.clawd.bot/logging) - [Logging](https://docs.molt.bot/logging)
## Deep dives ## Deep dives
- [Agent loop](https://docs.clawd.bot/concepts/agent-loop) - [Agent loop](https://docs.molt.bot/concepts/agent-loop)
- [Presence](https://docs.clawd.bot/concepts/presence) - [Presence](https://docs.molt.bot/concepts/presence)
- [TypeBox schemas](https://docs.clawd.bot/concepts/typebox) - [TypeBox schemas](https://docs.molt.bot/concepts/typebox)
- [RPC adapters](https://docs.clawd.bot/reference/rpc) - [RPC adapters](https://docs.molt.bot/reference/rpc)
- [Queue](https://docs.clawd.bot/concepts/queue) - [Queue](https://docs.molt.bot/concepts/queue)
## Workspace & skills ## Workspace & skills
- [Skills config](https://docs.clawd.bot/tools/skills-config) - [Skills config](https://docs.molt.bot/tools/skills-config)
- [Default AGENTS](https://docs.clawd.bot/reference/AGENTS.default) - [Default AGENTS](https://docs.molt.bot/reference/AGENTS.default)
- [Templates: AGENTS](https://docs.clawd.bot/reference/templates/AGENTS) - [Templates: AGENTS](https://docs.molt.bot/reference/templates/AGENTS)
- [Templates: BOOTSTRAP](https://docs.clawd.bot/reference/templates/BOOTSTRAP) - [Templates: BOOTSTRAP](https://docs.molt.bot/reference/templates/BOOTSTRAP)
- [Templates: IDENTITY](https://docs.clawd.bot/reference/templates/IDENTITY) - [Templates: IDENTITY](https://docs.molt.bot/reference/templates/IDENTITY)
- [Templates: SOUL](https://docs.clawd.bot/reference/templates/SOUL) - [Templates: SOUL](https://docs.molt.bot/reference/templates/SOUL)
- [Templates: TOOLS](https://docs.clawd.bot/reference/templates/TOOLS) - [Templates: TOOLS](https://docs.molt.bot/reference/templates/TOOLS)
- [Templates: USER](https://docs.clawd.bot/reference/templates/USER) - [Templates: USER](https://docs.molt.bot/reference/templates/USER)
## Platform internals ## Platform internals
- [macOS dev setup](https://docs.clawd.bot/platforms/mac/dev-setup) - [macOS dev setup](https://docs.molt.bot/platforms/mac/dev-setup)
- [macOS menu bar](https://docs.clawd.bot/platforms/mac/menu-bar) - [macOS menu bar](https://docs.molt.bot/platforms/mac/menu-bar)
- [macOS voice wake](https://docs.clawd.bot/platforms/mac/voicewake) - [macOS voice wake](https://docs.molt.bot/platforms/mac/voicewake)
- [iOS node](https://docs.clawd.bot/platforms/ios) - [iOS node](https://docs.molt.bot/platforms/ios)
- [Android node](https://docs.clawd.bot/platforms/android) - [Android node](https://docs.molt.bot/platforms/android)
- [Windows (WSL2)](https://docs.clawd.bot/platforms/windows) - [Windows (WSL2)](https://docs.molt.bot/platforms/windows)
- [Linux app](https://docs.clawd.bot/platforms/linux) - [Linux app](https://docs.molt.bot/platforms/linux)
## Email hooks (Gmail) ## 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 ## Clawd

View File

@ -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: 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 ### Web Interface Safety

View File

@ -28,28 +28,28 @@
<description><![CDATA[<h2>Clawdbot 2026.1.24</h2> <description><![CDATA[<h2>Clawdbot 2026.1.24</h2>
<h3>Highlights</h3> <h3>Highlights</h3>
<ul> <ul>
<li>Providers: Ollama discovery + docs; Venice guide upgrades + cross-links. (#1606) Thanks @abhaymundhara. https://docs.clawd.bot/providers/ollama https://docs.clawd.bot/providers/venice</li> <li>Providers: Ollama discovery + docs; Venice guide upgrades + cross-links. (#1606) Thanks @abhaymundhara. https://docs.molt.bot/providers/ollama https://docs.molt.bot/providers/venice</li>
<li>Channels: LINE plugin (Messaging API) with rich replies + quick replies. (#1630) Thanks @plum-dawg.</li> <li>Channels: LINE plugin (Messaging API) with rich replies + quick replies. (#1630) Thanks @plum-dawg.</li>
<li>TTS: Edge fallback (keyless) + <code>/tts</code> auto modes. (#1668, #1667) Thanks @steipete, @sebslight. https://docs.clawd.bot/tts</li> <li>TTS: Edge fallback (keyless) + <code>/tts</code> auto modes. (#1668, #1667) Thanks @steipete, @sebslight. https://docs.molt.bot/tts</li>
<li>Exec approvals: approve in-chat via <code>/approve</code> across all channels (including plugins). (#1621) Thanks @czekaj. https://docs.clawd.bot/tools/exec-approvals https://docs.clawd.bot/tools/slash-commands</li> <li>Exec approvals: approve in-chat via <code>/approve</code> across all channels (including plugins). (#1621) Thanks @czekaj. https://docs.molt.bot/tools/exec-approvals https://docs.molt.bot/tools/slash-commands</li>
<li>Telegram: DM topics as separate sessions + outbound link preview toggle. (#1597, #1700) Thanks @rohannagpal, @zerone0x. https://docs.clawd.bot/channels/telegram</li> <li>Telegram: DM topics as separate sessions + outbound link preview toggle. (#1597, #1700) Thanks @rohannagpal, @zerone0x. https://docs.molt.bot/channels/telegram</li>
</ul> </ul>
<h3>Changes</h3> <h3>Changes</h3>
<ul> <ul>
<li>Channels: add LINE plugin (Messaging API) with rich replies, quick replies, and plugin HTTP registry. (#1630) Thanks @plum-dawg.</li> <li>Channels: add LINE plugin (Messaging API) with rich replies, quick replies, and plugin HTTP registry. (#1630) Thanks @plum-dawg.</li>
<li>TTS: add Edge TTS provider fallback, defaulting to keyless Edge with MP3 retry on format failures. (#1668) Thanks @steipete. https://docs.clawd.bot/tts</li> <li>TTS: add Edge TTS provider fallback, defaulting to keyless Edge with MP3 retry on format failures. (#1668) Thanks @steipete. https://docs.molt.bot/tts</li>
<li>TTS: add auto mode enum (off/always/inbound/tagged) with per-session <code>/tts</code> override. (#1667) Thanks @sebslight. https://docs.clawd.bot/tts</li> <li>TTS: add auto mode enum (off/always/inbound/tagged) with per-session <code>/tts</code> override. (#1667) Thanks @sebslight. https://docs.molt.bot/tts</li>
<li>Telegram: treat DM topics as separate sessions and keep DM history limits stable with thread suffixes. (#1597) Thanks @rohannagpal.</li> <li>Telegram: treat DM topics as separate sessions and keep DM history limits stable with thread suffixes. (#1597) Thanks @rohannagpal.</li>
<li>Telegram: add <code>channels.telegram.linkPreview</code> to toggle outbound link previews. (#1700) Thanks @zerone0x. https://docs.clawd.bot/channels/telegram</li> <li>Telegram: add <code>channels.telegram.linkPreview</code> to toggle outbound link previews. (#1700) Thanks @zerone0x. https://docs.molt.bot/channels/telegram</li>
<li>Web search: add Brave freshness filter parameter for time-scoped results. (#1688) Thanks @JonUleis. https://docs.clawd.bot/tools/web</li> <li>Web search: add Brave freshness filter parameter for time-scoped results. (#1688) Thanks @JonUleis. https://docs.molt.bot/tools/web</li>
<li>UI: refresh Control UI dashboard design system (typography, colors, spacing). (#1786) Thanks @mousberg.</li> <li>UI: refresh Control UI dashboard design system (typography, colors, spacing). (#1786) Thanks @mousberg.</li>
<li>Exec approvals: forward approval prompts to chat with <code>/approve</code> for all channels (including plugins). (#1621) Thanks @czekaj. https://docs.clawd.bot/tools/exec-approvals https://docs.clawd.bot/tools/slash-commands</li> <li>Exec approvals: forward approval prompts to chat with <code>/approve</code> for all channels (including plugins). (#1621) Thanks @czekaj. https://docs.molt.bot/tools/exec-approvals https://docs.molt.bot/tools/slash-commands</li>
<li>Gateway: expose config.patch in the gateway tool with safe partial updates + restart sentinel. (#1653) Thanks @Glucksberg.</li> <li>Gateway: expose config.patch in the gateway tool with safe partial updates + restart sentinel. (#1653) Thanks @Glucksberg.</li>
<li>Diagnostics: add diagnostic flags for targeted debug logs (config + env override). https://docs.clawd.bot/diagnostics/flags</li> <li>Diagnostics: add diagnostic flags for targeted debug logs (config + env override). https://docs.molt.bot/diagnostics/flags</li>
<li>Docs: expand FAQ (migration, scheduling, concurrency, model recommendations, OpenAI subscription auth, Pi sizing, hackable install, docs SSL workaround).</li> <li>Docs: expand FAQ (migration, scheduling, concurrency, model recommendations, OpenAI subscription auth, Pi sizing, hackable install, docs SSL workaround).</li>
<li>Docs: add verbose installer troubleshooting guidance.</li> <li>Docs: add verbose installer troubleshooting guidance.</li>
<li>Docs: add macOS VM guide with local/hosted options + VPS/nodes guidance. (#1693) Thanks @f-trycua.</li> <li>Docs: add macOS VM guide with local/hosted options + VPS/nodes guidance. (#1693) Thanks @f-trycua.</li>
<li>Docs: add Bedrock EC2 instance role setup + IAM steps. (#1625) Thanks @sergical. https://docs.clawd.bot/bedrock</li> <li>Docs: add Bedrock EC2 instance role setup + IAM steps. (#1625) Thanks @sergical. https://docs.molt.bot/bedrock</li>
<li>Docs: update Fly.io guide notes.</li> <li>Docs: update Fly.io guide notes.</li>
<li>Dev: add prek pre-commit hooks + dependabot config for weekly updates. (#1720) Thanks @dguido.</li> <li>Dev: add prek pre-commit hooks + dependabot config for weekly updates. (#1720) Thanks @dguido.</li>
</ul> </ul>
@ -61,10 +61,10 @@
<li>Web UI: hide internal <code>message_id</code> hints in chat bubbles.</li> <li>Web UI: hide internal <code>message_id</code> hints in chat bubbles.</li>
<li>Gateway: allow Control UI token-only auth to skip device pairing even when device identity is present (<code>gateway.controlUi.allowInsecureAuth</code>). (#1679) Thanks @steipete.</li> <li>Gateway: allow Control UI token-only auth to skip device pairing even when device identity is present (<code>gateway.controlUi.allowInsecureAuth</code>). (#1679) Thanks @steipete.</li>
<li>Matrix: decrypt E2EE media attachments with preflight size guard. (#1744) Thanks @araa47.</li> <li>Matrix: decrypt E2EE media attachments with preflight size guard. (#1744) Thanks @araa47.</li>
<li>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</li> <li>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</li>
<li>BlueBubbles: keep part-index GUIDs in reply tags when short IDs are missing.</li> <li>BlueBubbles: keep part-index GUIDs in reply tags when short IDs are missing.</li>
<li>Signal: repair reaction sends (group/UUID targets + CLI author flags). (#1651) Thanks @vilkasdev.</li> <li>Signal: repair reaction sends (group/UUID targets + CLI author flags). (#1651) Thanks @vilkasdev.</li>
<li>Signal: add configurable signal-cli startup timeout + external daemon mode docs. (#1677) https://docs.clawd.bot/channels/signal</li> <li>Signal: add configurable signal-cli startup timeout + external daemon mode docs. (#1677) https://docs.molt.bot/channels/signal</li>
<li>Telegram: set fetch duplex="half" for uploads on Node 22 to avoid sendPhoto failures. (#1684) Thanks @commdata2338.</li> <li>Telegram: set fetch duplex="half" for uploads on Node 22 to avoid sendPhoto failures. (#1684) Thanks @commdata2338.</li>
<li>Telegram: use wrapped fetch for long-polling on Node to normalize AbortSignal handling. (#1639)</li> <li>Telegram: use wrapped fetch for long-polling on Node to normalize AbortSignal handling. (#1639)</li>
<li>Telegram: honor per-account proxy for outbound API calls. (#1774) Thanks @radek-paclt.</li> <li>Telegram: honor per-account proxy for outbound API calls. (#1774) Thanks @radek-paclt.</li>

View File

@ -70,7 +70,7 @@ enum CLIInstaller {
let escapedVersion = self.shellEscape(version) let escapedVersion = self.shellEscape(version)
let escapedPrefix = self.shellEscape(prefix) let escapedPrefix = self.shellEscape(prefix)
let script = """ 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) bash -s -- --json --no-onboard --prefix \(escapedPrefix) --version \(escapedVersion)
""" """
return ["/bin/bash", "-lc", script] return ["/bin/bash", "-lc", script]

View File

@ -171,7 +171,7 @@
Start Clawdbots browser relay on this machine (Gateway or node host), then click the toolbar button again. Start Clawdbots browser relay on this machine (Gateway or node host), then click the toolbar button again.
</p> </p>
<p> <p>
Full guide (install, remote Gateway, security): <a href="https://docs.clawd.bot/tools/chrome-extension" target="_blank" rel="noreferrer">docs.clawd.bot/tools/chrome-extension</a> Full guide (install, remote Gateway, security): <a href="https://docs.molt.bot/tools/chrome-extension" target="_blank" rel="noreferrer">docs.molt.bot/tools/chrome-extension</a>
</p> </p>
</div> </div>

View File

@ -191,7 +191,7 @@ echo "Telegram (bot token):"
echo " ${COMPOSE_HINT} run --rm clawdbot-cli providers add --provider telegram --token <token>" echo " ${COMPOSE_HINT} run --rm clawdbot-cli providers add --provider telegram --token <token>"
echo "Discord (bot token):" echo "Discord (bot token):"
echo " ${COMPOSE_HINT} run --rm clawdbot-cli providers add --provider discord --token <token>" echo " ${COMPOSE_HINT} run --rm clawdbot-cli providers add --provider discord --token <token>"
echo "Docs: https://docs.clawd.bot/providers" echo "Docs: https://docs.molt.bot/providers"
echo "" echo ""
echo "==> Starting gateway" echo "==> Starting gateway"

View File

@ -1 +1 @@
clawdbot.com docs.molt.bot

View File

@ -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): 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**: - Fill in the **Application info**:
- **App name**: (e.g. `Clawdbot`) - **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`) - **Description**: (e.g. `Personal AI Assistant`)
- Enable **Interactive features**. - Enable **Interactive features**.
- Under **Functionality**, check **Join spaces and group conversations**. - Under **Functionality**, check **Join spaces and group conversations**.

View File

@ -53,7 +53,7 @@ clawdbot browser --browser-profile work tabs
```bash ```bash
clawdbot browser tabs clawdbot browser tabs
clawdbot browser open https://docs.clawd.bot clawdbot browser open https://docs.molt.bot
clawdbot browser focus <targetId> clawdbot browser focus <targetId>
clawdbot browser close <targetId> clawdbot browser close <targetId>
``` ```

View File

@ -85,7 +85,7 @@ Details:
Source: clawdbot-bundled Source: clawdbot-bundled
Path: /path/to/clawdbot/hooks/bundled/session-memory/HOOK.md Path: /path/to/clawdbot/hooks/bundled/session-memory/HOOK.md
Handler: /path/to/clawdbot/hooks/bundled/session-memory/handler.ts 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 Events: command:new
Requirements: Requirements:

View File

@ -39,7 +39,7 @@ stay consistent across channels.
Input Markdown: Input Markdown:
```markdown ```markdown
Hello **world** — see [docs](https://docs.clawd.bot). Hello **world** — see [docs](https://docs.molt.bot).
``` ```
IR (schematic): IR (schematic):
@ -51,7 +51,7 @@ IR (schematic):
{ "start": 6, "end": 11, "style": "bold" } { "start": 6, "end": 11, "style": "bold" }
], ],
"links": [ "links": [
{ "start": 19, "end": 23, "href": "https://docs.clawd.bot" } { "start": 19, "end": 23, "href": "https://docs.molt.bot" }
] ]
} }
``` ```

View File

@ -750,7 +750,7 @@ Mario asking for find ~
Found a vulnerability in Clawdbot? Please report responsibly: 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 2. Don't post publicly until fixed
3. We'll credit you (unless you prefer anonymity) 3. We'll credit you (unless you prefer anonymity)

View File

@ -501,12 +501,12 @@ upgrades in place and rewrites the gateway service to point at the new install.
Switch **to git install**: Switch **to git install**:
```bash ```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**: Switch **to npm global**:
```bash ```bash
curl -fsSL https://clawd.bot/install.sh | bash curl -fsSL https://molt.bot/install.sh | bash
``` ```
Notes: Notes:

View File

@ -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) - [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) - [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 whats new in the latest version?](#where-do-i-see-whats-new-in-the-latest-version) - [Where do I see whats 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)
- [Whats the difference between stable and beta?](#whats-the-difference-between-stable-and-beta) - [Whats the difference between stable and beta?](#whats-the-difference-between-stable-and-beta)
- [How do I install the beta version, and whats the difference between beta and dev?](#how-do-i-install-the-beta-version-and-whats-the-difference-between-beta-and-dev) - [How do I install the beta version, and whats 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) - [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: the hackable (git) install:
```bash ```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 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: The repo recommends running from source and using the onboarding wizard:
```bash ```bash
curl -fsSL https://clawd.bot/install.sh | bash curl -fsSL https://molt.bot/install.sh | bash
clawdbot onboard --install-daemon 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 ### I cant access docsclawdbot SSL error What now
Some Comcast/Xfinity connections incorrectly block `docs.clawd.bot` via Xfinity Some Comcast/Xfinity connections incorrectly block `docs.molt.bot` via Xfinity
Advanced Security. Disable it or allowlist `docs.clawd.bot`, then retry. More Advanced Security. Disable it or allowlist `docs.molt.bot`, then retry. More
detail: [Troubleshooting](/help/troubleshooting#docsclawdbot-shows-an-ssl-error-comcastxfinity). 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. 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
Oneliners (macOS/Linux): Oneliners (macOS/Linux):
```bash ```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 ```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): 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). 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):** 2) **Hackable install (from the installer site):**
```bash ```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. 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**: Re-run the installer with **verbose output**:
```bash ```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: Beta install with verbose:
```bash ```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: For a hackable (git) install:
```bash ```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). 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. your bot (or Claude/Codex) *from that folder* so it can read the repo and answer precisely.
```bash ```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). More detail: [Install](/install) and [Installer flags](/install/installer).
@ -946,7 +946,7 @@ Advantages:
- **Always-on Gateway** (run on a VPS, interact from anywhere) - **Always-on Gateway** (run on a VPS, interact from anywhere)
- **Nodes** for local browser/screen/camera/exec - **Nodes** for local browser/screen/camera/exec
Showcase: https://clawd.bot/showcase Showcase: https://molt.bot/showcase
## Skills and automation ## Skills and automation

View File

@ -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: Re-run the installer in verbose mode to see the full trace and npm output:
```bash ```bash
curl -fsSL https://clawd.bot/install.sh | bash -s -- --verbose curl -fsSL https://molt.bot/install.sh | bash -s -- --verbose
``` ```
For beta installs: For beta installs:
```bash ```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. 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) - [Gateway troubleshooting](/gateway/troubleshooting)
- [Control UI](/web/control-ui#insecure-http) - [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. Some Comcast/Xfinity connections block `docs.molt.bot` via Xfinity Advanced Security.
Disable Advanced Security or add `docs.clawd.bot` to the allowlist, then retry. 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 - 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 its ISP-level filtering - Quick sanity checks: try a mobile hotspot or VPN to confirm its ISP-level filtering

View File

@ -124,7 +124,7 @@ The `HOOK.md` file contains metadata in YAML frontmatter plus Markdown documenta
--- ---
name: my-hook name: my-hook
description: "Short description of what this hook does" 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"]}}} metadata: {"clawdbot":{"emoji":"🔗","events":["command:new"],"requires":{"bins":["node"]}}}
--- ---

View File

@ -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) ## Quick install (recommended)
```bash ```bash
curl -fsSL https://clawd.bot/install.sh | bash curl -fsSL https://molt.bot/install.sh | bash
``` ```
Windows (PowerShell): Windows (PowerShell):
```powershell ```powershell
iwr -useb https://clawd.bot/install.ps1 | iex iwr -useb https://molt.bot/install.ps1 | iex
``` ```
Next step (if you skipped onboarding): Next step (if you skipped onboarding):
@ -40,13 +40,13 @@ clawdbot onboard --install-daemon
Installs `clawdbot` globally via npm and runs onboarding. Installs `clawdbot` globally via npm and runs onboarding.
```bash ```bash
curl -fsSL https://clawd.bot/install.sh | bash curl -fsSL https://molt.bot/install.sh | bash
``` ```
Installer flags: Installer flags:
```bash ```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). Details: [Installer internals](/install/installer).
@ -54,7 +54,7 @@ Details: [Installer internals](/install/installer).
Non-interactive (skip onboarding): Non-interactive (skip onboarding):
```bash ```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) ### 2) Global install (manual)
@ -123,10 +123,10 @@ The installer supports two methods:
```bash ```bash
# Explicit npm # 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) # 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: Common flags:

View File

@ -1,29 +1,29 @@
--- ---
summary: "How the installer scripts work (install.sh + install-cli.sh), flags, and automation" summary: "How the installer scripts work (install.sh + install-cli.sh), flags, and automation"
read_when: 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 automate installs (CI / headless)
- You want to install from a GitHub checkout - You want to install from a GitHub checkout
--- ---
# Installer internals # 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://molt.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://molt.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.ps1` — Windows PowerShell installer (npm by default; optional git install)
To see the current flags/behavior, run: To see the current flags/behavior, run:
```bash ```bash
curl -fsSL https://clawd.bot/install.sh | bash -s -- --help curl -fsSL https://molt.bot/install.sh | bash -s -- --help
``` ```
Windows (PowerShell) help: Windows (PowerShell) help:
```powershell ```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, its usually a Node/npm PATH issue. See: [Install](/install#nodejs--npm-path-sanity). If the installer completes but `clawdbot` is not found in a new terminal, its 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 youre debugging), set: If you *want* `sharp` to link against a globally-installed libvips (or youre debugging), set:
```bash ```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 ### Discoverability / “git install” prompt
@ -78,7 +78,7 @@ This script installs `clawdbot` into a prefix (default: `~/.clawdbot`) and also
Help: Help:
```bash ```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) ## install.ps1 (Windows PowerShell)
@ -94,15 +94,15 @@ What it does (high level):
Examples: Examples:
```powershell ```powershell
iwr -useb https://clawd.bot/install.ps1 | iex iwr -useb https://molt.bot/install.ps1 | iex
``` ```
```powershell ```powershell
iwr -useb https://clawd.bot/install.ps1 | iex -InstallMethod git iwr -useb https://molt.bot/install.ps1 | iex -InstallMethod git
``` ```
```powershell ```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: Environment variables:

View File

@ -113,7 +113,7 @@ If you used a profile, delete the matching task name and `~\.clawdbot-<profile>\
### Normal install (install.sh / npm / pnpm / bun) ### 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). Remove it with `npm rm -g clawdbot` (or `pnpm remove -g` / `bun remove -g` if you installed that way).
### Source checkout (git clone) ### Source checkout (git clone)

View File

@ -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: read_when:
- Updating Clawdbot - Updating Moltbot
- Something breaks after an update - Something breaks after an update
--- ---
# Updating # 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) ## Recommended: re-run the website installer (upgrade in place)
The **preferred** update path is to re-run the installer from the website. It 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. needed.
```bash ```bash
curl -fsSL https://clawd.bot/install.sh | bash curl -fsSL https://molt.bot/install.sh | bash
``` ```
Notes: Notes:
- Add `--no-onboard` if you dont want the onboarding wizard to run again. - Add `--no-onboard` if you dont want the onboarding wizard to run again.
- For **source installs**, use: - For **source installs**, use:
```bash ```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. 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 ## Before you update
@ -42,20 +43,20 @@ Notes:
Global install (pick one): Global install (pick one):
```bash ```bash
npm i -g clawdbot@latest npm i -g moltbot@latest
``` ```
```bash ```bash
pnpm add -g clawdbot@latest pnpm add -g moltbot@latest
``` ```
We do **not** recommend Bun for the Gateway runtime (WhatsApp/Telegram bugs). We do **not** recommend Bun for the Gateway runtime (WhatsApp/Telegram bugs).
To switch update channels (git + npm installs): To switch update channels (git + npm installs):
```bash ```bash
clawdbot update --channel beta moltbot update --channel beta
clawdbot update --channel dev moltbot update --channel dev
clawdbot update --channel stable moltbot update --channel stable
``` ```
Use `--tag <dist-tag|version>` for a one-off install tag/version. Use `--tag <dist-tag|version>` 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: Then:
```bash ```bash
clawdbot doctor moltbot doctor
clawdbot gateway restart moltbot gateway restart
clawdbot health moltbot health
``` ```
Notes: 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 youre pinned to a specific version, see “Rollback / pinning” below. - If youre pinned to a specific version, see “Rollback / pinning” below.
## Update (`clawdbot update`) ## Update (`moltbot update`)
For **source installs** (git checkout), prefer: For **source installs** (git checkout), prefer:
```bash ```bash
clawdbot update moltbot update
``` ```
It runs a safe-ish update flow: It runs a safe-ish update flow:
- Requires a clean worktree. - Requires a clean worktree.
- Switches to the selected channel (tag or branch). - Switches to the selected channel (tag or branch).
- Fetches + rebases against the configured upstream (dev channel). - 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). - 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 cant 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 cant detect the install, use “Update (global install)” instead.
## Update (Control UI / RPC) ## Update (Control UI / RPC)
The Control UI has **Update & Restart** (RPC: `update.run`). It: 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). 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. 3) Restarts the gateway and pings the last active session with the report.
@ -109,7 +110,7 @@ From the repo checkout:
Preferred: Preferred:
```bash ```bash
clawdbot update moltbot update
``` ```
Manual (equivalent-ish): Manual (equivalent-ish):
@ -119,21 +120,21 @@ git pull
pnpm install pnpm install
pnpm build pnpm build
pnpm ui:build # auto-installs UI deps on first run pnpm ui:build # auto-installs UI deps on first run
clawdbot doctor moltbot doctor
clawdbot health moltbot health
``` ```
Notes: 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/`. - `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 clawdbot ...` for CLI commands. - If you run from a repo checkout without a global install, use `pnpm moltbot ...` for CLI commands.
- If you run directly from TypeScript (`pnpm clawdbot ...`), a rebuild is usually unnecessary, but **config migrations still apply** → run doctor. - 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 `clawdbot doctor` so the gateway service entrypoint is rewritten to the current install. - 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. Its intentionally boring: repair + migrate + warn. Doctor is the “safe update” command. Its intentionally boring: repair + migrate + warn.
Note: if youre on a **source install** (git checkout), `clawdbot doctor` will offer to run `clawdbot update` first. Note: if youre on a **source install** (git checkout), `moltbot doctor` will offer to run `moltbot update` first.
Typical things it does: Typical things it does:
- Migrate deprecated config keys / legacy config file locations. - Migrate deprecated config keys / legacy config file locations.
@ -149,18 +150,18 @@ Details: [Doctor](/gateway/doctor)
CLI (works regardless of OS): CLI (works regardless of OS):
```bash ```bash
clawdbot gateway status moltbot gateway status
clawdbot gateway stop moltbot gateway stop
clawdbot gateway restart moltbot gateway restart
clawdbot gateway --port 18789 moltbot gateway --port 18789
clawdbot logs --follow moltbot logs --follow
``` ```
If youre supervised: If youre supervised:
- macOS launchd (app-bundled LaunchAgent): `launchctl kickstart -k gui/$UID/com.clawdbot.gateway` (use `com.clawdbot.<profile>` if set) - macOS launchd (app-bundled LaunchAgent): `launchctl kickstart -k gui/$UID/com.clawdbot.gateway` (use `com.clawdbot.<profile>` if set)
- Linux systemd user service: `systemctl --user restart clawdbot-gateway[-<profile>].service` - Linux systemd user service: `systemctl --user restart clawdbot-gateway[-<profile>].service`
- Windows (WSL2): `systemctl --user restart clawdbot-gateway[-<profile>].service` - Windows (WSL2): `systemctl --user restart clawdbot-gateway[-<profile>].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) Runbook + exact service labels: [Gateway runbook](/gateway)
@ -171,20 +172,20 @@ Runbook + exact service labels: [Gateway runbook](/gateway)
Install a known-good version (replace `<version>` with the last working one): Install a known-good version (replace `<version>` with the last working one):
```bash ```bash
npm i -g clawdbot@<version> npm i -g moltbot@<version>
``` ```
```bash ```bash
pnpm add -g clawdbot@<version> pnpm add -g moltbot@<version>
``` ```
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: Then restart + re-run doctor:
```bash ```bash
clawdbot doctor moltbot doctor
clawdbot gateway restart moltbot gateway restart
``` ```
### Pin (source) by date ### Pin (source) by date
@ -201,7 +202,7 @@ Then reinstall deps + restart:
```bash ```bash
pnpm install pnpm install
pnpm build pnpm build
clawdbot gateway restart moltbot gateway restart
``` ```
If you want to go back to latest later: If you want to go back to latest later:
@ -213,6 +214,6 @@ git pull
## If youre stuck ## If youre 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) - Check: [Troubleshooting](/gateway/troubleshooting)
- Ask in Discord: https://channels.discord.gg/clawd - Ask in Discord: https://channels.discord.gg/clawd

View File

@ -65,7 +65,7 @@ curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs apt install -y nodejs
# Install Clawdbot # Install Clawdbot
curl -fsSL https://clawd.bot/install.sh | bash curl -fsSL https://molt.bot/install.sh | bash
# Verify # Verify
clawdbot --version clawdbot --version

View File

@ -97,7 +97,7 @@ tailscale status
## 5) Install Clawdbot ## 5) Install Clawdbot
```bash ```bash
curl -fsSL https://clawd.bot/install.sh | bash curl -fsSL https://molt.bot/install.sh | bash
source ~/.bashrc source ~/.bashrc
``` ```

View File

@ -110,7 +110,7 @@ sudo sysctl -p
### Option A: Standard Install (Recommended) ### Option A: Standard Install (Recommended)
```bash ```bash
curl -fsSL https://clawd.bot/install.sh | bash curl -fsSL https://molt.bot/install.sh | bash
``` ```
### Option B: Hackable Install (For tinkering) ### Option B: Hackable Install (For tinkering)

View File

@ -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) - [ ] `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=<last-good-version>` or `CLAWDBOT_INSTALL_SMOKE_SKIP_PREVIOUS=1` for the preinstall step. - If the immediate previous npm release is known broken, set `CLAWDBOT_INSTALL_SMOKE_PREVIOUS=<last-good-version>` 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) 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:openai` (requires `OPENAI_API_KEY`)
- `pnpm test:install:e2e:anthropic` (requires `ANTHROPIC_API_KEY`) - `pnpm test:install:e2e:anthropic` (requires `ANTHROPIC_API_KEY`)
- `pnpm test:install:e2e` (requires both keys; runs both providers) - `pnpm test:install:e2e` (requires both keys; runs both providers)

View File

@ -54,7 +54,7 @@ Windows: use **WSL2** (Ubuntu recommended). WSL2 is strongly recommended; native
## 1) Install the CLI (recommended) ## 1) Install the CLI (recommended)
```bash ```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). 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): Windows (PowerShell):
```powershell ```powershell
iwr -useb https://clawd.bot/install.ps1 | iex iwr -useb https://molt.bot/install.ps1 | iex
``` ```
Alternative (global install): Alternative (global install):

View File

@ -83,6 +83,26 @@ describe("lobster plugin tool", () => {
expect(res.details).toMatchObject({ ok: true, status: "ok" }); 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 () => { it("requires absolute lobsterPath when provided", async () => {
const tool = createLobsterTool(fakeApi()); const tool = createLobsterTool(fakeApi());
await expect( await expect(

View File

@ -131,10 +131,28 @@ async function runLobsterSubprocess(params: {
} }
function parseEnvelope(stdout: string): LobsterEnvelope { function parseEnvelope(stdout: string): LobsterEnvelope {
let parsed: unknown; const trimmed = stdout.trim();
try {
parsed = JSON.parse(stdout); const tryParse = (input: string) => {
} catch { 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"); throw new Error("lobster returned invalid JSON");
} }

View File

@ -17,7 +17,7 @@ async function noteMattermostSetup(prompter: WizardPrompter): Promise<void> {
"2) Create a bot + copy its token", "2) Create a bot + copy its token",
"3) Use your server base URL (e.g., https://chat.example.com)", "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.", "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"), ].join("\n"),
"Mattermost bot token", "Mattermost bot token",
); );

View File

@ -2,4 +2,4 @@
Tlon/Urbit channel plugin for Clawdbot. Supports DMs, group mentions, and thread replies. 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

View File

@ -80,7 +80,7 @@ Multi-account config (advanced):
## Full documentation ## Full documentation
See https://docs.clawd.bot/channels/twitch for: See https://docs.molt.bot/channels/twitch for:
- Token refresh setup - Token refresh setup
- Access control patterns - Access control patterns

View File

@ -8,8 +8,8 @@ Providers:
- **Plivo** (Voice API + XML transfer + GetInput speech) - **Plivo** (Voice API + XML transfer + GetInput speech)
- **Mock** (dev/no network) - **Mock** (dev/no network)
Docs: `https://docs.clawd.bot/plugins/voice-call` Docs: `https://docs.molt.bot/plugins/voice-call`
Plugin system: `https://docs.clawd.bot/plugin` Plugin system: `https://docs.molt.bot/plugin`
## Install (local dev) ## Install (local dev)

View File

@ -45,7 +45,7 @@ export function registerVoiceCallCli(params: {
const root = program const root = program
.command("voicecall") .command("voicecall")
.description("Voice call utilities") .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 root
.command("call") .command("call")

View File

@ -88,7 +88,7 @@ function findPackageRoot(startDir: string, name: string): string | null {
function resolveClawdbotRoot(): string { function resolveClawdbotRoot(): string {
if (coreRootCache) return coreRootCache; 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) { if (override) {
coreRootCache = override; coreRootCache = override;
return override; return override;
@ -107,15 +107,17 @@ function resolveClawdbotRoot(): string {
} }
for (const start of candidates) { for (const start of candidates) {
const found = findPackageRoot(start, "clawdbot"); for (const name of ["moltbot", "clawdbot"]) {
if (found) { const found = findPackageRoot(start, name);
coreRootCache = found; if (found) {
return found; coreRootCache = found;
return found;
}
} }
} }
throw new Error( 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.",
); );
} }

View File

@ -132,7 +132,7 @@ async function noteZaloTokenHelp(prompter: WizardPrompter): Promise<void> {
"2) Create a bot and get the token", "2) Create a bot and get the token",
"3) Token looks like 12345689:abc-xyz", "3) Token looks like 12345689:abc-xyz",
"Tip: you can also set ZALO_BOT_TOKEN in your env.", "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"), ].join("\n"),
"Zalo bot token", "Zalo bot token",
); );

View File

@ -471,7 +471,7 @@ export const zalouserPlugin: ChannelPlugin<ResolvedZalouserAccount> = {
const ok = await checkZcaInstalled(); const ok = await checkZcaInstalled();
if (!ok) { if (!ok) {
throw new Error( 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( runtime.log(

View File

@ -53,7 +53,7 @@ async function noteZalouserHelp(prompter: WizardPrompter): Promise<void> {
"1) Install zca-cli", "1) Install zca-cli",
"2) You'll scan a QR code with your Zalo app", "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"), ].join("\n"),
"Zalo Personal Setup", "Zalo Personal Setup",
); );
@ -316,7 +316,7 @@ export const zalouserOnboardingAdapter: ChannelOnboardingAdapter = {
"The `zca` binary was not found in PATH.", "The `zca` binary was not found in PATH.",
"", "",
"Install zca-cli, then re-run onboarding:", "Install zca-cli, then re-run onboarding:",
"Docs: https://docs.clawd.bot/channels/zalouser", "Docs: https://docs.molt.bot/channels/zalouser",
].join("\n"), ].join("\n"),
"Missing Dependency", "Missing Dependency",
); );

20
pnpm-lock.yaml generated
View File

@ -316,7 +316,7 @@ importers:
devDependencies: devDependencies:
clawdbot: clawdbot:
specifier: workspace:* specifier: workspace:*
version: link:../.. version: link:../../packages/clawdbot
extensions/imessage: {} extensions/imessage: {}
@ -324,7 +324,7 @@ importers:
devDependencies: devDependencies:
clawdbot: clawdbot:
specifier: workspace:* specifier: workspace:*
version: link:../.. version: link:../../packages/clawdbot
extensions/llm-task: {} extensions/llm-task: {}
@ -350,7 +350,7 @@ importers:
devDependencies: devDependencies:
clawdbot: clawdbot:
specifier: workspace:* specifier: workspace:*
version: link:../.. version: link:../../packages/clawdbot
extensions/mattermost: {} extensions/mattermost: {}
@ -385,7 +385,7 @@ importers:
version: 1.2.2 version: 1.2.2
clawdbot: clawdbot:
specifier: workspace:* specifier: workspace:*
version: link:../.. version: link:../../packages/clawdbot
express: express:
specifier: ^5.2.1 specifier: ^5.2.1
version: 5.2.1 version: 5.2.1
@ -399,7 +399,7 @@ importers:
dependencies: dependencies:
clawdbot: clawdbot:
specifier: workspace:* specifier: workspace:*
version: link:../.. version: link:../../packages/clawdbot
nostr-tools: nostr-tools:
specifier: ^2.20.0 specifier: ^2.20.0
version: 2.20.0(typescript@5.9.3) version: 2.20.0(typescript@5.9.3)
@ -441,7 +441,7 @@ importers:
devDependencies: devDependencies:
clawdbot: clawdbot:
specifier: workspace:* specifier: workspace:*
version: link:../.. version: link:../../packages/clawdbot
extensions/voice-call: extensions/voice-call:
dependencies: dependencies:
@ -461,7 +461,7 @@ importers:
dependencies: dependencies:
clawdbot: clawdbot:
specifier: workspace:* specifier: workspace:*
version: link:../.. version: link:../../packages/clawdbot
undici: undici:
specifier: 7.19.0 specifier: 7.19.0
version: 7.19.0 version: 7.19.0
@ -472,6 +472,12 @@ importers:
specifier: 0.34.47 specifier: 0.34.47
version: 0.34.47 version: 0.34.47
clawdbot: clawdbot:
specifier: workspace:*
version: link:../../packages/clawdbot
packages/clawdbot:
dependencies:
moltbot:
specifier: workspace:* specifier: workspace:*
version: link:../.. version: link:../..

View File

@ -1,6 +1,7 @@
packages: packages:
- . - .
- ui - ui
- packages/*
- extensions/* - extensions/*
onlyBuiltDependencies: onlyBuiltDependencies:

View File

@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail 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 MODELS_MODE="${CLAWDBOT_E2E_MODELS:-both}" # both|openai|anthropic
INSTALL_TAG="${CLAWDBOT_INSTALL_TAG:-latest}" INSTALL_TAG="${CLAWDBOT_INSTALL_TAG:-latest}"
E2E_PREVIOUS_VERSION="${CLAWDBOT_INSTALL_E2E_PREVIOUS:-}" E2E_PREVIOUS_VERSION="${CLAWDBOT_INSTALL_E2E_PREVIOUS:-}"

View File

@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail 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" echo "==> Pre-flight: ensure git absent"
if command -v git >/dev/null; then if command -v git >/dev/null; then

View File

@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail 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:-}" SMOKE_PREVIOUS_VERSION="${CLAWDBOT_INSTALL_SMOKE_PREVIOUS:-}"
SKIP_PREVIOUS="${CLAWDBOT_INSTALL_SMOKE_SKIP_PREVIOUS:-0}" SKIP_PREVIOUS="${CLAWDBOT_INSTALL_SMOKE_SKIP_PREVIOUS:-0}"

View File

@ -4,8 +4,8 @@ set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
SMOKE_IMAGE="${CLAWDBOT_INSTALL_SMOKE_IMAGE:-clawdbot-install-smoke:local}" SMOKE_IMAGE="${CLAWDBOT_INSTALL_SMOKE_IMAGE:-clawdbot-install-smoke:local}"
NONROOT_IMAGE="${CLAWDBOT_INSTALL_NONROOT_IMAGE:-clawdbot-install-nonroot:local}" NONROOT_IMAGE="${CLAWDBOT_INSTALL_NONROOT_IMAGE:-clawdbot-install-nonroot:local}"
INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://clawd.bot/install.sh}" INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://molt.bot/install.sh}"
CLI_INSTALL_URL="${CLAWDBOT_INSTALL_CLI_URL:-https://clawd.bot/install-cli.sh}" CLI_INSTALL_URL="${CLAWDBOT_INSTALL_CLI_URL:-https://molt.bot/install-cli.sh}"
SKIP_NONROOT="${CLAWDBOT_INSTALL_SMOKE_SKIP_NONROOT:-0}" SKIP_NONROOT="${CLAWDBOT_INSTALL_SMOKE_SKIP_NONROOT:-0}"
LATEST_DIR="$(mktemp -d)" LATEST_DIR="$(mktemp -d)"
LATEST_FILE="${LATEST_DIR}/latest" LATEST_FILE="${LATEST_DIR}/latest"

View File

@ -3,7 +3,7 @@ set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
IMAGE_NAME="${CLAWDBOT_INSTALL_E2E_IMAGE:-clawdbot-install-e2e:local}" 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:-}" OPENAI_API_KEY="${OPENAI_API_KEY:-}"
ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY:-}" ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY:-}"

View File

@ -50,7 +50,7 @@ describe("gateway tool", () => {
}; };
expect(parsed.payload?.kind).toBe("restart"); expect(parsed.payload?.kind).toBe("restart");
expect(parsed.payload?.doctorHint).toBe( expect(parsed.payload?.doctorHint).toBe(
"Run: clawdbot --profile isolated doctor --non-interactive", "Run: moltbot --profile isolated doctor --non-interactive",
); );
expect(kill).not.toHaveBeenCalled(); expect(kill).not.toHaveBeenCalled();

View File

@ -116,7 +116,7 @@ function buildDocsSection(params: { docsPath?: string; isMinimal: boolean; readT
return [ return [
"## Documentation", "## Documentation",
`Clawdbot docs: ${docsPath}`, `Clawdbot docs: ${docsPath}`,
"Mirror: https://docs.clawd.bot", "Mirror: https://docs.molt.bot",
"Source: https://github.com/clawdbot/clawdbot", "Source: https://github.com/clawdbot/clawdbot",
"Community: https://discord.com/invite/clawd", "Community: https://discord.com/invite/clawd",
"Find new skills: https://clawdhub.com", "Find new skills: https://clawdhub.com",

View File

@ -128,13 +128,13 @@ function missingSearchKeyPayload(provider: (typeof SEARCH_PROVIDERS)[number]) {
error: "missing_perplexity_api_key", error: "missing_perplexity_api_key",
message: 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.", "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 { return {
error: "missing_brave_api_key", 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.`, 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: { headers: {
"Content-Type": "application/json", "Content-Type": "application/json",
Authorization: `Bearer ${params.apiKey}`, Authorization: `Bearer ${params.apiKey}`,
"HTTP-Referer": "https://clawdbot.com", "HTTP-Referer": "https://molt.bot",
"X-Title": "Clawdbot Web Search", "X-Title": "Clawdbot Web Search",
}, },
body: JSON.stringify({ body: JSON.stringify({
@ -447,7 +447,7 @@ export function createWebSearchTool(options?: {
return jsonResult({ return jsonResult({
error: "unsupported_freshness", error: "unsupported_freshness",
message: "freshness is only supported by the Brave web_search provider.", 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; const freshness = rawFreshness ? normalizeFreshness(rawFreshness) : undefined;
@ -456,7 +456,7 @@ export function createWebSearchTool(options?: {
error: "invalid_freshness", error: "invalid_freshness",
message: message:
"freshness must be one of pd, pw, pm, py, or a range like YYYY-MM-DDtoYYYY-MM-DD.", "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({ const result = await runWebSearch({

View File

@ -189,7 +189,7 @@ export async function handleBashChatCommand(params: {
}): Promise<ReplyPayload> { }): Promise<ReplyPayload> {
if (params.cfg.commands?.bash !== true) { if (params.cfg.commands?.bash !== true) {
return { 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",
}; };
} }

View File

@ -1 +1 @@
2567ca5bbc065b922d96717a488d5db3120b5b033c5d0508682d1aa8fbba470a b3c955e808e8d11cdbb6f716a038f26ccdd4b69228ad0c4ce76fd81e98496d56

View File

@ -8,7 +8,7 @@ import { getChannelPluginCatalogEntry, listChannelPluginCatalogEntries } from ".
describe("channel plugin catalog", () => { describe("channel plugin catalog", () => {
it("includes Microsoft Teams", () => { it("includes Microsoft Teams", () => {
const entry = getChannelPluginCatalogEntry("msteams"); const entry = getChannelPluginCatalogEntry("msteams");
expect(entry?.install.npmSpec).toBe("@clawdbot/msteams"); expect(entry?.install.npmSpec).toBe("@moltbot/msteams");
expect(entry?.meta.aliases).toContain("teams"); expect(entry?.meta.aliases).toContain("teams");
}); });

View File

@ -38,7 +38,7 @@ async function noteTelegramTokenHelp(prompter: WizardPrompter): Promise<void> {
"3) Copy the token (looks like 123456:ABC...)", "3) Copy the token (looks like 123456:ABC...)",
"Tip: you can also set TELEGRAM_BOT_TOKEN in your env.", "Tip: you can also set TELEGRAM_BOT_TOKEN in your env.",
`Docs: ${formatDocsLink("/telegram")}`, `Docs: ${formatDocsLink("/telegram")}`,
"Website: https://clawd.bot", "Website: https://molt.bot",
].join("\n"), ].join("\n"),
"Telegram bot token", "Telegram bot token",
); );
@ -51,7 +51,7 @@ async function noteTelegramUserIdHelp(prompter: WizardPrompter): Promise<void> {
"2) Or call https://api.telegram.org/bot<bot_token>/getUpdates and read message.from.id", "2) Or call https://api.telegram.org/bot<bot_token>/getUpdates and read message.from.id",
"3) Third-party: DM @userinfobot or @getidsbot", "3) Third-party: DM @userinfobot or @getidsbot",
`Docs: ${formatDocsLink("/telegram")}`, `Docs: ${formatDocsLink("/telegram")}`,
"Website: https://clawd.bot", "Website: https://molt.bot",
].join("\n"), ].join("\n"),
"Telegram user id", "Telegram user id",
); );

View File

@ -33,6 +33,6 @@ describe("channel registry", () => {
); );
expect(line).not.toContain("Docs:"); expect(line).not.toContain("Docs:");
expect(line).toContain("/channels/telegram"); expect(line).toContain("/channels/telegram");
expect(line).toContain("https://clawd.bot"); expect(line).toContain("https://molt.bot");
}); });
}); });

View File

@ -22,7 +22,7 @@ export const DEFAULT_CHAT_CHANNEL: ChatChannelId = "whatsapp";
export type ChatChannelMeta = ChannelMeta; export type ChatChannelMeta = ChannelMeta;
const WEBSITE_URL = "https://clawd.bot"; const WEBSITE_URL = "https://molt.bot";
const CHAT_CHANNEL_META: Record<ChatChannelId, ChannelMeta> = { const CHAT_CHANNEL_META: Record<ChatChannelId, ChannelMeta> = {
telegram: { telegram: {

View File

@ -21,7 +21,7 @@ export function registerAcpCli(program: Command) {
.option("--verbose, -v", "Verbose logging to stderr", false) .option("--verbose, -v", "Verbose logging to stderr", false)
.addHelpText( .addHelpText(
"after", "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) => { .action((opts) => {
try { try {
@ -46,7 +46,7 @@ export function registerAcpCli(program: Command) {
.command("client") .command("client")
.description("Run an interactive ACP client against the local ACP bridge") .description("Run an interactive ACP client against the local ACP bridge")
.option("--cwd <dir>", "Working directory for the ACP session") .option("--cwd <dir>", "Working directory for the ACP session")
.option("--server <command>", "ACP server command (default: clawdbot)") .option("--server <command>", "ACP server command (default: moltbot)")
.option("--server-args <args...>", "Extra arguments for the ACP server") .option("--server-args <args...>", "Extra arguments for the ACP server")
.option("--server-verbose", "Enable verbose logging on the ACP server", false) .option("--server-verbose", "Enable verbose logging on the ACP server", false)
.option("--verbose, -v", "Verbose client logging", false) .option("--verbose, -v", "Verbose client logging", false)

View File

@ -2,6 +2,7 @@ import { resolveCommitHash } from "../infra/git-commit.js";
import { visibleWidth } from "../terminal/ansi.js"; import { visibleWidth } from "../terminal/ansi.js";
import { isRich, theme } from "../terminal/theme.js"; import { isRich, theme } from "../terminal/theme.js";
import { pickTagline, type TaglineOptions } from "./tagline.js"; import { pickTagline, type TaglineOptions } from "./tagline.js";
import { resolveCliName } from "./cli-name.js";
type BannerOptions = TaglineOptions & { type BannerOptions = TaglineOptions & {
argv?: string[]; argv?: string[];
@ -37,7 +38,8 @@ export function formatCliBannerLine(version: string, options: BannerOptions = {}
const commitLabel = commit ?? "unknown"; const commitLabel = commit ?? "unknown";
const tagline = pickTagline(options); const tagline = pickTagline(options);
const rich = options.richTty ?? isRich(); 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 prefix = "🦞 ";
const columns = options.columns ?? process.stdout.columns ?? 120; const columns = options.columns ?? process.stdout.columns ?? 120;
const plainFullLine = `${title} ${version} (${commitLabel}) — ${tagline}`; const plainFullLine = `${title} ${version} (${commitLabel}) — ${tagline}`;

View File

@ -90,7 +90,7 @@ export function registerBrowserExtensionCommands(
`- “Load unpacked” → select: ${displayPath}`, `- “Load unpacked” → select: ${displayPath}`,
`- Pin “Clawdbot Browser Relay”, then click it on the tab (badge shows ON)`, `- 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"), ].join("\n"),
), ),
); );
@ -107,7 +107,7 @@ export function registerBrowserExtensionCommands(
danger( danger(
[ [
`Chrome extension is not installed. Run: "${formatCliCommand("clawdbot browser extension install")}"`, `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"), ].join("\n"),
), ),
); );

View File

@ -31,7 +31,7 @@ export function registerBrowserCli(program: Command) {
true, true,
)}\n\n${theme.muted("Docs:")} ${formatDocsLink( )}\n\n${theme.muted("Docs:")} ${formatDocsLink(
"/cli/browser", "/cli/browser",
"docs.clawd.bot/cli/browser", "docs.molt.bot/cli/browser",
)}\n`, )}\n`,
) )
.action(() => { .action(() => {

View File

@ -76,7 +76,7 @@ export function registerChannelsCli(program: Command) {
() => () =>
`\n${theme.muted("Docs:")} ${formatDocsLink( `\n${theme.muted("Docs:")} ${formatDocsLink(
"/cli/channels", "/cli/channels",
"docs.clawd.bot/cli/channels", "docs.molt.bot/cli/channels",
)}\n`, )}\n`,
); );

View File

@ -1,6 +1,7 @@
import { normalizeProfileName } from "./profile-utils.js"; 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 PROFILE_FLAG_RE = /(?:^|\s)--profile(?:\s|=|$)/;
const DEV_FLAG_RE = /(?:^|\s)--dev(?:\s|$)/; const DEV_FLAG_RE = /(?:^|\s)--dev(?:\s|$)/;
@ -8,9 +9,13 @@ export function formatCliCommand(
command: string, command: string,
env: Record<string, string | undefined> = process.env as Record<string, string | undefined>, env: Record<string, string | undefined> = process.env as Record<string, string | undefined>,
): string { ): string {
const cliName = resolveCliName(undefined, env);
const normalizedCommand = replaceCliName(command, cliName);
const profile = normalizeProfileName(env.CLAWDBOT_PROFILE); const profile = normalizeProfileName(env.CLAWDBOT_PROFILE);
if (!profile) return command; if (!profile) return normalizedCommand;
if (!CLI_PREFIX_RE.test(command)) return command; if (!CLI_PREFIX_RE.test(normalizedCommand)) return normalizedCommand;
if (PROFILE_FLAG_RE.test(command) || DEV_FLAG_RE.test(command)) return command; if (PROFILE_FLAG_RE.test(normalizedCommand) || DEV_FLAG_RE.test(normalizedCommand)) {
return command.replace(CLI_PREFIX_RE, (match) => `${match} --profile ${profile}`); return normalizedCommand;
}
return normalizedCommand.replace(CLI_PREFIX_RE, (match) => `${match} --profile ${profile}`);
} }

View File

@ -185,7 +185,7 @@ export function registerConfigCli(program: Command) {
.addHelpText( .addHelpText(
"after", "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( .option(
"--section <section>", "--section <section>",

View File

@ -15,7 +15,7 @@ export function registerCronCli(program: Command) {
.description("Manage cron jobs (via Gateway)") .description("Manage cron jobs (via Gateway)")
.addHelpText( .addHelpText(
"after", "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); registerCronStatusCommand(cron);

View File

@ -18,7 +18,7 @@ export function registerDaemonCli(program: Command) {
.addHelpText( .addHelpText(
"after", "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 daemon

View File

@ -322,5 +322,5 @@ export function printDaemonStatus(status: DaemonStatus, opts: { json: boolean })
} }
defaultRuntime.log(`${label("Troubles:")} run ${formatCliCommand("clawdbot status")}`); 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`);
} }

View File

@ -39,7 +39,7 @@ export function registerDirectoryCli(program: Command) {
() => () =>
`\n${theme.muted("Docs:")} ${formatDocsLink( `\n${theme.muted("Docs:")} ${formatDocsLink(
"/cli/directory", "/cli/directory",
"docs.clawd.bot/cli/directory", "docs.molt.bot/cli/directory",
)}\n`, )}\n`,
) )
.action(() => { .action(() => {

View File

@ -97,7 +97,7 @@ export function registerDnsCli(program: Command) {
.description("DNS helpers for wide-area discovery (Tailscale + CoreDNS)") .description("DNS helpers for wide-area discovery (Tailscale + CoreDNS)")
.addHelpText( .addHelpText(
"after", "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 dns

View File

@ -13,7 +13,7 @@ export function registerDocsCli(program: Command) {
.argument("[query...]", "Search query") .argument("[query...]", "Search query")
.addHelpText( .addHelpText(
"after", "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[]) => { .action(async (queryParts: string[]) => {
await runCommandWithRuntime(defaultRuntime, async () => { await runCommandWithRuntime(defaultRuntime, async () => {

View File

@ -233,7 +233,7 @@ export function registerExecApprovalsCli(program: Command) {
.addHelpText( .addHelpText(
"after", "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 const getCmd = approvals
@ -337,7 +337,7 @@ export function registerExecApprovalsCli(program: Command) {
)}\n${formatExample( )}\n${formatExample(
'clawdbot approvals allowlist remove "~/Projects/**/bin/rg"', 'clawdbot approvals allowlist remove "~/Projects/**/bin/rg"',
"Remove an allowlist pattern.", "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 const allowlistAdd = allowlist

View File

@ -103,7 +103,7 @@ export function registerGatewayCli(program: Command) {
.addHelpText( .addHelpText(
"after", "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`,
), ),
); );

View File

@ -16,7 +16,7 @@ const report: HookStatusReport = {
handlerPath: "/tmp/hooks/session-memory/handler.js", handlerPath: "/tmp/hooks/session-memory/handler.js",
hookKey: "session-memory", hookKey: "session-memory",
emoji: "💾", emoji: "💾",
homepage: "https://docs.clawd.bot/hooks#session-memory", homepage: "https://docs.molt.bot/hooks#session-memory",
events: ["command:new"], events: ["command:new"],
always: false, always: false,
disabled: false, disabled: false,

View File

@ -424,7 +424,7 @@ export function registerHooksCli(program: Command): void {
.addHelpText( .addHelpText(
"after", "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 hooks

View File

@ -180,7 +180,7 @@ export function registerLogsCli(program: Command) {
.option("--no-color", "Disable ANSI colors") .option("--no-color", "Disable ANSI colors")
.addHelpText( .addHelpText(
"after", "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); addGatewayClientOptions(logs);

View File

@ -424,7 +424,7 @@ export function registerMemoryCli(program: Command) {
.addHelpText( .addHelpText(
"after", "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 memory

View File

@ -44,7 +44,7 @@ export function registerModelsCli(program: Command) {
.addHelpText( .addHelpText(
"after", "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 models

View File

@ -23,7 +23,7 @@ export function registerNodeCli(program: Command) {
.description("Run a headless node host (system.run/system.which)") .description("Run a headless node host (system.run/system.which)")
.addHelpText( .addHelpText(
"after", "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 node

View File

@ -51,11 +51,11 @@ describe("nodes camera helpers", () => {
tmpDir: "/tmp", tmpDir: "/tmp",
id: "id1", 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 () => { 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"); const out = path.join(dir, "x.bin");
await writeBase64ToFile(out, "aGk="); await writeBase64ToFile(out, "aGk=");
await expect(fs.readFile(out, "utf8")).resolves.toBe("hi"); await expect(fs.readFile(out, "utf8")).resolves.toBe("hi");

View File

@ -3,6 +3,8 @@ import * as fs from "node:fs/promises";
import * as os from "node:os"; import * as os from "node:os";
import * as path from "node:path"; import * as path from "node:path";
import { resolveCliName } from "./cli-name.js";
export type CameraFacing = "front" | "back"; export type CameraFacing = "front" | "back";
export type CameraSnapPayload = { export type CameraSnapPayload = {
@ -70,7 +72,8 @@ export function cameraTempPath(opts: {
const id = opts.id ?? randomUUID(); const id = opts.id ?? randomUUID();
const facingPart = opts.facing ? `-${opts.facing}` : ""; const facingPart = opts.facing ? `-${opts.facing}` : "";
const ext = opts.ext.startsWith(".") ? opts.ext : `.${opts.ext}`; 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) { export async function writeBase64ToFile(filePath: string, base64: string) {

View File

@ -2,6 +2,8 @@ import { randomUUID } from "node:crypto";
import * as os from "node:os"; import * as os from "node:os";
import * as path from "node:path"; import * as path from "node:path";
import { resolveCliName } from "./cli-name.js";
export type CanvasSnapshotPayload = { export type CanvasSnapshotPayload = {
format: string; format: string;
base64: string; base64: string;
@ -29,5 +31,6 @@ export function canvasSnapshotTempPath(opts: { ext: string; tmpDir?: string; id?
const tmpDir = opts.tmpDir ?? os.tmpdir(); const tmpDir = opts.tmpDir ?? os.tmpdir();
const id = opts.id ?? randomUUID(); const id = opts.id ?? randomUUID();
const ext = opts.ext.startsWith(".") ? opts.ext : `.${opts.ext}`; 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}`);
} }

View File

@ -17,7 +17,7 @@ export function registerNodesCli(program: Command) {
.addHelpText( .addHelpText(
"after", "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); registerNodesStatusCommands(nodes);

View File

@ -53,7 +53,7 @@ export function registerPairingCli(program: Command) {
.addHelpText( .addHelpText(
"after", "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 pairing

View File

@ -98,7 +98,7 @@ export function registerPluginsCli(program: Command) {
.addHelpText( .addHelpText(
"after", "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 plugins
@ -521,7 +521,7 @@ export function registerPluginsCli(program: Command) {
lines.push(`- ${target}${diag.message}`); 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("");
lines.push(`${theme.muted("Docs:")} ${docs}`); lines.push(`${theme.muted("Docs:")} ${docs}`);
defaultRuntime.log(lines.join("\n")); defaultRuntime.log(lines.join("\n"));

View File

@ -80,60 +80,60 @@ describe("applyCliProfileEnv", () => {
describe("formatCliCommand", () => { describe("formatCliCommand", () => {
it("returns command unchanged when no profile is set", () => { 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", () => { it("returns command unchanged when profile is default", () => {
expect(formatCliCommand("clawdbot doctor --fix", { CLAWDBOT_PROFILE: "default" })).toBe( 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)", () => { it("returns command unchanged when profile is Default (case-insensitive)", () => {
expect(formatCliCommand("clawdbot doctor --fix", { CLAWDBOT_PROFILE: "Default" })).toBe( expect(formatCliCommand("clawdbot doctor --fix", { CLAWDBOT_PROFILE: "Default" })).toBe(
"clawdbot doctor --fix", "moltbot doctor --fix",
); );
}); });
it("returns command unchanged when profile is invalid", () => { it("returns command unchanged when profile is invalid", () => {
expect(formatCliCommand("clawdbot doctor --fix", { CLAWDBOT_PROFILE: "bad profile" })).toBe( 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", () => { it("returns command unchanged when --profile is already present", () => {
expect( expect(
formatCliCommand("clawdbot --profile work doctor --fix", { CLAWDBOT_PROFILE: "work" }), 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", () => { it("returns command unchanged when --dev is already present", () => {
expect(formatCliCommand("clawdbot --dev doctor", { CLAWDBOT_PROFILE: "dev" })).toBe( expect(formatCliCommand("clawdbot --dev doctor", { CLAWDBOT_PROFILE: "dev" })).toBe(
"clawdbot --dev doctor", "moltbot --dev doctor",
); );
}); });
it("inserts --profile flag when profile is set", () => { it("inserts --profile flag when profile is set", () => {
expect(formatCliCommand("clawdbot doctor --fix", { CLAWDBOT_PROFILE: "work" })).toBe( expect(formatCliCommand("clawdbot doctor --fix", { CLAWDBOT_PROFILE: "work" })).toBe(
"clawdbot --profile work doctor --fix", "moltbot --profile work doctor --fix",
); );
}); });
it("trims whitespace from profile", () => { it("trims whitespace from profile", () => {
expect(formatCliCommand("clawdbot doctor --fix", { CLAWDBOT_PROFILE: " jbclawd " })).toBe( 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", () => { it("handles command with no args after clawdbot", () => {
expect(formatCliCommand("clawdbot", { CLAWDBOT_PROFILE: "test" })).toBe( expect(formatCliCommand("clawdbot", { CLAWDBOT_PROFILE: "test" })).toBe(
"clawdbot --profile test", "moltbot --profile test",
); );
}); });
it("handles pnpm wrapper", () => { it("handles pnpm wrapper", () => {
expect(formatCliCommand("pnpm clawdbot doctor", { CLAWDBOT_PROFILE: "work" })).toBe( expect(formatCliCommand("pnpm clawdbot doctor", { CLAWDBOT_PROFILE: "work" })).toBe(
"pnpm clawdbot --profile work doctor", "pnpm moltbot --profile work doctor",
); );
}); });
}); });

View File

@ -174,7 +174,7 @@ describe("cli program (nodes media)", () => {
const out = String(runtime.log.mock.calls[0]?.[0] ?? ""); const out = String(runtime.log.mock.calls[0]?.[0] ?? "");
const mediaPath = out.replace(/^MEDIA:/, "").trim(); const mediaPath = out.replace(/^MEDIA:/, "").trim();
expect(mediaPath).toMatch(/clawdbot-camera-clip-front-.*\.mp4$/); expect(mediaPath).toMatch(/moltbot-camera-clip-front-.*\.mp4$/);
try { try {
await expect(fs.readFile(mediaPath, "utf8")).resolves.toBe("hi"); 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 out = String(runtime.log.mock.calls[0]?.[0] ?? "");
const mediaPath = out.replace(/^MEDIA:/, "").trim(); const mediaPath = out.replace(/^MEDIA:/, "").trim();
expect(mediaPath).toMatch(/clawdbot-canvas-snapshot-.*\.png$/); expect(mediaPath).toMatch(/moltbot-canvas-snapshot-.*\.png$/);
try { try {
await expect(fs.readFile(mediaPath, "utf8")).resolves.toBe("hi"); await expect(fs.readFile(mediaPath, "utf8")).resolves.toBe("hi");

View File

@ -2,8 +2,11 @@ import type { Command } from "commander";
import { formatDocsLink } from "../../terminal/links.js"; import { formatDocsLink } from "../../terminal/links.js";
import { isRich, theme } from "../../terminal/theme.js"; import { isRich, theme } from "../../terminal/theme.js";
import { formatCliBannerLine, hasEmittedCliBanner } from "../banner.js"; import { formatCliBannerLine, hasEmittedCliBanner } from "../banner.js";
import { replaceCliName, resolveCliName } from "../cli-name.js";
import type { ProgramContext } from "./context.js"; import type { ProgramContext } from "./context.js";
const CLI_NAME = resolveCliName();
const EXAMPLES = [ const EXAMPLES = [
[ [
"clawdbot channels login --verbose", "clawdbot channels login --verbose",
@ -29,7 +32,7 @@ const EXAMPLES = [
export function configureProgramHelp(program: Command, ctx: ProgramContext) { export function configureProgramHelp(program: Command, ctx: ProgramContext) {
program program
.name("clawdbot") .name(CLI_NAME)
.description("") .description("")
.version(ctx.programVersion) .version(ctx.programVersion)
.option( .option(
@ -77,12 +80,12 @@ export function configureProgramHelp(program: Command, ctx: ProgramContext) {
}); });
const fmtExamples = EXAMPLES.map( 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"); ).join("\n");
program.addHelpText("afterAll", ({ command }) => { program.addHelpText("afterAll", ({ command }) => {
if (command !== program) return ""; 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`; return `\n${theme.heading("Examples:")}\n${fmtExamples}\n\n${theme.muted("Docs:")} ${docs}\n`;
}); });
} }

View File

@ -6,6 +6,7 @@ import { ensureConfigReady } from "./config-guard.js";
import { ensurePluginRegistryLoaded } from "../plugin-registry.js"; import { ensurePluginRegistryLoaded } from "../plugin-registry.js";
import { isTruthyEnvValue } from "../../infra/env.js"; import { isTruthyEnvValue } from "../../infra/env.js";
import { setVerbose } from "../../globals.js"; import { setVerbose } from "../../globals.js";
import { resolveCliName } from "../cli-name.js";
function setProcessTitleForCommand(actionCommand: Command) { function setProcessTitleForCommand(actionCommand: Command) {
let current: Command = actionCommand; let current: Command = actionCommand;
@ -13,8 +14,9 @@ function setProcessTitleForCommand(actionCommand: Command) {
current = current.parent; current = current.parent;
} }
const name = current.name(); const name = current.name();
if (!name || name === "clawdbot") return; const cliName = resolveCliName();
process.title = `clawdbot-${name}`; if (!name || name === cliName) return;
process.title = `${cliName}-${name}`;
} }
// Commands that need channel plugins loaded // Commands that need channel plugins loaded

View File

@ -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) => { .action(async (opts) => {
const verboseLevel = typeof opts.verbose === "string" ? opts.verbose.toLowerCase() : ""; 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( .addHelpText(
"after", "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 agents

View File

@ -16,7 +16,7 @@ export function registerConfigureCommand(program: Command) {
.addHelpText( .addHelpText(
"after", "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( .option(
"--section <section>", "--section <section>",

View File

@ -15,7 +15,7 @@ export function registerMaintenanceCommands(program: Command) {
.addHelpText( .addHelpText(
"after", "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("--no-workspace-suggestions", "Disable workspace memory system suggestions", false)
.option("--yes", "Accept defaults without prompting", false) .option("--yes", "Accept defaults without prompting", false)
@ -45,7 +45,7 @@ export function registerMaintenanceCommands(program: Command) {
.addHelpText( .addHelpText(
"after", "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) .option("--no-open", "Print URL but do not launch a browser", false)
.action(async (opts) => { .action(async (opts) => {
@ -62,7 +62,7 @@ export function registerMaintenanceCommands(program: Command) {
.addHelpText( .addHelpText(
"after", "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 <scope>", "config|config+creds+sessions|full (default: interactive prompt)") .option("--scope <scope>", "config|config+creds+sessions|full (default: interactive prompt)")
.option("--yes", "Skip confirmation prompts", false) .option("--yes", "Skip confirmation prompts", false)
@ -85,7 +85,7 @@ export function registerMaintenanceCommands(program: Command) {
.addHelpText( .addHelpText(
"after", "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("--service", "Remove the gateway service", false)
.option("--state", "Remove state + config", false) .option("--state", "Remove state + config", false)

View File

@ -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(() => { .action(() => {
message.help({ error: true }); message.help({ error: true });

View File

@ -38,7 +38,7 @@ export function registerOnboardCommand(program: Command) {
.addHelpText( .addHelpText(
"after", "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 <dir>", "Agent workspace directory (default: ~/clawd)") .option("--workspace <dir>", "Agent workspace directory (default: ~/clawd)")
.option("--reset", "Reset config + credentials + sessions + workspace before running wizard") .option("--reset", "Reset config + credentials + sessions + workspace before running wizard")

View File

@ -14,7 +14,7 @@ export function registerSetupCommand(program: Command) {
.addHelpText( .addHelpText(
"after", "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( .option(
"--workspace <dir>", "--workspace <dir>",

View File

@ -53,7 +53,7 @@ export function registerStatusHealthSessionsCommands(program: Command) {
.addHelpText( .addHelpText(
"after", "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) => { .action(async (opts) => {
const verbose = resolveVerbose(opts); const verbose = resolveVerbose(opts);
@ -87,7 +87,7 @@ export function registerStatusHealthSessionsCommands(program: Command) {
.addHelpText( .addHelpText(
"after", "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) => { .action(async (opts) => {
const verbose = resolveVerbose(opts); const verbose = resolveVerbose(opts);
@ -130,7 +130,7 @@ export function registerStatusHealthSessionsCommands(program: Command) {
.addHelpText( .addHelpText(
"after", "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) => { .action(async (opts) => {
setVerbose(Boolean(opts.verbose)); setVerbose(Boolean(opts.verbose));

View File

@ -68,7 +68,7 @@ export function registerSandboxCli(program: Command) {
.addHelpText( .addHelpText(
"after", "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(() => { .action(() => {
sandbox.help({ error: true }); sandbox.help({ error: true });

View File

@ -34,7 +34,7 @@ export function registerSecurityCli(program: Command) {
.addHelpText( .addHelpText(
"after", "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 security

View File

@ -337,7 +337,7 @@ export function registerSkillsCli(program: Command) {
.addHelpText( .addHelpText(
"after", "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 skills

View File

@ -23,7 +23,7 @@ export function registerSystemCli(program: Command) {
.addHelpText( .addHelpText(
"after", "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( addGatewayClientOptions(

View File

@ -20,7 +20,7 @@ export function registerTuiCli(program: Command) {
.option("--history-limit <n>", "History entries to load", "200") .option("--history-limit <n>", "History entries to load", "200")
.addHelpText( .addHelpText(
"after", "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) => { .action(async (opts) => {
try { try {

View File

@ -39,6 +39,7 @@ import { trimLogTail } from "../infra/restart-sentinel.js";
import { defaultRuntime } from "../runtime.js"; import { defaultRuntime } from "../runtime.js";
import { formatDocsLink } from "../terminal/links.js"; import { formatDocsLink } from "../terminal/links.js";
import { formatCliCommand } from "./command-format.js"; import { formatCliCommand } from "./command-format.js";
import { replaceCliName, resolveCliName } from "./cli-name.js";
import { stylePromptHint, stylePromptMessage } from "../terminal/prompt-style.js"; import { stylePromptHint, stylePromptMessage } from "../terminal/prompt-style.js";
import { theme } from "../terminal/theme.js"; import { theme } from "../terminal/theme.js";
import { renderTable } from "../terminal/table.js"; import { renderTable } from "../terminal/table.js";
@ -81,6 +82,7 @@ const STEP_LABELS: Record<string, string> = {
build: "Building", build: "Building",
"ui:build": "Building UI", "ui:build": "Building UI",
"clawdbot doctor": "Running doctor checks", "clawdbot doctor": "Running doctor checks",
"moltbot doctor": "Running doctor checks",
"git rev-parse HEAD (after)": "Verifying update", "git rev-parse HEAD (after)": "Verifying update",
"global update": "Updating via package manager", "global update": "Updating via package manager",
"global install": "Installing global package", "global install": "Installing global package",
@ -110,6 +112,9 @@ const UPDATE_QUIPS = [
]; ];
const MAX_LOG_CHARS = 8000; 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 CLAWDBOT_REPO_URL = "https://github.com/clawdbot/clawdbot.git";
const DEFAULT_GIT_DIR = path.join(os.homedir(), "clawdbot"); const DEFAULT_GIT_DIR = path.join(os.homedir(), "clawdbot");
@ -117,7 +122,11 @@ function normalizeTag(value?: string | null): string | null {
if (!value) return null; if (!value) return null;
const trimmed = value.trim(); const trimmed = value.trim();
if (!trimmed) return null; 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 { function pickUpdateQuip(): string {
@ -157,16 +166,22 @@ async function isGitCheckout(root: string): Promise<boolean> {
} }
} }
async function isClawdbotPackage(root: string): Promise<boolean> { async function readPackageName(root: string): Promise<string | null> {
try { try {
const raw = await fs.readFile(path.join(root, "package.json"), "utf-8"); const raw = await fs.readFile(path.join(root, "package.json"), "utf-8");
const parsed = JSON.parse(raw) as { name?: string }; const parsed = JSON.parse(raw) as { name?: string };
return parsed?.name === "clawdbot"; const name = parsed?.name?.trim();
return name ? name : null;
} catch { } catch {
return false; return null;
} }
} }
async function isCorePackage(root: string): Promise<boolean> {
const name = await readPackageName(root);
return Boolean(name && CORE_PACKAGE_NAMES.has(name));
}
async function pathExists(targetPath: string): Promise<boolean> { async function pathExists(targetPath: string): Promise<boolean> {
try { try {
await fs.stat(targetPath); await fs.stat(targetPath);
@ -269,8 +284,8 @@ async function ensureGitCheckout(params: {
}); });
} }
if (!(await isClawdbotPackage(params.dir))) { if (!(await isCorePackage(params.dir))) {
throw new Error(`CLAWDBOT_GIT_DIR does not look like a clawdbot checkout: ${params.dir}.`); throw new Error(`CLAWDBOT_GIT_DIR does not look like a core checkout: ${params.dir}.`);
} }
return null; return null;
@ -691,10 +706,13 @@ export async function updateCommand(opts: UpdateCommandOptions): Promise<void> {
return { stdout: res.stdout, stderr: res.stderr, code: res.code }; return { stdout: res.stdout, stderr: res.stderr, code: res.code };
}; };
const pkgRoot = await resolveGlobalPackageRoot(manager, runCommand, timeoutMs ?? 20 * 60_000); 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 beforeVersion = pkgRoot ? await readPackageVersion(pkgRoot) : null;
const updateStep = await runUpdateStep({ const updateStep = await runUpdateStep({
name: "global update", name: "global update",
argv: globalInstallArgs(manager, `clawdbot@${tag}`), argv: globalInstallArgs(manager, `${packageName}@${tag}`),
timeoutMs: timeoutMs ?? 20 * 60_000, timeoutMs: timeoutMs ?? 20 * 60_000,
progress, progress,
}); });
@ -705,7 +723,7 @@ export async function updateCommand(opts: UpdateCommandOptions): Promise<void> {
const entryPath = path.join(pkgRoot, "dist", "entry.js"); const entryPath = path.join(pkgRoot, "dist", "entry.js");
if (await pathExists(entryPath)) { if (await pathExists(entryPath)) {
const doctorStep = await runUpdateStep({ const doctorStep = await runUpdateStep({
name: "clawdbot doctor", name: `${CLI_NAME} doctor`,
argv: [resolveNodeRunner(), entryPath, "doctor", "--non-interactive"], argv: [resolveNodeRunner(), entryPath, "doctor", "--non-interactive"],
timeoutMs: timeoutMs ?? 20 * 60_000, timeoutMs: timeoutMs ?? 20 * 60_000,
progress, progress,
@ -806,11 +824,13 @@ export async function updateCommand(opts: UpdateCommandOptions): Promise<void> {
if (result.reason === "not-git-install") { if (result.reason === "not-git-install") {
defaultRuntime.log( defaultRuntime.log(
theme.warn( 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( 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); defaultRuntime.exit(0);
@ -926,7 +946,7 @@ export async function updateCommand(opts: UpdateCommandOptions): Promise<void> {
defaultRuntime.log(theme.warn(`Daemon restart failed: ${String(err)}`)); defaultRuntime.log(theme.warn(`Daemon restart failed: ${String(err)}`));
defaultRuntime.log( defaultRuntime.log(
theme.muted( 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<void> {
if (result.mode === "npm" || result.mode === "pnpm") { if (result.mode === "npm" || result.mode === "pnpm") {
defaultRuntime.log( defaultRuntime.log(
theme.muted( 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 { } else {
defaultRuntime.log( defaultRuntime.log(
theme.muted( 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) - Downgrades require confirmation (can break configuration)
- Skips update if the working directory has uncommitted changes - 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) => { .action(async (opts) => {
try { try {
@ -1161,7 +1181,7 @@ ${theme.muted("Docs:")} ${formatDocsLink("/cli/update", "docs.clawd.bot/cli/upda
.option("--timeout <seconds>", "Timeout for each update step in seconds (default: 1200)") .option("--timeout <seconds>", "Timeout for each update step in seconds (default: 1200)")
.addHelpText( .addHelpText(
"after", "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) => { .action(async (opts) => {
try { 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", "- Shows current update channel (stable/beta/dev) and source",
)}\n${theme.muted("- Includes git tag/branch/SHA for source checkouts")}\n\n${theme.muted( )}\n${theme.muted("- Includes git tag/branch/SHA for source checkouts")}\n\n${theme.muted(
"Docs:", "Docs:",
)} ${formatDocsLink("/cli/update", "docs.clawd.bot/cli/update")}`, )} ${formatDocsLink("/cli/update", "docs.molt.bot/cli/update")}`,
) )
.action(async (opts) => { .action(async (opts) => {
try { try {

View File

@ -28,7 +28,7 @@ export function registerWebhooksCli(program: Command) {
.addHelpText( .addHelpText(
"after", "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)"); const gmail = webhooks.command("gmail").description("Gmail Pub/Sub hooks (via gogcli)");

View File

@ -326,7 +326,7 @@ export async function agentsAddCommand(
await prompter.note( await prompter.note(
[ [
"Routing unchanged. Add bindings when you're ready.", "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"), ].join("\n"),
"Routing", "Routing",
); );

Some files were not shown because too many files have changed in this diff Show More