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 callopenAgent(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 panel split sizes persist to
localStorage (the Group has an id), so your layout survives a reload. Drag a ResizeHandle to resize.
The MiniGraph header fuses the agent’s runtime icon with a model selector for changing this agent’s model. A native (clawboo-native) agent picks from the native model catalog and the change is saved to its AgentConfig via PATCH /api/agents/:agentId/model (no Gateway needed); an OpenClaw agent picks from the OpenClaw catalog and the change is written as a per-agent override in openclaw.json; a Hermes agent picks from the live OpenRouter catalog (stored in execConfig, routed through OpenRouter). Codex and Claude Code run their account/SDK default, so they show a “runtime-managed model” note instead of a picker.

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.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) toPUT /api/agents/:agentId/files/:name, and a toast confirmsSaved <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.
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.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’spersonality_configcolumn (upserting the agent row if it doesn’t exist yet). SOUL.md(best-effort): the sliders are rendered into Markdown sections and merged intoSOUL.mdbelow a---separator and a “marker. The merge reads the currentSOUL.md, strips any old personality block, preserves the role description above the separator, and writes the result back.
SOUL.md write fails. When the detail view loads SOUL.md, it strips the stale personality block and re-merges the SQLite values, so the editor’s SOUL tab always reflects the current sliders.
Writes through the Gateway’s agent-file API are best-effort and may not persist, so the slider values live in SQLite as the source of truth. Treat the
SOUL.md block as a generated projection of the SQLite source, not the other way around.Custom instructions instead of sliders
Click Use Custom Instructions to switch to a free-text override. The textarea content saves on blur orCmd/Ctrl+S (POST /api/personality with customText), and is merged into SOUL.md under a “ marker; it overrides the slider-generated block. Switch to Sliders clears the custom text and restores the slider personality.
The footer’s Preview SOUL.md toggle shows the merged result (role description plus the active personality block) so you can see exactly what the runtime will read.
The other editor tabs
Create a Boo
Click Create Boo in the agent list (or the fleet sidebar) to openCreateBooModal.
- Enter a Name (required) and an optional Role (free text that becomes the base
SOUL.md). - Click Create Boo (or press Enter). The modal:
- merges the default personality (all five sliders at 50) into the role text and creates the agent via
POST /api/agents; the server resolves the workspace and writesSOUL.md,IDENTITY.md, andTOOLS.md; - persists the default personality to SQLite (
POST /api/personality); - assigns the new Boo to the currently selected team (best-effort) via
POST /api/teams/:id/agents.
- merges the default personality (all five sliders at 50) into the role text and creates the agent via
Delete a Boo
Hover a Boo in the agent list and click the trash icon.deleteAgentOperation:
- archives the agent via
DELETE /api/agents/:agentId; the server deletes it upstream (the Gateway) and removes the SQLite row plus its FK-referenced cost/approval rows. If the connection is down, the server falls back to a SQLite-only cleanup and returns{ ok: true, upstreamDeleted: false }; - removes it from the in-memory fleet store;
- re-identifies Boo Zero from the remaining agents (in case the deleted Boo was the leader);
- clears its transcript and deletes its chat history.
Deletion is not reversible. The agent’s files and config are removed from both the runtime and SQLite. There is no undo.
Verify it worked
- File save: re-open the file tab (or reload the view) and confirm the saved content is loaded back from
GET /api/agents/:agentId/files/:name. The footer reads Saved. - Personality: reload the detail view; the sliders should restore their saved positions (read from
GET /api/personality?agentId=...), and Preview SOUL.md should show the matching personality block. - Create / delete: the agent appears in (or disappears from) the agent list. After a create,
GET /api/agentsincludes the new record.
Troubleshooting
An invalid file name returns 400. The file routes validate
:name against the seven known agent files (AGENTS.md, SOUL.md, IDENTITY.md, USER.md, TOOLS.md, HEARTBEAT.md, MEMORY.md). Any other name is rejected with { error: "invalid file name" }.See also
- Ghost Graph, the per-agent mini-graph and the team-wide canvas
- Group chat, work with a whole team at once
- Boo Zero, the universal team leader’s Brief and rules
/api/agentsreference, full request/response shapes for the registry, files, and sessions- Glossary, Boo, Boo Zero, AgentSource, registry of record