refactor: rename clawdbot to moltbot with legacy compat

This commit is contained in:
Peter Steinberger
2026-01-27 12:19:58 +00:00
parent 83460df96f
commit 6d16a658e5
1839 changed files with 11250 additions and 11199 deletions

View File

@@ -3,13 +3,13 @@ summary: "Agent loop lifecycle, streams, and wait semantics"
read_when:
- You need an exact walkthrough of the agent loop or lifecycle events
---
# Agent Loop (Clawdbot)
# Agent Loop (Moltbot)
An agentic loop is the full “real” run of an agent: intake → context assembly → model inference →
tool execution → streaming replies → persistence. Its the authoritative path that turns a message
into actions and a final reply, while keeping session state consistent.
In Clawdbot, a loop is a single, serialized run per session that emits lifecycle and stream events
In Moltbot, a loop is a single, serialized run per session that emits lifecycle and stream events
as the model thinks, calls tools, and streams output. This doc explains how that authentic loop is
wired end-to-end.
@@ -30,7 +30,7 @@ wired end-to-end.
- subscribes to pi events and streams assistant/tool deltas
- enforces timeout -> aborts run if exceeded
- returns payloads + usage metadata
4) `subscribeEmbeddedPiSession` bridges pi-agent-core events to Clawdbot `agent` stream:
4) `subscribeEmbeddedPiSession` bridges pi-agent-core events to Moltbot `agent` stream:
- tool events => `stream: "tool"`
- assistant deltas => `stream: "assistant"`
- lifecycle events => `stream: "lifecycle"` (`phase: "start" | "end" | "error"`)
@@ -51,12 +51,12 @@ wired end-to-end.
- A session write lock is acquired; `SessionManager` is opened and prepared before streaming.
## Prompt assembly + system prompt
- System prompt is built from Clawdbots base prompt, skills prompt, bootstrap context, and per-run overrides.
- System prompt is built from Moltbots base prompt, skills prompt, bootstrap context, and per-run overrides.
- Model-specific limits and compaction reserve tokens are enforced.
- See [System prompt](/concepts/system-prompt) for what the model sees.
## Hook points (where you can intercept)
Clawdbot has two hook systems:
Moltbot has two hook systems:
- **Internal hooks** (Gateway hooks): event-driven scripts for commands and lifecycle events.
- **Plugin hooks**: extension points inside the agent/tool lifecycle and gateway pipeline.

View File

@@ -24,7 +24,7 @@ inside a sandbox workspace under `~/.clawdbot/sandboxes`, not your host workspac
- Default: `~/clawd`
- If `CLAWDBOT_PROFILE` is set and not `"default"`, the default becomes
`~/clawd-<profile>`.
- Override in `~/.clawdbot/clawdbot.json`:
- Override in `~/.clawdbot/moltbot.json`:
```json5
{
@@ -34,7 +34,7 @@ inside a sandbox workspace under `~/.clawdbot/sandboxes`, not your host workspac
}
```
`clawdbot onboard`, `clawdbot configure`, or `clawdbot setup` will create the
`moltbot onboard`, `moltbot configure`, or `moltbot setup` will create the
workspace and seed the bootstrap files if they are missing.
If you already manage the workspace files yourself, you can disable bootstrap
@@ -46,20 +46,20 @@ file creation:
## Extra workspace folders
Older installs may have created `~/clawdbot`. Keeping multiple workspace
Older installs may have created `~/moltbot`. Keeping multiple workspace
directories around can cause confusing auth or state drift, because only one
workspace is active at a time.
**Recommendation:** keep a single active workspace. If you no longer use the
extra folders, archive or move them to Trash (for example `trash ~/clawdbot`).
extra folders, archive or move them to Trash (for example `trash ~/moltbot`).
If you intentionally keep multiple workspaces, make sure
`agents.defaults.workspace` points to the active one.
`clawdbot doctor` warns when it detects extra workspace directories.
`moltbot doctor` warns when it detects extra workspace directories.
## Workspace file map (what each file means)
These are the standard files Clawdbot expects inside the workspace:
These are the standard files Moltbot expects inside the workspace:
- `AGENTS.md`
- Operating instructions for the agent and how it should use memory.
@@ -112,17 +112,17 @@ See [Memory](/concepts/memory) for the workflow and automatic memory flush.
- `canvas/` (optional)
- Canvas UI files for node displays (for example `canvas/index.html`).
If any bootstrap file is missing, Clawdbot injects a "missing file" marker into
If any bootstrap file is missing, Moltbot injects a "missing file" marker into
the session and continues. Large bootstrap files are truncated when injected;
adjust the limit with `agents.defaults.bootstrapMaxChars` (default: 20000).
`clawdbot setup` can recreate missing defaults without overwriting existing
`moltbot setup` can recreate missing defaults without overwriting existing
files.
## What is NOT in the workspace
These live under `~/.clawdbot/` and should NOT be committed to the workspace repo:
- `~/.clawdbot/clawdbot.json` (config)
- `~/.clawdbot/moltbot.json` (config)
- `~/.clawdbot/credentials/` (OAuth tokens, API keys)
- `~/.clawdbot/agents/<agentId>/sessions/` (session transcripts + metadata)
- `~/.clawdbot/skills/` (managed skills)
@@ -218,8 +218,8 @@ Suggested `.gitignore` starter:
## Moving the workspace to a new machine
1. Clone the repo to the desired path (default `~/clawd`).
2. Set `agents.defaults.workspace` to that path in `~/.clawdbot/clawdbot.json`.
3. Run `clawdbot setup --workspace <path>` to seed any missing files.
2. Set `agents.defaults.workspace` to that path in `~/.clawdbot/moltbot.json`.
3. Run `moltbot setup --workspace <path>` to seed any missing files.
4. If you need sessions, copy `~/.clawdbot/agents/<agentId>/sessions/` from the
old machine separately.

View File

