The workspace is the agent's home. It is the only working directory used for file tools and for 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>. - Override in
~/.openclaw/openclaw.json:
{
agents: {
defaults: {
workspace: "~/.openclaw/workspace",
},
},
}
openclaw onboard, openclaw configure, or openclaw setup will create the workspace and seed the bootstrap files if they are missing.
If you already manage the workspace files yourself, you can 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, because only one workspace is active at a time.
openclaw doctor warns when it detects extra workspace directories.
Workspace file map
These are the standard files OpenClaw expects inside the workspace:
What is NOT in the workspace
These live under ~/.openclaw/ and should NOT be committed to the workspace repo:
~/.openclaw/openclaw.json(config)~/.openclaw/agents/<agentId>/agent/auth-profiles.json(model auth profiles: OAuth + API keys)~/.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/(session transcripts + metadata)~/.openclaw/skills/(managed skills)
If you need to migrate sessions or config, copy them separately and keep them out of version control.
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).
```bash
cd ~/.openclaw/workspace
git init
git add AGENTS.md SOUL.md TOOLS.md IDENTITY.md USER.md HEARTBEAT.md memory/
git commit -m "Add agent workspace"
```
```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>
Do not commit secrets
- 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
Advanced notes
- Multi-agent routing can use different workspaces per agent. See [Channel routing](/docs/openclaw-docs/channels/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](/docs/openclaw-docs/gateway/heartbeat - HEARTBEAT.md workspace file
- [Sandboxing](/docs/openclaw-docs/gateway/sandboxing - workspace access in sandboxed environments
- [Session](/docs/openclaw-docs/concepts/session - session storage paths
- [Standing orders](/docs/openclaw-docs/automation/standing-orders - persistent instructions in workspace files