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 .Name and .TemplateName)
  • {{ range .Workspace }} — iterates workspace entries (each has .Type and .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).


Back to top

Copyright © 2026 idelchi. Distributed under the MIT License.