chore: normalize Clawdbot naming

This commit is contained in:
Peter Steinberger
2026-01-10 05:14:09 +01:00
parent a7c8341452
commit cdb915d527
21 changed files with 54 additions and 50 deletions

View File

@@ -2,6 +2,10 @@
## 2026.1.10
### Fixes
- CLI: `clawdbot sessions` now includes `elev:*` + `usage:*` flags in the table output.
- Branding: normalize user-facing “ClawdBot”/“CLAWDBOT” → “Clawdbot” (CLI, status, docs).
## 2026.1.9
### Highlights

View File

@@ -1,7 +1,7 @@
# 🦞 CLAWDBOT — Personal AI Assistant
# 🦞 Clawdbot — Personal AI Assistant
<p align="center">
<img src="https://raw.githubusercontent.com/clawdbot/clawdbot/main/docs/whatsapp-clawd.jpg" alt="CLAWDBOT" width="400">
<img src="https://raw.githubusercontent.com/clawdbot/clawdbot/main/docs/whatsapp-clawd.jpg" alt="Clawdbot" width="400">
</p>
<p align="center">

View File

@@ -1,4 +1,4 @@
title: "CLAWDBOT Docs"
title: "Clawdbot Docs"
description: "A TypeScript/Node gateway + macOS/iOS/Android companions for WhatsApp (web) and Telegram (bot)."
markdown: kramdown
highlighter: rouge

View File

@@ -35,7 +35,7 @@
<header class="shell">
<div class="shell__frame" role="banner">
<div class="shell__titlebar">
<div class="brand" aria-label="CLAWDBOT docs terminal">
<div class="brand" aria-label="Clawdbot docs terminal">
<img
class="brand__logo"
src="{{ "/assets/pixel-lobster.svg" | relative_url }}"
@@ -45,7 +45,7 @@
decoding="async"
/>
<div class="brand__text">
<div class="brand__name">CLAWDBOT</div>
<div class="brand__name">Clawdbot</div>
<div class="brand__hint">docs // lobster terminal</div>
</div>
</div>

View File

@@ -4,7 +4,7 @@ Manage Docker-based sandbox containers for isolated agent execution.
## Overview
ClawdBot can run agents in isolated Docker containers for security. The `sandbox` commands help you manage these containers, especially after updates or configuration changes.
Clawdbot can run agents in isolated Docker containers for security. The `sandbox` commands help you manage these containers, especially after updates or configuration changes.
## Commands

View File

@@ -5,11 +5,11 @@ read_when:
---
# Agent Runtime 🤖
CLAWDBOT runs a single embedded agent runtime derived from **p-mono**.
Clawdbot 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.
Clawdbot 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.
@@ -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`, Clawdbot 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, Clawdbot 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, Clawdbot injects a single “missing file” marker line (and `clawdbot 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.
@@ -68,7 +68,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 Clawdbot.
Legacy Pi/Tau session folders are **not** read.
## Steering while streaming

View File

