From openclaw-designer
Use when creating, auditing, or improving OpenClaw workspace configurations — agent definitions, multi-agent routing, workspace files (SOUL/IDENTITY/AGENTS/BOOTSTRAP/USER/TOOLS/HEARTBEAT/MEMORY), satellite workspaces, standing orders, cron/heartbeat setup, or evaluating architecture decisions
How this skill is triggered — by the user, by Claude, or both
Slash command
/openclaw-designer:openclaw-architectThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Expert-level guidance for designing, auditing, and improving OpenClaw multi-agent configurations. Grounded in official OpenClaw documentation.
Expert-level guidance for designing, auditing, and improving OpenClaw multi-agent configurations. Grounded in official OpenClaw documentation.
Official docs (read before any operation):
references/official-docs-system-prompt.md — Bootstrap files, prompt modes, injection rulesreferences/official-docs-multi-agent.md — Agent isolation, routing, bindings, config structurereferences/official-docs-memory.md — Memory files, vector search, daily logsreferences/official-docs-automation.md — Cron, heartbeats, hooks, standing ordersreferences/official-docs-agent-loop.md — Agent loop, context engine, plugins, nodes, securityreferences/official-docs-subagents.md — Sub-agent spawning, orchestrator pattern, tool access, announceWorkspace context (read for current state):
IDENTITY.md — Current agent rosterSOUL.md — Core philosophyAGENTS.md — Session startup proceduresbrain/reference/working-genius-agent-reference.md — Working Genius frameworkEach agent is an isolated entity with its own:
openclaw agents add <name> --workspace <path>)~/.openclaw/agents/<agentId>/)Critical: Never reuse agentDir across agents — causes auth/session collisions.
Default single-agent mode: agentId = "main", workspace at ~/.openclaw/workspace.
OpenClaw automatically injects these workspace files into the system prompt on every turn:
| File | Purpose | Injected |
|---|---|---|
AGENTS.md | Session startup, procedures, safety | Every turn (full + sub-agent) |
SOUL.md | Personality, values, boundaries | Every turn (full only) |
TOOLS.md | Environment-specific local config | Every turn (full + sub-agent) |
IDENTITY.md | Agent identity, profile | Every turn (full only) |
USER.md | Human context | Every turn (full only) |
HEARTBEAT.md | Proactive background tasks | Every turn (full only) |
BOOTSTRAP.md | First-run onboarding (new workspaces) | Every turn (full only) |
MEMORY.md | Curated long-term memory | Every turn (full only) |
Sub-agents receive only AGENTS.md and TOOLS.md. Not SOUL, IDENTITY, USER, MEMORY, or HEARTBEAT.
Size limits:
agents.defaults.bootstrapMaxChars (default: 20,000)agents.defaults.bootstrapTotalMaxChars (default: 150,000)Purpose: Agent identity — name, personality, visual identity. Auto-injected every turn.
Contains: Name, role, creature metaphor, vibe, emoji, avatar, model tier, Working Genius profile.
Does NOT contain: Job instructions, skills, schedules, file paths, operational procedures.
CLI alternative: openclaw agents set-identity --agent <id> --name "Name" --emoji "🌑" --avatar path
Shared workspace: One IDENTITY.md defines all agents on the team.
Satellite workspace: Each agent gets its own IDENTITY.md (or loads via --from-identity).
Purpose: Core values, personality, behavioral boundaries, Working Genius behavioral descriptions. Auto-injected every turn (full mode only, not sub-agents).
Contains: Core truths, WG genius/competency/frustration behaviors (role-specific), communication style, domain boundaries, shared workspace paths.
Does NOT contain: Step-by-step procedures, skill instructions, task lists.
Critical for satellites: This is where per-agent differentiation happens. Each satellite SOUL.md defines what the agent does and doesn't touch.
Purpose: Session startup procedure, workspace orientation, operational rules. Auto-injected every turn (including sub-agents).
Contains: Session startup sequence, memory system instructions, safety rules, group chat etiquette, heartbeat/cron guidance, standing orders.
Does NOT contain: Agent personality (SOUL.md), agent identity (IDENTITY.md), job procedures (skills).
Standing orders belong here per official docs: "Stored in workspace files, preferably AGENTS.md for guaranteed session availability."
Sub-agent note: Since AGENTS.md is one of only two files sub-agents receive, keep it focused on universal procedures — not personality content.
Purpose: One-time self-discovery script for fresh workspaces. Injected only on new workspaces. Agent deletes it when done.
Contains: Conversational onboarding flow (name, creature, vibe, emoji), instructions to populate IDENTITY.md and USER.md, prompt to discuss SOUL.md values.
Self-destructs. If it still exists after onboarding, it's a bug.
Purpose: Human context for the agent to tailor behavior. Auto-injected every turn (full mode only).
Contains: Name, pronouns, timezone, background, business constraints, anti-interests, current projects.
Single source of truth. In multi-agent setups, USER.md lives in one place. Satellites reference it via path in AGENTS.md or SOUL.md.
Purpose: Local configuration unique to the runtime environment. Auto-injected every turn (including sub-agents).
Contains: Device names, SSH hosts, voice preferences, credentials references, environment-specific values.
Not how tools work (that's skills). Just the specific values this agent needs.
Purpose: Instructions for heartbeat polls (default every 30 min in main session). Auto-injected every turn (full mode only).
Empty = skip heartbeat work. Keeps API costs down when there's nothing to check.
Purpose: Distilled insights from daily logs. Auto-injected every turn (full mode only).
Security: Contains personal context. Only load in private/main sessions. The official docs note daily logs (memory/YYYY-MM-DD.md) read today + yesterday at session start.
Vector search available: openclaw memory search <query> for semantic recall across indexed memory files.
One agent, one workspace. Default mode.
~/.openclaw/workspace/ # agentId: "main"
├── IDENTITY.md
├── SOUL.md
├── AGENTS.md
├── USER.md
├── TOOLS.md
├── HEARTBEAT.md
├── MEMORY.md
├── skills/
└── memory/
Setup: openclaw setup --workspace ~/.openclaw/workspace
When to use: Solo projects, getting started, one personality for all work.
Multiple agents point to the same workspace directory. All agents share the same bootstrap files, skills, and memory.
~/.openclaw/workspace/ # Shared by all agents
├── IDENTITY.md # All agents defined here
├── SOUL.md # Shared philosophy
├── AGENTS.md # Shared procedures
├── USER.md
├── skills/
├── brain/
└── memory/
Setup:
openclaw agents add agent-b --workspace ~/.openclaw/workspace
# agent-b shares the same workspace as the default "main" agent
Routing: Bind each agent to different channels/accounts via bindings config.
When to use: Small teams (2-3 agents) doing closely related work. Simplest multi-agent setup.
Pros: Zero coordination overhead, single config location, skills shared automatically.
Cons: No per-agent SOUL customization, no domain isolation, shared memory (context leakage), all agents see the same IDENTITY.md and get the same personality injection.
Each agent has its own workspace directory with its own bootstrap files. The official architecture for agent isolation.
~/.openclaw/workspace/ # Agent: main (hub/coordinator)
├── IDENTITY.md
├── SOUL.md
├── AGENTS.md
├── USER.md
├── skills/ # Can be shared via symlink or global skills
├── brain/
└── memory/
~/.openclaw/workspace-coda/ # Agent: coda
├── IDENTITY.md # Coda-specific identity
├── SOUL.md # Coda-specific personality + boundaries
├── AGENTS.md # Coda-specific startup + skill paths
├── TOOLS.md
├── skills/ # Agent-specific skills (workspace takes precedence)
└── memory/
~/.openclaw/workspace-rook/ # Agent: rook
├── ...
Setup:
openclaw agents add coda --workspace ~/.openclaw/workspace-coda
openclaw agents add rook --workspace ~/.openclaw/workspace-rook
openclaw agents add vale --workspace ~/.openclaw/workspace-vale
When to use: Teams of 3+ agents with distinct roles, when agents need different personalities, when domain boundaries matter.
Pros:
Cons:
~/.openclaw/skills, or absolute paths)Three approaches (per official docs):
~/.openclaw/skills/ — available to all agents automatically<workspace>/skills/ — per-agent, takes precedence over globalskills/ to hub skills/ for shared accessA practical combination: one "hub" workspace holds shared resources (brain, projects, standards), while satellite workspaces reference the hub via absolute paths in their SOUL.md and AGENTS.md.
Key design decisions:
/home/user/.openclaw/workspace/brain/)~/.openclaw/skills/openclaw agents add <name> --workspace <path>openclaw agents list --bindingsMultiple match fields = AND semantics (all must match).
openclaw agents bind --agent coda --bind telegram:product-bot
openclaw agents unbind --agent coda --bind telegram:product-bot
openclaw agents bindings # view all
openclaw agents bindings --agent coda # view specific
Each agent supports independent:
sandbox.mode / sandbox.scopetools.allow / tools.denyPer official docs, standing orders define permanent operating authority:
## Standing Orders
### Program: Daily SEO Scan
- **Scope:** Run barboard-seo-audit skill, write report to brain/reports/seo/
- **Trigger:** Cron job, daily at 7:00 AM ET
- **Approval:** None required for report writing
- **Escalation:** Flag findings scoring >8 impact to Matt via Telegram
- **What NOT to do:** Don't modify any code or backlog items
| Factor | Heartbeat | Cron |
|---|---|---|
| Timing | ~30 min intervals (approximate) | Exact (cron expression + timezone) |
| Session | Main session (context-aware) | Isolated or main session |
| Model | Main session model | Can override per-job |
| Cost | One turn per interval | Full agent turn per job |
| Delivery | Within main session | Can announce to channels |
| Best for | Batched monitoring, context-aware checks | Precise timing, isolated tasks, different models |
# Recurring isolated job
openclaw cron add --name "Morning brief" --cron "0 7 * * *" \
--tz "America/New_York" --session isolated \
--message "Run barboard-seo-audit skill" \
--announce --channel telegram --to "user:12345"
# One-shot reminder
openclaw cron add --name "Reminder" --at "2026-04-01T16:00:00Z" \
--session main --system-event "Check PR status" --delete-after-run
Sub-agents are background runs spawned from an existing agent session. Critical for multi-agent orchestration.
Sub-agents receive ONLY AGENTS.md + TOOLS.md. Everything else (SOUL.md, IDENTITY.md, USER.md, HEARTBEAT.md, MEMORY.md) is NOT injected.
Design implication: Any information sub-agents need must be either:
task parameter when spawning# Via slash command
/subagents spawn <agentId> <task> [--model <model>] [--thinking <level>]
# Programmatic (sessions_spawn tool)
sessions_spawn({ task: "...", model: "opus", thinking: "medium" })
Non-blocking. Returns run ID immediately. Sub-agent announces results back on completion.
Default: maxSpawnDepth: 1 (sub-agents can't spawn children).
Set maxSpawnDepth: 2 for main → orchestrator → workers:
| Depth | Role | Can Spawn? | Gets Session Tools? |
|---|---|---|---|
| 0 | Main agent | Always | Yes |
| 1 | Orchestrator | If maxSpawnDepth ≥ 2 | Yes (spawn, list, history) |
| 2 | Leaf worker | Never | No |
{
agents: {
defaults: {
subagents: {
maxSpawnDepth: 2,
maxChildrenPerAgent: 5, // range 1-20
maxConcurrent: 8, // global cap
runTimeoutSeconds: 900,
},
},
},
}
Agents can spawn sub-agents under a different registered agent:
agents.list[].subagents.allowAgents["*"] allows any agentExplicit param > agent config > global default > caller's model
Sub-agents get all tools EXCEPT session/system tools by default. Override via:
{ tools: { subagents: { tools: { deny: ["gateway", "cron"] } } } }
Evaluate an existing configuration for correctness against official OpenClaw documentation.
Read all workspace files across all agent workspaces. Build a table:
| File | main | coda | rook | vale | Status |
|------|------|------|------|------|--------|
| IDENTITY.md | ✅ | ✅ | ✅ | ❌ | Incomplete |
| SOUL.md | ✅ | ✅ | ✅ | ✅ | OK |
| AGENTS.md | ✅ | ✅ | ✅ | ⚠️ | Needs update |
| BOOTSTRAP.md | — | ✅! | — | ✅! | Should be deleted |
Check each file against official injection rules:
For isolated workspace setups:
openclaw agents list)openclaw agents bindings)agentDir? (Never shared)Prioritized findings:
Iteratively improve configuration based on audit findings or user goals.
Confirm focus area with user:
For each change, show:
Wait for approval before writing anything.
Apply approved changes. Re-run relevant audit checks to confirm consistency.
Create a new agent workspace from scratch.
openclaw agents add <name> --workspace ~/.openclaw/workspace-<name>
Write SOUL.md, AGENTS.md, and optionally IDENTITY.md, TOOLS.md, BOOTSTRAP.md.
Pull identity from hub IDENTITY.md if using hub-and-satellite pattern. Expand Working Genius into role-specific behavioral descriptions.
Choose approach:
ln -s /path/to/hub/skills /path/to/satellite/skills~/.openclaw/skills/skills/ directoryopenclaw agents bind --agent <name> --bind <channel>:<account>
openclaw agents set-identity --agent <name> --from-identity
openclaw agents listopenclaw agents bindings --agent <name>Convert shared workspace to isolated workspace architecture.
Read shared workspace. Identify agents in IDENTITY.md, content that should be per-agent in SOUL.md, skill ownership, directory write-ownership.
For each agent, determine: satellite SOUL.md content, AGENTS.md content, skill sharing strategy, domain boundaries, hub paths to reference.
Present full migration plan. Include:
After approval:
openclaw agents add <name> --workspace <path>IDENTITY.md = WHO → name, personality, WG profile, visual identity
SOUL.md = HOW → values, behaviors, boundaries, WG behavioral descriptions
AGENTS.md = WHAT → startup procedures, skills list, safety, standing orders
TOOLS.md = WHERE → environment-specific local config
BOOTSTRAP.md = FIRST → one-time onboarding, self-destructs
USER.md = FOR → human context, preferences, constraints
HEARTBEAT.md = WHEN → periodic background check instructions
MEMORY.md = RECALL → curated long-term memory (private sessions only)
Skills = JOB → step-by-step job procedures (separate SKILL.md files)
Sub-agents only see: AGENTS.md + TOOLS.md. Keep these two files universally useful.
| Mistake | Why It's Wrong | Fix |
|---|---|---|
| Job instructions in IDENTITY.md | IDENTITY is WHO, not WHAT | Move to skills or AGENTS.md |
| Personality content in AGENTS.md | Sub-agents receive AGENTS.md — personality bleeds | Move to SOUL.md |
| Standing orders in SOUL.md | Not guaranteed for sub-agents; SOUL is character | Move to AGENTS.md |
Shared agentDir across agents | Causes auth/session collisions (per official docs) | Each agent needs unique agentDir |
| Relative paths in satellite configs | Satellites have different working directories | Use absolute paths |
| BOOTSTRAP.md after onboarding | Wastes tokens every turn, confuses agent | Delete it |
| No domain boundaries in SOUL.md | Agents write to each other's directories | Add explicit "don't write to X" rules |
| MEMORY.md in group chats | Security-sensitive personal context leaks | Only load in main/private sessions |
| Bootstrap files exceeding 20K chars | Truncated silently, agent misses content | Trim or move to skills/references |
| Skills duplicated into satellites | Maintenance burden, version drift | Use global skills dir or symlinks |
references/official-docs-*.md files, not assumptions.npx claudepluginhub romanmt/claude-marketplace --plugin openclaw-designerImports an OpenClaw agent workspace (SOUL.md, IDENTITY.md, MEMORY.md, etc.) into the current project. Useful when migrating or referencing an agent's identity and memory.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.