Problem
tri-api accumulates messages with no size management. After ~5-10 tool-heavy turns, context exceeds Claude's 200K token limit → API returns 400 → session dies.
Solution: 3 new files + 2 modified (~300 LOC)
P0 — Context Survival
context.zig (~150 LOC): Token estimation (bytes/4), two-phase compaction:
- Truncate old tool outputs (keep last 3 turns)
- Summarize via API call (if still over 80%)
P1 — Instructions Layer
claude_md.zig (~80 LOC): Load CLAUDE.md hierarchy → system prompt
memory.zig (~60 LOC): Persistent learnings in ~/.tri-api/MEMORY.md
Wiring
main.zig (+30 LOC): Compaction before each turn, system prompt in API request
tool_protocol.zig (+5 LOC): Support for system field
Acceptance Criteria
Problem
tri-api accumulates messages with no size management. After ~5-10 tool-heavy turns, context exceeds Claude's 200K token limit → API returns 400 → session dies.
Solution: 3 new files + 2 modified (~300 LOC)
P0 — Context Survival
context.zig(~150 LOC): Token estimation (bytes/4), two-phase compaction:P1 — Instructions Layer
claude_md.zig(~80 LOC): Load CLAUDE.md hierarchy → system promptmemory.zig(~60 LOC): Persistent learnings in ~/.tri-api/MEMORY.mdWiring
main.zig(+30 LOC): Compaction before each turn, system prompt in API requesttool_protocol.zig(+5 LOC): Support for system fieldAcceptance Criteria