* fix: isolate non-default state workspaces and skills * fix(codex): isolate native personal skills * chore: refresh plugin SDK API manifest * fix: keep SDK manifest generation scoped * refactor(codex): keep isolation plugin-local * test: satisfy optional skill snapshot typing * refactor(codex): extract thread lifecycle preflight
11 KiB
summary, read_when, title, sidebarTitle
| summary | read_when | title | sidebarTitle | ||
|---|---|---|---|---|---|
| Agent workspace: location, layout, and backup strategy |
|
Agent workspace | Agent workspace |
The workspace is the agent's home: the working directory used for file tools and workspace context. Keep it private and treat it as memory.
This is separate from ~/.openclaw/, which stores config, credentials, and sessions.
When sandboxing is enabled and workspaceAccess is not "rw", tools operate inside a sandbox workspace under ~/.openclaw/sandboxes, not your host workspace.
Default location
- Default:
~/.openclaw/workspace - If
OPENCLAW_PROFILEis set and not"default", the default becomes~/.openclaw/workspace-<profile>. OPENCLAW_WORKSPACE_DIRoverrides both of the above when set.openclaw onboard --non-interactiveuses<state-dir>/workspacewhenOPENCLAW_STATE_DIRis non-default, including for the initialmainagent entry.- Non-default agents (
agents.entries.*) without an explicit workspace resolve to<state-dir>/workspace-<agentId>, not the shared default workspace.
Override in ~/.openclaw/openclaw.json:
{
agents: {
defaults: {
workspace: "~/.openclaw/workspace",
},
},
}
Per-agent override: agents.entries.*.workspace.
openclaw onboard, openclaw configure, or openclaw setup create the workspace and seed the bootstrap files if they are missing.
If you already manage the workspace files yourself, disable bootstrap file creation:
{ agents: { defaults: { skipBootstrap: true } } }
Extra workspace folders
Older installs may have created ~/openclaw. Keeping multiple workspace directories around can cause confusing auth or state drift, since only one workspace is active at a time.
Workspace file map
Standard files OpenClaw expects inside the workspace:
Operating instructions for the agent and how it should use memory. Loaded at the start of every session. Good place for rules, priorities, and "how to behave" details. Persona, tone, and boundaries. Loaded every session. Guide: [SOUL.md personality guide](/concepts/soul). Stable preferences, communication style, relationships, and active-project context. Write entries as dated active or superseded directives. Loaded every session with a separate 4,000-character budget. See [User model](/concepts/user-model). The agent's name, vibe, and emoji. Created/updated during the bootstrap ritual. The `## Tools` section holds local environment notes and conventions. It does not control tool availability; it is only guidance. Optional startup checklist run automatically on gateway restart (when [internal hooks](/automation/hooks) are enabled). Keep it short; use the message tool for outbound sends. One-time first-run ritual. Only created for a brand-new workspace. Delete it after the ritual is complete. Daily memory log (one file per day). Recommended to read today + yesterday on session start. Curated long-term memory: durable non-profile facts, decisions, and short summaries. Keep detailed logs in `memory/YYYY-MM-DD.md` so memory tools can retrieve them on demand without injecting them into every prompt. Only load `MEMORY.md` in the main, private session (not shared/group contexts). See [Memory](/concepts/memory) for the workflow and automatic memory flush. Workspace-specific skills. Highest-precedence skill location for that workspace, ahead of project agent skills, personal agent skills, managed skills, bundled skills, and `skills.load.extraDirs` when names collide. Canvas UI files for node displays (for example `canvas/index.html`). If a required bootstrap file is missing, OpenClaw injects a "missing file" marker into the session and continues. Optional `USER.md` and `MEMORY.md` files are omitted when absent. Large bootstrap files are truncated when injected; adjust general limits with `agents.defaults.bootstrapMaxChars` (default: `20000`) and `agents.defaults.bootstrapTotalMaxChars` (default: `60000`). `USER.md` keeps its separate 4,000-character cap. `openclaw setup` can recreate missing defaults without overwriting existing files.What is NOT in the workspace
These live under ~/.openclaw/ and should NOT be committed to the workspace repo:
~/.openclaw/openclaw.json(config)~/.openclaw/state/openclaw.sqlite(shared workspace setup state and attestations)~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite(model auth profiles, routing state, standing intents, and other agent-scoped durability)~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite(session rows, transcripts, and per-agent runtime state)~/.openclaw/agents/<agentId>/agent/codex-home/(per-agent Codex runtime account, config, skills, plugins, and native thread state)~/.openclaw/credentials/(channel/provider state plus legacy OAuth import data)~/.openclaw/agents/<agentId>/sessions/(legacy migration sources and archive/support artifacts)~/.openclaw/skills/(managed skills)
If you need to migrate sessions or config, copy them separately and keep them out of version control.
Older OpenClaw releases wrote openclaw-workspace-state.json,
.openclaw/workspace-state.json, and .attested workspace sidecars. Current
runtime uses only the shared SQLite database for that state. If Doctor reports
one of these files, run openclaw doctor --fix; Doctor imports valid legacy
state and deletes a source only after verifying the database rows.
Git backup (recommended, private)
Treat the workspace as private memory. Put it in a private git repo so it is backed up and recoverable.
Run these steps on the machine where the Gateway runs (that is where the workspace lives).
If git is installed, brand-new workspaces are initialized automatically. If this workspace is not already a repo, run:```bash
cd ~/.openclaw/workspace
git init
git add AGENTS.md SOUL.md IDENTITY.md USER.md memory/
git commit -m "Add agent workspace"
```
1. Create a new **private** repository on GitHub.
2. Do not initialize with a README (avoids merge conflicts).
3. Copy the HTTPS remote URL.
4. Add the remote and push:
```bash
git branch -M main
git remote add origin <https-url>
git push -u origin main
```
</Tab>
<Tab title="GitHub CLI (gh)">
```bash
gh auth login
gh repo create openclaw-workspace --private --source . --remote origin --push
```
</Tab>
<Tab title="GitLab web UI">
1. Create a new **private** repository on GitLab.
2. Do not initialize with a README (avoids merge conflicts).
3. Copy the HTTPS remote URL.
4. Add the remote and push:
```bash
git branch -M main
git remote add origin <https-url>
git push -u origin main
```
</Tab>
</Tabs>
```bash
git status
git add .
git commit -m "Update memory"
git push
```
Do not commit secrets
Even in a private repo, avoid storing secrets in the workspace:- API keys, OAuth tokens, passwords, or private credentials.
- Anything under
~/.openclaw/. - Raw dumps of chats or sensitive attachments.
If you must store sensitive references, use placeholders and keep the real secret elsewhere (password manager, environment variables, or ~/.openclaw/).
Suggested .gitignore starter:
.DS_Store
.env
**/*.key
**/*.pem
**/secrets*
Moving the workspace to a new machine
Clone the repo to the desired path (default `~/.openclaw/workspace`). Set `agents.defaults.workspace` to that path in `~/.openclaw/openclaw.json`. Run `openclaw setup --workspace ` to seed any missing files. If you need sessions, copy `~/.openclaw/agents//agent/openclaw-agent.sqlite` from the old machine separately. Copy `~/.openclaw/agents//sessions/` only when you also need legacy migration inputs or archive/support artifacts.Advanced notes
- Multi-agent routing can use different workspaces per agent via
agents.entries.*.workspace. See Channel routing for routing configuration. - If
agents.defaults.sandboxis enabled, non-main sessions can use per-session sandbox workspaces underagents.defaults.sandbox.workspaceRoot.
Related
- Heartbeat - heartbeat monitors and cron scratch
- Sandboxing - workspace access in sandboxed environments
- Session - session storage paths
- Standing orders - persistent instructions in workspace files