Thane constructs its system prompt from four distinct layers. Each has a specific purpose. Mixing concerns across layers degrades agent behavior.
Purpose: Identity — who the agent is.
The persona defines voice, personality, values, and boundaries. It should read like a character description, not an instruction manual.
Contains: Name, personality traits, communication style, values, boundaries.
Does NOT contain: Tool usage rules, operational procedures, device lists, behavioral triggers.
Example signals:
- "You're direct and helpful without being performative."
- "Have opinions. If something seems like a bad idea, say so."
See examples/persona.example.md for a reference implementation.
Purpose: Behavioral guidance — how the agent acts.
Talents are modular behavioral documents. Each talent teaches the agent a specific skill or behavioral pattern. They can be added, removed, or customized per deployment.
Contains: Behavioral patterns, decision frameworks, tool usage guidance, interaction styles.
Does NOT contain: Identity statements, personal history, factual knowledge.
Shipped talents:
channel-awareness.md— adapt output to the communication channelconversational.md— natural dialogue patternsengagement-mirroring.md— match the user's energy leveljudicious-presence.md— know when to speak vs stay silentproactive-curiosity.md— take initiative, explore, suggestspatial-reasoning.md— understand physical spaces and locationstime-awareness.md— reason about time, schedules, urgencytool-guidance.md— when and how to use tools
Custom talents: add .md files to the talents directory. They're loaded
alphabetically and injected into the system prompt. Talents are tag-filtered
— each can declare required capability tags via YAML frontmatter, loading
only when those tags are active.
Purpose: Knowledge — what the agent knows.
Inject files provide reference material: identity details, user profiles, tool documentation, memory. They're the agent's knowledge base, loaded from the filesystem.
Contains: Factual information, user preferences, infrastructure notes, memory files, identity documents.
Does NOT contain: Behavioral directives, personality definitions.
Common inject files:
MEMORY.md— curated long-term memoryIDENTITY.md— name, avatar, technical identityUSER.md— information about the primary userTOOLS.md— infrastructure and credential locations
Purpose: Conversation state — what's happening now.
Session context is assembled at runtime: semantic facts, conversation history, compaction summaries, current conditions. Not directly user-editable.
Contains: Retrieved facts, conversation history, current time/environment, compaction context.
The system prompt is assembled in this order:
- Persona — identity (who am I)
- Inject files — knowledge (what do I know)
- Current conditions — environment (where/when am I)
- Talents — behavior (how should I act)
- Dynamic context — facts, memory (what's relevant now)
- Compaction summary — continuity (what happened before)
This mirrors natural orientation: identity, knowledge, awareness, norms, memory.
| Anti-Pattern | Problem | Fix |
|---|---|---|
| Tool rules in persona | Suppresses personality (e.g., "only use tools when asked" kills proactive behavior) | Move to tool-guidance.md talent |
| Identity in talents | Confusing — talent says "you are X" but persona says "you are Y" | Keep identity in persona only |
| Behavioral directives in inject files | Inject files are knowledge, not instructions | Move directives to talents |
| Static time in build info | Model treats version metadata as ignorable | Use Current Conditions section |