Filesystem components
The relational half of an agent points at config; the on-disk half lives under the install root. The layout is organized by scope, not one flat tree: instance-wide state, cross-agent shared resources, and per-agent private data each get their own top-level directory.
<install>/
├── data/ — instance-wide state (not per-agent)
│ ├── sessions/ — chat session stores
│ │ └── sessions.db, acp-sessions.db
│ ├── state/ — runtime state
│ │ └── costs.jsonl, runtime-trace.jsonl
│ ├── devices.db — gateway pairing store
│ └── memory/ — shared instance memory
│ └── brain.db, audit.db, response_cache.db,
│ MEMORY_SNAPSHOT.md, archive/
├── shared/ — resources agents draw on in common
│ └── skills/<bundle>/ — skill bundles
│ └── SKILL.md, scripts/, references/, assets/
└── agents/ — per-agent private data
└── <alias>/
└── workspace/ — the agent's jailed filesystem sandbox
└── memory/
└── brain.db
The three roots map to three scopes:
data/holds state that belongs to the whole install, not to any one agent: chatsessions/, runtimestate/(cost tracking and the like), the pairingdevices.db, and the shared instance memory underdata/memory/.shared/holds resources agents draw on in common, notably skill bundles undershared/skills/<bundle>/.agents/<alias>/holds everything private to one agent. By default an agent’s workspace is<install>/agents/<alias>/workspace/, and everything the agent reads or writes stays inside it. The agent’s identity source is resolved relative to this workspace. Agents are jailed to their own workspace unless you explicitly grant cross-agent access.
Workspace
The workspace is the agent’s filesystem sandbox. The fields below are generated from the schema:
access
Cross-agent filesystem allowlist (inbound declaration). Key is the target sibling agent alias; value is the granted mode. Empty map = jailed (own workspace only).
Set it on any surface:
Gateway dashboard
Open /config/agents and set the agents.<alias>.workspace.access field.
zerocode
In the Config pane, set the agents.<alias>.workspace.access field.
zeroclaw config
zeroclaw config set agents.<alias>.workspace.access <value>
Environment variable
Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:
export ZEROCLAW_agents__<alias>__workspace__access=
path
Optional explicit workspace path. None = derive from <install>/agents/<alias>/workspace/.
Set it on any surface:
Gateway dashboard
Open /config/agents and set the agents.<alias>.workspace.path field.
zerocode
In the Config pane, set the agents.<alias>.workspace.path field.
zeroclaw config
zeroclaw config set agents.<alias>.workspace.path <value>
Environment variable
Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:
export ZEROCLAW_agents__<alias>__workspace__path=
read_memory_from
Cross-agent memory allowlist (inbound declaration). Each alias listed here is a sibling agent this agent may recall memory rows from. Empty = own only.
Set it on any surface:
Gateway dashboard
Open /config/agents and set the agents.<alias>.workspace.read_memory_from field.
zerocode
In the Config pane, set the agents.<alias>.workspace.read_memory_from field.
zeroclaw config
zeroclaw config set agents.<alias>.workspace.read_memory_from <value>
Environment variable
Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:
export ZEROCLAW_agents__<alias>__workspace__read_memory_from=
unrestricted_filesystem
Escape hatch: when true, the agent can read or write anywhere the host filesystem permits. Off by default; flipping this on is auditable.
Set it on any surface:
Gateway dashboard
Open /config/agents and set the agents.<alias>.workspace.unrestricted_filesystem field.
zerocode
In the Config pane, set the agents.<alias>.workspace.unrestricted_filesystem field.
zeroclaw config
zeroclaw config set agents.<alias>.workspace.unrestricted_filesystem <value>
Environment variable
Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:
export ZEROCLAW_agents__<alias>__workspace__unrestricted_filesystem=
Two things worth calling out:
accessis an inbound allowlist for cross-agent filesystem sharing. Empty means jailed (own workspace only); an entry grants a named sibling agent a read or write mode into this agent’s workspace.unrestricted_filesystemis the escape hatch: whentrue, the agent can touch anything the host filesystem permits. It is off by default and flipping it on is auditable.
Memory
Each agent keeps its own memory store under its workspace
(agents/<alias>/workspace/memory/), separate from the shared instance memory
in data/memory/. The backend is selected per agent:
backend
The backend kind this agent uses. Defaults to Sqlite for new agents; once an agent has on-disk data the value is locked.
Set it on any surface:
Gateway dashboard
Open /config/agents and set the agents.<alias>.memory.backend field.
zerocode
In the Config pane, set the agents.<alias>.memory.backend field.
zeroclaw config
zeroclaw config set agents.<alias>.memory.backend <value>
Environment variable
Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:
export ZEROCLAW_agents__<alias>__memory__backend=
The backend defaults to SQLite for a new agent, and once the agent has written
on-disk data the value is locked, so you cannot silently swap a backend out from
under existing memory. Cross-agent memory sharing is opt-in through the
workspace read_memory_from allowlist. For the memory model itself, see
Runtime internals.
Identity
An agent’s identity (its personality) is sourced per agent:
aieos_inline
Inline AIEOS JSON (alternative to file path)
Set it on any surface:
Gateway dashboard
Open /config/agents and set the agents.<alias>.identity.aieos_inline field.
zerocode
In the Config pane, set the agents.<alias>.identity.aieos_inline field.
zeroclaw config
zeroclaw config set agents.<alias>.identity.aieos_inline <value>
Environment variable
Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:
export ZEROCLAW_agents__<alias>__identity__aieos_inline=
aieos_path
Path to AIEOS JSON file (relative to workspace)
Set it on any surface:
Gateway dashboard
Open /config/agents and set the agents.<alias>.identity.aieos_path field.
zerocode
In the Config pane, set the agents.<alias>.identity.aieos_path field.
zeroclaw config
zeroclaw config set agents.<alias>.identity.aieos_path <value>
Environment variable
Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:
export ZEROCLAW_agents__<alias>__identity__aieos_path=
format
Identity format: “openclaw” (default) or “aieos”
Set it on any surface:
Gateway dashboard
Open /config/agents and set the agents.<alias>.identity.format field.
zerocode
In the Config pane, set the agents.<alias>.identity.format field.
zeroclaw config
zeroclaw config set agents.<alias>.identity.format <value>
Environment variable
Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:
export ZEROCLAW_agents__<alias>__identity__format=
The format selects how the identity is loaded. The default reads the
project’s personality files; the alternative loads an AIEOS JSON definition,
either from a path relative to the workspace or inline.