Joon's headquarters. One folder for everything he's building, plus the agent that works on it.
hq/
├── control/ ← what you write. Your inbox, queue, and to-dos.
├── system/ ← the agent. Its script, prompts, and logs.
└── projects/ ← your code. Each is its own git repo; HQ ignores them.
- Write a note in
control/inbox.md— plain English, one thought per line. - Every hour the agent reads it, turns notes into tasks in
control/queue.md, works the top ones, and texts your phone. - It opens a draft pull request. You review and merge.
A task is picked up when it's an open - [ ] line. It's skipped when it's:
| Marker | Meaning |
|---|---|
[YOU] |
yours to do — lives in for-you.md, never the queue |
(idea) |
a thought to revisit, not to build |
⚠️ |
the agent got stuck. Delete the note to let it retry. |
under ## Parked / ## Done |
out of play |
Add [model:haiku], [model:sonnet], or [model:opus] to pick how much
thinking a task gets. Untagged means Opus.
By default the agent opens a draft PR and stops — it never merges its own work.
To skip that for a small fix, say so in the note: "fix the typo on the about page, push to main". Then the agent pushes a branch, a reviewer reads the diff, and the merge happens only if that review is clean. A blocker leaves the PR open and pings you instead.
Touch .env or secrets · force-push · delete anything outside the repo it's working
in · merge anything you didn't explicitly ask it to.
Two layers:
control/history.md— every finished task, newest first. When a task involves a real decision (an approach picked over an alternative, and why), the agent adds aDecision:line so a future session doesn't have to rediscover it.- MemPalace — a searchable archive of every past session (not just HQ's). Before
starting a task, the worker searches it for relevant past decisions. A weekly
reconciler (Sundays 6:30am) mines that week's
history.mdinto it, and checksqueue.md/for-you.md/ the memory fact files for stale PR/branch claims — a task pointing at a PR that already merged, a memory file saying something is "open" that closed weeks ago — and fixes what it finds.
system/runs.jsonl— every event, append-only. The honest record of what happened.system/status.json— current state, rewritten each run.system/logs/— full transcripts.
The queue says what you intended; runs.jsonl says what actually happened.
Never write a fact here you could look up instead — that's how notes go stale.