@namastexlabs/speak
Version:
Open source voice dictation for everyone
198 lines (130 loc) • 5.75 kB
Markdown
# Example: Implementor Agent Using Session-State-Updater
**Last Updated:** !`date -u +"%Y-%m-%d %H:%M:%S UTC"`
This demonstrates how ANY agent/workflow automatically maintains SESSION-STATE.md without explicit memory of role-clarity-protocol.
## Pattern: Self-Updating Agent
### 1. Start: Notify system
```markdown
# Implementor Agent
[At session start, immediately call session-state-updater]
!`npx automagik-genie run session-state-updater "action=started agent=implementor session_id=$SESSION_ID purpose=Implement\ Feature\ X branch=feat/x"`
**Result:** SESSION-STATE.md now has entry. System knows this agent is active.
No role-clarity-protocol skill needed - it's automatic.
```
### 2. Discovery: Gather context
```markdown
## Discovery Phase
- Analyze requirements
- Identify files to modify
- Understand current state
[Update system with what we're about to touch]
!`npx automagik-genie run session-state-updater "action=in_progress agent=implementor session_id=$SESSION_ID context=\"phase=discovery files_to_modify:[src/core.ts,src/utils.ts,test/core.test.ts]\""`
**Result:** Anyone checking SESSION-STATE.md sees exactly what's in progress.
No ambiguity. No need for me to guess.
```
### 3. Implementation: Work + checkpoints
```markdown
## Implementation Phase
### Group A: Core logic
- Modifying src/core.ts
- Adding new interfaces
- Implementing handlers
!`npx automagik-genie run session-state-updater "action=in_progress agent=implementor session_id=$SESSION_ID context=\"current_group=A files_modified:[src/core.ts] tests_status:pending\""`
### Group B: Utils
- Updating src/utils.ts
- Adding helper functions
!`npx automagik-genie run session-state-updater "action=in_progress agent=implementor session_id=$SESSION_ID context=\"current_group=B files_modified:[src/core.ts,src/utils.ts] tests_status:pending\""`
```
### 4. Verification: Tests + validation
```markdown
## Verification Phase
Running tests...
!`npx automagik-genie run session-state-updater "action=in_progress agent=implementor session_id=$SESSION_ID context=\"phase=verification tests_running:true\""`
Tests passed! ✅
!`npx automagik-genie run session-state-updater "action=in_progress agent=implementor session_id=$SESSION_ID context=\"phase=verification tests_pass:true\""`
```
### 5. Completion: Mark done + document results
```markdown
## Results
✅ All tests passing
✅ Implementation complete
✅ Done report: .genie/wishes/feat-x/reports/done-implementor-feat-x-20251018.md
!`npx automagik-genie run session-state-updater "action=completed agent=implementor session_id=$SESSION_ID context=\"files_modified:[src/core.ts,src/utils.ts,test/core.test.ts] tests_pass:true done_report:.genie/wishes/feat-x/reports/done-implementor-feat-x-20251018.md\""`
**Result:** Session moved to history. SESSION-STATE.md shows completion + context.
Clean audit trail. No manual updates needed.
```
## What This Pattern Eliminates
### BEFORE (Manual, error-prone)
```markdown
# role-clarity-protocol skill (705 tokens)
- I have to remember to check SESSION-STATE.md
- I have to parse active agents
- I have to detect file conflicts
- I have to make decisions about role boundaries
- If I forget → behavioral failure
- Skill takes tokens EVERY session
```
### AFTER (Automatic, systematic)
```markdown
# session-state-updater workflow (called only when needed)
- Every agent calls updater at start/end
- STATE automatically synchronized
- File conflicts visible in SESSION-STATE.md itself
- System enforces role boundaries (state is source of truth)
- No forgetting possible (built into workflow)
- Zero token waste (only runs when needed)
```
## Key Insight
**The behavioral guardrail becomes architectural:**
Instead of:
- "Remember to check role-clarity-protocol"
- "Check SESSION-STATE.md before acting"
We have:
- "Every agent systematically updates SESSION-STATE.md"
- "STATE-STATE.md is always authoritative"
- "Conflicts visible immediately (state-based, not skill-based)"
## Agent Template (Copy-paste ready)
```markdown
name: <agent-name>
type: agent
genie:
executor: claude
# <Agent Name> Agent
!`npx automagik-genie run session-state-updater "action=started agent=<name> session_id=$SESSION_ID purpose=<description> branch=<branch>"`
## Discovery Phase
[Work here]
!`npx automagik-genie run session-state-updater "action=in_progress agent=<name> session_id=$SESSION_ID context=\"phase=discovery [key_findings]\""`
## Implementation Phase
[Work here]
!`npx automagik-genie run session-state-updater "action=in_progress agent=<name> session_id=$SESSION_ID context=\"phase=implementation files_modified:[list]\""`
## Verification Phase
[Work here]
!`npx automagik-genie run session-state-updater "action=completed agent=<name> session_id=$SESSION_ID context=\"[final_context]\""`
```
## Impact on AGENTS.md
**Role-clarity-protocol (705 tokens):** Can be marked as disabled (no @)
- Logic moved to session-state-updater workflow
- Knowledge transferred from skill to executable workflow
- Same behavioral guarantee, zero token waste
- Available for reference if needed
**Pattern spreads:**
- Other guardrails → workflows
- AGENTS.md shrinks (less bloat)
- Workflows grow (more executable knowledge)
- System gets more autonomous
## The Genie Architecture Pattern
This demonstrates the principle:
**Transform behavioral rules into automated workflows**
1. Identify guardrail (e.g., "check session state")
2. Create executable workflow (session-state-updater)
3. Integrate into agent templates (! calls)
4. Remove skill from auto-load (@)
5. System is now self-enforcing
Result: Genie becomes smarter, AGENTS.md becomes lighter, execution becomes more reliable.