Use this page when you want to work with one agent (a Boo) directly: chat with it, edit its config files, tune its personality, or create and remove it. Every Boo is a real agent record backed by an AgentSource; its config lives in seven Markdown files that the runtime reads on each turn.
The whole surface is the agent detail view (AgentDetailView), backed by /api/agents/:agentId/files/:name for file I/O and /api/personality for the sliders. This page documents what each panel does, how the four core files map to behavior, and where edits persist.
Prerequisites
Agent file reads and writes go through the connected runtime. The editor and personality sliders are no-ops while the connection is down (saving never fires; the file PUT returns 503 gateway_disconnected).
- A connected runtime (OpenClaw Gateway, or a non-OpenClaw runtime, see Connecting runtimes).
- At least one Boo. If you have none, create one (see Create a Boo).
Open the agent detail view
Three entry points open the detail view (they all call openAgent(agentId)):
- The agent list: click a Boo in the left column (
AgentListColumn).
- The Ghost Graph: right-click a Boo node → Chat, Edit personality, or Edit files. See Ghost Graph.
- The fleet sidebar: click a Boo’s edit affordance.
The view is a 3-panel resizable layout under one shared 44 px header (the agent’s avatar, name, connection dot, and the GitHub Star pill):
┌─────────────────────┬──────────────────────────┐
│ │ MiniGraph (55%) │
│ ChatPanel (45%) ├──────────────────────────┤
│ │ InlineEditor (45%) │
└─────────────────────┴──────────────────────────┘
| Panel | What it is |
|---|
| Chat (left, 45%) | A 1:1 chat with this Boo. The panel’s own header is suppressed; identity lives in the shared row above. |
| MiniGraph (top-right, 55%) | A compact React Flow canvas of this Boo plus its skills and resources, with drag-to-install. |
| Inline editor (bottom-right, 45%) | The tabbed editor: personality, permissions, activity, and the agent files. |
The panel split sizes persist to localStorage (the Group has an id), so your layout survives a reload. Drag a ResizeHandle to resize.
Edit the agent files
The inline editor’s file tabs are a single CodeMirror 6 instance (Markdown highlighting, line wrapping). The four core tabs always show; the three extra OpenClaw files appear as tabs only when they already have content.
| File | Tab | What it controls |
|---|
SOUL.md | SOUL | Persona, tone, and boundaries. Also holds the merged personality block (see below). |
IDENTITY.md | IDENTITY | Name, vibe, and emoji. |
TOOLS.md | TOOLS | Local tool notes and conventions. Drives the skill nodes on the graph. |
AGENTS.md | AGENTS | Operating instructions, priorities, and routing rules. Drives the dependency edges on the graph. |
USER.md | USER | User profile and preferences (extra tab, shown when non-empty). |
HEARTBEAT.md | HEARTBEAT | Checklist for heartbeat runs (extra tab). |
MEMORY.md | MEMORY | Durable per-agent memory (extra tab). |
Steps
- Pick a file tab. The active tab gets an accent underline; the CodeMirror document swaps to that file’s content. All seven files are loaded in parallel when the view opens.
- Edit. A modified tab shows an amber dot. The whole editor footer reads Unsaved while any file is dirty.
- Save. Click Save, or press
Cmd/Ctrl+S. The write goes through a per-agent mutation queue (serialized so concurrent writes never race) to PUT /api/agents/:agentId/files/:name, and a toast confirms Saved <file>.
- Saving TOOLS.md or AGENTS.md also triggers a Ghost Graph refresh, so new skill nodes or routing edges appear without a manual reload.
You don’t have to save before switching agents or leaving the view; the editor saves all dirty files automatically on unmount (best-effort). Saving explicitly is still safer when the connection is flaky.
Tune the personality
The Personality tab has five sliders, each 0–100. Moving a slider does not save; the save fires on pointer-up (the commit). Each slider shows a one-line description that updates live as you drag.
| Dimension | 0 (left) | 100 (right) |
|---|
| Verbosity | Terse | Verbose |
| Humor | Serious | Witty |
| Caution | Bold | Careful |
| Speed vs Cost | Fast | Economical |
| Formality | Casual | Formal |
Where values persist
A commit writes to two places:
- SQLite (
POST /api/personality): the source of truth for the slider values. The handler stores a { values, customText } JSON wrapper in the agent’s personality_config column (upserting the agent row if it doesn’t exist yet).
SOUL.md (best-effort): the sliders are rendered into Markdown sections and merged into SOUL.md below a --- separator and a `