
Personal Discord assistant for Kyle. Long-lived Discord bot, runs as
a K8s Deployment (infra/ai-agents/pai-responder/) with the
kpericak/ai-agent-runtime image. Auth: Claude Max OAuth via Vault.
1485425671554596995)pai-discord (custom, in pai-responder ConfigMap)claude --agent pai| Tool group | What it covers |
|---|---|
| Read, Glob, Grep, WebSearch, WebFetch | Codebase + wiki + web reading |
pai-discord MCP |
Discord operations (send, read, threads, embeds, reactions, edit, delete) |
pai-memory MCP v2 |
Markdown-backed memory (save/search/recall/get/list, commitment lifecycle, daily-note promotion) |
playwright MCP |
Headless browser (navigate, snapshot, screenshot, click, evaluate) |
linear-server MCP |
Linear issues, projects, teams, comments |
Pai does not have Bash, Write, Edit, or Agent tools. It is read-only on the repo. The only place it writes is its own memory (PVC at /data/).
Three markdown files on the pai-responder PVC:
/data/MEMORY.md — durable, sectioned by ## headers/data/daily/YYYY-MM-DD.md — daily notes with timestamps/data/COMMITMENTS.md — YAML-fenced blocks for follow-upsPre-reply active recall: pai-recaller (separate Sonnet sub-agent)
searches memory and returns either NONE or a 2-3 line digest. The
digest gets prepended to Pai's main turn as an <active_memory> block.
gateway.py runs _commitment_tick every 60 seconds. Reads
COMMITMENTS.md, finds entries where status=pending AND due<=now,
spawns claude --agent pai to deliver each via Discord, then marks
delivered.
apps/pai/README.md.claude/agents/pai.md.claude/agents/pai-recaller.mdinfra/ai-agents/pai-responder/