identity.yaml manifest is the core of every identity. It declares the agent’s model, plugins, dependencies, skills, and template variables. It lives at the root of an identity directory and is read during deployment.
For a step-by-step guide to creating an identity, see Creating Identities.
Schema
Required Fields
| Field | Type | Description |
|---|---|---|
name | string | Machine-readable identifier. Used in resource names and logging. Examples: eng, researcher, pm |
displayName | string | Human-readable name shown in the UI and Slack messages. Examples: Titus, Atlas, Juno |
role | string | Functional role identifier. Used for agent resolution (clawup ssh <role>). Examples: pm, eng, tester, researcher |
emoji | string | GitHub emoji shortcode without colons. Used in the OpenClaw UI. Examples: telescope, clipboard, building_construction, mag |
description | string | One-line summary of the agent’s purpose. Shown during clawup init and in status output. |
volumeSize | number | Default persistent storage in GB. Can be overridden per-agent in the deployment manifest. Engineers typically need more (50GB) for repos; research/PM roles need less (20-30GB). |
skills | string[] | List of skill directory names bundled with this identity. Each entry corresponds to a skills/<name>/SKILL.md file. Supports clawhub: prefix for public skills. |
templateVars | string[] | Template variable names used in workspace files (e.g., SOUL.md, USER.md). Values are collected during clawup init and substituted at deploy time. |
Optional Fields
Model Configuration
| Field | Type | Default | Description |
|---|---|---|---|
model | string | — | Primary AI model identifier. Format: provider/model-name (e.g., anthropic/claude-opus-4-6). If omitted, uses the stack-level default. |
backupModel | string | — | Fallback model used when the primary is unavailable. Same format as model. |
codingAgent | string | claude-code | Coding agent CLI to install on the cloud instance. Must match a key in the coding agent registry. |
Infrastructure
| Field | Type | Default | Description |
|---|---|---|---|
instanceType | string | — | Override the default cloud instance type for agents using this identity. Provider-specific (e.g., t3.large for AWS, cx32 for Hetzner). |
Dependencies
| Field | Type | Default | Description |
|---|---|---|---|
deps | string[] | [] | System-level tools installed on the agent. Each entry must match a key in the dep registry. |
plugins | string[] | [] | OpenClaw plugins to configure. Each entry must match a key in the plugin registry. |
pluginDefaults | object | {} | Per-plugin default configuration. Keyed by plugin name, values are plugin-specific config objects. Can be overridden per-deployment via plugin config files. |
Examples
Minimal Identity
The smallest valididentity.yaml — only required fields:
Research Agent
A research-focused agent with Brave Search and Slack:Full-Featured Engineering Agent
A production engineer identity with all fields used:Available Registries
Coding Agent Registry
ThecodingAgent field selects which coding CLI is installed.
| Key | CLI Binary | Description |
|---|---|---|
claude-code | claude | Claude Code CLI (default) |
cliBackends config. Defined in packages/core/src/coding-agent-registry.ts.
Dep Registry
System-level tools declared via thedeps field.
| Key | What It Installs |
|---|---|
gh | GitHub CLI — installed from official apt repo, authenticated with provided token |
brave-search | Brave Search API key — config-only, sets environment variable for API access |
packages/core/src/dep-registry.ts.
Plugin Registry
OpenClaw plugins declared via theplugins field.
| Key | What It Does |
|---|---|
openclaw-linear | Linear issue tracking — webhook-driven ticket queuing, per-agent routing rules, state management |
slack | Slack bot integration — Socket Mode, DMs, group chats, emoji reactions |
packages/core/src/plugin-registry.ts.
Plugin Defaults
ThepluginDefaults field sets per-plugin configuration that ships with the identity. This is the primary way to configure how plugins behave for a specific role.
Override Hierarchy
Plugin configuration is resolved in this order (later wins):- Identity defaults —
pluginDefaultsinidentity.yaml - Deployment overrides — Plugin config files at
~/.clawup/configs/<stack>/plugins/<plugin>.yaml
Identity vs Deployment Manifest
Theidentity.yaml and clawup.yaml serve different purposes:
| Concern | identity.yaml | clawup.yaml |
|---|---|---|
| What the agent is | Name, personality, skills, model | — |
| What the agent needs | Deps, plugins, plugin defaults | Plugin/dep overrides |
| Where the agent runs | — | Provider, region, instance type |
| How much storage | Default volumeSize | Per-agent volumeSize override |
| Template variable names | Declared in templateVars | — |
| Template variable values | — | Owner fields (ownerName, timezone, etc.) |
plugins or deps, the deployment manifest values take precedence. This lets you override identity defaults per-deployment without forking the identity.
Validation
Clawup validatesidentity.yaml at deploy time. The following checks are enforced:
- All required fields must be present and non-empty
name,displayName,role,emoji,descriptionmust be stringsvolumeSizemust be a positive numberskillsandtemplateVarsmust be arrays- Each skill listed must have a corresponding
skills/<name>/SKILL.mdfile (private skills) or validclawhub:prefix (public skills)