@@ -5,13 +5,13 @@ read_when:
---
# Agent Runtime 🤖
Clawdbot runs a single embedded agent runtime derived from **p-mono**.
Moltbot runs a single embedded agent runtime derived from **p-mono**.
## Workspace (required)
Clawdbot uses a single agent workspace directory (`agents.defaults.workspace`) as the agents **only** working directory (`cwd`) for tools and context.
Moltbot uses a single agent workspace directory (`agents.defaults.workspace`) as the agents **only** working directory (`cwd`) for tools and context.
Recommended: use `clawdbot setup` to create `~/.clawdbot/clawdbot.json` if missing and initialize the workspace files.
Recommended: use `moltbot setup` to create `~/.clawdbot/moltbot.json` if missing and initialize the workspace files.
Full workspace layout + backup guide: [Agent workspace](/concepts/agent-workspace)
@@ -21,7 +21,7 @@ per-session workspaces under `agents.defaults.sandbox.workspaceRoot` (see
## Bootstrap files (injected)
Inside `agents.defaults.workspace`, Clawdbot expects these user-editable files:
Inside `agents.defaults.workspace`, Moltbot expects these user-editable files:
- `AGENTS.md` — operating instructions + “memory”
- `SOUL.md` — persona, boundaries, tone
- `TOOLS.md` — user-maintained tool notes (e.g. `imsg`, `sag`, conventions)
@@ -29,11 +29,11 @@ Inside `agents.defaults.workspace`, Clawdbot expects these user-editable files:
- `IDENTITY.md` — agent name/vibe/emoji
- `USER.md` — user profile + preferred address
On the first turn of a new session, Clawdbot injects the contents of these files directly into the agent context.
On the first turn of a new session, Moltbot injects the contents of these files directly into the agent context.
Blank files are skipped. Large files are trimmed and truncated with a marker so prompts stay lean (read the file for full content).
If a file is missing, Clawdbot injects a single “missing file” marker line (and `clawdbot setup` will create a safe default template).
If a file is missing, Moltbot injects a single “missing file” marker line (and `moltbot setup` will create a safe default template).
`BOOTSTRAP.md` is only created for a **brand new workspace** (no other bootstrap files present). If you delete it after completing the ritual, it should not be recreated on later restarts.
@@ -52,7 +52,7 @@ guidance for how *you* want them used.
## Skills
Clawdbot loads skills from three locations (workspace wins on name conflict):
Moltbot loads skills from three locations (workspace wins on name conflict):
- Bundled (shipped with the install)
- Managed/local: `~/.clawdbot/skills`
- Workspace: `<workspace>/skills`
@@ -61,7 +61,7 @@ Skills can be gated by config/env (see `skills` in [Gateway configuration](/gate
## p-mono integration
Clawdbot reuses pieces of the p-mono codebase (models/tools), but **session management, discovery, and tool wiring are Clawdbot-owned**.
Moltbot reuses pieces of the p-mono codebase (models/tools), but **session management, discovery, and tool wiring are Moltbot-owned**.
- No p-coding agent runtime.
- No `~/.pi/agent` or `<workspace>/.pi` settings are consulted.
@@ -71,7 +71,7 @@ Clawdbot reuses pieces of the p-mono codebase (models/tools), but **session mana
Session transcripts are stored as JSONL at:
- `~/.clawdbot/agents/<agentId>/sessions/<SessionId>.jsonl`
The session ID is stable and chosen by Clawdbot.
The session ID is stable and chosen by Moltbot.
Legacy Pi/Tau session folders are **not** read.
## Steering while streaming
@@ -104,7 +104,7 @@ Model refs in config (for example `agents.defaults.model` and `agents.defaults.m
- Use `provider/model` when configuring models.
- If the model ID itself contains `/` (OpenRouter-style), include the provider prefix (example: `openrouter/moonshotai/kimi-k2`).
- If you omit the provider, Clawdbot treats the input as an alias or a model for the **default provider** (only works when there is no `/` in the model ID).
- If you omit the provider, Moltbot treats the input as an alias or a model for the **default provider** (only works when there is no `/` in the model ID).
## Configuration (minimal)

View File

@@ -111,7 +111,7 @@ Details: [Gateway protocol](/gateway/protocol), [Pairing](/start/pairing),
## Operations snapshot
- Start: `clawdbot gateway` (foreground, logs to stdout).
- Start: `moltbot gateway` (foreground, logs to stdout).
- Health: `health` over WS (also included in `hello-ok`).
- Supervision: launchd/systemd for autorestart.

View File

@@ -6,7 +6,7 @@ read_when:
# Channels & routing
Clawdbot routes replies **back to the channel where a message came from**. The
Moltbot routes replies **back to the channel where a message came from**. The
model does not choose a channel; routing is deterministic and controlled by the
host configuration.
@@ -53,7 +53,7 @@ The matched agent determines which workspace and session store are used.
## Broadcast groups (run multiple agents)
Broadcast groups let you run **multiple agents** for the same peer **when Clawdbot would normally reply** (for example: in WhatsApp groups, after mention/activation gating).
Broadcast groups let you run **multiple agents** for the same peer **when Moltbot would normally reply** (for example: in WhatsApp groups, after mention/activation gating).
Config:

View File

@@ -1,12 +1,12 @@
---
summary: "Context window + compaction: how Clawdbot keeps sessions under model limits"
summary: "Context window + compaction: how Moltbot keeps sessions under model limits"
read_when:
- You want to understand auto-compaction and /compact
- You are debugging long sessions hitting context limits
---
# Context Window & Compaction
Every model has a **context window** (max tokens it can see). Long-running chats accumulate messages and tool results; once the window is tight, Clawdbot **compacts** older history to stay within limits.
Every model has a **context window** (max tokens it can see). Long-running chats accumulate messages and tool results; once the window is tight, Moltbot **compacts** older history to stay within limits.
## What compaction is
Compaction **summarizes older conversation** into a compact summary entry and keeps recent messages intact. The summary is stored in the session history, so future requests use:
@@ -19,13 +19,13 @@ Compaction **persists** in the sessions JSONL history.
See [Compaction config & modes](/concepts/compaction) for the `agents.defaults.compaction` settings.
## Auto-compaction (default on)
When a session nears or exceeds the models context window, Clawdbot triggers auto-compaction and may retry the original request using the compacted context.
When a session nears or exceeds the models context window, Moltbot triggers auto-compaction and may retry the original request using the compacted context.
Youll see:
- `🧹 Auto-compaction complete` in verbose mode
- `/status` showing `🧹 Compactions: <count>`
Before compaction, Clawdbot can run a **silent memory flush** turn to store
Before compaction, Moltbot can run a **silent memory flush** turn to store
durable notes to disk. See [Memory](/concepts/memory) for details and config.
## Manual compaction
@@ -35,7 +35,7 @@ Use `/compact` (optionally with instructions) to force a compaction pass:
```
## Context window source
Context window is model-specific. Clawdbot uses the model definition from the configured provider catalog to determine limits.
Context window is model-specific. Moltbot uses the model definition from the configured provider catalog to determine limits.
## Compaction vs pruning
- **Compaction**: summarises and **persists** in JSONL.

View File

@@ -1,16 +1,16 @@
---
summary: "Context: what the model sees, how it is built, and how to inspect it"
read_when:
- You want to understand what “context” means in Clawdbot
- You want to understand what “context” means in Moltbot
- You are debugging why the model “knows” something (or forgot it)
- You want to reduce context overhead (/context, /status, /compact)
---
# Context
“Context” is **everything Clawdbot sends to the model for a run**. It is bounded by the models **context window** (token limit).
“Context” is **everything Moltbot sends to the model for a run**. It is bounded by the models **context window** (token limit).
Beginner mental model:
- **System prompt** (Clawdbot-built): rules, tools, skills list, time/runtime, and injected workspace files.
- **System prompt** (Moltbot-built): rules, tools, skills list, time/runtime, and injected workspace files.
- **Conversation history**: your messages + the assistants messages for this session.
- **Tool calls/results + attachments**: command output, file reads, images/audio, etc.
@@ -83,9 +83,9 @@ Everything the model receives counts, including:
- Compaction summaries and pruning artifacts.
- Provider “wrappers” or hidden headers (not visible, still counted).
## How Clawdbot builds the system prompt
## How Moltbot builds the system prompt
The system prompt is **Clawdbot-owned** and rebuilt each run. It includes:
The system prompt is **Moltbot-owned** and rebuilt each run. It includes:
- Tool list + short descriptions.
- Skills list (metadata only; see below).
- Workspace location.
@@ -97,7 +97,7 @@ Full breakdown: [System Prompt](/concepts/system-prompt).
## Injected workspace files (Project Context)
By default, Clawdbot injects a fixed set of workspace files (if present):
By default, Moltbot injects a fixed set of workspace files (if present):
- `AGENTS.md`
- `SOUL.md`
- `TOOLS.md`

View File

@@ -19,7 +19,7 @@ Note: `agents.list[].groupChat.mentionPatterns` is now used by Telegram/Discord/
- Group system prompt: on the first turn of a group session (and whenever `/activation` changes the mode) we inject a short blurb into the system prompt like `You are replying inside the WhatsApp group "<subject>". Group members: Alice (+44...), Bob (+43...), … Activation: trigger-only … Address the specific sender noted in the message context.` If metadata isnt available we still tell the agent its a group chat.
## Config example (WhatsApp)
Add a `groupChat` block to `~/.clawdbot/clawdbot.json` so display-name pings work even when WhatsApp strips the visual `@` in the text body:
Add a `groupChat` block to `~/.clawdbot/moltbot.json` so display-name pings work even when WhatsApp strips the visual `@` in the text body:
```json5
{
@@ -37,7 +37,7 @@ Add a `groupChat` block to `~/.clawdbot/clawdbot.json` so display-name pings wor
groupChat: {
historyLimit: 50,
mentionPatterns: [
"@?clawdbot",
"@?moltbot",
"\\+?15555550123"
]
}
@@ -48,7 +48,7 @@ Add a `groupChat` block to `~/.clawdbot/clawdbot.json` so display-name pings wor
```
Notes:
- The regexes are case-insensitive; they cover a display-name ping like `@clawdbot` and the raw number with or without `+`/spaces.
- The regexes are case-insensitive; they cover a display-name ping like `@moltbot` and the raw number with or without `+`/spaces.
- WhatsApp still sends canonical mentions via `mentionedJids` when someone taps the contact, so the number fallback is rarely needed but is a useful safety net.
### Activation command (owner-only)
@@ -60,8 +60,8 @@ Use the group chat command:
Only the owner number (from `channels.whatsapp.allowFrom`, or the bots own E.164 when unset) can change this. Send `/status` as a standalone message in the group to see the current activation mode.
## How to use
1) Add your WhatsApp account (the one running Clawdbot) to the group.
2) Say `@clawdbot …` (or include the number). Only allowlisted senders can trigger it unless you set `groupPolicy: "open"`.
1) Add your WhatsApp account (the one running Moltbot) to the group.
2) Say `@moltbot …` (or include the number). Only allowlisted senders can trigger it unless you set `groupPolicy: "open"`.
3) The agent prompt will include recent group context plus the trailing `[from: …]` marker so it can address the right person.
4) Session-level directives (`/verbose on`, `/think high`, `/new` or `/reset`, `/compact`) apply only to that groups session; send them as standalone messages so they register. Your personal DM session remains independent.

