feat: letta-backed status maintenance (#529)
* feat: letta-backed status maintenance
replaces claude-code-action with a letta-backed python script that
maintains persistent memory across runs. the agent remembers:
- previous status updates and their content
- architectural decisions and patterns
- recurring themes in development
this means the agent doesn't need to re-read everything from scratch
each week - it builds on accumulated context.
new files:
- scripts/status_maintenance.py - main CI script
- scripts/letta_status_agent.py - local testing/interaction
workflow changes:
- uses uv run scripts/status_maintenance.py instead of claude-code-action
- adds LETTA_API_KEY secret requirement
- adds --dry-run option for testing
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: use structured outputs and read full STATUS.md
- use anthropic's structured outputs beta (structured-outputs-2025-11-13)
with Pydantic model for guaranteed schema compliance
- read the full STATUS.md content, not truncated to 3000 chars
- remove manual JSON parsing/begging - let the API handle it
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: use opus 4.5 by default, make model configurable
- add model setting defaulting to claude-opus-4-5-20251101
- configurable via ANTHROPIC_MODEL env var
- use settings.model everywhere instead of hardcoded sonnet
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: memory blocks for project understanding, restore full prompt guidance
memory blocks refactored:
- project_architecture: how plyr.fm is built, key design decisions
- atproto_context: understanding of ATProto, lexicons, NSIDs
- recurring_patterns: themes that come up repeatedly
the agent no longer tracks 'what it processed' - github (last merged PR)
is the source of truth for the time window. memory is purely for
accumulating project understanding.
restored all original prompt guidance:
- full narrative structure (opening, main story, secondary, rapid fire, closing)
- tone requirements (skeptical, amused, no superlatives)
- pronunciation rules (player FM, never plyr.fm)
- time reference rules (specific dates, never 'last week')
- identifying what shipped vs improved
- first episode detection and longer script guidance
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: tighten system prompt (-75 lines)
preserve critical guidance:
- pronunciation (player FM)
- time bounds (specific dates)
- narrative structure
- tone (dry, sardonic)
remove redundancy:
- consolidated CRITICAL markers
- merged duplicate tone sections
- simplified structure timing
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
authored by
zzstoatzz.io
Claude
and committed by
GitHub
e72feae5
ca9ddd7e