A prioritized roadmap for ARGent development. Features are grouped by milestone and ordered by dependency.
Every milestone serves the core vision: agents that feel alive. Here's how each phase contributes:
| Milestone | Contribution to Realism |
|---|---|
| 1. MVP | Foundation — persistent entities with memory and goals |
| 2. Immersion | Agents feel like real people — consistent, mortal, aware of time |
| 3. Multi-Agent | Agents exist beyond the player — they talk, scheme, betray |
| 4. World | Agents respond to an evolving world, not just to you |
| 5. Memory | True long-term persistence — agents remember across weeks |
| 6. Inheritance | Agent mortality and continuity — same channel, different voice |
Goal: Foundation for persistent entities with memory and goals
The current pipeline generates responses but doesn't extract state changes.
-
Trust extraction from responses
- Classify agent responses for trust-relevant content
- Update trust scores based on player agreement/disagreement
- Log trust events with reasons
- Files:
src/services/classification.py,src/services/trust.py
-
Knowledge extraction
- Extract facts revealed in conversations
- Store in
player_knowledgetable - Inject known facts into agent prompts (avoid repetition)
- Files:
src/services/knowledge.py,src/api/inbox.py
-
Response classification
- Classify player messages for intent, sentiment, topics
- Store classification results
- Use for trust calculation and trigger evaluation
- Files:
src/services/classification.py
The in-fiction page where players use their key.
-
Dashboard page
- Key-derived URL:
/access/<key>— the URL IS the key - Corporate intranet styling (90s/2000s feel)
- Key validation against
player_keystable - Puzzle discovery: agents hint, player figures out URL
- Files:
src/argent/api/evidence.py,src/argent/templates/evidence.html
- Key-derived URL:
-
Access logging
- Log every access attempt (success/failure)
- Track access count against limit (5 uses)
- Emit
key_usedevent for story triggers - Files:
src/argent/services/evidence.py,src/argent/scheduler/events.py
-
Dashboard content
- Security access log with timestamps
- 2 internal memos (Project Threshold)
- Redacted incident report
- Email thread fragment
- Files:
src/argent/templates/evidence.html,src/argent/static/evidence.css
-
Ember visibility
- Ember's prompt includes betrayal context when dashboard accessed
- Knowledge fact stored: "Player accessed the evidence dashboard"
- Agent personas include key hint reactions
- Files:
src/argent/story/prompt_builder.py,src/argent/story/personas/
Currently only time-based triggers. Need condition evaluation.
-
Trigger evaluator
- Evaluate conditions: trust thresholds, milestones, days elapsed
- Support compound conditions (AND/OR)
- Files:
src/scheduler/evaluator.py(new)
-
Dashboard reveal trigger
- Fire when: day >= 3 AND trust > 40 with any agent
- Higher-trust agent reveals access
- Files:
src/scheduler/events.py
-
Post-Thursday triggers
- Detect when Thursday deadline passes
- Shift agent behavior (Ember desperate, Miro strategic)
- Files:
src/scheduler/events.py
Goal: Agents feel like real people — consistent, mortal, aware of time
Prevent agents from contradicting themselves.
-
Claims extraction
- Extract significant claims from agent responses
- Categorize: action, fact, opinion, promise
- Mark ground truth (is this claim true?)
- Files:
src/services/claims.py(new)
-
Claims storage
agent_claimstable with player_id, agent_id, claim, is_true- Index recent claims for prompt injection
- Files:
src/models/claims.py(new)
-
Consistency constraints
- Inject recent claims into agent prompts
- "Do not contradict: [list of previous claims]"
- Files:
src/agents/prompt_builder.py
Characters can fade, go silent, or disappear.
-
Lifecycle state model
- States: engaged, cooling, silent, gone
- Store per player-agent pair
- Files:
src/models/lifecycle.py(new)
-
Lifecycle transitions
- Define triggers: trust thresholds, goal achieved, days elapsed
- Transition signals (agents warn before going silent)
- Files:
src/services/lifecycle.py(new)
-
Behavioral modifiers
- Response probability per state (1.0 → 0.8 → 0.2 → 0)
- Response delay multiplier
- Tone modifier (normal → terse → cold)
- Files:
src/agents/base.py
Adapt pacing to player activity.
-
Engagement state model
- States: active, casual, dormant, lapsed, churned
- Track last message timestamps
- Files:
src/models/engagement.py(new)
-
State transitions
- Scheduled job to update states based on inactivity
- active (< 48h) → casual (3-5d) → dormant (7-13d) → lapsed (14-20d) → churned (21d+)
- Files:
src/scheduler/jobs.py
-
Re-engagement messaging
- Concerned check-ins for casual players
- Story hooks for dormant players
- Files:
src/scheduler/events.py
Goal: Agents exist beyond the player — they talk, scheme, betray
Agents learn about each other through player actions.
-
Introduction detection
- Detect when player mentions one agent to another
- Detect when player forwards messages
- Files:
src/services/classification.py
-
Awareness state
- Track which agents know about each other per player
- Store in
inter_agent_exchangestable - Files:
src/models/exchanges.py(new)
-
Knowledge sharing evaluation
- Per-agent sharing rules (always share, always withhold, trade)
- Deterministic evaluation based on personality
- Files:
src/services/sharing.py(new)
Prevent message overlap, ensure coherent pacing.
-
Message queue coordination
- Maximum messages per day per player
- Minimum gap between different agents
- Files:
src/scheduler/coordinator.py(new)
-
Conflict detection
- Don't send conflicting info at the same time
- Space out reveals
- Files:
src/scheduler/coordinator.py
Expand the cast based on story progression.
-
Cipher agent
- The intended recipient
- Cold, technical personality
- Spawn condition: exposure >= 50 OR Ember mentions them
- Files:
src/agents/cipher/(new)
-
Kessler agent
- Corporate fixer
- Polite, professional, unsettling
- Spawn condition: high exposure OR player causes visibility
- Files:
src/agents/kessler/(new)
Goal: Agents respond to an evolving world, not just to you
Track how "visible" the player has become.
-
Exposure tracking
- Exposure level 0-100 per player
- Events that increase/decrease exposure
- Files:
src/models/world.py(new)
-
Exposure triggers
- Key used: +30
- Dashboard accessed 3+ times: +15
- Forwarded agent message: +20
- Player went silent 7d: -10
- Files:
src/services/exposure.py(new)
New characters appear based on player actions.
-
Spawn condition evaluation
- Check conditions after exposure changes
- Support: exposure threshold, agent lifecycle state, milestones
- Files:
src/scheduler/spawning.py(new)
-
Spawn messaging
- First contact for new agents
- Contextual introduction based on trigger
- Files:
src/scheduler/events.py
Thursday deadline has soft consequences.
-
Thursday tracking
- Track when 4 days have passed since game start
- Flag
thursday_passedin world state - Files:
src/models/world.py
-
Post-Thursday behavior
- Ember: more desperate, fewer options
- Miro: reveals deadline was artificial
- Exposure +20
- Files:
src/agents/*/persona.py
Goal: True persistence — agents remember across weeks and months
Connect to Vertex AI Memory Bank (or alternative).
-
Memory service
- Store conversation content in Memory Bank
- Per-player isolation
- Files:
src/services/memory.py(new)
-
Session sync
- Save sessions to Memory Bank after key moments
- Index claims and significant events
- Files:
src/agents/base.py
Pull relevant context from past conversations.
-
Memory search
- Query Memory Bank for relevant past interactions
- Filter by agent, topic, significance
- Files:
src/services/memory.py
-
Context assembly
- Include relevant memories in agent prompts
- Budget: ~400 tokens for memories
- Files:
src/agents/prompt_builder.py
Goal: Agent mortality and continuity — same channel, different voice
-
Channel ownership model
- Track current owner per channel per player
- Store previous owners and inheritance type
- Files:
src/models/channels.py(new)
-
Inheritance mechanics
- Full history, partial (summaries only), or none
- Affects what new agent can reference
- Files:
src/services/inheritance.py(new)
-
Takeover messaging
- First occurrence: explicit announcement
- "This isn't [previous]. I found this device."
- Files:
src/scheduler/events.py
- Player dashboard for tracking story progress
- "Catch me up" summary after long absence
- Quiet hours configuration
- Timezone-aware scheduling
- Additional story threads beyond the key
- Modular story packs
- Seasonal events
- Shared world state across players
- Cross-player ripple effects
- Collaborative discoveries
- Voicemail drops from agents
- Voice synthesis for agent calls
- Speech-to-text for player responses
- Pick a milestone — Work through milestones in order; they build on each other
- Check dependencies — Some features require others (e.g., triggers need classification)
- Mark complete — Check off items as they're implemented
- Update as needed — This is a living document; adjust based on learnings
- Milestone 1 is required for a playable MVP
- Milestone 2 makes agents feel real
- Milestone 3 enables the multi-agent experience
- Milestones 4-6 add depth but aren't blocking