View File

@@ -5,17 +5,17 @@ read_when:
---
# Groups
Clawdbot treats group chats consistently across surfaces: WhatsApp, Telegram, Discord, Slack, Signal, iMessage, Microsoft Teams.
Moltbot treats group chats consistently across surfaces: WhatsApp, Telegram, Discord, Slack, Signal, iMessage, Microsoft Teams.
## Beginner intro (2 minutes)
Clawdbot “lives” on your own messaging accounts. There is no separate WhatsApp bot user.
If **you** are in a group, Clawdbot can see that group and respond there.
Moltbot “lives” on your own messaging accounts. There is no separate WhatsApp bot user.
If **you** are in a group, Moltbot can see that group and respond there.
Default behavior:
- Groups are restricted (`groupPolicy: "allowlist"`).
- Replies require a mention unless you explicitly disable mention gating.
Translation: allowlisted senders can trigger Clawdbot by mentioning it.
Translation: allowlisted senders can trigger Moltbot by mentioning it.
> TL;DR
> - **DM access** is controlled by `*.allowFrom`.
@@ -215,7 +215,7 @@ Replying to a bot message counts as an implicit mention (when the channel suppor
{
id: "main",
groupChat: {
mentionPatterns: ["@clawd", "clawdbot", "\\+15555550123"],
mentionPatterns: ["@clawd", "moltbot", "\\+15555550123"],
historyLimit: 50
}
}

View File

@@ -7,7 +7,7 @@ read_when:
---
# Markdown formatting
Clawdbot formats outbound Markdown by converting it into a shared intermediate
Moltbot formats outbound Markdown by converting it into a shared intermediate
representation (IR) before rendering channel-specific output. The IR keeps the
source text intact while carrying style/link spans so chunking and rendering can
stay consistent across channels.

View File

@@ -1,12 +1,12 @@
---
summary: "How Clawdbot memory works (workspace files + automatic memory flush)"
summary: "How Moltbot memory works (workspace files + automatic memory flush)"
read_when:
- You want the memory file layout and workflow
- You want to tune the automatic pre-compaction memory flush
---
# Memory
Clawdbot memory is **plain Markdown in the agent workspace**. The files are the
Moltbot memory is **plain Markdown in the agent workspace**. The files are the
source of truth; the model only "remembers" what gets written to disk.
Memory search tools are provided by the active memory plugin (default:
@@ -36,7 +36,7 @@ These files live under the workspace (`agents.defaults.workspace`, default
## Automatic memory flush (pre-compaction ping)
When a session is **close to auto-compaction**, Clawdbot triggers a **silent,
When a session is **close to auto-compaction**, Moltbot triggers a **silent,
agentic turn** that reminds the model to write durable memory **before** the
context is compacted. The default prompts explicitly say the model *may reply*,
but usually `NO_REPLY` is the correct response so the user never sees this turn.
@@ -75,13 +75,13 @@ For the full compaction lifecycle, see
## Vector memory search
Clawdbot can build a small vector index over `MEMORY.md` and `memory/*.md` so
Moltbot can build a small vector index over `MEMORY.md` and `memory/*.md` so
semantic queries can find related notes even when wording differs.
Defaults:
- Enabled by default.
- Watches memory files for changes (debounced).
- Uses remote embeddings by default. If `memorySearch.provider` is not set, Clawdbot auto-selects:
- Uses remote embeddings by default. If `memorySearch.provider` is not set, Moltbot auto-selects:
1. `local` if a `memorySearch.local.modelPath` is configured and the file exists.
2. `openai` if an OpenAI key can be resolved.
3. `gemini` if a Gemini key can be resolved.
@@ -89,7 +89,7 @@ Defaults:
- Local mode uses node-llama-cpp and may require `pnpm approve-builds`.
- Uses sqlite-vec (when available) to accelerate vector search inside SQLite.
Remote embeddings **require** an API key for the embedding provider. Clawdbot
Remote embeddings **require** an API key for the embedding provider. Moltbot
resolves keys from auth profiles, `models.providers.*.apiKey`, or environment
variables. Codex OAuth only covers chat/completions and does **not** satisfy
embeddings for memory search. For Gemini, use `GEMINI_API_KEY` or
@@ -197,15 +197,15 @@ Local mode:
- File type: Markdown only (`MEMORY.md`, `memory/**/*.md`).
- Index storage: per-agent SQLite at `~/.clawdbot/memory/<agentId>.sqlite` (configurable via `agents.defaults.memorySearch.store.path`, supports `{agentId}` token).
- Freshness: watcher on `MEMORY.md` + `memory/` marks the index dirty (debounce 1.5s). Sync is scheduled on session start, on search, or on an interval and runs asynchronously. Session transcripts use delta thresholds to trigger background sync.
- Reindex triggers: the index stores the embedding **provider/model + endpoint fingerprint + chunking params**. If any of those change, Clawdbot automatically resets and reindexes the entire store.
- Reindex triggers: the index stores the embedding **provider/model + endpoint fingerprint + chunking params**. If any of those change, Moltbot automatically resets and reindexes the entire store.
### Hybrid search (BM25 + vector)
When enabled, Clawdbot combines:
When enabled, Moltbot combines:
- **Vector similarity** (semantic match, wording can differ)
- **BM25 keyword relevance** (exact tokens like IDs, env vars, code symbols)
If full-text search is unavailable on your platform, Clawdbot falls back to vector-only search.
If full-text search is unavailable on your platform, Moltbot falls back to vector-only search.
#### Why hybrid?
@@ -266,7 +266,7 @@ agents: {
### Embedding cache
Clawdbot can cache **chunk embeddings** in SQLite so reindexing and frequent updates (especially session transcripts) don't re-embed unchanged text.
Moltbot can cache **chunk embeddings** in SQLite so reindexing and frequent updates (especially session transcripts) don't re-embed unchanged text.
Config:
@@ -326,7 +326,7 @@ agents: {
### SQLite vector acceleration (sqlite-vec)
When the sqlite-vec extension is available, Clawdbot stores embeddings in a
When the sqlite-vec extension is available, Moltbot stores embeddings in a
SQLite virtual table (`vec0`) and performs vector distance queries in the
database. This keeps search fast without loading every embedding into JS.
@@ -350,7 +350,7 @@ agents: {
Notes:
- `enabled` defaults to true; when disabled, search falls back to in-process
cosine similarity over stored embeddings.
- If the sqlite-vec extension is missing or fails to load, Clawdbot logs the
- If the sqlite-vec extension is missing or fails to load, Moltbot logs the
error and continues with the JS fallback (no vector table).
- `extensionPath` overrides the bundled sqlite-vec path (useful for custom builds
or non-standard install locations).

View File

@@ -7,7 +7,7 @@ read_when:
---
# Messages
This page ties together how Clawdbot handles inbound messages, sessions, queueing,
This page ties together how Moltbot handles inbound messages, sessions, queueing,
streaming, and reasoning visibility.
## Message flow (high level)
@@ -29,7 +29,7 @@ See [Configuration](/gateway/configuration) for full schema.
## Inbound dedupe
Channels can redeliver the same message after reconnects. Clawdbot keeps a
Channels can redeliver the same message after reconnects. Moltbot keeps a
short-lived cache keyed by channel/account/peer/session/message id so duplicate
deliveries do not trigger another agent run.
@@ -75,7 +75,7 @@ Details: [Session management](/concepts/session).
## Inbound bodies and history context
Clawdbot separates the **prompt body** from the **command body**:
Moltbot separates the **prompt body** from the **command body**:
- `Body`: prompt text sent to the agent. This may include channel envelopes and
optional history wrappers.
- `CommandBody`: raw user text for directive/command parsing.
@@ -127,7 +127,7 @@ Details: [Streaming + chunking](/concepts/streaming).
## Reasoning visibility and tokens
Clawdbot can expose or hide model reasoning:
Moltbot can expose or hide model reasoning:
- `/reasoning on|off|stream` controls visibility.
- Reasoning content still counts toward token usage when produced by the model.
- Telegram supports reasoning stream into the draft bubble.

View File

@@ -1,5 +1,5 @@
---
summary: "How Clawdbot rotates auth profiles and falls back across models"
summary: "How Moltbot rotates auth profiles and falls back across models"
read_when:
- Diagnosing auth profile rotation, cooldowns, or model fallback behavior
- Updating failover rules for auth profiles or models
@@ -7,7 +7,7 @@ read_when:
# Model failover
Clawdbot handles failures in two stages:
Moltbot handles failures in two stages:
1) **Auth profile rotation** within the current provider.
2) **Model fallback** to the next model in `agents.defaults.model.fallbacks`.
@@ -15,7 +15,7 @@ This doc explains the runtime rules and the data that backs them.
## Auth storage (keys + OAuth)
Clawdbot uses **auth profiles** for both API keys and OAuth tokens.
Moltbot uses **auth profiles** for both API keys and OAuth tokens.
- Secrets live in `~/.clawdbot/agents/<agentId>/agent/auth-profiles.json` (legacy: `~/.clawdbot/agent/auth-profiles.json`).
- Config `auth.profiles` / `auth.order` are **metadata + routing only** (no secrets).
@@ -37,20 +37,20 @@ Profiles live in `~/.clawdbot/agents/<agentId>/agent/auth-profiles.json` under `
## Rotation order
When a provider has multiple profiles, Clawdbot chooses an order like this:
When a provider has multiple profiles, Moltbot chooses an order like this:
1) **Explicit config**: `auth.order[provider]` (if set).
2) **Configured profiles**: `auth.profiles` filtered by provider.
3) **Stored profiles**: entries in `auth-profiles.json` for the provider.
If no explicit order is configured, Clawdbot uses a roundrobin order:
If no explicit order is configured, Moltbot uses a roundrobin order:
- **Primary key:** profile type (**OAuth before API keys**).
- **Secondary key:** `usageStats.lastUsed` (oldest first, within each type).
- **Cooldown/disabled profiles** are moved to the end, ordered by soonest expiry.
### Session stickiness (cache-friendly)
Clawdbot **pins the chosen auth profile per session** to keep provider caches warm.
Moltbot **pins the chosen auth profile per session** to keep provider caches warm.
It does **not** rotate on every request. The pinned profile is reused until:
- the session is reset (`/new` / `/reset`)
- a compaction completes (compaction count increments)
@@ -60,9 +60,9 @@ Manual selection via `/model …@<profileId>` sets a **user override** for that
and is not autorotated until a new session starts.
Autopinned profiles (selected by the session router) are treated as a **preference**:
they are tried first, but Clawdbot may rotate to another profile on rate limits/timeouts.
they are tried first, but Moltbot may rotate to another profile on rate limits/timeouts.
Userpinned profiles stay locked to that profile; if it fails and model fallbacks
are configured, Clawdbot moves to the next model instead of switching profiles.
are configured, Moltbot moves to the next model instead of switching profiles.
### Why OAuth can “look lost”
@@ -73,7 +73,7 @@ If you have both an OAuth profile and an API key profile for the same provider,
## Cooldowns
When a profile fails due to auth/ratelimit errors (or a timeout that looks
like rate limiting), Clawdbot marks it in cooldown and moves to the next profile.
like rate limiting), Moltbot marks it in cooldown and moves to the next profile.
Format/invalidrequest errors (for example Cloud Code Assist tool call ID
validation failures) are treated as failoverworthy and use the same cooldowns.
@@ -99,7 +99,7 @@ State is stored in `auth-profiles.json` under `usageStats`:
## Billing disables
Billing/credit failures (for example “insufficient credits” / “credit balance too low”) are treated as failoverworthy, but theyre usually not transient. Instead of a short cooldown, Clawdbot marks the profile as **disabled** (with a longer backoff) and rotates to the next profile/provider.
Billing/credit failures (for example “insufficient credits” / “credit balance too low”) are treated as failoverworthy, but theyre usually not transient. Instead of a short cooldown, Moltbot marks the profile as **disabled** (with a longer backoff) and rotates to the next profile/provider.
State is stored in `auth-profiles.json`:
@@ -120,7 +120,7 @@ Defaults:
## Model fallback
If all profiles for a provider fail, Clawdbot moves to the next model in
If all profiles for a provider fail, Moltbot moves to the next model in
`agents.defaults.model.fallbacks`. This applies to auth failures, rate limits, and
timeouts that exhausted profile rotation (other errors do not advance fallback).

View File

@@ -13,11 +13,11 @@ For model selection rules, see [/concepts/models](/concepts/models).
- Model refs use `provider/model` (example: `opencode/claude-opus-4-5`).
- If you set `agents.defaults.models`, it becomes the allowlist.
- CLI helpers: `clawdbot onboard`, `clawdbot models list`, `clawdbot models set <provider/model>`.
- CLI helpers: `moltbot onboard`, `moltbot models list`, `moltbot models set <provider/model>`.
## Built-in providers (pi-ai catalog)
Clawdbot ships with the piai catalog. These providers require **no**
Moltbot ships with the piai catalog. These providers require **no**
`models.providers` config; just set auth + pick a model.
### OpenAI
@@ -25,7 +25,7 @@ Clawdbot ships with the piai catalog. These providers require **no**
- Provider: `openai`
- Auth: `OPENAI_API_KEY`
- Example model: `openai/gpt-5.2`
- CLI: `clawdbot onboard --auth-choice openai-api-key`
- CLI: `moltbot onboard --auth-choice openai-api-key`
```json5
{
@@ -38,7 +38,7 @@ Clawdbot ships with the piai catalog. These providers require **no**
- Provider: `anthropic`
- Auth: `ANTHROPIC_API_KEY` or `claude setup-token`
- Example model: `anthropic/claude-opus-4-5`
- CLI: `clawdbot onboard --auth-choice token` (paste setup-token) or `clawdbot models auth paste-token --provider anthropic`
- CLI: `moltbot onboard --auth-choice token` (paste setup-token) or `moltbot models auth paste-token --provider anthropic`
```json5
{
@@ -51,7 +51,7 @@ Clawdbot ships with the piai catalog. These providers require **no**
- Provider: `openai-codex`
- Auth: OAuth (ChatGPT)
- Example model: `openai-codex/gpt-5.2`
- CLI: `clawdbot onboard --auth-choice openai-codex` or `clawdbot models auth login --provider openai-codex`
- CLI: `moltbot onboard --auth-choice openai-codex` or `moltbot models auth login --provider openai-codex`
```json5
{
@@ -64,7 +64,7 @@ Clawdbot ships with the piai catalog. These providers require **no**
- Provider: `opencode`
- Auth: `OPENCODE_API_KEY` (or `OPENCODE_ZEN_API_KEY`)
- Example model: `opencode/claude-opus-4-5`
- CLI: `clawdbot onboard --auth-choice opencode-zen`
- CLI: `moltbot onboard --auth-choice opencode-zen`
```json5
{
@@ -77,19 +77,19 @@ Clawdbot ships with the piai catalog. These providers require **no**
- Provider: `google`
- Auth: `GEMINI_API_KEY`
- Example model: `google/gemini-3-pro-preview`
- CLI: `clawdbot onboard --auth-choice gemini-api-key`
- CLI: `moltbot onboard --auth-choice gemini-api-key`
### Google Vertex / Antigravity / Gemini CLI
- Providers: `google-vertex`, `google-antigravity`, `google-gemini-cli`
- Auth: Vertex uses gcloud ADC; Antigravity/Gemini CLI use their respective auth flows
- Antigravity OAuth is shipped as a bundled plugin (`google-antigravity-auth`, disabled by default).
- Enable: `clawdbot plugins enable google-antigravity-auth`
- Login: `clawdbot models auth login --provider google-antigravity --set-default`
- Enable: `moltbot plugins enable google-antigravity-auth`
- Login: `moltbot models auth login --provider google-antigravity --set-default`
- Gemini CLI OAuth is shipped as a bundled plugin (`google-gemini-cli-auth`, disabled by default).
- Enable: `clawdbot plugins enable google-gemini-cli-auth`
- Login: `clawdbot models auth login --provider google-gemini-cli --set-default`
- Note: you do **not** paste a client id or secret into `clawdbot.json`. The CLI login flow stores
- Enable: `moltbot plugins enable google-gemini-cli-auth`
- Login: `moltbot models auth login --provider google-gemini-cli --set-default`
- Note: you do **not** paste a client id or secret into `moltbot.json`. The CLI login flow stores
tokens in auth profiles on the gateway host.
### Z.AI (GLM)
@@ -97,7 +97,7 @@ Clawdbot ships with the piai catalog. These providers require **no**
- Provider: `zai`
- Auth: `ZAI_API_KEY`
- Example model: `zai/glm-4.7`
- CLI: `clawdbot onboard --auth-choice zai-api-key`
- CLI: `moltbot onboard --auth-choice zai-api-key`
- Aliases: `z.ai/*` and `z-ai/*` normalize to `zai/*`
### Vercel AI Gateway
@@ -105,7 +105,7 @@ Clawdbot ships with the piai catalog. These providers require **no**
- Provider: `vercel-ai-gateway`
- Auth: `AI_GATEWAY_API_KEY`
- Example model: `vercel-ai-gateway/anthropic/claude-opus-4.5`
- CLI: `clawdbot onboard --auth-choice ai-gateway-api-key`
- CLI: `moltbot onboard --auth-choice ai-gateway-api-key`
### Other built-in providers
@@ -191,8 +191,8 @@ Qwen provides OAuth access to Qwen Coder + Vision via a device-code flow.
Enable the bundled plugin, then log in:
```bash
clawdbot plugins enable qwen-portal-auth
clawdbot models auth login --provider qwen-portal --set-default
moltbot plugins enable qwen-portal-auth
moltbot models auth login --provider qwen-portal --set-default
```
Model refs:
@@ -208,7 +208,7 @@ Synthetic provides Anthropic-compatible models behind the `synthetic` provider:
- Provider: `synthetic`
- Auth: `SYNTHETIC_API_KEY`
- Example model: `synthetic/hf:MiniMaxAI/MiniMax-M2.1`
- CLI: `clawdbot onboard --auth-choice synthetic-api-key`
- CLI: `moltbot onboard --auth-choice synthetic-api-key`
```json5
{
@@ -299,7 +299,7 @@ Example (OpenAIcompatible):
Notes:
- For custom providers, `reasoning`, `input`, `cost`, `contextWindow`, and `maxTokens` are optional.
When omitted, Clawdbot defaults to:
When omitted, Moltbot defaults to:
- `reasoning: false`
- `input: ["text"]`
- `cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }`
@@ -310,9 +310,9 @@ Notes:
## CLI examples
```bash
clawdbot onboard --auth-choice opencode-zen
clawdbot models set opencode/claude-opus-4-5
clawdbot models list
moltbot onboard --auth-choice opencode-zen
moltbot models set opencode/claude-opus-4-5
moltbot models list
```
See also: [/gateway/configuration](/gateway/configuration) for full configuration examples.

View File

@@ -13,7 +13,7 @@ Quick provider overview + examples: [/concepts/model-providers](/concepts/model-
## How model selection works
Clawdbot selects models in this order:
Moltbot selects models in this order:
1) **Primary** model (`agents.defaults.model.primary` or `agents.defaults.model`).
2) **Fallbacks** in `agents.defaults.model.fallbacks` (in order).
@@ -21,7 +21,7 @@ Clawdbot selects models in this order:
next model.
Related:
- `agents.defaults.models` is the allowlist/catalog of models Clawdbot can use (plus aliases).
- `agents.defaults.models` is the allowlist/catalog of models Moltbot can use (plus aliases).
- `agents.defaults.imageModel` is used **only when** the primary model cant accept images.
- Per-agent defaults can override `agents.defaults.model` via `agents.list[].model` plus bindings (see [/concepts/multi-agent](/concepts/multi-agent)).
@@ -35,7 +35,7 @@ Related:
If you dont want to hand-edit config, run the onboarding wizard:
```bash
clawdbot onboard
moltbot onboard
```
It can set up model + auth for common providers, including **OpenAI Code (Codex)
@@ -59,7 +59,7 @@ Provider configuration examples (including OpenCode Zen) live in
If `agents.defaults.models` is set, it becomes the **allowlist** for `/model` and for
session overrides. When a user selects a model that isnt in that allowlist,
Clawdbot returns:
Moltbot returns:
```
Model "provider/model" is not allowed. Use /model to list available models.
@@ -104,34 +104,34 @@ Notes:
- `/model status` is the detailed view (auth candidates and, when configured, provider endpoint `baseUrl` + `api` mode).
- Model refs are parsed by splitting on the **first** `/`. Use `provider/model` when typing `/model <ref>`.
- If the model ID itself contains `/` (OpenRouter-style), you must include the provider prefix (example: `/model openrouter/moonshotai/kimi-k2`).
- If you omit the provider, Clawdbot treats the input as an alias or a model for the **default provider** (only works when there is no `/` in the model ID).
- If you omit the provider, Moltbot treats the input as an alias or a model for the **default provider** (only works when there is no `/` in the model ID).
Full command behavior/config: [Slash commands](/tools/slash-commands).
## CLI commands
```bash
clawdbot models list
clawdbot models status
clawdbot models set <provider/model>
clawdbot models set-image <provider/model>
moltbot models list
moltbot models status
moltbot models set <provider/model>
moltbot models set-image <provider/model>
clawdbot models aliases list
clawdbot models aliases add <alias> <provider/model>
clawdbot models aliases remove <alias>
moltbot models aliases list
moltbot models aliases add <alias> <provider/model>
moltbot models aliases remove <alias>
clawdbot models fallbacks list
clawdbot models fallbacks add <provider/model>
clawdbot models fallbacks remove <provider/model>
clawdbot models fallbacks clear
moltbot models fallbacks list
moltbot models fallbacks add <provider/model>
moltbot models fallbacks remove <provider/model>
moltbot models fallbacks clear
clawdbot models image-fallbacks list
clawdbot models image-fallbacks add <provider/model>
clawdbot models image-fallbacks remove <provider/model>
clawdbot models image-fallbacks clear
moltbot models image-fallbacks list
moltbot models image-fallbacks add <provider/model>
moltbot models image-fallbacks remove <provider/model>
moltbot models image-fallbacks clear
```
`clawdbot models` (no subcommand) is a shortcut for `models status`.
`moltbot models` (no subcommand) is a shortcut for `models status`.
### `models list`
@@ -159,12 +159,12 @@ Preferred Anthropic auth is the Claude Code CLI setup-token (run anywhere; paste
```bash
claude setup-token
clawdbot models status
moltbot models status
```
## Scanning (OpenRouter free models)
`clawdbot models scan` inspects OpenRouters **free model catalog** and can
`moltbot models scan` inspects OpenRouters **free model catalog** and can
optionally probe models for tool and image support.
Key flags:

View File

@@ -39,7 +39,7 @@ reach other host locations unless sandboxing is enabled. See
## Paths (quick map)
- Config: `~/.clawdbot/clawdbot.json` (or `CLAWDBOT_CONFIG_PATH`)
- Config: `~/.clawdbot/moltbot.json` (or `CLAWDBOT_CONFIG_PATH`)
- State dir: `~/.clawdbot` (or `CLAWDBOT_STATE_DIR`)
- Workspace: `~/clawd` (or `~/clawd-<agentId>`)
- Agent dir: `~/.clawdbot/agents/<agentId>/agent` (or `agents.list[].agentDir`)
@@ -47,7 +47,7 @@ reach other host locations unless sandboxing is enabled. See
### Single-agent mode (default)
If you do nothing, Clawdbot runs a single agent:
If you do nothing, Moltbot runs a single agent:
- `agentId` defaults to **`main`**.
- Sessions are keyed as `agent:main:<mainKey>`.
@@ -59,7 +59,7 @@ If you do nothing, Clawdbot runs a single agent:
Use the agent wizard to add a new isolated agent:
```bash
clawdbot agents add work
moltbot agents add work
```
Then add `bindings` (or let the wizard do it) to route inbound messages.
@@ -67,7 +67,7 @@ Then add `bindings` (or let the wizard do it) to route inbound messages.
Verify with:
```bash
clawdbot agents list --bindings
moltbot agents list --bindings
```
## Multiple agents = multiple people, multiple personalities
@@ -139,7 +139,7 @@ multiple phone numbers without mixing sessions.
## Example: two WhatsApps → two agents
`~/.clawdbot/clawdbot.json` (JSON5):
`~/.clawdbot/moltbot.json` (JSON5):
```js
{

View File

@@ -1,24 +1,24 @@
---
summary: "OAuth in Clawdbot: token exchange, storage, and multi-account patterns"
summary: "OAuth in Moltbot: token exchange, storage, and multi-account patterns"
read_when:
- You want to understand Clawdbot OAuth end-to-end
- You want to understand Moltbot OAuth end-to-end
- You hit token invalidation / logout issues
- You want setup-token or OAuth auth flows
- You want multiple accounts or profile routing
---
# OAuth
Clawdbot supports “subscription auth” via OAuth for providers that offer it (notably **OpenAI Codex (ChatGPT OAuth)**). For Anthropic subscriptions, use the **setup-token** flow. This page explains:
Moltbot supports “subscription auth” via OAuth for providers that offer it (notably **OpenAI Codex (ChatGPT OAuth)**). For Anthropic subscriptions, use the **setup-token** flow. This page explains:
- how the OAuth **token exchange** works (PKCE)
- where tokens are **stored** (and why)
- how to handle **multiple accounts** (profiles + per-session overrides)
Clawdbot also supports **provider plugins** that ship their own OAuth or APIkey
Moltbot also supports **provider plugins** that ship their own OAuth or APIkey
flows. Run them via:
```bash
clawdbot models auth login --provider <id>
moltbot models auth login --provider <id>
```
## The token sink (why it exists)
@@ -26,9 +26,9 @@ clawdbot models auth login --provider <id>
OAuth providers commonly mint a **new refresh token** during login/refresh flows. Some providers (or OAuth clients) can invalidate older refresh tokens when a new one is issued for the same user/app.
Practical symptom:
- you log in via Clawdbot *and* via Claude Code / Codex CLI → one of them randomly gets “logged out” later
- you log in via Moltbot *and* via Claude Code / Codex CLI → one of them randomly gets “logged out” later
To reduce that, Clawdbot treats `auth-profiles.json` as a **token sink**:
To reduce that, Moltbot treats `auth-profiles.json` as a **token sink**:
- the runtime reads credentials from **one place**
- we can keep multiple profiles and route them deterministically
@@ -46,37 +46,37 @@ All of the above also respect `$CLAWDBOT_STATE_DIR` (state dir override). Full r
## Anthropic setup-token (subscription auth)
Run `claude setup-token` on any machine, then paste it into Clawdbot:
Run `claude setup-token` on any machine, then paste it into Moltbot:
```bash
clawdbot models auth setup-token --provider anthropic
moltbot models auth setup-token --provider anthropic
```
If you generated the token elsewhere, paste it manually:
```bash
clawdbot models auth paste-token --provider anthropic
moltbot models auth paste-token --provider anthropic
```
Verify:
```bash
clawdbot models status
moltbot models status
```
## OAuth exchange (how login works)
Clawdbots interactive login flows are implemented in `@mariozechner/pi-ai` and wired into the wizards/commands.
Moltbots interactive login flows are implemented in `@mariozechner/pi-ai` and wired into the wizards/commands.
### Anthropic (Claude Pro/Max) setup-token
Flow shape:
1) run `claude setup-token`
2) paste the token into Clawdbot
2) paste the token into Moltbot
3) store as a token auth profile (no refresh)
The wizard path is `clawdbot onboard` → auth choice `setup-token` (Anthropic).
The wizard path is `moltbot onboard` → auth choice `setup-token` (Anthropic).
### OpenAI Codex (ChatGPT OAuth)
@@ -89,7 +89,7 @@ Flow shape (PKCE):
5) exchange at `https://auth.openai.com/oauth/token`
6) extract `accountId` from the access token and store `{ access, refresh, expires, accountId }`
Wizard path is `clawdbot onboard` → auth choice `openai-codex`.
Wizard path is `moltbot onboard` → auth choice `openai-codex`.
## Refresh + expiry
@@ -110,8 +110,8 @@ Two patterns:
If you want “personal” and “work” to never interact, use isolated agents (separate sessions + credentials + workspace):
```bash
clawdbot agents add work
clawdbot agents add personal
moltbot agents add work
moltbot agents add personal
```
Then configure auth per-agent (wizard) and route chats to the right agent.
@@ -128,7 +128,7 @@ Example (session override):
- `/model Opus@anthropic:work`
How to see what profile IDs exist:
- `clawdbot channels list --json` (shows `auth[]`)
- `moltbot channels list --json` (shows `auth[]`)
Related docs:
- [/concepts/model-failover](/concepts/model-failover) (rotation + cooldown rules)

View File

@@ -1,5 +1,5 @@
---
summary: "How Clawdbot presence entries are produced, merged, and displayed"
summary: "How Moltbot presence entries are produced, merged, and displayed"
read_when:
- Debugging the Instances tab
- Investigating duplicate or stale instance rows
@@ -7,7 +7,7 @@ read_when:
---
# Presence
Clawdbot “presence” is a lightweight, besteffort view of:
Moltbot “presence” is a lightweight, besteffort view of:
- the **Gateway** itself, and
- **clients connected to the Gateway** (mac app, WebChat, CLI, etc.)

View File

@@ -30,7 +30,7 @@ read_when:
- Markdown parse errors are not retried; they fall back to plain text.
## Configuration
Set retry policy per provider in `~/.clawdbot/clawdbot.json`:
Set retry policy per provider in `~/.clawdbot/moltbot.json`:
```json5
{

View File

@@ -18,7 +18,7 @@ Session pruning trims **old tool results** from the in-memory context right befo
## Smart defaults (Anthropic)
- **OAuth or setup-token** profiles: enable `cache-ttl` pruning and set heartbeat to `1h`.
- **API key** profiles: enable `cache-ttl` pruning, set heartbeat to `30m`, and default `cacheControlTtl` to `1h` on Anthropic models.
- If you set any of these values explicitly, Clawdbot does **not** override them.
- If you set any of these values explicitly, Moltbot does **not** override them.
## What this improves (cost + cache behavior)
- **Why prune:** Anthropic prompt caching only applies within the TTL. If a session goes idle past the TTL, the next request re-caches the full prompt unless you trim it first.

View File

@@ -63,7 +63,7 @@ Parameters:
Behavior:
- `includeTools=false` filters `role: "toolResult"` messages.
- Returns messages array in the raw transcript format.
- When given a `sessionId`, Clawdbot resolves it to the corresponding session key (missing ids error).
- When given a `sessionId`, Moltbot resolves it to the corresponding session key (missing ids error).
## sessions_send
Send a message into another session.
@@ -81,11 +81,11 @@ Behavior:
- Announce delivery runs after the primary run completes and is best-effort; `status: "ok"` does not guarantee the announce was delivered.
- Waits via gateway `agent.wait` (server-side) so reconnects don't drop the wait.
- Agent-to-agent message context is injected for the primary run.
- After the primary run completes, Clawdbot runs a **reply-back loop**:
- After the primary run completes, Moltbot runs a **reply-back loop**:
- Round 2+ alternates between requester and target agents.
- Reply exactly `REPLY_SKIP` to stop the pingpong.
- Max turns is `session.agentToAgent.maxPingPongTurns` (05, default 5).
- Once the loop ends, Clawdbot runs the **agenttoagent announce step** (target agent only):
- Once the loop ends, Moltbot runs the **agenttoagent announce step** (target agent only):
- Reply exactly `ANNOUNCE_SKIP` to stay silent.
- Any other reply is sent to the target channel.
- Announce step includes the original request + round1 reply + latest pingpong reply.
@@ -145,7 +145,7 @@ Behavior:
- Sub-agents default to the full tool set **minus session tools** (configurable via `tools.subagents.tools`).
- Sub-agents are not allowed to call `sessions_spawn` (no sub-agent → sub-agent spawning).
- Always non-blocking: returns `{ status: "accepted", runId, childSessionKey }` immediately.
- After completion, Clawdbot runs a sub-agent **announce step** and posts the result to the requester chat channel.
- After completion, Moltbot runs a sub-agent **announce step** and posts the result to the requester chat channel.
- Reply exactly `ANNOUNCE_SKIP` during the announce step to stay silent.
- Announce replies are normalized to `Status`/`Result`/`Notes`; `Status` comes from runtime outcome (not model text).
- Sub-agent sessions are auto-archived after `agents.defaults.subagents.archiveAfterMinutes` (default: 60).

View File

@@ -5,7 +5,7 @@ read_when:
---
# Session Management
Clawdbot treats **one direct-chat session per agent** as primary. Direct chats collapse to `agent:<agentId>:<mainKey>` (default `main`), while group/channel chats get their own keys. `session.mainKey` is honored.
Moltbot treats **one direct-chat session per agent** as primary. Direct chats collapse to `agent:<agentId>:<mainKey>` (default `main`), while group/channel chats get their own keys. `session.mainKey` is honored.
Use `session.dmScope` to control how **direct messages** are grouped:
- `main` (default): all DMs share the main session for continuity.
@@ -14,7 +14,7 @@ Use `session.dmScope` to control how **direct messages** are grouped:
Use `session.identityLinks` to map provider-prefixed peer ids to a canonical identity so the same person shares a DM session across channels when using `per-peer` or `per-channel-peer`.
## Gateway is the source of truth
All session state is **owned by the gateway** (the “master” Clawdbot). UI clients (macOS app, WebChat, etc.) must query the gateway for session lists and token counts instead of reading local files.
All session state is **owned by the gateway** (the “master” Moltbot). UI clients (macOS app, WebChat, etc.) must query the gateway for session lists and token counts instead of reading local files.
- In **remote mode**, the session store you care about lives on the remote gateway host, not your Mac.
- Token counts shown in UIs come from the gateways store fields (`inputTokens`, `outputTokens`, `totalTokens`, `contextTokens`). Clients do not parse JSONL transcripts to “fix up” totals.
@@ -26,14 +26,14 @@ All session state is **owned by the gateway** (the “master” Clawdbot). UI cl
- The store is a map `sessionKey -> { sessionId, updatedAt, ... }`. Deleting entries is safe; they are recreated on demand.
- Group entries may include `displayName`, `channel`, `subject`, `room`, and `space` to label sessions in UIs.
- Session entries include `origin` metadata (label + routing hints) so UIs can explain where a session came from.
- Clawdbot does **not** read legacy Pi/Tau session folders.
- Moltbot does **not** read legacy Pi/Tau session folders.
## Session pruning
Clawdbot trims **old tool results** from the in-memory context right before LLM calls by default.
Moltbot trims **old tool results** from the in-memory context right before LLM calls by default.
This does **not** rewrite JSONL history. See [/concepts/session-pruning](/concepts/session-pruning).
## Pre-compaction memory flush
When a session nears auto-compaction, Clawdbot can run a **silent memory flush**
When a session nears auto-compaction, Moltbot can run a **silent memory flush**
turn that reminds the model to write durable notes to disk. This only runs when
the workspace is writable. See [Memory](/concepts/memory) and
[Compaction](/concepts/compaction).
@@ -58,10 +58,10 @@ the workspace is writable. See [Memory](/concepts/memory) and
- Reset policy: sessions are reused until they expire, and expiry is evaluated on the next inbound message.
- Daily reset: defaults to **4:00 AM local time on the gateway host**. A session is stale once its last update is earlier than the most recent daily reset time.
- Idle reset (optional): `idleMinutes` adds a sliding idle window. When both daily and idle resets are configured, **whichever expires first** forces a new session.
- Legacy idle-only: if you set `session.idleMinutes` without any `session.reset`/`resetByType` config, Clawdbot stays in idle-only mode for backward compatibility.
- Legacy idle-only: if you set `session.idleMinutes` without any `session.reset`/`resetByType` config, Moltbot stays in idle-only mode for backward compatibility.
- Per-type overrides (optional): `resetByType` lets you override the policy for `dm`, `group`, and `thread` sessions (thread = Slack/Discord threads, Telegram topics, Matrix threads when provided by the connector).
- Per-channel overrides (optional): `resetByChannel` overrides the reset policy for a channel (applies to all session types for that channel and takes precedence over `reset`/`resetByType`).
- Reset triggers: exact `/new` or `/reset` (plus any extras in `resetTriggers`) start a fresh session id and pass the remainder of the message through. `/new <model>` accepts a model alias, `provider/model`, or provider name (fuzzy match) to set the new session model. If `/new` or `/reset` is sent alone, Clawdbot runs a short “hello” greeting turn to confirm the reset.
- Reset triggers: exact `/new` or `/reset` (plus any extras in `resetTriggers`) start a fresh session id and pass the remainder of the message through. `/new <model>` accepts a model alias, `provider/model`, or provider name (fuzzy match) to set the new session model. If `/new` or `/reset` is sent alone, Moltbot runs a short “hello” greeting turn to confirm the reset.
- Manual reset: delete specific keys from the store or remove the JSONL transcript; the next message recreates them.
- Isolated cron jobs always mint a fresh `sessionId` per run (no idle reuse).
@@ -90,7 +90,7 @@ Send these as standalone messages so they register.
## Configuration (optional rename example)
```json5
// ~/.clawdbot/clawdbot.json
// ~/.clawdbot/moltbot.json
{
session: {
scope: "per-sender", // keep group keys separate
@@ -121,9 +121,9 @@ Send these as standalone messages so they register.
```
## Inspecting
- `clawdbot status` — shows store path and recent sessions.
- `clawdbot sessions --json` — dumps every entry (filter with `--active <minutes>`).
- `clawdbot gateway call sessions.list --params '{}'` — fetch sessions from the running gateway (use `--url`/`--token` for remote gateway access).
- `moltbot status` — shows store path and recent sessions.
- `moltbot sessions --json` — dumps every entry (filter with `--active <minutes>`).
- `moltbot gateway call sessions.list --params '{}'` — fetch sessions from the running gateway (use `--url`/`--token` for remote gateway access).
- Send `/status` as a standalone message in chat to see whether the agent is reachable, how much of the session context is used, current thinking/verbose toggles, and when your WhatsApp web creds were last refreshed (helps spot relink needs).
- Send `/context list` or `/context detail` to see whats in the system prompt and injected workspace files (and the biggest context contributors).
- Send `/stop` as a standalone message to abort the current run, clear queued followups for that session, and stop any sub-agent runs spawned from it (the reply includes the stopped count).

View File

@@ -7,7 +7,7 @@ read_when:
---
# Streaming + chunking
Clawdbot has two separate “streaming” layers:
Moltbot has two separate “streaming” layers:
- **Block streaming (channels):** emit completed **blocks** as the assistant writes. These are normal channel messages (not token deltas).
- **Token-ish streaming (Telegram only):** update a **draft bubble** with partial text while generating; final message is sent at the end.
@@ -59,7 +59,7 @@ Block chunking is implemented by `EmbeddedBlockChunker`:
## Coalescing (merge streamed blocks)
When block streaming is enabled, Clawdbot can **merge consecutive block chunks**
When block streaming is enabled, Moltbot can **merge consecutive block chunks**
before sending them out. This reduces “single-line spam” while still providing
progressive output.
@@ -109,7 +109,7 @@ Telegram is the only channel with draft streaming:
- Final reply is still a normal message.
- `/reasoning stream` writes reasoning into the draft bubble (Telegram only).
When draft streaming is active, Clawdbot disables block streaming for that reply to avoid double-streaming.
When draft streaming is active, Moltbot disables block streaming for that reply to avoid double-streaming.
```
Telegram (private + topics)

View File

@@ -1,14 +1,14 @@
---
summary: "What the Clawdbot system prompt contains and how it is assembled"
summary: "What the Moltbot system prompt contains and how it is assembled"
read_when:
- Editing system prompt text, tools list, or time/heartbeat sections
- Changing workspace bootstrap or skills injection behavior
---
# System Prompt
Clawdbot builds a custom system prompt for every agent run. The prompt is **Clawdbot-owned** and does not use the p-coding-agent default prompt.
Moltbot builds a custom system prompt for every agent run. The prompt is **Moltbot-owned** and does not use the p-coding-agent default prompt.
The prompt is assembled by Clawdbot and injected into each agent run.
The prompt is assembled by Moltbot and injected into each agent run.
## Structure
@@ -16,9 +16,9 @@ The prompt is intentionally compact and uses fixed sections:
- **Tooling**: current tool list + short descriptions.
- **Skills** (when available): tells the model how to load skill instructions on demand.
- **Clawdbot Self-Update**: how to run `config.apply` and `update.run`.
- **Moltbot Self-Update**: how to run `config.apply` and `update.run`.
- **Workspace**: working directory (`agents.defaults.workspace`).
- **Documentation**: local path to Clawdbot docs (repo or npm package) and when to read them.
- **Documentation**: local path to Moltbot docs (repo or npm package) and when to read them.
- **Workspace Files (injected)**: indicates bootstrap files are included below.
- **Sandbox** (when enabled): indicates sandboxed runtime, sandbox paths, and whether elevated exec is available.
- **Current Date & Time**: user-local time, timezone, and time format.
@@ -29,11 +29,11 @@ The prompt is intentionally compact and uses fixed sections:
## Prompt modes
Clawdbot can render smaller system prompts for sub-agents. The runtime sets a
Moltbot can render smaller system prompts for sub-agents. The runtime sets a
`promptMode` for each run (not a user-facing config):
- `full` (default): includes all sections above.
- `minimal`: used for sub-agents; omits **Skills**, **Memory Recall**, **Clawdbot
- `minimal`: used for sub-agents; omits **Skills**, **Memory Recall**, **Moltbot
Self-Update**, **Model Aliases**, **User Identity**, **Reply Tags**,
**Messaging**, **Silent Replies**, and **Heartbeats**. Tooling, Workspace,
Sandbox, Current Date & Time (when known), Runtime, and injected context stay
@@ -82,7 +82,7 @@ See [Date & Time](/date-time) for full behavior details.
## Skills
When eligible skills exist, Clawdbot injects a compact **available skills list**
When eligible skills exist, Moltbot injects a compact **available skills list**
(`formatSkillsForPrompt`) that includes the **file path** for each skill. The
prompt instructs the model to use `read` to load the SKILL.md at the listed
location (workspace, managed, or bundled). If no skills are eligible, the
@@ -103,8 +103,8 @@ This keeps the base prompt small while still enabling targeted skill usage.
## Documentation
When available, the system prompt includes a **Documentation** section that points to the
local Clawdbot docs directory (either `docs/` in the repo workspace or the bundled npm
local Moltbot docs directory (either `docs/` in the repo workspace or the bundled npm
package docs) and also notes the public mirror, source repo, community Discord, and
ClawdHub (https://clawdhub.com) for skills discovery. The prompt instructs the model to consult local docs first
for Clawdbot behavior, commands, configuration, or architecture, and to run
`clawdbot status` itself when possible (asking the user only when it lacks access).
for Moltbot behavior, commands, configuration, or architecture, and to run
`moltbot status` itself when possible (asking the user only when it lacks access).

View File

@@ -7,7 +7,7 @@ read_when:
# Timezones
Clawdbot standardizes timestamps so the model sees a **single reference time**.
Moltbot standardizes timestamps so the model sees a **single reference time**.
## Message envelopes (local by default)
@@ -72,7 +72,7 @@ Raw provider fields are preserved.
## User timezone for the system prompt
Set `agents.defaults.userTimezone` to tell the model the user's local time zone. If it is
unset, Clawdbot resolves the **host timezone at runtime** (no config write).
unset, Moltbot resolves the **host timezone at runtime** (no config write).
```json5
{

View File

@@ -91,7 +91,7 @@ Connect (first message):
"minProtocol": 2,
"maxProtocol": 2,
"client": {
"id": "clawdbot-macos",
"id": "moltbot-macos",
"displayName": "macos",
"version": "1.0.0",
"platform": "macos 15.1",
@@ -272,7 +272,7 @@ Unknown frame types are preserved as raw payloads for forward compatibility.
Generated JSON Schema is in the repo at `dist/protocol.schema.json`. The
published raw file is typically available at:
- https://raw.githubusercontent.com/clawdbot/clawdbot/main/dist/protocol.schema.json
- https://raw.githubusercontent.com/moltbot/moltbot/main/dist/protocol.schema.json
## When you change schemas

View File

@@ -1,5 +1,5 @@
---
summary: "When Clawdbot shows typing indicators and how to tune them"
summary: "When Moltbot shows typing indicators and how to tune them"
read_when:
- Changing typing indicator behavior or defaults
---
@@ -10,7 +10,7 @@ Typing indicators are sent to the chat channel while a run is active. Use
to control **how often** it refreshes.
## Defaults
When `agents.defaults.typingMode` is **unset**, Clawdbot keeps the legacy behavior:
When `agents.defaults.typingMode` is **unset**, Moltbot keeps the legacy behavior:
- **Direct chats**: typing starts immediately once the model loop begins.
- **Group chats with a mention**: typing starts immediately.
- **Group chats without a mention**: typing starts only when message text begins streaming.

View File

@@ -13,9 +13,9 @@ read_when:
## Where it shows up
- `/status` in chats: emojirich status card with session tokens + estimated cost (API key only). Provider usage shows for the **current model provider** when available.
- `/usage off|tokens|full` in chats: per-response usage footer (OAuth shows tokens only).
- `/usage cost` in chats: local cost summary aggregated from Clawdbot session logs.
- CLI: `clawdbot status --usage` prints a full per-provider breakdown.
- CLI: `clawdbot channels list` prints the same usage snapshot alongside provider config (use `--no-usage` to skip).
- `/usage cost` in chats: local cost summary aggregated from Moltbot session logs.
- CLI: `moltbot status --usage` prints a full per-provider breakdown.
- CLI: `moltbot channels list` prints the same usage snapshot alongside provider config (use `--no-usage` to skip).
- macOS menu bar: “Usage” section under Context (only if available).
## Providers + credentials