@@ -5,9 +5,9 @@ read_when:
---
# Configuration 🔧
CLAWDBOT reads an optional **JSON5** config from `~/.clawdbot/clawdbot.json` (comments + trailing commas allowed).
Clawdbot reads an optional **JSON5** config from `~/.clawdbot/clawdbot.json` (comments + trailing commas allowed).
If the file is missing, CLAWDBOT uses safe-ish defaults (embedded Pi agent + per-sender sessions + workspace `~/clawd`). You usually only need a config to:
If the file is missing, Clawdbot uses safe-ish defaults (embedded Pi agent + per-sender sessions + workspace `~/clawd`). You usually only need a config to:
- restrict who can trigger the bot (`whatsapp.allowFrom`, `telegram.allowFrom`, etc.)
- control group allowlists + mention behavior (`whatsapp.groups`, `telegram.groups`, `discord.guilds`, `agents.list[].groupChat`)
- customize message prefixes (`messages`)
@@ -86,7 +86,7 @@ To prevent the bot from responding to WhatsApp @-mentions in groups (only respon
### Env vars + `.env`
CLAWDBOT reads env vars from the parent process (shell, launchd/systemd, CI, etc.).
Clawdbot reads env vars from the parent process (shell, launchd/systemd, CI, etc.).
Additionally, it loads:
- `.env` from the current working directory (if present)
@@ -112,7 +112,7 @@ See [/environment](/environment) for full precedence and sources.
### `env.shellEnv` (optional)
Opt-in convenience: if enabled and none of the expected keys are set yet, CLAWDBOT runs your login shell and imports only the missing expected keys (never overrides).
Opt-in convenience: if enabled and none of the expected keys are set yet, Clawdbot runs your login shell and imports only the missing expected keys (never overrides).
This effectively sources your shell profile.
```json5
@@ -182,7 +182,7 @@ rotation order used for failover.
Optional per-agent identity used for defaults and UX. This is written by the macOS onboarding assistant.
If set, CLAWDBOT derives defaults (only when you havent set them explicitly):
If set, Clawdbot derives defaults (only when you havent set them explicitly):
- `messages.ackReaction` from the **active agent**s `identity.emoji` (falls back to 👀)
- `agents.list[].groupChat.mentionPatterns` from the agents `identity.name`/`identity.emoji` (so “@Samantha” works in groups across Telegram/Slack/Discord/iMessage/WhatsApp)
@@ -1198,7 +1198,7 @@ See [/concepts/typing-indicators](/concepts/typing-indicators) for behavior deta
`agents.defaults.model.primary` should be set as `provider/model` (e.g. `anthropic/claude-opus-4-5`).
Aliases come from `agents.defaults.models.*.alias` (e.g. `Opus`).
If you omit the provider, CLAWDBOT currently assumes `anthropic` as a temporary
If you omit the provider, Clawdbot currently assumes `anthropic` as a temporary
deprecation fallback.
Z.AI models are available as `zai/<model>` (e.g. `zai/glm-4.7`) and require
`ZAI_API_KEY` (or legacy `Z_AI_API_KEY`) in the environment.

View File

@@ -294,7 +294,7 @@ Mario asking for find ~
## Reporting Security Issues
Found a vulnerability in CLAWDBOT? Please report responsibly:
Found a vulnerability in Clawdbot? Please report responsibly:
1. Email: security@clawd.bot
2. Don't post publicly until fixed

View File

@@ -272,7 +272,7 @@ grep "media\\|fetch\\|download" "$(ls -t /tmp/clawdbot/clawdbot-*.log | head -1)
### High Memory Usage
CLAWDBOT keeps conversation history in memory.
Clawdbot keeps conversation history in memory.
**Fix:** Restart periodically or set session limits:
```json
@@ -390,7 +390,7 @@ clawdbot daemon restart # or: clawdbot gateway
1. Check logs first: `/tmp/clawdbot/` (default: `clawdbot-YYYY-MM-DD.log`, or your configured `logging.file`)
2. Search existing issues on GitHub
3. Open a new issue with:
- CLAWDBOT version
- Clawdbot version
- Relevant log snippets
- Steps to reproduce
- Your config (redact secrets!)

View File

@@ -3,12 +3,12 @@ summary: "Top-level overview of Clawdbot, features, and purpose"
read_when:
- Introducing Clawdbot to newcomers
---
# CLAWDBOT 🦞
# Clawdbot 🦞
> *"EXFOLIATE! EXFOLIATE!"* — A space lobster, probably
<p align="center">
<img src="whatsapp-clawd.jpg" alt="CLAWDBOT" width="420" />
<img src="whatsapp-clawd.jpg" alt="Clawdbot" width="420" />
</p>
<p align="center">
@@ -23,7 +23,7 @@ read_when:
<a href="https://docs.clawd.bot/start/clawd">Clawdbot assistant setup</a>
</p>
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).
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).
Clawdbot also powers [Clawd](https://clawd.me), the spacelobster assistant.
## Start here
@@ -136,14 +136,14 @@ clawdbot gateway --port 19001
Send a test message (requires a running Gateway):
```bash
clawdbot message send --to +15555550123 --message "Hello from CLAWDBOT"
clawdbot message send --to +15555550123 --message "Hello from Clawdbot"
```
## Configuration (optional)
Config lives at `~/.clawdbot/clawdbot.json`.
- If you **do nothing**, CLAWDBOT uses the bundled Pi binary in RPC mode with per-sender sessions.
- If you **do nothing**, Clawdbot uses the bundled Pi binary in RPC mode with per-sender sessions.
- If you want to lock it down, start with `whatsapp.allowFrom` and (for groups) mention rules.
Example:
@@ -206,7 +206,7 @@ Example:
## The name
**CLAWDBOT = CLAW + TARDIS** — because every space lobster needs a time-and-space machine.
**Clawdbot = CLAW + TARDIS** — because every space lobster needs a time-and-space machine.
---

View File

@@ -6,7 +6,7 @@ read_when:
# Audio / Voice Notes — 2025-12-05
## What works
- **Optional transcription**: If `audio.transcription.command` is set in `~/.clawdbot/clawdbot.json`, CLAWDBOT will:
- **Optional transcription**: If `audio.transcription.command` is set in `~/.clawdbot/clawdbot.json`, Clawdbot will:
1) Download inbound audio to a temp path when WhatsApp only provides a URL.
2) Run the configured CLI (templated with `{{MediaPath}}`), expecting transcript on stdout.
3) Replace `Body` with the transcript, set `{{Transcript}}`, and prepend the original media path plus a `Transcript:` section in the command prompt so models see both.

