System prompt
WednesdayAI assembles the agent’s system prompt from a set of named sections at run time. The default prompt is comprehensive; you can slim it down with a preset, toggle individual sections, inject custom content, and control which project context files are included. All configuration is underagents.defaults.systemPrompt (shared across agents) or agents.<agentId>.systemPrompt (per-agent override).
Changes take effect when the gateway restarts. Restart: systemctl --user restart openclaw-gateway.
Presets
The fastest way to change the prompt’s size and scope is a preset:| Preset | Effect |
|---|---|
"default" | All sections enabled. Full-featured context, longer prompt. |
"lean" | Disables documentation, runtime, model aliases. Compacts tooling and skills sections. Uses progressive skill rendering. Good balance of capability and token cost. |
"minimal" | Disables documentation, runtime, model aliases, reply tags, messaging, voice, reactions, silent replies, heartbeats. Tooling renders names only. Skills compact + progressive. Lowest token cost. |
Per-agent override
Named agents can override the shared default. The per-agent config merges overagents.defaults.systemPrompt:
Section toggles
Individual sections can be turned off or customised without changing the preset. Use thesections map with the section name as the key:
Section catalogue
| Section | Mode type | Content |
|---|---|---|
identity | Standard | Agent name, personality, and identity context |
tooling | Generated | Tool definitions and calling instructions — "compact" reduces detail, "names" lists only tool names |
toolCallStyle | Standard | How the agent should format and sequence tool calls |
safety | Standard | Safety and behaviour guidelines |
cliQuickReference | Standard | Slash-command cheat sheet (/new, /reset, /model, etc.) |
skills | Generated | Loaded skill descriptions — "compact" condenses, "names" lists names only; progressive: true renders on demand |
memory | Standard | Memory read/write instructions |
selfUpdate | Standard | Self-update capability instructions |
modelAliases | Generated | Model name-to-provider alias mappings |
workspace | Standard | Workspace directory and file layout |
documentation | Standard | Documentation access and usage instructions — disabled in lean/minimal presets |
sandbox | Standard | Sandbox mode restrictions and warnings |
authorizedSenders | Standard | Who is authorised to give the agent instructions |
time | Standard | Current date and time |
workspaceFilesNotice | Standard | Notice about workspace file availability |
replyTags | Standard | Reply formatting tag instructions |
messaging | Standard | Messaging-specific formatting rules (disabled in minimal) |
voice | Standard | Voice mode formatting rules (disabled in minimal) |
groupContext | Standard | Group chat context and mention awareness |
reactions | Standard | Reaction handling instructions (disabled in minimal) |
reasoningFormat | Standard | Reasoning and thinking format instructions |
projectContext | Config object | Project context files — see Project context files |
silentReplies | Standard | When to suppress outbound replies (disabled in minimal) |
heartbeats | Standard | Heartbeat task list (injected during heartbeat runs) |
runtime | Runtime | Runtime and model info — "minimal" trims detail; disabled in lean/minimal presets |
| Type | Accepted values |
|---|---|
| Standard | "default" | "off" | "prepend" | "append" | "replace" |
| Generated | "default" | "compact" | "names" | "off" |
| Runtime | "default" | "minimal" | "off" |
| Config object | ProjectContextSectionConfig — see project context files section |
Project context files
These files are read from the agent workspace directory and injected into the system prompt:| File | Default mode | Purpose |
|---|---|---|
AGENTS.md | inline | Workspace context and session startup instructions |
SOUL.md | inline | Agent personality and core values |
IDENTITY.md | inline (max 4 000 chars) | Agent name, creature, vibe, emoji, avatar |
USER.md | manifest | User profile — name, timezone, context |
TOOLS.md | manifest | Local environment notes — devices, SSH hosts |
HEARTBEAT.md | runKind | Periodic task list (injected during heartbeat runs only) |
| Mode | Effect |
|---|---|
"inline" | Full file content injected into the prompt (bounded by maxChars if set) |
"manifest" | File path and size listed; content is not injected (avoids bloating the prompt for large files) |
"runKind" | Injected only during heartbeat-triggered runs, not during interactive chat |
"off" | File skipped entirely |
HEARTBEAT.md empty (or absent) to skip heartbeat API calls.
To change a file’s mode, use the projectContext.files config:
Prompt cache
The prompt is split into a stable (cached) region and a volatile region at build time. The cache boundary controls where the split happens:"auto" lets the runtime choose the optimal cache boundary for the current provider. Set "off" to disable prompt caching entirely (increases token cost, may help debugging).
Injecting content from a plugin
Plugin authors can inject content into the system prompt at run time via thebefore_prompt_build lifecycle hook — without touching admin config. See Hooks for the hook API; the return value accepts systemPrompt (appended after the built sections) and prependContext (inserted before the user turn).
Related
- Hooks —
before_prompt_buildandcontext.collecthook reference - Gateway configuration — gateway-wide settings
- Agent tools — exposing capabilities to the agent