System Prompts
System prompts define the agent’s personality, behavior, and constraints. Each prompt is a Markdown file with YAML frontmatter in .aura/config/prompts/.
Prompts can live in any subdirectory — the loader discovers all **/*.md files recursively. The convention is to organize by purpose (e.g. system/, features/, logs/).
Frontmatter Schema
---
name: MyPrompt # Unique identifier (required). Referenced by agent `system:` field.
description: Purpose. # Human-readable description.
inherit: [Base] # Parent prompts — bodies concatenated in order.
---
Prompt Body
The body (everything below the frontmatter) is the system prompt template, rendered as a Go template before being sent to the LLM.
Template variables:
| Variable | Description |
|---|---|
{{ .Model.Name }} | Resolved model name (e.g. llama3:8b) |
{{ .Model.Family }} | Model family string (e.g. llama) |
{{ .Model.ParameterCount }} | Raw parameter count (int64, e.g. 8000000000) |
{{ .Model.ParameterSize }} | Human parameter string (e.g. "8B") |
{{ .Model.ContextLength }} | Context window length in tokens |
{{ .Model.Thinking }} | Whether model supports extended thinking (bool) |
{{ .Model.ThinkingLevels }} | Whether model supports thinking effort levels (bool) |
{{ .Model.Vision }} | Whether model supports vision (bool) |
{{ .Model.Tools }} | Whether model supports tool use (bool) |
{{ .Model.Embedding }} | Whether model supports embeddings (bool) |
{{ .Model.Reranking }} | Whether model supports reranking (bool) |
{{ .Model.ContextOverride }} | Whether model supports context override (bool) |
{{ .Provider }} | Active provider name |
{{ .Agent }} | Active agent name |
{{ .Mode.Name }} | Active mode name |
{{ .Tools.Eager }} | List of resolved eager tool names (range-iterable) |
{{ .Tools.Deferred }} | XML block listing deferred tools (empty if none) |
{{ .Files }} | Contents of files loaded via the agent files: field |
{{ .Workspace }} | Injected AGENTS.md workspace instructions |
{{ .Sandbox.Enabled }} | Whether sandbox is enforcing (Landlock active, bool) |
{{ .Sandbox.Requested }} | Whether user wants sandbox (independent of kernel support, bool) |
{{ .Sandbox.ReadOnly }} | Sandbox read-only paths (range-iterable) |
{{ .Sandbox.ReadWrite }} | Sandbox read-write paths (range-iterable) |
{{ .Sandbox.Display }} | Pre-rendered restriction text for prompt injection |
{{ .ReadBefore.Write }} | Read-before-write enforcement active (bool) |
{{ .ReadBefore.Delete }} | Read-before-delete enforcement active (bool) |
{{ .ToolPolicy.Auto }} | Auto-approved tool patterns (range-iterable) |
{{ .ToolPolicy.Confirm }} | Confirmation-required tool patterns (range-iterable) |
{{ .ToolPolicy.Deny }} | Denied tool patterns (range-iterable) |
{{ .ToolPolicy.Display }} | Pre-rendered tool policy text for prompt injection |
{{ .Memories.Local }} | Concatenated local memory entries (.aura/memory/*.md) |
{{ .Memories.Global }} | Concatenated global memory entries (~/.aura/memory/*.md) |
{{ .Config.Global }} | Global config home path (~/.aura) |
{{ .Config.Project }} | Project config path (.aura) |
{{ .Config.Source }} | Agent’s source config home |
{{ .LaunchDir }} | CWD at process start |
{{ .WorkDir }} | Working directory (after –workdir) |
{{ env "VAR" }} | Environment variable |
{{ index .Vars "key" }} | Template variable from –set |
Sprig functions are available. Example:
Date: {{ now | date "2006-01-02" }}
{{ if .Tools.Eager -}}
Tools: {{ range .Tools.Eager }}- {{ . }}
{{ end }}
{{ end -}}
Inheritance
Prompts support inherit: for body concatenation. Parent bodies are prepended in declaration order, then the child’s own body is appended:
# prompts/system/base.md
---
name: Base
---
You are Aura, a coding assistant.
Date: {{ now | date "2006-01-02" }}
# prompts/system/agentic.md
---
name: Agentic
inherit: [Base]
---
## Critical Rules
1. Complete every task before stopping.
Result: Agentic’s prompt = Base body + "\n\n" + Agentic body.
Key difference from agents/modes: Agents and modes use replace semantics (child body replaces parent body if non-empty). Prompts always concatenate — parent content is prepended, not replaced. This lets you build up instructions incrementally.
Composition
System prompts act as compositors that control the order and inclusion of all prompt components. Instead of hardcoded assembly order, the system prompt uses Go template directives to include the agent body, autoloaded files, workspace instructions, and mode prompt.
Composition Directives
Add these at the end of your system prompt to compose the full prompt:
{{ template "agent" . }}
{{ range .Files }}
### {{ .Name }}
{{ include .TemplateName $ }}
{{ end }}
{{ range .Workspace }}
## {{ .Type }}
{{ include .TemplateName $ }}
{{ end }}
{{ if .Mode.Name }}
## Active Mode: {{ .Mode.Name }}
{{ template "mode" . }}
{{ end }}
{{ template "agent" . }}— includes the agent’s body{{ template "mode" . }}— includes the active mode’s body{{ include .TemplateName $ }}— dynamic include for file/workspace entries{{ range .Files }}— iterates autoloaded file entries (each has.Nameand.TemplateName){{ range .Workspace }}— iterates workspace entries (each has.Typeand.TemplateName)
Custom Layouts
You can reorder or omit components. For example, to put the mode before the agent:
{{ if .Mode.Name }}{{ template "mode" . }}{{ end }}
{{ template "agent" . }}
Agents Without a System Prompt
When an agent has system: "", a default compositor is used that includes agent, files, workspace, and mode in the standard order.
Cycle Detection
Template references are validated at build time using DAG analysis. Circular references (e.g., system includes agent, agent includes system) produce clear error messages.
Multi-parent works the same way: inherit: [A, B] produces A body + B body + self body.
Metadata fields (Description) use the same merge-if-absent semantics as agents and modes.
Shipped Prompts
| Name | Directory | Purpose |
|---|---|---|
Agentic | system/ | Full agentic coding prompt with task execution rules |
Chat | system/ | Conversational mode — discourages proactive tool use |
Lite | system/ | Stripped-down agentic prompt for smaller models |
Compaction | features/ | Context compaction — summarizes conversation for handoff |
Thinking | features/ | Thinking block summarization |
Feature prompts are used internally by the compaction and thinking systems via the prompt: field in feature config (self-compaction/self-summarization using the current model instead of a dedicated agent).