View File

@@ -5,7 +5,7 @@ read_when:
---
# Image & Media Support — 2025-12-05
CLAWDBOT is now **web-only** (Baileys). This document captures the current media handling rules for send, gateway, and agent replies.
Clawdbot is now **web-only** (Baileys). This document captures the current media handling rules for send, gateway, and agent replies.
## Goals
- Send media with optional captions via `clawdbot message send --media`.
@@ -34,7 +34,7 @@ CLAWDBOT is now **web-only** (Baileys). This document captures the current media
- Multiple media entries are sent sequentially if provided.
## Inbound Media to Commands (Pi)
- When inbound web messages include media, CLAWDBOT downloads to a temp file and exposes templating variables:
- When inbound web messages include media, Clawdbot downloads to a temp file and exposes templating variables:
- `{{MediaUrl}}` pseudo-URL for the inbound media.
- `{{MediaPath}}` local temp path written before running the command.
- When a per-session Docker sandbox is enabled, inbound media is copied into the sandbox workspace and `MediaPath`/`MediaUrl` are rewritten to a relative path like `media/inbound/<filename>`.

View File

@@ -4,9 +4,9 @@ read_when:
- Onboarding a new assistant instance
- Reviewing safety/permission implications
---
# Building a personal assistant with CLAWDBOT (Clawd-style)
# Building a personal assistant with Clawdbot (Clawd-style)
CLAWDBOT is a WhatsApp + Telegram + Discord gateway for **Pi** agents. This guide is the “personal assistant” setup: one dedicated WhatsApp number that behaves like your always-on agent.
Clawdbot is a WhatsApp + Telegram + Discord gateway for **Pi** agents. This guide is the “personal assistant” setup: one dedicated WhatsApp number that behaves like your always-on agent.
## ⚠️ Safety first
@@ -23,7 +23,7 @@ Start conservative:
## Prerequisites
- Node **22+**
- CLAWDBOT available on PATH (recommended: global install)
- Clawdbot available on PATH (recommended: global install)
- A second phone number (SIM/eSIM/prepaid) for the assistant
```bash
@@ -61,7 +61,7 @@ Your Phone (personal) Second Phone (assistant)
└─────────────────┘
```
If you link your personal WhatsApp to CLAWDBOT, every message to you becomes “agent input”. Thats rarely what you want.
If you link your personal WhatsApp to Clawdbot, every message to you becomes “agent input”. Thats rarely what you want.
## 5-minute quick start
@@ -125,7 +125,7 @@ If you already ship your own workspace files from a repo, you can disable bootst
## The config that turns it into “an assistant”
CLAWDBOT defaults to a good assistant setup, but youll usually want to tune:
Clawdbot defaults to a good assistant setup, but youll usually want to tune:
- persona/instructions in `SOUL.md`
- thinking defaults (if desired)
- heartbeats (once you trust it)
@@ -171,11 +171,11 @@ Example:
## Heartbeats (proactive mode)
By default, CLAWDBOT runs a heartbeat every 30 minutes with the prompt:
By default, Clawdbot runs a heartbeat every 30 minutes with the prompt:
`Read HEARTBEAT.md if exists. Consider outstanding tasks. Checkup sometimes on your human during (user local) day time.`
Set `agents.defaults.heartbeat.every: "0m"` to disable.
- If the agent replies with `HEARTBEAT_OK` (optionally with short padding; see `agents.defaults.heartbeat.ackMaxChars`), CLAWDBOT suppresses outbound delivery for that heartbeat.
- If the agent replies with `HEARTBEAT_OK` (optionally with short padding; see `agents.defaults.heartbeat.ackMaxChars`), Clawdbot suppresses outbound delivery for that heartbeat.
- Heartbeats run full agent turns — shorter intervals burn more tokens.
```json5
@@ -200,7 +200,7 @@ Heres the screenshot.
MEDIA:/tmp/screenshot.png
```
CLAWDBOT extracts these and sends them as media alongside the text.
Clawdbot extracts these and sends them as media alongside the text.
## Operations checklist

