diff --git a/docs/RELEASING.md b/docs/RELEASING.md index db9b1e009..4fcf9c93f 100644 --- a/docs/RELEASING.md +++ b/docs/RELEASING.md @@ -36,9 +36,9 @@ Use `pnpm` (Node 22+) from the repo root. Keep the working tree clean before tag - [ ] Build + sign the macOS app, then zip it for distribution. - [ ] Generate the Sparkle appcast (HTML notes via `scripts/make_appcast.sh`) and update `appcast.xml`. - [ ] Keep the app zip (and optional dSYM zip) ready to attach to the GitHub release. -- [ ] Follow `docs/mac/release.md` for the exact commands and required env vars. +- [ ] Follow [`docs/mac/release.md`](https://docs.clawd.bot/mac/release) for the exact commands and required env vars. - `APP_BUILD` must be numeric + monotonic (no `-beta`) so Sparkle compares versions correctly. - - If notarizing, use the `clawdbot-notary` keychain profile created from App Store Connect API env vars (see `docs/mac/release.md`). + - If notarizing, use the `clawdbot-notary` keychain profile created from App Store Connect API env vars (see [`docs/mac/release.md`](https://docs.clawd.bot/mac/release)). 6) **Publish (npm)** - [ ] Confirm git status is clean; commit and push as needed. diff --git a/docs/agent.md b/docs/agent.md index 632994ebf..e4d870112 100644 --- a/docs/agent.md +++ b/docs/agent.md @@ -15,7 +15,7 @@ Recommended: use `clawdbot setup` to create `~/.clawdbot/clawdbot.json` if missi If `agent.sandbox` is enabled, non-main sessions can override this with per-session workspaces under `agent.sandbox.workspaceRoot` (see -`docs/configuration.md`). +[`docs/configuration.md`](https://docs.clawd.bot/configuration)). ## Bootstrap files (injected) @@ -42,7 +42,7 @@ Clawdbot loads skills from three locations (workspace wins on name conflict): - Managed/local: `~/.clawdbot/skills` - Workspace: `/skills` -Skills can be gated by config/env (see `skills` in `docs/configuration.md`). +Skills can be gated by config/env (see `skills` in [`docs/configuration.md`](https://docs.clawd.bot/configuration)). ## p-mono integration @@ -81,7 +81,7 @@ message is injected before the next assistant response. When queue mode is `followup` or `collect`, inbound messages are held until the current turn ends, then a new agent turn starts with the queued payloads. See -`docs/queue.md` for mode + debounce/cap behavior. +[`docs/queue.md`](https://docs.clawd.bot/queue) for mode + debounce/cap behavior. Block streaming sends completed assistant blocks as soon as they finish; disable via `agent.blockStreamingDefault: "off"` if you only want the final response. @@ -99,4 +99,4 @@ At minimum, set: --- -*Next: [Group Chats](group-messages)* 🦞 +*Next: [Group Chats](https://docs.clawd.bot/group-messages)* 🦞 diff --git a/docs/android.md b/docs/android.md index ea09269e5..b33760e98 100644 --- a/docs/android.md +++ b/docs/android.md @@ -47,7 +47,7 @@ From the gateway machine: dns-sd -B _clawdbot-bridge._tcp local. ``` -More debugging notes: `docs/bonjour.md`. +More debugging notes: [`docs/bonjour.md`](https://docs.clawd.bot/bonjour). #### Tailnet (Vienna ⇄ London) discovery via unicast DNS-SD @@ -56,7 +56,7 @@ Android NSD/mDNS discovery won’t cross networks. If your Android node and the 1) Set up a DNS-SD zone (example `clawdbot.internal.`) on the gateway host and publish `_clawdbot-bridge._tcp` records. 2) Configure Tailscale split DNS for `clawdbot.internal` pointing at that DNS server. -Details and example CoreDNS config: `docs/bonjour.md`. +Details and example CoreDNS config: [`docs/bonjour.md`](https://docs.clawd.bot/bonjour). ### 3) Connect from Android @@ -80,7 +80,7 @@ clawdbot nodes pending clawdbot nodes approve ``` -Pairing details: `docs/gateway/pairing.md`. +Pairing details: [`docs/gateway/pairing.md`](https://docs.clawd.bot/gateway/pairing). ### 5) Verify the node is connected @@ -130,4 +130,4 @@ Camera commands (foreground only; permission-gated): - `camera.snap` (jpg) - `camera.clip` (mp4) -See `docs/camera.md` for parameters and CLI helpers. +See [`docs/camera.md`](https://docs.clawd.bot/camera) for parameters and CLI helpers. diff --git a/docs/architecture.md b/docs/architecture.md index ee98631ae..5182ddd9d 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -46,7 +46,7 @@ Last updated: 2026-01-05 - **Clients (mac app / CLI / web admin)** - One WS connection per client. - Send requests (`health`, `status`, `send`, `agent`, `system-presence`, toggles) and subscribe to events (`tick`, `agent`, `presence`, `shutdown`). - - On macOS, the app can also be invoked via deep links (`clawdbot://agent?...`) which translate into the same Gateway `agent` request path (see `docs/macos.md`). + - On macOS, the app can also be invoked via deep links (`clawdbot://agent?...`) which translate into the same Gateway `agent` request path (see [`docs/macos.md`](https://docs.clawd.bot/macos)). - **Agent process (Pi)** - Spawned by the Gateway on demand for `agent` calls; streams events back over the same WS connection. - **WebChat** diff --git a/docs/bonjour.md b/docs/bonjour.md index 1e44ddd88..a913b674e 100644 --- a/docs/bonjour.md +++ b/docs/bonjour.md @@ -155,5 +155,5 @@ Bonjour/DNS-SD often escapes bytes in service instance names as decimal `\\DDD` ## Related docs -- Discovery policy and transport selection: `docs/discovery.md` -- Node pairing + approvals: `docs/gateway/pairing.md` +- Discovery policy and transport selection: [`docs/discovery.md`](https://docs.clawd.bot/discovery) +- Node pairing + approvals: [`docs/gateway/pairing.md`](https://docs.clawd.bot/gateway/pairing) diff --git a/docs/browser.md b/docs/browser.md index 5684d7c17..973c16c37 100644 --- a/docs/browser.md +++ b/docs/browser.md @@ -290,4 +290,4 @@ Notes: ## Troubleshooting -For Linux-specific issues (especially Ubuntu with snap Chromium), see [browser-linux-troubleshooting.md](./browser-linux-troubleshooting.md). +For Linux-specific issues (especially Ubuntu with snap Chromium), see [browser-linux-troubleshooting](https://docs.clawd.bot/browser-linux-troubleshooting). diff --git a/docs/clawd.md b/docs/clawd.md index 835f143f5..b78cb8bb6 100644 --- a/docs/clawd.md +++ b/docs/clawd.md @@ -191,12 +191,12 @@ Logs live under `/tmp/clawdbot/` (default: `clawdbot-YYYY-MM-DD.log`). ## Next steps -- WebChat: [WebChat](webchat) -- Gateway ops: [Gateway runbook](gateway) -- Cron + wakeups: [Cron + wakeups](cron) -- macOS menu bar companion: [Clawdbot macOS app](macos) -- iOS node app: [iOS app](ios) -- Android node app: [Android app](android) -- Windows status: [Windows app](windows) -- Linux status: [Linux app](linux) -- Security: [Security](security) +- WebChat: [WebChat](https://docs.clawd.bot/webchat) +- Gateway ops: [Gateway runbook](https://docs.clawd.bot/gateway) +- Cron + wakeups: [Cron + wakeups](https://docs.clawd.bot/cron) +- macOS menu bar companion: [Clawdbot macOS app](https://docs.clawd.bot/macos) +- iOS node app: [iOS app](https://docs.clawd.bot/ios) +- Android node app: [Android app](https://docs.clawd.bot/android) +- Windows status: [Windows app](https://docs.clawd.bot/windows) +- Linux status: [Linux app](https://docs.clawd.bot/linux) +- Security: [Security](https://docs.clawd.bot/security) diff --git a/docs/configuration.md b/docs/configuration.md index 1f1f8976b..5b5297ea6 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -1160,7 +1160,7 @@ Convenience flags (CLI): - `clawdbot --dev …` → uses `~/.clawdbot-dev` + shifts ports from base `19001` - `clawdbot --profile …` → uses `~/.clawdbot-` (port via config/env/flags) -See `docs/gateway.md` for the derived port mapping (gateway/bridge/browser/canvas). +See [`docs/gateway.md`](https://docs.clawd.bot/gateway) for the derived port mapping (gateway/bridge/browser/canvas). Example: ```bash @@ -1356,7 +1356,7 @@ Template placeholders are expanded in `routing.transcribeAudio.command` (and any ## Cron (Gateway scheduler) -Cron is a Gateway-owned scheduler for wakeups and scheduled jobs. See [Cron + wakeups](cron) for the full RFC and CLI examples. +Cron is a Gateway-owned scheduler for wakeups and scheduled jobs. See [Cron + wakeups](https://docs.clawd.bot/cron) for the full RFC and CLI examples. ```json5 { @@ -1369,4 +1369,4 @@ Cron is a Gateway-owned scheduler for wakeups and scheduled jobs. See [Cron + wa --- -*Next: [Agent Runtime](agent)* 🦞 +*Next: [Agent Runtime](https://docs.clawd.bot/agent)* 🦞 diff --git a/docs/control-api.md b/docs/control-api.md index 1708f6543..936065444 100644 --- a/docs/control-api.md +++ b/docs/control-api.md @@ -5,7 +5,7 @@ read_when: --- # Control channel API (newline-delimited JSON) -**Deprecated (historical):** superseded by the WebSocket Gateway protocol (`clawdbot gateway`, see `docs/architecture.md` and `docs/gateway.md`). +**Deprecated (historical):** superseded by the WebSocket Gateway protocol (`clawdbot gateway`, see [`docs/architecture.md`](https://docs.clawd.bot/architecture) and [`docs/gateway.md`](https://docs.clawd.bot/gateway)). Current builds use a WebSocket server on `ws://127.0.0.1:18789` and do **not** expose this TCP control channel. Legacy endpoint (if present in an older build): `127.0.0.1:18789` (TCP, localhost only), typically reached via SSH port forward in remote mode. diff --git a/docs/cron.md b/docs/cron.md index 374086e68..a981880d8 100644 --- a/docs/cron.md +++ b/docs/cron.md @@ -16,7 +16,7 @@ Last updated: 2025-12-13 Clawdbot already has: - A **gateway heartbeat runner** that runs the agent with `HEARTBEAT` and suppresses `HEARTBEAT_OK` (`src/infra/heartbeat-runner.ts`). - A lightweight, in-memory **system event queue** (`enqueueSystemEvent`) that is injected into the next **main session** turn (`drainSystemEvents` in `src/auto-reply/reply.ts`). -- A WebSocket **Gateway** daemon that is intended to be always-on (`docs/gateway.md`). +- A WebSocket **Gateway** daemon that is intended to be always-on ([`docs/gateway.md`](https://docs.clawd.bot/gateway)). This RFC adds a small “cron job system” so Clawd can schedule future work and reliably wake itself up: - **Delayed**: run on the *next* normal heartbeat tick diff --git a/docs/dashboard.md b/docs/dashboard.md index e859fb7c7..e44a1c72b 100644 --- a/docs/dashboard.md +++ b/docs/dashboard.md @@ -9,9 +9,9 @@ The Gateway dashboard is the browser Control UI served at `/` by default (override with `gateway.controlUi.basePath`). Key references: -- `docs/control-ui.md` for usage and UI capabilities. -- `docs/tailscale.md` for Serve/Funnel automation. -- `docs/web.md` for bind modes and security notes. +- [`docs/control-ui.md`](https://docs.clawd.bot/control-ui) for usage and UI capabilities. +- [`docs/tailscale.md`](https://docs.clawd.bot/tailscale) for Serve/Funnel automation. +- [`docs/web.md`](https://docs.clawd.bot/web) for bind modes and security notes. Authentication is enforced at the WebSocket handshake via `connect.params.auth` -(token or password). See `gateway.auth` in `docs/configuration.md`. +(token or password). See `gateway.auth` in [`docs/configuration.md`](https://docs.clawd.bot/configuration). diff --git a/docs/discovery.md b/docs/discovery.md index bbe782ab8..bc7f8a4fb 100644 --- a/docs/discovery.md +++ b/docs/discovery.md @@ -42,7 +42,7 @@ Target direction: - The **gateway** advertises its bridge via Bonjour. - Clients browse and show a “pick a gateway” list, then store the chosen endpoint. -Troubleshooting and beacon details: `docs/bonjour.md`. +Troubleshooting and beacon details: [`docs/bonjour.md`](https://docs.clawd.bot/bonjour). #### Current implementation @@ -77,7 +77,7 @@ If the gateway can detect it is running under Tailscale, it publishes `tailnetDn When there is no direct route (or direct is disabled), clients can always connect via SSH by forwarding the loopback gateway port. -See `docs/remote.md`. +See [`docs/remote.md`](https://docs.clawd.bot/remote). ## Transport selection (client policy) @@ -92,7 +92,7 @@ Recommended client behavior: The gateway is the source of truth for node/client admission. -- Pairing requests are created/approved/rejected in the gateway (see `docs/gateway/pairing.md`). +- Pairing requests are created/approved/rejected in the gateway (see [`docs/gateway/pairing.md`](https://docs.clawd.bot/gateway/pairing)). - The bridge enforces: - auth (token / keypair) - scopes/ACLs (bridge is not a raw proxy to every gateway method) diff --git a/docs/faq.md b/docs/faq.md index 957c78888..493057c68 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -3,7 +3,7 @@ summary: "Frequently asked questions about Clawdbot setup, configuration, and us --- # FAQ 🦞 -Common questions from the community. For detailed configuration, see [configuration.md](configuration). +Common questions from the community. For detailed configuration, see [Configuration](https://docs.clawd.bot/configuration). ## Installation & Setup @@ -290,7 +290,7 @@ Per-group activation can be changed by the owner: - `/activation mention` — respond only when mentioned (default) - `/activation always` — respond to all messages -See [groups.md](groups) for details. +See [Groups](https://docs.clawd.bot/groups) for details. --- @@ -327,7 +327,7 @@ cat ~/.clawdbot/clawdbot.json | grep workspace - **Telegram** — Via Bot API (grammY). - **Discord** — Bot integration. - **iMessage** — Via `imsg` CLI (macOS only). -- **Signal** — Via `signal-cli` (see [signal.md](signal)). +- **Signal** — Via `signal-cli` (see [Signal](https://docs.clawd.bot/signal)). - **WebChat** — Browser-based chat UI. ### Discord: Bot works in channels but not DMs? diff --git a/docs/gateway.md b/docs/gateway.md index 6a3eb4e54..8ea6b285a 100644 --- a/docs/gateway.md +++ b/docs/gateway.md @@ -111,7 +111,7 @@ CLAWDBOT_CONFIG_PATH=~/.clawdbot/b.json CLAWDBOT_STATE_DIR=~/.clawdbot-b clawdbo - `node.invoke` — invoke a command on a node (e.g. `canvas.*`, `camera.*`). - `node.pair.*` — pairing lifecycle (`request`, `list`, `approve`, `reject`, `verify`). -See also: `docs/presence.md` for how presence is produced/deduped and why `instanceId` matters. +See also: [`docs/presence.md`](https://docs.clawd.bot/presence) for how presence is produced/deduped and why `instanceId` matters. ## Events - `agent` — streamed tool/output events from the agent run (seq-tagged). diff --git a/docs/gmail-pubsub.md b/docs/gmail-pubsub.md index 63aa0333c..94961b2f0 100644 --- a/docs/gmail-pubsub.md +++ b/docs/gmail-pubsub.md @@ -13,7 +13,7 @@ Goal: Gmail watch -> Pub/Sub push -> `gog gmail watch serve` -> Clawdbot webhook - `gcloud` installed and logged in. - `gog` (gogcli) installed and authorized for the Gmail account. -- Clawdbot hooks enabled (see `docs/webhook.md`). +- Clawdbot hooks enabled (see [`docs/webhook.md`](https://docs.clawd.bot/webhook)). - `tailscale` logged in if you want a public HTTPS endpoint via Funnel. Example hook config (enable Gmail preset mapping): @@ -30,7 +30,7 @@ Example hook config (enable Gmail preset mapping): ``` To customize payload handling, add `hooks.mappings` or a JS/TS transform module -under `hooks.transformsDir` (see `docs/webhook.md`). +under `hooks.transformsDir` (see [`docs/webhook.md`](https://docs.clawd.bot/webhook)). ## Wizard (recommended) diff --git a/docs/groups.md b/docs/groups.md index a4fd17dfd..05527f9d0 100644 --- a/docs/groups.md +++ b/docs/groups.md @@ -127,4 +127,4 @@ The agent system prompt includes a group intro on the first turn of a new group - Group replies always go back to the same `chat_id`. ## WhatsApp specifics -See `docs/group-messages.md` for WhatsApp-only behavior (history injection, mention handling details). +See [`docs/group-messages.md`](https://docs.clawd.bot/group-messages) for WhatsApp-only behavior (history injection, mention handling details). diff --git a/docs/hubs.md b/docs/hubs.md index cd9a9e16d..64de4086e 100644 --- a/docs/hubs.md +++ b/docs/hubs.md @@ -9,140 +9,140 @@ Use these hubs to discover every page, including deep dives and reference docs t ## Start here -- [Index](./index.md) -- [Onboarding](./onboarding.md) -- [Wizard](./wizard.md) -- [Setup](./setup.md) -- [FAQ](./faq.md) -- [Configuration](./configuration.md) -- [Clawd (personal assistant)](./clawd.md) -- [Lore](./lore.md) +- [Index](https://docs.clawd.bot) +- [Onboarding](https://docs.clawd.bot/onboarding) +- [Wizard](https://docs.clawd.bot/wizard) +- [Setup](https://docs.clawd.bot/setup) +- [FAQ](https://docs.clawd.bot/faq) +- [Configuration](https://docs.clawd.bot/configuration) +- [Clawd (personal assistant)](https://docs.clawd.bot/clawd) +- [Lore](https://docs.clawd.bot/lore) ## Installation + distribution -- [Docker](./docker.md) -- [Nix](./nix.md) +- [Docker](https://docs.clawd.bot/docker) +- [Nix](https://docs.clawd.bot/nix) ## Core concepts -- [Architecture](./architecture.md) -- [Agent runtime](./agent.md) -- [Agent loop](./agent-loop.md) -- [Sessions](./session.md) -- [Sessions (alias)](./sessions.md) -- [Session tools](./session-tool.md) -- [Queue](./queue.md) -- [RPC adapters](./rpc.md) -- [TypeBox schemas](./typebox.md) -- [Presence](./presence.md) -- [Discovery + transports](./discovery.md) -- [Bonjour](./bonjour.md) -- [Surface routing](./surface.md) -- [Groups](./groups.md) -- [Group messages](./group-messages.md) +- [Architecture](https://docs.clawd.bot/architecture) +- [Agent runtime](https://docs.clawd.bot/agent) +- [Agent loop](https://docs.clawd.bot/agent-loop) +- [Sessions](https://docs.clawd.bot/session) +- [Sessions (alias)](https://docs.clawd.bot/sessions) +- [Session tools](https://docs.clawd.bot/session-tool) +- [Queue](https://docs.clawd.bot/queue) +- [RPC adapters](https://docs.clawd.bot/rpc) +- [TypeBox schemas](https://docs.clawd.bot/typebox) +- [Presence](https://docs.clawd.bot/presence) +- [Discovery + transports](https://docs.clawd.bot/discovery) +- [Bonjour](https://docs.clawd.bot/bonjour) +- [Surface routing](https://docs.clawd.bot/surface) +- [Groups](https://docs.clawd.bot/groups) +- [Group messages](https://docs.clawd.bot/group-messages) ## Providers + ingress -- [WhatsApp](./whatsapp.md) -- [Telegram](./telegram.md) -- [Telegram (grammY notes)](./grammy.md) -- [Slack](./slack.md) -- [Discord](./discord.md) -- [Signal](./signal.md) -- [iMessage](./imessage.md) -- [WebChat](./webchat.md) -- [Webhooks](./webhook.md) -- [Gmail Pub/Sub](./gmail-pubsub.md) +- [WhatsApp](https://docs.clawd.bot/whatsapp) +- [Telegram](https://docs.clawd.bot/telegram) +- [Telegram (grammY notes)](https://docs.clawd.bot/grammy) +- [Slack](https://docs.clawd.bot/slack) +- [Discord](https://docs.clawd.bot/discord) +- [Signal](https://docs.clawd.bot/signal) +- [iMessage](https://docs.clawd.bot/imessage) +- [WebChat](https://docs.clawd.bot/webchat) +- [Webhooks](https://docs.clawd.bot/webhook) +- [Gmail Pub/Sub](https://docs.clawd.bot/gmail-pubsub) ## Gateway + operations -- [Gateway runbook](./gateway.md) -- [Gateway pairing](./gateway/pairing.md) -- [Gateway lock](./gateway-lock.md) -- [Background process](./background-process.md) -- [Health](./health.md) -- [Heartbeat](./heartbeat.md) -- [Doctor](./doctor.md) -- [Logging](./logging.md) -- [Dashboard](./dashboard.md) -- [Control UI](./control-ui.md) -- [Control API (legacy)](./control-api.md) -- [Remote access](./remote.md) -- [Remote gateway README](./remote-gateway-readme.md) -- [Tailscale](./tailscale.md) -- [Security](./security.md) -- [Troubleshooting](./troubleshooting.md) +- [Gateway runbook](https://docs.clawd.bot/gateway) +- [Gateway pairing](https://docs.clawd.bot/gateway/pairing) +- [Gateway lock](https://docs.clawd.bot/gateway-lock) +- [Background process](https://docs.clawd.bot/background-process) +- [Health](https://docs.clawd.bot/health) +- [Heartbeat](https://docs.clawd.bot/heartbeat) +- [Doctor](https://docs.clawd.bot/doctor) +- [Logging](https://docs.clawd.bot/logging) +- [Dashboard](https://docs.clawd.bot/dashboard) +- [Control UI](https://docs.clawd.bot/control-ui) +- [Control API (legacy)](https://docs.clawd.bot/control-api) +- [Remote access](https://docs.clawd.bot/remote) +- [Remote gateway README](https://docs.clawd.bot/remote-gateway-readme) +- [Tailscale](https://docs.clawd.bot/tailscale) +- [Security](https://docs.clawd.bot/security) +- [Troubleshooting](https://docs.clawd.bot/troubleshooting) ## Tools + automation -- [Tools surface](./tools.md) -- [Bash tool](./bash.md) -- [Elevated mode](./elevated.md) -- [Cron + wakeups](./cron.md) -- [Thinking + verbose](./thinking.md) -- [Models](./models.md) -- [Agent send CLI](./agent-send.md) -- [Terminal UI](./tui.md) -- [Browser control](./browser.md) -- [Browser (Linux troubleshooting)](./browser-linux-troubleshooting.md) +- [Tools surface](https://docs.clawd.bot/tools) +- [Bash tool](https://docs.clawd.bot/bash) +- [Elevated mode](https://docs.clawd.bot/elevated) +- [Cron + wakeups](https://docs.clawd.bot/cron) +- [Thinking + verbose](https://docs.clawd.bot/thinking) +- [Models](https://docs.clawd.bot/models) +- [Agent send CLI](https://docs.clawd.bot/agent-send) +- [Terminal UI](https://docs.clawd.bot/tui) +- [Browser control](https://docs.clawd.bot/browser) +- [Browser (Linux troubleshooting)](https://docs.clawd.bot/browser-linux-troubleshooting) ## Nodes, media, voice -- [Nodes overview](./nodes.md) -- [Camera](./camera.md) -- [Images](./images.md) -- [Audio](./audio.md) -- [Location command](./location-command.md) -- [Voice wake](./voicewake.md) -- [Talk mode](./talk.md) +- [Nodes overview](https://docs.clawd.bot/nodes) +- [Camera](https://docs.clawd.bot/camera) +- [Images](https://docs.clawd.bot/images) +- [Audio](https://docs.clawd.bot/audio) +- [Location command](https://docs.clawd.bot/location-command) +- [Voice wake](https://docs.clawd.bot/voicewake) +- [Talk mode](https://docs.clawd.bot/talk) ## Platforms -- [macOS app overview](./macos.md) -- [macOS dev setup](./mac/dev-setup.md) -- [macOS menu bar](./mac/menu-bar.md) -- [macOS voice wake](./mac/voicewake.md) -- [macOS voice overlay](./mac/voice-overlay.md) -- [macOS WebChat](./mac/webchat.md) -- [macOS Canvas](./mac/canvas.md) -- [macOS child process](./mac/child-process.md) -- [macOS health](./mac/health.md) -- [macOS icon](./mac/icon.md) -- [macOS logging](./mac/logging.md) -- [macOS permissions](./mac/permissions.md) -- [macOS remote](./mac/remote.md) -- [macOS signing](./mac/signing.md) -- [macOS release](./mac/release.md) -- [macOS bun gateway](./mac/bun.md) -- [macOS XPC](./mac/xpc.md) -- [macOS skills](./mac/skills.md) -- [macOS Peekaboo plan](./mac/peekaboo.md) -- [iOS node](./ios.md) -- [Android node](./android.md) -- [Windows app](./windows.md) -- [Linux app](./linux.md) -- [Web surfaces](./web.md) +- [macOS app overview](https://docs.clawd.bot/macos) +- [macOS dev setup](https://docs.clawd.bot/mac/dev-setup) +- [macOS menu bar](https://docs.clawd.bot/mac/menu-bar) +- [macOS voice wake](https://docs.clawd.bot/mac/voicewake) +- [macOS voice overlay](https://docs.clawd.bot/mac/voice-overlay) +- [macOS WebChat](https://docs.clawd.bot/mac/webchat) +- [macOS Canvas](https://docs.clawd.bot/mac/canvas) +- [macOS child process](https://docs.clawd.bot/mac/child-process) +- [macOS health](https://docs.clawd.bot/mac/health) +- [macOS icon](https://docs.clawd.bot/mac/icon) +- [macOS logging](https://docs.clawd.bot/mac/logging) +- [macOS permissions](https://docs.clawd.bot/mac/permissions) +- [macOS remote](https://docs.clawd.bot/mac/remote) +- [macOS signing](https://docs.clawd.bot/mac/signing) +- [macOS release](https://docs.clawd.bot/mac/release) +- [macOS bun gateway](https://docs.clawd.bot/mac/bun) +- [macOS XPC](https://docs.clawd.bot/mac/xpc) +- [macOS skills](https://docs.clawd.bot/mac/skills) +- [macOS Peekaboo plan](https://docs.clawd.bot/mac/peekaboo) +- [iOS node](https://docs.clawd.bot/ios) +- [Android node](https://docs.clawd.bot/android) +- [Windows app](https://docs.clawd.bot/windows) +- [Linux app](https://docs.clawd.bot/linux) +- [Web surfaces](https://docs.clawd.bot/web) ## Workspace + templates -- [Skills](./skills.md) -- [Skills config](./skills-config.md) -- [Default AGENTS](./AGENTS.default.md) -- [Templates: AGENTS](./templates/AGENTS.md) -- [Templates: BOOTSTRAP](./templates/BOOTSTRAP.md) -- [Templates: IDENTITY](./templates/IDENTITY.md) -- [Templates: SOUL](./templates/SOUL.md) -- [Templates: TOOLS](./templates/TOOLS.md) -- [Templates: USER](./templates/USER.md) +- [Skills](https://docs.clawd.bot/skills) +- [Skills config](https://docs.clawd.bot/skills-config) +- [Default AGENTS](https://docs.clawd.bot/AGENTS.default) +- [Templates: AGENTS](https://docs.clawd.bot/templates/AGENTS) +- [Templates: BOOTSTRAP](https://docs.clawd.bot/templates/BOOTSTRAP) +- [Templates: IDENTITY](https://docs.clawd.bot/templates/IDENTITY) +- [Templates: SOUL](https://docs.clawd.bot/templates/SOUL) +- [Templates: TOOLS](https://docs.clawd.bot/templates/TOOLS) +- [Templates: USER](https://docs.clawd.bot/templates/USER) ## Experiments + proposals -- [Onboarding config protocol](./onboarding-config-protocol.md) -- [Research: memory](./research/memory.md) -- [Proposal: model config](./proposals/model-config.md) +- [Onboarding config protocol](https://docs.clawd.bot/onboarding-config-protocol) +- [Research: memory](https://docs.clawd.bot/research/memory) +- [Proposal: model config](https://docs.clawd.bot/proposals/model-config) ## Testing + release -- [Testing](./test.md) -- [Release checklist](./RELEASING.md) -- [Device models](./device-models.md) +- [Testing](https://docs.clawd.bot/test) +- [Release checklist](https://docs.clawd.bot/RELEASING) +- [Device models](https://docs.clawd.bot/device-models) diff --git a/docs/index.md b/docs/index.md index 94d8310f0..b6c302e04 100644 --- a/docs/index.md +++ b/docs/index.md @@ -19,8 +19,8 @@ read_when:

GitHub · Releases · - Docs · - Clawd setup + Docs · + Clawd setup

CLAWDBOT bridges WhatsApp (via WhatsApp Web / Baileys), Telegram (Bot API / grammY), Discord (Bot API / discord.js), and iMessage (imsg CLI) to coding agents like [Pi](https://github.com/badlogic/pi-mono). @@ -54,8 +54,8 @@ Most operations flow through the **Gateway** (`clawdbot gateway`), a single long - **Loopback-first**: Gateway WS defaults to `ws://127.0.0.1:18789`. - For Tailnet access, run `clawdbot gateway --bind tailnet --token ...` (token is required for non-loopback binds). - **Bridge for nodes**: optional LAN/tailnet-facing bridge on `tcp://0.0.0.0:18790` for paired nodes (Bonjour-discoverable). -- **Canvas host**: HTTP file server on `canvasHost.port` (default `18793`), serving `/__clawdbot__/canvas/` for node WebViews; see `docs/configuration.md` (`canvasHost`). -- **Remote use**: SSH tunnel or tailnet/VPN; see `docs/remote.md` and `docs/discovery.md`. +- **Canvas host**: HTTP file server on `canvasHost.port` (default `18793`), serving `/__clawdbot__/canvas/` for node WebViews; see [`docs/configuration.md`](https://docs.clawd.bot/configuration) (`canvasHost`). +- **Remote use**: SSH tunnel or tailnet/VPN; see [`docs/remote.md`](https://docs.clawd.bot/remote) and [`docs/discovery.md`](https://docs.clawd.bot/discovery). ## Features (high level) @@ -128,41 +128,41 @@ Example: ## Docs - Start here: - - [Docs hubs (all pages linked)](hubs) - - [FAQ](faq) ← *common questions answered* - - [Configuration](configuration) - - [Nix mode](nix) - - [Clawd personal assistant setup](clawd) - - [Skills](skills) - - [Skills config](skills-config) - - [Workspace templates](templates/AGENTS) - - [RPC adapters](rpc) - - [Gateway runbook](gateway) - - [Nodes (iOS/Android)](nodes) - - [Web surfaces (Control UI)](web) - - [Discovery + transports](discovery) - - [Remote access](remote) + - [Docs hubs (all pages linked)](https://docs.clawd.bot/hubs) + - [FAQ](https://docs.clawd.bot/faq) ← *common questions answered* + - [Configuration](https://docs.clawd.bot/configuration) + - [Nix mode](https://docs.clawd.bot/nix) + - [Clawd personal assistant setup](https://docs.clawd.bot/clawd) + - [Skills](https://docs.clawd.bot/skills) + - [Skills config](https://docs.clawd.bot/skills-config) + - [Workspace templates](https://docs.clawd.bot/templates/AGENTS) + - [RPC adapters](https://docs.clawd.bot/rpc) + - [Gateway runbook](https://docs.clawd.bot/gateway) + - [Nodes (iOS/Android)](https://docs.clawd.bot/nodes) + - [Web surfaces (Control UI)](https://docs.clawd.bot/web) + - [Discovery + transports](https://docs.clawd.bot/discovery) + - [Remote access](https://docs.clawd.bot/remote) - Providers and UX: - - [WebChat](webchat) - - [Control UI (browser)](control-ui) - - [Telegram](telegram) - - [Discord](discord) - - [iMessage](imessage) - - [Groups](groups) - - [WhatsApp group messages](group-messages) - - [Media: images](images) - - [Media: audio](audio) + - [WebChat](https://docs.clawd.bot/webchat) + - [Control UI (browser)](https://docs.clawd.bot/control-ui) + - [Telegram](https://docs.clawd.bot/telegram) + - [Discord](https://docs.clawd.bot/discord) + - [iMessage](https://docs.clawd.bot/imessage) + - [Groups](https://docs.clawd.bot/groups) + - [WhatsApp group messages](https://docs.clawd.bot/group-messages) + - [Media: images](https://docs.clawd.bot/images) + - [Media: audio](https://docs.clawd.bot/audio) - Companion apps: - - [macOS app](macos) - - [iOS app](ios) - - [Android app](android) - - [Windows app](windows) - - [Linux app](linux) + - [macOS app](https://docs.clawd.bot/macos) + - [iOS app](https://docs.clawd.bot/ios) + - [Android app](https://docs.clawd.bot/android) + - [Windows app](https://docs.clawd.bot/windows) + - [Linux app](https://docs.clawd.bot/linux) - Ops and safety: - - [Sessions](session) - - [Cron + wakeups](cron) - - [Security](security) - - [Troubleshooting](troubleshooting) + - [Sessions](https://docs.clawd.bot/session) + - [Cron + wakeups](https://docs.clawd.bot/cron) + - [Security](https://docs.clawd.bot/security) + - [Troubleshooting](https://docs.clawd.bot/troubleshooting) ## The name diff --git a/docs/ios.md b/docs/ios.md index ecdf3db01..bd58275e8 100644 --- a/docs/ios.md +++ b/docs/ios.md @@ -61,7 +61,7 @@ If browse works, but the iOS node can’t connect, try resolving one instance: dns-sd -L "" _clawdbot-bridge._tcp local. ``` -More debugging notes: `docs/bonjour.md`. +More debugging notes: [`docs/bonjour.md`](https://docs.clawd.bot/bonjour). #### Tailnet (Vienna ⇄ London) discovery via unicast DNS-SD @@ -70,7 +70,7 @@ If the iOS node and the gateway are on different networks but connected via Tail 1) Set up a DNS-SD zone (example `clawdbot.internal.`) on the gateway host and publish `_clawdbot-bridge._tcp` records. 2) Configure Tailscale split DNS for `clawdbot.internal` pointing at that DNS server. -Details and example CoreDNS config: `docs/bonjour.md`. +Details and example CoreDNS config: [`docs/bonjour.md`](https://docs.clawd.bot/bonjour). ### 3) Connect from the iOS node app @@ -102,7 +102,7 @@ clawdbot nodes approve After approval, the iOS node receives/stores the token and reconnects authenticated. -Pairing details: `docs/gateway/pairing.md`. +Pairing details: [`docs/gateway/pairing.md`](https://docs.clawd.bot/gateway/pairing). ### 5) Verify the node is connected @@ -169,7 +169,7 @@ The response includes `{ format, base64 }` image data (default `format="jpeg"`; - **iOS in background:** all `canvas.*` commands fail fast with `NODE_BACKGROUND_UNAVAILABLE` (bring the iOS node app to foreground). - **Return to default scaffold:** `canvas.navigate` with `{"url":""}` or `{"url":"/"}` returns to the built-in scaffold page. -- **mDNS blocked:** some networks block multicast; use a different LAN or plan a tailnet-capable bridge (see `docs/discovery.md`). +- **mDNS blocked:** some networks block multicast; use a different LAN or plan a tailnet-capable bridge (see [`docs/discovery.md`](https://docs.clawd.bot/discovery)). - **Wrong node selector:** `--node` can be the node id (UUID), display name (e.g. `iOS Node`), IP, or an unambiguous prefix. If it’s ambiguous, the CLI will tell you. - **Stale pairing / Keychain cleared:** if the pairing token is missing (or iOS Keychain was wiped), the node must pair again; approve a new pending request. - **App reinstall but no reconnect:** the node restores `instanceId` + last bridge preference from Keychain; if it still comes up “unpaired”, verify Keychain persistence on your device/simulator and re-pair once. @@ -195,8 +195,8 @@ Non-goals (v1): ### Current repo reality (constraints we respect) - The Gateway WebSocket server binds to `127.0.0.1:18789` (`src/gateway/server.ts`) with an optional `CLAWDBOT_GATEWAY_TOKEN`. -- The Gateway exposes a Canvas file server (`canvasHost`) on `canvasHost.port` (default `18793`), so nodes can `canvas.navigate` to `http://:18793/__clawdbot__/canvas/` and auto-reload on file changes (`docs/configuration.md`). -- macOS “Canvas” is controlled via the Gateway node protocol (`canvas.*`), matching iOS/Android (`docs/mac/canvas.md`). +- The Gateway exposes a Canvas file server (`canvasHost`) on `canvasHost.port` (default `18793`), so nodes can `canvas.navigate` to `http://:18793/__clawdbot__/canvas/` and auto-reload on file changes ([`docs/configuration.md`](https://docs.clawd.bot/configuration)). +- macOS “Canvas” is controlled via the Gateway node protocol (`canvas.*`), matching iOS/Android ([`docs/mac/canvas.md`](https://docs.clawd.bot/mac/canvas)). - Voice wake forwards via `GatewayChannel` to Gateway `agent` (mac app: `VoiceWakeForwarder` → `GatewayConnection.sendAgent`). ### Recommended topology (B): Gateway-owned Bridge + loopback Gateway @@ -237,7 +237,7 @@ Desired behavior: - If the Swift UI is present: show alert with Approve/Reject/Later. - If the Swift UI is not present: `clawdbot` CLI can list pending requests and approve/reject. -See `docs/gateway/pairing.md` for the API/events and storage. +See [`docs/gateway/pairing.md`](https://docs.clawd.bot/gateway/pairing) for the API/events and storage. CLI (headless approvals): - `clawdbot nodes pending` @@ -366,7 +366,7 @@ open Clawdbot.xcodeproj ## Related docs -- `docs/gateway.md` (gateway runbook) -- `docs/gateway/pairing.md` (approval + storage) -- `docs/bonjour.md` (discovery debugging) -- `docs/discovery.md` (LAN vs tailnet vs SSH) +- [`docs/gateway.md`](https://docs.clawd.bot/gateway) (gateway runbook) +- [`docs/gateway/pairing.md`](https://docs.clawd.bot/gateway/pairing) (approval + storage) +- [`docs/bonjour.md`](https://docs.clawd.bot/bonjour) (discovery debugging) +- [`docs/discovery.md`](https://docs.clawd.bot/discovery) (LAN vs tailnet vs SSH) diff --git a/docs/mac/canvas.md b/docs/mac/canvas.md index 3dc2458aa..c7e75e63d 100644 --- a/docs/mac/canvas.md +++ b/docs/mac/canvas.md @@ -10,7 +10,7 @@ read_when: Status: draft spec · Date: 2025-12-12 -Note: for iOS/Android nodes that should render agent-edited HTML/CSS/JS over the network, prefer the Gateway `canvasHost` (serves `~/clawd/canvas` over LAN/tailnet with live reload). A2UI is also **hosted by the Gateway** over HTTP. This doc focuses on the macOS in-app canvas panel. See `docs/configuration.md`. +Note: for iOS/Android nodes that should render agent-edited HTML/CSS/JS over the network, prefer the Gateway `canvasHost` (serves `~/clawd/canvas` over LAN/tailnet with live reload). A2UI is also **hosted by the Gateway** over HTTP. This doc focuses on the macOS in-app canvas panel. See [`docs/configuration.md`](https://docs.clawd.bot/configuration). Clawdbot can embed an agent-controlled “visual workspace” panel (“Canvas”) inside the macOS app using `WKWebView`, served via a **custom URL scheme** (no loopback HTTP port required). @@ -81,7 +81,7 @@ Canvas is exposed via the Gateway **node bridge**, so the agent can: This should be modeled after `WebChatManager`/`WebChatSwiftUIWindowController` but targeting `clawdbot-canvas://…` URLs. Related: -- For “invoke the agent again from UI” flows, prefer the macOS deep link scheme (`clawdbot://agent?...`) so *any* UI surface (Canvas, WebChat, native views) can trigger a new agent run. See `docs/macos.md`. +- For “invoke the agent again from UI” flows, prefer the macOS deep link scheme (`clawdbot://agent?...`) so *any* UI surface (Canvas, WebChat, native views) can trigger a new agent run. See [`docs/macos.md`](https://docs.clawd.bot/macos). ## Agent commands (current) diff --git a/docs/mac/health.md b/docs/mac/health.md index 1514e4c9f..dc081f8b4 100644 --- a/docs/mac/health.md +++ b/docs/mac/health.md @@ -25,4 +25,4 @@ How to see whether the WhatsApp Web/Baileys bridge is healthy from the menu bar - Cache the last good snapshot and the last error separately to avoid flicker; show the timestamp of each. ## When in doubt -- You can still use the CLI flow in `docs/health.md` (`clawdbot status`, `clawdbot status --deep`, `clawdbot health --json`) and tail `/tmp/clawdbot/clawdbot-*.log` for `web-heartbeat` / `web-reconnect`. +- You can still use the CLI flow in [`docs/health.md`](https://docs.clawd.bot/health) (`clawdbot status`, `clawdbot status --deep`, `clawdbot health --json`) and tail `/tmp/clawdbot/clawdbot-*.log` for `web-heartbeat` / `web-reconnect`. diff --git a/docs/mac/signing.md b/docs/mac/signing.md index 60b462c36..851045d26 100644 --- a/docs/mac/signing.md +++ b/docs/mac/signing.md @@ -9,7 +9,7 @@ This app is usually built from `scripts/package-mac-app.sh`, which now: - sets a stable debug bundle identifier: `com.clawdbot.mac.debug` - writes the Info.plist with that bundle id (override via `BUNDLE_ID=...`) -- calls `scripts/codesign-mac-app.sh` to sign the main binary, bundled CLI, and app bundle so macOS treats each rebuild as the same signed bundle and keeps TCC permissions (notifications, accessibility, screen recording, mic, speech). For stable permissions, use a real signing identity; ad-hoc is opt-in and fragile (see `docs/mac/permissions.md`). +- calls `scripts/codesign-mac-app.sh` to sign the main binary, bundled CLI, and app bundle so macOS treats each rebuild as the same signed bundle and keeps TCC permissions (notifications, accessibility, screen recording, mic, speech). For stable permissions, use a real signing identity; ad-hoc is opt-in and fragile (see [`docs/mac/permissions.md`](https://docs.clawd.bot/mac/permissions)). - uses `CODESIGN_TIMESTAMP=auto` by default; it enables trusted timestamps for Developer ID signatures. Set `CODESIGN_TIMESTAMP=off` to skip timestamping (offline debug builds). - inject build metadata into Info.plist: `ClawdbotBuildTimestamp` (UTC) and `ClawdbotGitCommit` (short hash) so the About pane can show build, git, and debug/release channel. - **Packaging requires Bun**: The embedded gateway relay is compiled using `bun`. Ensure it is installed (`curl -fsSL https://bun.sh/install | bash`). @@ -26,7 +26,7 @@ SIGN_IDENTITY="-" scripts/package-mac-app.sh # explicit ad-hoc (same cave ``` ### Ad-hoc Signing Note -When signing with `SIGN_IDENTITY="-"` (ad-hoc), the script automatically disables the **Hardened Runtime** (`--options runtime`). This is necessary to prevent crashes when the app attempts to load embedded frameworks (like Sparkle) that do not share the same Team ID. Ad-hoc signatures also break TCC permission persistence; see `docs/mac/permissions.md` for recovery steps. +When signing with `SIGN_IDENTITY="-"` (ad-hoc), the script automatically disables the **Hardened Runtime** (`--options runtime`). This is necessary to prevent crashes when the app attempts to load embedded frameworks (like Sparkle) that do not share the same Team ID. Ad-hoc signatures also break TCC permission persistence; see [`docs/mac/permissions.md`](https://docs.clawd.bot/mac/permissions) for recovery steps. ## Build metadata for About diff --git a/docs/mac/xpc.md b/docs/mac/xpc.md index a7c6de28b..5e4e1b3b2 100644 --- a/docs/mac/xpc.md +++ b/docs/mac/xpc.md @@ -21,7 +21,7 @@ read_when: - UI automation uses a separate UNIX socket named `bridge.sock` and the PeekabooBridge JSON protocol. - Host preference order (client-side): Peekaboo.app → Claude.app → Clawdbot.app → local execution. - Security: bridge hosts require TeamID `Y5PE65HELJ`; DEBUG-only same-UID escape hatch is guarded by `PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1` (Peekaboo convention). -- See: `docs/mac/peekaboo.md` for the Clawdbot plan and naming. +- See: [`docs/mac/peekaboo.md`](https://docs.clawd.bot/mac/peekaboo) for the Clawdbot plan and naming. ### Mach/XPC (future direction) - Still optional for internal app services, but **not required** for automation now that node.invoke is the surface. diff --git a/docs/macos.md b/docs/macos.md index 7412a2fc8..61ae0767c 100644 --- a/docs/macos.md +++ b/docs/macos.md @@ -13,7 +13,7 @@ Author: steipete · Status: draft spec · Date: 2025-12-20 - Shows native notifications for Clawdbot/clawdbot events. - Owns TCC prompts (Notifications, Accessibility, Screen Recording, Automation/AppleScript, Microphone, Speech Recognition). - Runs (or connects to) the **Gateway** and exposes itself as a **node** so agents can reach macOS‑only features. - - Hosts **PeekabooBridge** for UI automation (consumed by `peekaboo`; see `docs/mac/peekaboo.md`). + - Hosts **PeekabooBridge** for UI automation (consumed by `peekaboo`; see [`docs/mac/peekaboo.md`](https://docs.clawd.bot/mac/peekaboo)). - Installs a single CLI (`clawdbot`) by symlinking the bundled binary. ## High-level design diff --git a/docs/model-failover.md b/docs/model-failover.md index 9b5ee948f..5ce684dff 100644 --- a/docs/model-failover.md +++ b/docs/model-failover.md @@ -67,9 +67,9 @@ timeouts that exhausted profile rotation. ## Related config -See `docs/configuration.md` for: +See [`docs/configuration.md`](https://docs.clawd.bot/configuration) for: - `auth.profiles` / `auth.order` - `agent.model.primary` / `agent.model.fallbacks` - `agent.imageModel` routing -See `docs/models.md` for the broader model selection and fallback overview. +See [`docs/models.md`](https://docs.clawd.bot/models) for the broader model selection and fallback overview. diff --git a/docs/models.md b/docs/models.md index bb4f47344..069304966 100644 --- a/docs/models.md +++ b/docs/models.md @@ -77,7 +77,7 @@ Output - Image routing uses `agent.imageModel` **only when configured** and the primary model lacks image input. - Persist last successful provider/model to session entry; auth profile success is global. -- See `docs/model-failover.md` for auth profile rotation, cooldowns, and timeout handling. +- See [`docs/model-failover.md`](https://docs.clawd.bot/model-failover) for auth profile rotation, cooldowns, and timeout handling. ## Tests @@ -87,5 +87,5 @@ Output ## Docs -- Update `docs/configuration.md` with `agent.models` + `agent.model` + `agent.imageModel`. +- Update [`docs/configuration.md`](https://docs.clawd.bot/configuration) with `agent.models` + `agent.model` + `agent.imageModel`. - Keep this doc current when CLI surface or scan logic changes. diff --git a/docs/nix.md b/docs/nix.md index aa6cbc588..f796f817e 100644 --- a/docs/nix.md +++ b/docs/nix.md @@ -91,5 +91,5 @@ packaging and Nix builds (which do not rely on a full Xcode toolchain). ## Related - [nix-clawdbot](https://github.com/clawdbot/nix-clawdbot) — full setup guide -- [Wizard](./wizard.md) — non-Nix CLI setup -- [Docker](./docker.md) — containerized setup +- [Wizard](https://docs.clawd.bot/wizard) — non-Nix CLI setup +- [Docker](https://docs.clawd.bot/docker) — containerized setup diff --git a/docs/nodes.md b/docs/nodes.md index 28044af7c..90e6cb780 100644 --- a/docs/nodes.md +++ b/docs/nodes.md @@ -14,7 +14,7 @@ macOS can also run in **node mode**: the menubar app connects to the Gateway’s ## Pairing + status -Pairing is gateway-owned and approval-based. See `docs/gateway/pairing.md` for the full flow. +Pairing is gateway-owned and approval-based. See [`docs/gateway/pairing.md`](https://docs.clawd.bot/gateway/pairing) for the full flow. Quick CLI: diff --git a/docs/plans/cron-add-hardening.md b/docs/plans/cron-add-hardening.md index f1c6fa6ea..49056a422 100644 --- a/docs/plans/cron-add-hardening.md +++ b/docs/plans/cron-add-hardening.md @@ -43,7 +43,7 @@ Recent gateway logs show repeated `cron.add` failures with invalid parameters (m - [x] Fix UI CronStatus type to match gateway (`jobs` instead of `jobCount`). - [x] Update cron UI channel select to include Discord/Slack/Signal/iMessage. - [x] Update macOS CronJobEditor channel picker + enum to include Slack/Signal/iMessage. -- [x] Document cron compatibility normalization policy in `docs/cron.md`. +- [x] Document cron compatibility normalization policy in [`docs/cron.md`](https://docs.clawd.bot/cron). ### Phase 2 — Input normalization + tooling hardening - [x] Add shared cron input normalization helpers (`normalizeCronJobCreate`/`normalizeCronJobPatch`). diff --git a/docs/plans/group-policy-hardening.md b/docs/plans/group-policy-hardening.md index 684ff7f77..132483623 100644 --- a/docs/plans/group-policy-hardening.md +++ b/docs/plans/group-policy-hardening.md @@ -64,8 +64,8 @@ Follow-up hardening work ensures Telegram allowlists behave consistently across ### Phase 3: Documentation Updates **Files**: -- `docs/groups.md` -- `docs/telegram.md` +- [`docs/groups.md`](https://docs.clawd.bot/groups) +- [`docs/telegram.md`](https://docs.clawd.bot/telegram) **Changes**: - Document `tg:` alias and case-insensitive prefixes for Telegram allowlists. @@ -85,8 +85,8 @@ Follow-up hardening work ensures Telegram allowlists behave consistently across |------|-------------|-------------| | `src/telegram/bot.ts` | Fix | Trim allowlist values; strip `telegram:` / `tg:` prefixes case-insensitively | | `src/telegram/bot.test.ts` | Test | Add DM + group allowlist coverage for `TG:` prefix + whitespace | -| `docs/groups.md` | Docs | Mention `tg:` alias + case-insensitive prefixes | -| `docs/telegram.md` | Docs | Mention `tg:` alias + case-insensitive prefixes | +| [`docs/groups.md`](https://docs.clawd.bot/groups) | Docs | Mention `tg:` alias + case-insensitive prefixes | +| [`docs/telegram.md`](https://docs.clawd.bot/telegram) | Docs | Mention `tg:` alias + case-insensitive prefixes | --- diff --git a/docs/remote.md b/docs/remote.md index 9239d229d..4c366f695 100644 --- a/docs/remote.md +++ b/docs/remote.md @@ -8,7 +8,7 @@ read_when: This repo supports “remote over SSH” by keeping a single Gateway (the master) running on a host (e.g., your Mac Studio) and connecting clients to it. - For **operators (you / the macOS app)**: SSH tunneling is the universal fallback. -- For **nodes (iOS/Android and future devices)**: prefer the Gateway **Bridge** when on the same LAN/tailnet (see `docs/discovery.md`). +- For **nodes (iOS/Android and future devices)**: prefer the Gateway **Bridge** when on the same LAN/tailnet (see [`docs/discovery.md`](https://docs.clawd.bot/discovery)). ## The core idea @@ -58,9 +58,9 @@ WebChat no longer uses a separate HTTP port. The SwiftUI chat UI connects direct The macOS menu bar app can drive the same setup end-to-end (remote status checks, WebChat, and Voice Wake forwarding). -Runbook: `docs/mac/remote.md`. +Runbook: [`docs/mac/remote.md`](https://docs.clawd.bot/mac/remote). ## Legacy control channel Older builds experimented with a newline-delimited TCP control channel on the same port. -That API is deprecated and should not be relied on. (Historical reference: `docs/control-api.md`.) +That API is deprecated and should not be relied on. (Historical reference: [`docs/control-api.md`](https://docs.clawd.bot/control-api).) diff --git a/docs/rpc.md b/docs/rpc.md index 7a484758b..e44369e33 100644 --- a/docs/rpc.md +++ b/docs/rpc.md @@ -14,7 +14,7 @@ Clawdbot integrates external CLIs via JSON-RPC. Two patterns are used today. - Health probe: `/api/v1/check`. - Clawdbot owns lifecycle when `signal.autoStart=true`. -See `docs/signal.md` for setup and endpoints. +See [`docs/signal.md`](https://docs.clawd.bot/signal) for setup and endpoints. ## Pattern B: stdio child process (imsg) - Clawdbot spawns `imsg rpc` as a child process. @@ -27,7 +27,7 @@ Core methods used: - `send` - `chats.list` (probe/diagnostics) -See `docs/imessage.md` for setup and addressing (`chat_id` preferred). +See [`docs/imessage.md`](https://docs.clawd.bot/imessage) for setup and addressing (`chat_id` preferred). ## Adapter guidelines - Gateway owns the process (start/stop tied to provider lifecycle). diff --git a/docs/security.md b/docs/security.md index 04a7c38ae..63d5e2d8e 100644 --- a/docs/security.md +++ b/docs/security.md @@ -154,7 +154,7 @@ This runs the Gateway (and its provider integrations) inside a Docker container. If you do this right, the container becomes the “host boundary”, and you only expose what you explicitly mount in. -Docs: `docs/docker.md` (Docker Compose setup + onboarding). +Docs: [`docs/docker.md`](https://docs.clawd.bot/docker) (Docker Compose setup + onboarding). Hardening reminders: - Don’t mount your entire home directory. @@ -182,8 +182,8 @@ Default container hardening (configurable via `agent.sandbox.docker`): - per-session workspace mounted at `/workspace` Docs: -- `docs/configuration.md` → `agent.sandbox` -- `docs/docker.md` → “Per-session Agent Sandbox” +- [`docs/configuration.md`](https://docs.clawd.bot/configuration) → `agent.sandbox` +- [`docs/docker.md`](https://docs.clawd.bot/docker) → “Per-session Agent Sandbox” Important: `agent.elevated` is an explicit escape hatch that runs bash on the host. Keep `agent.elevated.allowFrom` tight and don’t enable it for strangers. diff --git a/docs/sessions.md b/docs/sessions.md index 56627b95a..2e048a902 100644 --- a/docs/sessions.md +++ b/docs/sessions.md @@ -5,4 +5,4 @@ read_when: --- # Sessions -Canonical session management docs live in `docs/session.md`. +Canonical session management docs live in [`docs/session.md`](https://docs.clawd.bot/session). diff --git a/docs/setup.md b/docs/setup.md index d053da7e3..e8c3630b9 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -17,7 +17,7 @@ Last updated: 2026-01-01 ## Prereqs (from source) - Node `>=22` - `pnpm` -- Docker (optional; only for containerized setup/e2e — see `docs/docker.md`) +- Docker (optional; only for containerized setup/e2e — see [`docs/docker.md`](https://docs.clawd.bot/docker)) ## Tailoring strategy (so updates don’t hurt) @@ -120,12 +120,12 @@ sudo loginctl enable-linger $USER ``` For always-on or multi-user servers, consider a **system** service instead of a -user service (no lingering needed). See `docs/gateway.md` for the systemd notes. +user service (no lingering needed). See [`docs/gateway.md`](https://docs.clawd.bot/gateway) for the systemd notes. ## Related docs -- `docs/gateway.md` (Gateway runbook; flags, supervision, ports) -- `docs/configuration.md` (config schema + examples) -- `docs/discord.md` and `docs/telegram.md` (reply tags + replyToMode settings) -- `docs/clawd.md` (personal assistant setup) -- `docs/macos.md` (macOS app behavior; gateway lifecycle + “Attach only”) +- [`docs/gateway.md`](https://docs.clawd.bot/gateway) (Gateway runbook; flags, supervision, ports) +- [`docs/configuration.md`](https://docs.clawd.bot/configuration) (config schema + examples) +- [`docs/discord.md`](https://docs.clawd.bot/discord) and [`docs/telegram.md`](https://docs.clawd.bot/telegram) (reply tags + replyToMode settings) +- [`docs/clawd.md`](https://docs.clawd.bot/clawd) (personal assistant setup) +- [`docs/macos.md`](https://docs.clawd.bot/macos) (macOS app behavior; gateway lifecycle + “Attach only”) diff --git a/docs/skills.md b/docs/skills.md index 0dadb6a10..424a5b833 100644 --- a/docs/skills.md +++ b/docs/skills.md @@ -142,6 +142,6 @@ copy). Workspace skills are user-owned and override both on name conflicts. ## Config reference -See `docs/skills-config.md` for the full configuration schema. +See [`docs/skills-config.md`](https://docs.clawd.bot/skills-config) for the full configuration schema. --- diff --git a/docs/thinking.md b/docs/thinking.md index 3ed9a9aa1..81b903d51 100644 --- a/docs/thinking.md +++ b/docs/thinking.md @@ -35,7 +35,7 @@ read_when: - When verbose is on, agents that emit structured tool results (Pi, other JSON agents) send each tool result back as its own metadata-only message, prefixed with ` : ` when available (path/command); the tool output itself is not forwarded. These tool summaries are sent as soon as each tool finishes (separate bubbles), not as streaming deltas. If you toggle `/verbose on|off` while a run is in-flight, subsequent tool bubbles honor the new setting. ## Related -- Elevated mode docs live in `docs/elevated.md`. +- Elevated mode docs live in [`docs/elevated.md`](https://docs.clawd.bot/elevated). ## Heartbeats - Heartbeat probe body is `HEARTBEAT`. Inline directives in a heartbeat message apply as usual (but avoid changing session defaults from heartbeats). diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index c8cbcab88..0e05a198d 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -254,4 +254,4 @@ Then set in config: } ``` -**Full guide:** See [browser-linux-troubleshooting.md](./browser-linux-troubleshooting.md) +**Full guide:** See [browser-linux-troubleshooting](https://docs.clawd.bot/browser-linux-troubleshooting) diff --git a/docs/web.md b/docs/web.md index 6e1a7274a..087a18f2d 100644 --- a/docs/web.md +++ b/docs/web.md @@ -26,7 +26,7 @@ The UI talks directly to the Gateway WS and supports: ## Webhooks When `hooks.enabled=true`, the Gateway also exposes a small webhook surface on the same HTTP server. -See `docs/configuration.md` → `hooks` for auth + payloads. +See [`docs/configuration.md`](https://docs.clawd.bot/configuration) → `hooks` for auth + payloads. ## Config (default-on) diff --git a/docs/whatsapp.md b/docs/whatsapp.md index 5f2e81395..426516c39 100644 --- a/docs/whatsapp.md +++ b/docs/whatsapp.md @@ -144,7 +144,7 @@ WhatsApp requires a real mobile number for verification. VoIP and virtual number ## Logs + troubleshooting - Subsystems: `whatsapp/inbound`, `whatsapp/outbound`, `web-heartbeat`, `web-reconnect`. - Log file: `/tmp/clawdbot/clawdbot-YYYY-MM-DD.log` (configurable). -- Troubleshooting guide: `docs/troubleshooting.md`. +- Troubleshooting guide: [`docs/troubleshooting.md`](https://docs.clawd.bot/troubleshooting). ## Tests - `src/web/auto-reply.test.ts` (mention gating, history injection, reply flow) diff --git a/docs/wizard.md b/docs/wizard.md index a22032b60..da427146b 100644 --- a/docs/wizard.md +++ b/docs/wizard.md @@ -161,7 +161,7 @@ Sessions are stored under `~/.clawdbot/sessions/`. ## Related docs -- macOS app onboarding: `docs/onboarding.md` -- Config reference: `docs/configuration.md` -- Providers: `docs/whatsapp.md`, `docs/telegram.md`, `docs/discord.md`, `docs/signal.md`, `docs/imessage.md` -- Skills: `docs/skills.md`, `docs/skills-config.md` +- macOS app onboarding: [`docs/onboarding.md`](https://docs.clawd.bot/onboarding) +- Config reference: [`docs/configuration.md`](https://docs.clawd.bot/configuration) +- Providers: [`docs/whatsapp.md`](https://docs.clawd.bot/whatsapp), [`docs/telegram.md`](https://docs.clawd.bot/telegram), [`docs/discord.md`](https://docs.clawd.bot/discord), [`docs/signal.md`](https://docs.clawd.bot/signal), [`docs/imessage.md`](https://docs.clawd.bot/imessage) +- Skills: [`docs/skills.md`](https://docs.clawd.bot/skills), [`docs/skills-config.md`](https://docs.clawd.bot/skills-config)