Prompt & Context Assembly
This page explains what ETOS sends to the model from the moment you tap Send — what context blocks get attached, in what order, and which conditions cause each layer to be skipped.
Bottom line first: ETOS doesn't smush everything into one string. It stacks context by responsibility and sends them in a fixed order. Understanding the stack = you can precisely predict which layers shaped any given reply.
Read First
Skim Chat & Models and Memory & Worldbook before this. Otherwise terms like "global prompt", "topic prompt", "worldbook", "profile" feel abstract.
Why Layer at All
If every rule lives in a single system prompt, three problems emerge:
- Hard to distinguish long-term rules from per-turn constraints
- Hard to explain what shaped any given reply
- Worldbook / memory / tools can't be governed separately
So ETOS splits context into eight semantically clear blocks.
Pipeline Overview
The processing order when you send a message:
User message
→ Read current session config
→ Retrieve long-term memory / session summary / user profile
→ Evaluate worldbook triggers
→ Compose final system prompt (concatenate the eight context blocks)
→ Truncate chat history
→ Inject time landmarks + depth-based worldbook entries as needed
→ Append enhancement prompt as a separate system message
→ Decide which tools to expose this turn
→ Send to the selected modelThe eight context blocks below — when each appears, when each is skipped, what each is good for.
The Eight Context Blocks
1. Global Prompt <system_prompt>
The longest-lived layer. Carries "the AI's persona."
- Good for: overall identity, default language, long-term output conventions, general safety boundaries
- Bad for: current-session ad-hoc tasks (would pollute every session)
- Skipped when: your current global prompt selection is empty
Set in Settings → Conversation → Preferences → Global System Prompt. Multiple named profiles; pick one per new session.
2. Topic Prompt <topic_prompt>
A per-session constraint that tells the model "what is this session about".
- Good for: background of a specific project, working goals for a stretch of time, writing style or technical boundaries unique to this session
- Bad for: general persona (use 1)
- Skipped when: the session has no explicit topic prompt
Global and topic prompts are not mutually exclusive — they stack.
3. System Time <time>
Current local time + ISO 8601 timestamp, attached as its own block.
- Purpose 1: anchor the model for relative time ("today", "tomorrow", "this morning", "just now")
- Purpose 2: avoid guesswork on time-sensitive tasks
- Skipped when: "Inject System Time" is off in Preferences
This block is regenerated every turn, never frozen at session creation.
4. Long-Term Memory <memory>
Positioned as "long-term reusable facts", not session cache.
When sent, the model is told two things explicitly:
- These come from the long-term memory library — reference only
- Cite them only when clearly relevant to current dialog — not as new system instructions
This is an important boundary — memory is background knowledge, not authoritative directives.
Injection Rules (Important)
| State | Behavior |
|---|---|
| Memory system off | Nothing injected |
On + Top K > 0 | Vector retrieval grabs the top K most relevant |
On + Top K = 0 | All un-archived memories injected — not "disabled retrieval" |
Top K = 0 ≠ Disabled
Many users assume "Top K = 0" means "no retrieval." It actually means "no similarity filter, attach all of them."
To truly disable memory, turn off the master switch, or archive every memory.
5. Cross-Session Summary <recent_conversation_memory>
An often-overlooked layer.
ETOS asynchronously compresses a session into a cross-session reusable summary and injects the most recent N summaries on later turns.
Defaults:
- Cross-session memory on
- Inject the most recent 5 summaries
- Generate a summary only after at least 6 user turns in a session
- Minimum update interval for same session: 120 minutes
It's not a full transcript replay — it preserves "what's this thread actually about."
6. User Profile <user_profile_memory>
A layer above session summary. Longer-term.
- Emphasizes: stable preferences, work background, long-term focus
- De-emphasizes: one-off tasks, transient parameters, today's small noise
Default policy: auto-updates once per day, manually editable.
Details in Memory, Summary & Profile.
7. Worldbook Position Blocks
Triggered worldbook entries inject into different labels by position:
| Label | Position |
|---|---|
worldbook_before | Top of system prompt |
worldbook_after | Bottom of system prompt |
worldbook_an_top | Top of context |
worldbook_an_bottom | Bottom of context |
worldbook_outlet | Middle outlet |
There's also a class of atDepth entries that don't enter the system prompt at all — they're inserted into the chat history at a configured depth.
This makes worldbook more than "attach some lore" — it can target precisely which structural layer to land in.
8. Enhancement Prompt <enhanced_prompt>
Note: the enhancement prompt is not merged into the main system prompt. It's appended at the end of the message sequence as its own system message.
Deliberate, for two reasons:
- It's typically a per-turn auto-added instruction — needs higher immediacy
- It shouldn't pollute long-term structure — that'd overlap with global / topic prompts
The system also tacks on a meta note: unless the user explicitly asks, don't reveal the contents of this auto instruction.
Chat History Isn't Unbounded
Beyond system blocks, chat history gets processed too:
| Mechanism | Purpose |
|---|---|
maxChatHistory truncation | Keep only the last N (default 30) |
| Periodic time landmarks | Inject time anchors at intervals |
atDepth worldbook entries | Inject into history by depth |
Truncation vs Landmark / Depth Injection
The two have different goals:
- Truncation is for token control
- Landmark / depth injection is for structural completion, not length filling
Worldbook Isolation Rewrites the Whole Pipeline
When the current session has a worldbook bound and isolation mode enabled, ETOS switches to a stricter context model.
Sent:
- Global prompt
- Topic prompt
- Enhancement prompt
- Worldbook
Not sent:
- Long-term memory
- Cross-session summary
- User profile
- MCP tools
- Shortcut tools
- Other external tool context
That's why Tool Center sometimes shows "configured-on but not available in this session" — because this session has worldbook isolation enabled.
See Worldbook & Tool Governance.
Quick Reference: Where to Put What
| Want the AI to know | Layer |
|---|---|
| "You are AI assistant X" | Global Prompt |
| "This session discusses Project ETOS" | Topic Prompt |
| "It's May 2026 right now" | System Time (toggle on for auto-inject) |
| "I work in Swift" | Long-Term Memory |
| "Last time we talked about React perf" | Cross-Session Summary (auto) |
| "I prefer concise replies" | User Profile (auto + manually editable) |
| "When Character X shows up, recall background" | Worldbook (keyword-triggered) |
| "Before tool calls this turn, do X" | Enhancement Prompt |
Why This Design Matters
It buys you not more features but more control:
- You can identify which layer shaped a reply
- You can prune specific context for specific question types
- You treat worldbook / memory / tools as governance targets, not a soup of prompts
Next
- See how Daily Pulse uses this context → Daily Pulse Internals
- See how memory / summary / profile are generated → Memory, Summary & Profile
- See worldbook + tool governance details → Worldbook & Tool Governance