Install
openclaw skills install workplaceManage multiple workplaces (project directories) with multi-agent orchestration, isolated memory, and inter-agent communication. Use when the user mentions:...
openclaw skills install workplaceManage multiple project workplaces with per-workspace agents, isolated memory, and Swarm-style agent orchestration.
Hierarchical navigation with parent → child drill-down.
/workplace or /workplace list → Show top-level view: parent workspaces and standalone workplaces as buttons. Parents show (N) child count. Current workspace marked with ✓./workplace <name> → If standalone or child, switch directly. If parent with children, show drill-in./workplace parent:child → Direct switch using colon syntax (e.g. log-stream:logstream)./workplace status → Current workspace card with parent, linked, agents, deploy envs./workplace agents → Agent list with start/stop buttons./workplace log-stream:logstream resolves parent by name, then finds child under that parent. Supports quick switching without navigating menus.
When the user switches workplaces (via button click, name, or colon syntax):
~/.openclaw/workspace/.workplaces/current.json with the selected UUID and pathlastActive in registry.json.workplace/config.json for contextsessions.json for the target workplace UUID:
Read current.json at the start of any workplace operation to know which workspace is active.
See telegram-ui.md for full button layouts, callback routing, and platform fallbacks.
| Command | Action |
|---|---|
workplace init [path] | Initialize workplace (scan existing or set up new) |
workplace list | List all workplaces (inline buttons to switch) |
workplace switch <name|uuid> | Switch active workplace |
workplace scan [path] | Discover .git workplaces in subdirectories |
workplace link <path> | Link a related workplace |
workplace unlink <path|uuid> | Remove a linked workplace |
workplace status | Current workplace info + agent status |
workplace agents | List agents in current workplace |
workplace agent start <name> | Start an agent (runs as sub-agent) |
workplace agent stop <name> | Stop a running agent |
workplace kernel start | Start persistent kernel agent |
workplace kernel stop | Stop kernel agent |
workplace export [zip|json] | Export workplace config |
workplace import <file> | Import workplace from export |
workplace load <path|name|uuid> | Load/open a registered workplace for quick access |
workplace unload <name|uuid> | Unload a workplace from the loaded set |
workplace loaded | List all currently loaded workplaces |
workplace delete <name|uuid> | Remove from registry |
workplace deploy <env> | Show/run deploy instructions |
workplace sync <ide> | Generate context for cursor/claude/opencode/all |
workplace sessions | List chat sessions for current workplace |
workplace session new [label] | Create a new chat session |
workplace session continue [label] | Resume a saved session |
workplace session delete <label> | Delete a saved session |
workplace session rename <old> <new> | Rename a session |
Central registry at ~/.openclaw/workspace/.workplaces/:
registry.json — all known workplaces with UUID, path, hostname, linkscurrent.json — currently active workplaceloaded.json — workplaces currently "open/loaded" for quick access and cross-workspace opsEach project gets a .workplace/ directory:
.workplace/
├── config.json # UUID, name, path, hostname, linked, parent
├── agents/*.md # Agent role definitions (kernel.md always present)
├── memory/ # Isolated daily logs (YYYY-MM-DD.md)
├── skills/ # Workplace-specific skills (user-managed via git)
├── chat.md # Inter-agent communication
├── structure.json # Auto-scanned file tree
├── full-tree.md # Full tree with parent + linked workplaces (by hostname)
├── process-status.json # Agent runtime states and errors
└── deploy/ # Deployment docs: dev.md, main.md, pre.md
loaded.json tracks which workplaces are currently "open". This is distinct from the registry (all known workplaces) and current (the one active workplace). Loaded workplaces are the set you're actively working with — useful for cross-workspace agent orchestration, quick switching, and context awareness.
[
{
"uuid": "74cdd6fd-...",
"name": "log-stream",
"path": "/Users/dev/opensource/log-stream",
"loadedAt": "2026-02-17T22:05:00Z",
"source": "manual"
}
]
Fields:
uuid — workplace UUID (matches registry)name — display namepath — absolute filesystem pathloadedAt — ISO timestamp when loadedsource — how it was loaded (manual, auto, linked)Manage via scripts/loaded_workplaces.sh (list/load/unload/status).
Per-workplace chat sessions are tracked in ~/.openclaw/workspace/.workplaces/sessions.json. Each workplace UUID maps to an array of sessions (sessionId, label, timestamps) and an activeSession pointer.
When switching workplaces:
.jsonl filesOn "Continue": set activeSession, load recent context from transcript.
On "New chat": generate a new session entry, prompt for optional label.
See telegram-ui.md for full button layouts and callback routing.
.git/ is a potential workplaceworkplace linkscripts/init_workplace.sh <path> [--name <name>] [--desc <desc>]*.md files, analyze project type, suggest agents.workplace/ structure, registers in central registry, sets as currentAgents are defined as .md files in .workplace/agents/ with YAML frontmatter (name, role, triggers, handoff_to). Run agents via sessions_spawn with system prompts built from their definitions + workplace context.
Agents communicate via chat.md using a structured message protocol. The Rust file-watcher server monitors changes and outputs parsed messages as JSON lines.
Binary at assets/bin/workplace-server-{os}-{arch}. Build from source with scripts/build.sh.
# Start server for a workplace
workplace-server /path/to/project
# Server outputs JSON lines to stdout for each new chat.md message
{"timestamp":"...","sender":"coder","recipient":"reviewer","broadcast":[],"message":"...","line_number":1}
.workplace/ folder (memory excluded by default)On platforms with inline buttons, workplace list shows a clickable switcher. workplace agents shows start/stop buttons per agent. workplace deploy shows environment buttons.
See telegram-ui.md for message formats, button components, and callback handling.
Fallback: numbered text lists on platforms without button support (WhatsApp, Signal).
Sync workplace context to external coding tools:
.cursor/rules/workplace.mdc (MDC with frontmatter)CLAUDE.md (markdown, marker-based updates)opencode.jsonc instructions fieldRun workplace sync all to update all detected IDEs, or target one: workplace sync cursor.
See ide-sync.md for implementation details.
| Script | Purpose |
|---|---|
scripts/init_workplace.sh | Initialize .workplace/ in a directory |
scripts/scan_workplaces.sh | Find .git workplaces under a path |
scripts/loaded_workplaces.sh | Manage loaded/open workplaces (list/load/unload/status) |
scripts/build.sh | Build Rust server for current platform |
Each workplace uses its UUID as containerTag for supermemory operations:
See commands.md for full command reference with examples.