How I turned Claude Code into a persistent AI chief of staff — the full architecture, from CLAUDE.md to scheduled background scripts.
Built with Claude Code by @loganinthefuture
The architecture below is now installable in one command. In Claude Code:
/plugin marketplace add loganhc-09/claude-chief-of-staff
/plugin install chief-of-staff@chief-of-staff
Restart Claude Code, then run /chief-of-staff:setup — it interviews you and scaffolds your own persistent memory + daily-brief system. No coding required. The plugin lives in plugins/chief-of-staff/; everything it creates is plain Markdown on your machine.
The system has three layers. Most people are already at Layers 1 and 2. The unlock is Layer 3.
Layer 1 — Knowledge (Vault): A markdown vault Claude Code reads and writes. Start with the examples/CLAUDE.md template. That's the smallest viable version of this entire system — works the moment you drop it in a folder you claude from.
Layer 2 — Active (MacBook + Claude Code): You + Claude Code in the moment. Live work, live decisions. Already running if you have Claude Code installed.
Layer 3 — Autonomous (always-on machine): A second machine running scheduled scripts that pull email, calendar, transcripts, and post to Discord. Mine is an old laptop on my desk. Could be a Raspberry Pi, a Mac mini, or a cheap cloud VM. See architecture.md and examples/scripts/ for what runs there.
Cost: I run on Claude Max ($200/month). Most of this works on Max 5x ($100/month) too — see getting-started.md for plan-tier breakdown and cost-reduction habits.
Most people use Claude Code for one-shot tasks. Write this email. Fix this bug. Explain this code. That's useful — but it's like hiring a brilliant contractor and only giving them 15-minute jobs.
This repo is the architecture for something different: a persistent operational layer that remembers your context, runs in the background, and compounds over time. Morning briefings generated before you wake up. Meeting transcripts processed into facts and follow-ups overnight. Commitments tracked and surfaced when they're overdue.
It's the difference between "I use AI sometimes" and "AI is part of how I operate."
DATA SOURCES
Calendar · Email · Meeting Transcripts · Analytics · Notes
Discord conversations · YouTube channels · Newsletters · RSS feeds
↓
SCHEDULING LAYER
launchd/cron jobs · Session hooks · Reminder scripts
Discord bot (always-on) · Content scout (daily)
↓
PROCESSING
Transcript extraction · Email triage · Briefing generation
Follow-up tracking · Content pipeline · Data analysis
Reading curation · Signal extraction · Cross-source clustering
Discord fact mining · Approval gate routing
↓
KNOWLEDGE STORE
SQLite memory (facts, knowledge profile, milestones)
Semantic search (QMD) · Follow-up queue · Decision log
Meeting archive · Position documents · Network map
Reading preferences · Source trust scores · POV pillars
↓
OUTPUTS
Morning briefings · Draft messages · Reminders
Content drafts · Intelligence briefs · Approval queues
Discord channels · Reading recommendations
See architecture.md for the full system diagram, data flows, memory layout, and scheduling config.
The key design decision: not everything needs human involvement at every step. Three modes of work, explicit about where AI hands off to you.
Automated: Process transcripts, sync data, generate briefings, flag overdue items. AI owns it.
Approval-gated: Draft replies for you to review. Triage inbox for you to prioritize. Surface follow-ups for you to act on. AI preps, you decide.
Human only: Send messages, publish content, make judgment calls, strategic decisions. Never automated.
Most AI setups try to do everything or nothing. This one is explicit about where the handoff happens.
| File | What It Is |
|---|---|
| architecture.md | Full system diagram, data flows, memory layout, scheduling |
| getting-started.md | Progressive build guide — Day 1 to Month 3+ |
| examples/CLAUDE.md | Template for your own chief of staff config |
| examples/scripts/briefing.py | Morning briefing generator |
| examples/scripts/meeting_processor.py | Transcript → facts + follow-ups pipeline |
| File | What It Is |
|---|---|
| memory-system.md | SQLite memory database, extraction protocol, effort tracking, semantic search |
| learning-loops.md | Reading system, content scout, discussion queue — feedback-driven learning |
| discord-system.md | Discord bot, approval gates, message memory, fact extraction |
This repo is the architecture. The code for two of the pieces lives in standalone repos you can fork independently:
| Repo | What It Is | Where It Fits |
|---|---|---|
| task-tinder | Swipe-based task triage with metacognition capture | The Tier 2 interface. You decide, the system learns your methods. |
| reading-scout | Personal reading agent that learns from your conversations | The learning-loops layer. More here. |
Most of the system runs in the background, but day-to-day I open a local web dashboard at localhost:8091 (loopback only — bound to 127.0.0.1, not exposed to your LAN). It's a small Flask server that pulls from the SQLite memory and queue tables and renders three panels: Task Tinder (the swipe UI for triage), Intel (overnight signals + reading), and a day-prep panel.
The full dashboard is custom to my workflow and not in this repo (yet). The Task Tinder swipe UI is open source at task-tinder — fork that, point it at your own task store, and you have the most-used surface.
You don't build this in a weekend. You build it one layer at a time.
- Day 0: Pick your plan + skim cost-reduction habits (details) — 5 minutes
- Day 1: Create your CLAUDE.md (10 minutes)
- Week 1: Add memory files for persistence across sessions
- Week 2: Morning briefing routine (manual first, then scripted)
- Month 1: Scheduled scripts + SQLite memory database
- Month 2: Discord bot for mobile access + approval gates
- Month 2: Learning loops — reading system + content scout
- Month 3+: The full stack — everything connected, everything learning
See getting-started.md for the full walkthrough.
- Clarity beats code. The bottleneck is never technical — it's knowing what you want.
- Progressive complexity. Each layer works on its own before you add the next one.
- Close loops, don't open them. Every automation should end with a verifiable outcome.
- Human-in-the-loop by design. Prep is automated. Decisions are not.
- Memory is architecture. If the AI doesn't remember yesterday, it can't help with tomorrow.
- Learning compounds. Systems that get smarter from your behavior beat static configurations.
- Filter aggressively. The value is in what you don't see — most content doesn't clear the bar.
Made by Logan Currie with Claude Code.
Part of my series on building personal AI operating systems — Captain's Log on Substack.
MIT — use it, adapt it, build on it.