2026-01-07 00:04:03 +01:00
|
|
|
|
---
|
|
|
|
|
|
summary: "Agent workspace: location, layout, and backup strategy"
|
|
|
|
|
|
read_when:
|
|
|
|
|
|
- You need to explain the agent workspace or its file layout
|
|
|
|
|
|
- You want to back up or migrate an agent workspace
|
2026-01-31 16:04:03 -05:00
|
|
|
|
title: "Agent Workspace"
|
2026-01-07 00:04:03 +01:00
|
|
|
|
---
|
2026-01-31 21:13:13 +09:00
|
|
|
|
|
2026-01-07 00:04:03 +01:00
|
|
|
|
# Agent workspace
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
2026-01-30 03:15:10 +01:00
|
|
|
|
This is separate from `~/.openclaw/`, which stores config, credentials, and
|
2026-01-07 00:04:03 +01:00
|
|
|
|
sessions.
|
|
|
|
|
|
|
2026-01-09 01:54:28 +01:00
|
|
|
|
**Important:** the workspace is the **default cwd**, not a hard sandbox. Tools
|
|
|
|
|
|
resolve relative paths against the workspace, but absolute paths can still reach
|
|
|
|
|
|
elsewhere on the host unless sandboxing is enabled. If you need isolation, use
|
2026-01-09 12:44:23 +00:00
|
|
|
|
[`agents.defaults.sandbox`](/gateway/sandboxing) (and/or per‑agent sandbox config).
|
2026-01-09 03:23:36 +01:00
|
|
|
|
When sandboxing is enabled and `workspaceAccess` is not `"rw"`, tools operate
|
2026-01-30 03:15:10 +01:00
|
|
|
|
inside a sandbox workspace under `~/.openclaw/sandboxes`, not your host workspace.
|
2026-01-09 01:54:28 +01:00
|
|
|
|
|
2026-01-07 00:04:03 +01:00
|
|
|
|
## Default location
|
|
|
|
|
|
|
2026-01-30 03:15:10 +01:00
|
|
|
|
- Default: `~/.openclaw/workspace`
|
|
|
|
|
|
- If `OPENCLAW_PROFILE` is set and not `"default"`, the default becomes
|
|
|
|
|
|
`~/.openclaw/workspace-<profile>`.
|
|
|
|
|
|
- Override in `~/.openclaw/openclaw.json`:
|
2026-01-07 00:04:03 +01:00
|
|
|
|
|
|
|
|
|
|
```json5
|
|
|
|
|
|
{
|
|
|
|
|
|
agent: {
|
2026-01-31 21:13:13 +09:00
|
|
|
|
workspace: "~/.openclaw/workspace",
|
|
|
|
|
|
},
|
2026-01-07 00:04:03 +01:00
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-01-30 03:15:10 +01:00
|
|
|
|
`openclaw onboard`, `openclaw configure`, or `openclaw setup` will create the
|
2026-01-07 00:04:03 +01:00
|
|
|
|
workspace and seed the bootstrap files if they are missing.
|
2026-03-02 17:07:26 +00:00
|
|
|
|
Sandbox seed copies only accept regular in-workspace files; symlink/hardlink
|
|
|
|
|
|
aliases that resolve outside the source workspace are ignored.
|
2026-01-07 00:04:03 +01:00
|
|
|
|
|
|
|
|
|
|
If you already manage the workspace files yourself, you can disable bootstrap
|
|
|
|
|
|
file creation:
|
|
|
|
|
|
|
|
|
|
|
|
```json5
|
|
|
|
|
|
{ agent: { skipBootstrap: true } }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-01-15 06:18:34 +00:00
|
|
|
|
## Extra workspace folders
|
2026-01-08 02:42:25 +01:00
|
|
|
|
|
2026-01-30 03:15:10 +01:00
|
|
|
|
Older installs may have created `~/openclaw`. Keeping multiple workspace
|
2026-01-15 06:18:34 +00:00
|
|
|
|
directories around can cause confusing auth or state drift, because only one
|
|
|
|
|
|
workspace is active at a time.
|
2026-01-08 02:42:25 +01:00
|
|
|
|
|
|
|
|
|
|
**Recommendation:** keep a single active workspace. If you no longer use the
|
2026-01-30 03:15:10 +01:00
|
|
|
|
extra folders, archive or move them to Trash (for example `trash ~/openclaw`).
|
2026-01-08 02:42:25 +01:00
|
|
|
|
If you intentionally keep multiple workspaces, make sure
|
2026-01-09 12:44:23 +00:00
|
|
|
|
`agents.defaults.workspace` points to the active one.
|
2026-01-08 02:42:25 +01:00
|
|
|
|
|
2026-01-30 03:15:10 +01:00
|
|
|
|
`openclaw doctor` warns when it detects extra workspace directories.
|
2026-01-08 02:42:25 +01:00
|
|
|
|
|
2026-01-07 00:04:03 +01:00
|
|
|
|
## Workspace file map (what each file means)
|
|
|
|
|
|
|
2026-01-30 03:15:10 +01:00
|
|
|
|
These are the standard files OpenClaw expects inside the workspace:
|
2026-01-07 00:04:03 +01:00
|
|
|
|
|
|
|
|
|
|
- `AGENTS.md`
|
|
|
|
|
|
- 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.
|
|
|
|
|
|
|
|
|
|
|
|
- `SOUL.md`
|
|
|
|
|
|
- Persona, tone, and boundaries.
|
|
|
|
|
|
- Loaded every session.
|
|
|
|
|
|
|
|
|
|
|
|
- `USER.md`
|
|
|
|
|
|
- Who the user is and how to address them.
|
|
|
|
|
|
- Loaded every session.
|
|
|
|
|
|
|
|
|
|
|
|
- `IDENTITY.md`
|
|
|
|
|
|
- The agent's name, vibe, and emoji.
|
|
|
|
|
|
- Created/updated during the bootstrap ritual.
|
|
|
|
|
|
|
|
|
|
|
|
- `TOOLS.md`
|
|
|
|
|
|
- Notes about your local tools and conventions.
|
|
|
|
|
|
- Does not control tool availability; it is only guidance.
|
|
|
|
|
|
|
|
|
|
|
|
- `HEARTBEAT.md`
|
|
|
|
|
|
- Optional tiny checklist for heartbeat runs.
|
|
|
|
|
|
- Keep it short to avoid token burn.
|
|
|
|
|
|
|
2026-01-18 10:10:05 +02:00
|
|
|
|
- `BOOT.md`
|
|
|
|
|
|
- Optional startup checklist executed on gateway restart when internal hooks are enabled.
|
|
|
|
|
|
- Keep it short; use the message tool for outbound sends.
|
|
|
|
|
|
|
2026-01-07 00:04:03 +01:00
|
|
|
|
- `BOOTSTRAP.md`
|
|
|
|
|
|
- One-time first-run ritual.
|
|
|
|
|
|
- Only created for a brand-new workspace.
|
|
|
|
|
|
- Delete it after the ritual is complete.
|
|
|
|
|
|
|
|
|
|
|
|
- `memory/YYYY-MM-DD.md`
|
|
|
|
|
|
- Daily memory log (one file per day).
|
|
|
|
|
|
- Recommended to read today + yesterday on session start.
|
|
|
|
|
|
|
|
|
|
|
|
- `MEMORY.md` (optional)
|
|
|
|
|
|
- Curated long-term memory.
|
|
|
|
|
|
- Only load in the main, private session (not shared/group contexts).
|
|
|
|
|
|
|
2026-01-12 05:28:17 +00:00
|
|
|
|
See [Memory](/concepts/memory) for the workflow and automatic memory flush.
|
|
|
|
|
|
|
2026-01-07 00:04:03 +01:00
|
|
|
|
- `skills/` (optional)
|
|
|
|
|
|
- Workspace-specific skills.
|
|
|
|
|
|
- Overrides managed/bundled skills when names collide.
|
|
|
|
|
|
|
|
|
|
|
|
- `canvas/` (optional)
|
|
|
|
|
|
- Canvas UI files for node displays (for example `canvas/index.html`).
|
|
|
|
|
|
|
2026-01-30 03:15:10 +01:00
|
|
|
|
If any bootstrap file is missing, OpenClaw injects a "missing file" marker into
|
2026-01-13 04:24:17 +00:00
|
|
|
|
the session and continues. Large bootstrap files are truncated when injected;
|
2026-02-16 12:04:53 -05:00
|
|
|
|
adjust limits with `agents.defaults.bootstrapMaxChars` (default: 20000) and
|
|
|
|
|
|
`agents.defaults.bootstrapTotalMaxChars` (default: 150000).
|
2026-01-30 03:15:10 +01:00
|
|
|
|
`openclaw setup` can recreate missing defaults without overwriting existing
|
2026-01-13 04:24:17 +00:00
|
|
|
|
files.
|
2026-01-07 00:04:03 +01:00
|
|
|
|
|
|
|
|
|
|
## What is NOT in the workspace
|
|
|
|
|
|
|
2026-01-30 03:15:10 +01:00
|
|
|
|
These live under `~/.openclaw/` and should NOT be committed to the workspace repo:
|
2026-01-07 00:04:03 +01:00
|
|
|
|
|
2026-01-30 03:15:10 +01:00
|
|
|
|
- `~/.openclaw/openclaw.json` (config)
|
|
|
|
|
|
- `~/.openclaw/credentials/` (OAuth tokens, API keys)
|
|
|
|
|
|
- `~/.openclaw/agents/<agentId>/sessions/` (session transcripts + metadata)
|
|
|
|
|
|
- `~/.openclaw/skills/` (managed skills)
|
2026-01-07 00:04:03 +01:00
|
|
|
|
|
|
|
|
|
|
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).
|
|
|
|
|
|
|
|
|
|
|
|
### 1) Initialize the repo
|
|
|
|
|
|
|
2026-01-22 08:05:47 +00:00
|
|
|
|
If git is installed, brand-new workspaces are initialized automatically. If this
|
|
|
|
|
|
workspace is not already a repo, run:
|
|
|
|
|
|
|
2026-01-07 00:04:03 +01:00
|
|
|
|
```bash
|
2026-01-30 03:15:10 +01:00
|
|
|
|
cd ~/.openclaw/workspace
|
2026-01-07 00:04:03 +01:00
|
|
|
|
git init
|
|
|
|
|
|
git add AGENTS.md SOUL.md TOOLS.md IDENTITY.md USER.md HEARTBEAT.md memory/
|
|
|
|
|
|
git commit -m "Add agent workspace"
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2) Add a private remote (beginner-friendly options)
|
|
|
|
|
|
|
|
|
|
|
|
Option A: GitHub web UI
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Option B: GitHub CLI (`gh`)
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
gh auth login
|
2026-01-30 03:15:10 +01:00
|
|
|
|
gh repo create openclaw-workspace --private --source . --remote origin --push
|
2026-01-07 00:04:03 +01:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-01-07 23:22:58 +01:00
|
|
|
|
Option C: 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
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-01-07 00:04:03 +01:00
|
|
|
|
### 3) Ongoing updates
|
|
|
|
|
|
|
|
|
|
|
|
```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.
|
2026-01-30 03:15:10 +01:00
|
|
|
|
- Anything under `~/.openclaw/`.
|
2026-01-07 00:04:03 +01:00
|
|
|
|
- Raw dumps of chats or sensitive attachments.
|
|
|
|
|
|
|
|
|
|
|
|
If you must store sensitive references, use placeholders and keep the real
|
2026-01-30 03:15:10 +01:00
|
|
|
|
secret elsewhere (password manager, environment variables, or `~/.openclaw/`).
|
2026-01-07 00:04:03 +01:00
|
|
|
|
|
|
|
|
|
|
Suggested `.gitignore` starter:
|
|
|
|
|
|
|
|
|
|
|
|
```gitignore
|
|
|
|
|
|
.DS_Store
|
|
|
|
|
|
.env
|
|
|
|
|
|
**/*.key
|
|
|
|
|
|
**/*.pem
|
|
|
|
|
|
**/secrets*
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Moving the workspace to a new machine
|
|
|
|
|
|
|
2026-01-30 03:15:10 +01:00
|
|
|
|
1. Clone the repo to the desired path (default `~/.openclaw/workspace`).
|
|
|
|
|
|
2. Set `agents.defaults.workspace` to that path in `~/.openclaw/openclaw.json`.
|
|
|
|
|
|
3. Run `openclaw setup --workspace <path>` to seed any missing files.
|
|
|
|
|
|
4. If you need sessions, copy `~/.openclaw/agents/<agentId>/sessions/` from the
|
2026-01-07 00:04:03 +01:00
|
|
|
|
old machine separately.
|
|
|
|
|
|
|
|
|
|
|
|
## Advanced notes
|
|
|
|
|
|
|
|
|
|
|
|
- Multi-agent routing can use different workspaces per agent. See
|
2026-02-07 15:40:35 -05:00
|
|
|
|
[Channel routing](/channels/channel-routing) for routing configuration.
|
2026-01-09 12:44:23 +00:00
|
|
|
|
- If `agents.defaults.sandbox` is enabled, non-main sessions can use per-session sandbox
|
|
|
|
|
|
workspaces under `agents.defaults.sandbox.workspaceRoot`.
|