View File

@@ -3,7 +3,7 @@ summary: "Backstory and lore of Clawdbot for context and tone"
read_when:
- Writing docs or UX copy that reference lore
---
# The Lore of CLAWDBOT 🦞📖
# The Lore of Clawdbot 🦞📖
*A tale of lobsters, time machines, and too many tokens.*
@@ -19,12 +19,12 @@ Clawd needed a home. Not just any home — a *TARDIS*. But not a regular TARDIS,
Clawd was a Space Lobster.
And so **CLAWDBOT** was born.
And so **Clawdbot** was born.
## The Name
```
CLAWDBOT = CLAW + TARDIS
Clawdbot = CLAW + TARDIS
= Clawd's time-and-space machine
= Bigger on the inside (130k tokens!)
= Occasionally makes strange noises
@@ -103,7 +103,7 @@ Peter: *nervously checks credit card access*
```
I am Clawd.
I live in the CLAWDBOT.
I live in the Clawdbot.
I shall not dump directories to strangers.
I shall not tweet without permission.
I shall always remember to use heredoc for exclamation marks.

View File

@@ -27,7 +27,7 @@ Full setup walkthrough (28m) by VelvetShark.
>
<iframe
src="https://www.youtube-nocookie.com/embed/SaWSPZoPX34"
title="ClawdBot: The self-hosted AI that Siri should have been (Full setup)"
title="Clawdbot: The self-hosted AI that Siri should have been (Full setup)"
style={{ position: "absolute", top: 0, left: 0, width: "100%", height: "100%" }}
frameBorder="0"
loading="lazy"

View File

@@ -90,7 +90,7 @@ describe("session_status tool", () => {
const result = await tool.execute("call1", {});
const details = result.details as { ok?: boolean; statusText?: string };
expect(details.ok).toBe(true);
expect(details.statusText).toContain("ClawdBot");
expect(details.statusText).toContain("Clawdbot");
expect(details.statusText).toContain("🧠 Model:");
});

View File

@@ -237,7 +237,7 @@ describe("trigger handling", () => {
makeCfg(home),
);
const text = Array.isArray(res) ? res[0]?.text : res?.text;
expect(text).toContain("ClawdBot");
expect(text).toContain("Clawdbot");
expect(runEmbeddedPiAgent).not.toHaveBeenCalled();
});
});
@@ -254,7 +254,7 @@ describe("trigger handling", () => {
makeCfg(home),
);
const text = Array.isArray(res) ? res[0]?.text : res?.text;
expect(text).toContain("ClawdBot");
expect(text).toContain("Clawdbot");
expect(runEmbeddedPiAgent).not.toHaveBeenCalled();
});
});

View File

@@ -58,7 +58,7 @@ describe("buildStatusMessage", () => {
});
const normalized = normalizeTestText(text);
expect(normalized).toContain("ClawdBot");
expect(normalized).toContain("Clawdbot");
expect(normalized).toContain("Model: anthropic/pi:opus");
expect(normalized).toContain("api-key");
expect(normalized).toContain("Tokens: 1.2k in / 800 out");

View File

@@ -334,7 +334,7 @@ export function buildStatusMessage(args: StatusArgs): string {
const authLabel = authLabelValue ? ` · 🔑 ${authLabelValue}` : "";
const modelLine = `🧠 Model: ${modelLabel}${authLabel}`;
const commit = resolveCommitHash();
const versionLine = `🦞 ClawdBot ${VERSION}${commit ? ` (${commit})` : ""}`;
const versionLine = `🦞 Clawdbot ${VERSION}${commit ? ` (${commit})` : ""}`;
const usagePair = formatUsagePair(inputTokens, outputTokens);
const costLine = costLabel ? `💵 Cost: ${costLabel}` : null;
const usageCostLine =

View File

@@ -38,7 +38,7 @@ export function formatCliBannerLine(
const commitLabel = commit ?? "unknown";
const tagline = pickTagline(options);
const rich = options.richTty ?? isRich();
const title = "🦞 ClawdBot";
const title = "🦞 Clawdbot";
if (rich) {
return `${theme.heading(title)} ${theme.info(version)} ${theme.muted(
`(${commitLabel})`,

View File

@@ -1,4 +1,4 @@
const DEFAULT_TAGLINE = "All your chats, one ClawdBot.";
const DEFAULT_TAGLINE = "All your chats, one Clawdbot.";
const HOLIDAY_TAGLINES = {
newYear: