Setup
Local development setup
End-to-end walkthrough —
poindexter setup, model pulls, stack startup,
and per-layer verification.Fresh DB setup
Bring up Postgres from scratch and verify the migration runner against
an empty schema.
Environment variables
The small set of env vars Docker still needs for bootstrap. Everything
else lives in
app_settings.Day-2 operations
Troubleshooting
Real production issues we’ve hit — symptom, root cause, fix.
Incident response
On-call runbook — what to do when the brain daemon pages Telegram.
Backups
Postgres backup + restore. Tested against the actual prod database.
Disaster recovery
Per-service recovery, ordered by severity.
Secret rotation
Per-secret runbook — OAuth client secrets, storage credentials, API
tokens.
Migrations
The
YYYYMMDD_HHMMSS_ prefix convention plus the migration runner
contract.Runbooks
LiteLLM cutover rollback
Rollback procedure for the LiteLLM cutover if the router misbehaves.
Model endpoint routing
Route specific models to a second Ollama — pin a GPU, borrow VRAM from another box.
OAuth Grafana
Grafana JWT issuance via the OAuth bridge.
Voice bridge
LiveKit + Whisper + Kokoro voice loop — the tap-to-join surface.
Voice STT/TTS
STT/TTS provider configuration and quality tuning.
Niche topic discovery
The
poindexter topics workflow — discover, rank, approve, dispatch.Reference
CLI reference
Every
poindexter subcommand with flags, examples, and JSON output mode.Ports
Local-services port map — what listens where.
CI / deploy chain
How Poindexter itself is tested and shipped via GitHub Actions + Vercel.
Extending Poindexter
Add a Stage, Reviewer, Adapter, Provider, Tap, Probe, Job, or Module.
Claude Code permissions
Allowlist Claude Code needs for autonomous operation.
Commit signing
How Poindexter commits are GPG-signed and why. For contributors.