mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-19 09:58:38 +00:00
chore: normalize Clawdbot naming
This commit is contained in:
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
## 2026.1.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
|
## 2026.1.9
|
||||||
|
|
||||||
### Highlights
|
### Highlights
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# 🦞 CLAWDBOT — Personal AI Assistant
|
# 🦞 Clawdbot — Personal AI Assistant
|
||||||
|
|
||||||
<p align="center">
|
<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>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
|
|||||||
@@ -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)."
|
description: "A TypeScript/Node gateway + macOS/iOS/Android companions for WhatsApp (web) and Telegram (bot)."
|
||||||
markdown: kramdown
|
markdown: kramdown
|
||||||
highlighter: rouge
|
highlighter: rouge
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
<header class="shell">
|
<header class="shell">
|
||||||
<div class="shell__frame" role="banner">
|
<div class="shell__frame" role="banner">
|
||||||
<div class="shell__titlebar">
|
<div class="shell__titlebar">
|
||||||
<div class="brand" aria-label="CLAWDBOT docs terminal">
|
<div class="brand" aria-label="Clawdbot docs terminal">
|
||||||
<img
|
<img
|
||||||
class="brand__logo"
|
class="brand__logo"
|
||||||
src="{{ "/assets/pixel-lobster.svg" | relative_url }}"
|
src="{{ "/assets/pixel-lobster.svg" | relative_url }}"
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
decoding="async"
|
decoding="async"
|
||||||
/>
|
/>
|
||||||
<div class="brand__text">
|
<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 class="brand__hint">docs // lobster terminal</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ Manage Docker-based sandbox containers for isolated agent execution.
|
|||||||
|
|
||||||
## Overview
|
## 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
|
## Commands
|
||||||
|
|
||||||
|
|||||||
@@ -5,11 +5,11 @@ read_when:
|
|||||||
---
|
---
|
||||||
# Agent Runtime 🤖
|
# 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)
|
## Workspace (required)
|
||||||
|
|
||||||
CLAWDBOT uses a single agent workspace directory (`agents.defaults.workspace`) as the agent’s **only** working directory (`cwd`) for tools and context.
|
Clawdbot uses a single agent workspace directory (`agents.defaults.workspace`) as the agent’s **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 `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)
|
## 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”
|
- `AGENTS.md` — operating instructions + “memory”
|
||||||
- `SOUL.md` — persona, boundaries, tone
|
- `SOUL.md` — persona, boundaries, tone
|
||||||
- `TOOLS.md` — user-maintained tool notes (e.g. `imsg`, `sag`, conventions)
|
- `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
|
- `IDENTITY.md` — agent name/vibe/emoji
|
||||||
- `USER.md` — user profile + preferred address
|
- `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).
|
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.
|
`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:
|
Session transcripts are stored as JSONL at:
|
||||||
- `~/.clawdbot/agents/<agentId>/sessions/<SessionId>.jsonl`
|
- `~/.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.
|
Legacy Pi/Tau session folders are **not** read.
|
||||||
|
|
||||||
## Steering while streaming
|
## Steering while streaming
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ read_when:
|
|||||||
---
|
---
|
||||||
# Configuration 🔧
|
# 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.)
|
- 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`)
|
- control group allowlists + mention behavior (`whatsapp.groups`, `telegram.groups`, `discord.guilds`, `agents.list[].groupChat`)
|
||||||
- customize message prefixes (`messages`)
|
- customize message prefixes (`messages`)
|
||||||
@@ -86,7 +86,7 @@ To prevent the bot from responding to WhatsApp @-mentions in groups (only respon
|
|||||||
|
|
||||||
### Env vars + `.env`
|
### 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:
|
Additionally, it loads:
|
||||||
- `.env` from the current working directory (if present)
|
- `.env` from the current working directory (if present)
|
||||||
@@ -112,7 +112,7 @@ See [/environment](/environment) for full precedence and sources.
|
|||||||
|
|
||||||
### `env.shellEnv` (optional)
|
### `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.
|
This effectively sources your shell profile.
|
||||||
|
|
||||||
```json5
|
```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.
|
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 haven’t set them explicitly):
|
If set, Clawdbot derives defaults (only when you haven’t set them explicitly):
|
||||||
- `messages.ackReaction` from the **active agent**’s `identity.emoji` (falls back to 👀)
|
- `messages.ackReaction` from the **active agent**’s `identity.emoji` (falls back to 👀)
|
||||||
- `agents.list[].groupChat.mentionPatterns` from the agent’s `identity.name`/`identity.emoji` (so “@Samantha” works in groups across Telegram/Slack/Discord/iMessage/WhatsApp)
|
- `agents.list[].groupChat.mentionPatterns` from the agent’s `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`).
|
`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`).
|
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.
|
deprecation fallback.
|
||||||
Z.AI models are available as `zai/<model>` (e.g. `zai/glm-4.7`) and require
|
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.
|
`ZAI_API_KEY` (or legacy `Z_AI_API_KEY`) in the environment.
|
||||||
|
|||||||
@@ -294,7 +294,7 @@ Mario asking for find ~
|
|||||||
|
|
||||||
## Reporting Security Issues
|
## Reporting Security Issues
|
||||||
|
|
||||||
Found a vulnerability in CLAWDBOT? Please report responsibly:
|
Found a vulnerability in Clawdbot? Please report responsibly:
|
||||||
|
|
||||||
1. Email: security@clawd.bot
|
1. Email: security@clawd.bot
|
||||||
2. Don't post publicly until fixed
|
2. Don't post publicly until fixed
|
||||||
|
|||||||
@@ -272,7 +272,7 @@ grep "media\\|fetch\\|download" "$(ls -t /tmp/clawdbot/clawdbot-*.log | head -1)
|
|||||||
|
|
||||||
### High Memory Usage
|
### High Memory Usage
|
||||||
|
|
||||||
CLAWDBOT keeps conversation history in memory.
|
Clawdbot keeps conversation history in memory.
|
||||||
|
|
||||||
**Fix:** Restart periodically or set session limits:
|
**Fix:** Restart periodically or set session limits:
|
||||||
```json
|
```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`)
|
1. Check logs first: `/tmp/clawdbot/` (default: `clawdbot-YYYY-MM-DD.log`, or your configured `logging.file`)
|
||||||
2. Search existing issues on GitHub
|
2. Search existing issues on GitHub
|
||||||
3. Open a new issue with:
|
3. Open a new issue with:
|
||||||
- CLAWDBOT version
|
- Clawdbot version
|
||||||
- Relevant log snippets
|
- Relevant log snippets
|
||||||
- Steps to reproduce
|
- Steps to reproduce
|
||||||
- Your config (redact secrets!)
|
- Your config (redact secrets!)
|
||||||
|
|||||||
@@ -3,12 +3,12 @@ summary: "Top-level overview of Clawdbot, features, and purpose"
|
|||||||
read_when:
|
read_when:
|
||||||
- Introducing Clawdbot to newcomers
|
- Introducing Clawdbot to newcomers
|
||||||
---
|
---
|
||||||
# CLAWDBOT 🦞
|
# Clawdbot 🦞
|
||||||
|
|
||||||
> *"EXFOLIATE! EXFOLIATE!"* — A space lobster, probably
|
> *"EXFOLIATE! EXFOLIATE!"* — A space lobster, probably
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="whatsapp-clawd.jpg" alt="CLAWDBOT" width="420" />
|
<img src="whatsapp-clawd.jpg" alt="Clawdbot" width="420" />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
@@ -23,7 +23,7 @@ read_when:
|
|||||||
<a href="https://docs.clawd.bot/start/clawd">Clawdbot assistant setup</a>
|
<a href="https://docs.clawd.bot/start/clawd">Clawdbot assistant setup</a>
|
||||||
</p>
|
</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 space‑lobster assistant.
|
Clawdbot also powers [Clawd](https://clawd.me), the space‑lobster assistant.
|
||||||
|
|
||||||
## Start here
|
## Start here
|
||||||
@@ -136,14 +136,14 @@ clawdbot gateway --port 19001
|
|||||||
Send a test message (requires a running Gateway):
|
Send a test message (requires a running Gateway):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
clawdbot message send --to +15555550123 --message "Hello from CLAWDBOT"
|
clawdbot message send --to +15555550123 --message "Hello from Clawdbot"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Configuration (optional)
|
## Configuration (optional)
|
||||||
|
|
||||||
Config lives at `~/.clawdbot/clawdbot.json`.
|
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.
|
- If you want to lock it down, start with `whatsapp.allowFrom` and (for groups) mention rules.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
@@ -206,7 +206,7 @@ Example:
|
|||||||
|
|
||||||
## The name
|
## 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.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ read_when:
|
|||||||
# Audio / Voice Notes — 2025-12-05
|
# Audio / Voice Notes — 2025-12-05
|
||||||
|
|
||||||
## What works
|
## 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.
|
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.
|
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.
|
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.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ read_when:
|
|||||||
---
|
---
|
||||||
# Image & Media Support — 2025-12-05
|
# 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
|
## Goals
|
||||||
- Send media with optional captions via `clawdbot message send --media`.
|
- 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.
|
- Multiple media entries are sent sequentially if provided.
|
||||||
|
|
||||||
## Inbound Media to Commands (Pi)
|
## 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.
|
- `{{MediaUrl}}` pseudo-URL for the inbound media.
|
||||||
- `{{MediaPath}}` local temp path written before running the command.
|
- `{{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>`.
|
- 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>`.
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ read_when:
|
|||||||
- Onboarding a new assistant instance
|
- Onboarding a new assistant instance
|
||||||
- Reviewing safety/permission implications
|
- 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
|
## ⚠️ Safety first
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ Start conservative:
|
|||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
- Node **22+**
|
- 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
|
- A second phone number (SIM/eSIM/prepaid) for the assistant
|
||||||
|
|
||||||
```bash
|
```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”. That’s rarely what you want.
|
If you link your personal WhatsApp to Clawdbot, every message to you becomes “agent input”. That’s rarely what you want.
|
||||||
|
|
||||||
## 5-minute quick start
|
## 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”
|
## The config that turns it into “an assistant”
|
||||||
|
|
||||||
CLAWDBOT defaults to a good assistant setup, but you’ll usually want to tune:
|
Clawdbot defaults to a good assistant setup, but you’ll usually want to tune:
|
||||||
- persona/instructions in `SOUL.md`
|
- persona/instructions in `SOUL.md`
|
||||||
- thinking defaults (if desired)
|
- thinking defaults (if desired)
|
||||||
- heartbeats (once you trust it)
|
- heartbeats (once you trust it)
|
||||||
@@ -171,11 +171,11 @@ Example:
|
|||||||
|
|
||||||
## Heartbeats (proactive mode)
|
## 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.`
|
`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.
|
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.
|
- Heartbeats run full agent turns — shorter intervals burn more tokens.
|
||||||
|
|
||||||
```json5
|
```json5
|
||||||
@@ -200,7 +200,7 @@ Here’s the screenshot.
|
|||||||
MEDIA:/tmp/screenshot.png
|
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
|
## Operations checklist
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ summary: "Backstory and lore of Clawdbot for context and tone"
|
|||||||
read_when:
|
read_when:
|
||||||
- Writing docs or UX copy that reference lore
|
- 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.*
|
*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.
|
Clawd was a Space Lobster.
|
||||||
|
|
||||||
And so **CLAWDBOT** was born.
|
And so **Clawdbot** was born.
|
||||||
|
|
||||||
## The Name
|
## The Name
|
||||||
|
|
||||||
```
|
```
|
||||||
CLAWDBOT = CLAW + TARDIS
|
Clawdbot = CLAW + TARDIS
|
||||||
= Clawd's time-and-space machine
|
= Clawd's time-and-space machine
|
||||||
= Bigger on the inside (130k tokens!)
|
= Bigger on the inside (130k tokens!)
|
||||||
= Occasionally makes strange noises
|
= Occasionally makes strange noises
|
||||||
@@ -103,7 +103,7 @@ Peter: *nervously checks credit card access*
|
|||||||
|
|
||||||
```
|
```
|
||||||
I am Clawd.
|
I am Clawd.
|
||||||
I live in the CLAWDBOT.
|
I live in the Clawdbot.
|
||||||
I shall not dump directories to strangers.
|
I shall not dump directories to strangers.
|
||||||
I shall not tweet without permission.
|
I shall not tweet without permission.
|
||||||
I shall always remember to use heredoc for exclamation marks.
|
I shall always remember to use heredoc for exclamation marks.
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ Full setup walkthrough (28m) by VelvetShark.
|
|||||||
>
|
>
|
||||||
<iframe
|
<iframe
|
||||||
src="https://www.youtube-nocookie.com/embed/SaWSPZoPX34"
|
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%" }}
|
style={{ position: "absolute", top: 0, left: 0, width: "100%", height: "100%" }}
|
||||||
frameBorder="0"
|
frameBorder="0"
|
||||||
loading="lazy"
|
loading="lazy"
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ describe("session_status tool", () => {
|
|||||||
const result = await tool.execute("call1", {});
|
const result = await tool.execute("call1", {});
|
||||||
const details = result.details as { ok?: boolean; statusText?: string };
|
const details = result.details as { ok?: boolean; statusText?: string };
|
||||||
expect(details.ok).toBe(true);
|
expect(details.ok).toBe(true);
|
||||||
expect(details.statusText).toContain("ClawdBot");
|
expect(details.statusText).toContain("Clawdbot");
|
||||||
expect(details.statusText).toContain("🧠 Model:");
|
expect(details.statusText).toContain("🧠 Model:");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ describe("trigger handling", () => {
|
|||||||
makeCfg(home),
|
makeCfg(home),
|
||||||
);
|
);
|
||||||
const text = Array.isArray(res) ? res[0]?.text : res?.text;
|
const text = Array.isArray(res) ? res[0]?.text : res?.text;
|
||||||
expect(text).toContain("ClawdBot");
|
expect(text).toContain("Clawdbot");
|
||||||
expect(runEmbeddedPiAgent).not.toHaveBeenCalled();
|
expect(runEmbeddedPiAgent).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -254,7 +254,7 @@ describe("trigger handling", () => {
|
|||||||
makeCfg(home),
|
makeCfg(home),
|
||||||
);
|
);
|
||||||
const text = Array.isArray(res) ? res[0]?.text : res?.text;
|
const text = Array.isArray(res) ? res[0]?.text : res?.text;
|
||||||
expect(text).toContain("ClawdBot");
|
expect(text).toContain("Clawdbot");
|
||||||
expect(runEmbeddedPiAgent).not.toHaveBeenCalled();
|
expect(runEmbeddedPiAgent).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ describe("buildStatusMessage", () => {
|
|||||||
});
|
});
|
||||||
const normalized = normalizeTestText(text);
|
const normalized = normalizeTestText(text);
|
||||||
|
|
||||||
expect(normalized).toContain("ClawdBot");
|
expect(normalized).toContain("Clawdbot");
|
||||||
expect(normalized).toContain("Model: anthropic/pi:opus");
|
expect(normalized).toContain("Model: anthropic/pi:opus");
|
||||||
expect(normalized).toContain("api-key");
|
expect(normalized).toContain("api-key");
|
||||||
expect(normalized).toContain("Tokens: 1.2k in / 800 out");
|
expect(normalized).toContain("Tokens: 1.2k in / 800 out");
|
||||||
|
|||||||
@@ -334,7 +334,7 @@ export function buildStatusMessage(args: StatusArgs): string {
|
|||||||
const authLabel = authLabelValue ? ` · 🔑 ${authLabelValue}` : "";
|
const authLabel = authLabelValue ? ` · 🔑 ${authLabelValue}` : "";
|
||||||
const modelLine = `🧠 Model: ${modelLabel}${authLabel}`;
|
const modelLine = `🧠 Model: ${modelLabel}${authLabel}`;
|
||||||
const commit = resolveCommitHash();
|
const commit = resolveCommitHash();
|
||||||
const versionLine = `🦞 ClawdBot ${VERSION}${commit ? ` (${commit})` : ""}`;
|
const versionLine = `🦞 Clawdbot ${VERSION}${commit ? ` (${commit})` : ""}`;
|
||||||
const usagePair = formatUsagePair(inputTokens, outputTokens);
|
const usagePair = formatUsagePair(inputTokens, outputTokens);
|
||||||
const costLine = costLabel ? `💵 Cost: ${costLabel}` : null;
|
const costLine = costLabel ? `💵 Cost: ${costLabel}` : null;
|
||||||
const usageCostLine =
|
const usageCostLine =
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ export function formatCliBannerLine(
|
|||||||
const commitLabel = commit ?? "unknown";
|
const commitLabel = commit ?? "unknown";
|
||||||
const tagline = pickTagline(options);
|
const tagline = pickTagline(options);
|
||||||
const rich = options.richTty ?? isRich();
|
const rich = options.richTty ?? isRich();
|
||||||
const title = "🦞 ClawdBot";
|
const title = "🦞 Clawdbot";
|
||||||
if (rich) {
|
if (rich) {
|
||||||
return `${theme.heading(title)} ${theme.info(version)} ${theme.muted(
|
return `${theme.heading(title)} ${theme.info(version)} ${theme.muted(
|
||||||
`(${commitLabel})`,
|
`(${commitLabel})`,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const DEFAULT_TAGLINE = "All your chats, one ClawdBot.";
|
const DEFAULT_TAGLINE = "All your chats, one Clawdbot.";
|
||||||
|
|
||||||
const HOLIDAY_TAGLINES = {
|
const HOLIDAY_TAGLINES = {
|
||||||
newYear:
|
newYear:
|
||||||
|
|||||||
Reference in New Issue
Block a user