curia — self-hosted agent dispatcher

Run Matt Pocock’s wayfinder from your phone

Curia knows about all your projects and tells you what to build next. It helps you dispatch parallel agents without losing track.

Wayfinder ships with curia, with the rest of Matt Pocock’s skills.

Set it up GitHub

01into the mess

The backlog panic grows

02maps bring order

Maps turn the pile into a queue.

Blocked tickets wait. Open ones light up, and agents take them in order, straight from your GitHub issues.

03the grilling

Answer from the couch.

An agent hits a real decision and asks you in Discord.

⏳ 2 · grilling
CuriaBotAPPToday at 10:41(edited)
Screenshot or built HTML for the six scenes that show curia working?
A. Built HTML, every scene ↳ Moves with the scroll, sharp on every screen, and costs you no time.
B. A real screenshot ↳ It is evidence. Fixed size, needs your phone, and carries a date.
The reasoning is on the timeline. The button is below.
answered by @Alper via button: A. Built HTML, every scene
AlperToday at 10:43
we can build the whole thing in html. as realistic as possible. that makes it easier to animate it
CuriaBot is typing...

one thread per ticket · parallel chats

04the preview

Live previews from your phone or workstation

GRAVITYfonts · trials · licences

A typeface with weight.

Nine weights, two widths, and one axis for the space between.

Try it free
GRAVITYfonts · trials · licences

A typeface with weight.

Nine weights, two widths, and one axis for the space between.

Try it free
GRAVITYfonts · trials · licences

A typeface with weight.

Nine weights, two widths, and one axis for the space between.

Try it free
GRAVITYfonts · trials · licences

A typeface with weight.

Nine weights, two widths, and one axis for the space between.

Try it free
GRAVITYfonts · trials · licences

A typeface with weight.

Nine weights, two widths, and one axis for the space between.

Try it free
9:41
aA 🔒 box.tailnet.ts.net:9000

A secure link on your tailnet

05the app

The Curia app shows where every map stands and which agents are currently running.

curia · app1 needs you
1needs you

One agent runs, and it is asking you a question.

Agents

claude · The app scene of the story page#628 · prototype · claude-opus-5 chat →

Maps

Build the Curia app operator experience8/42
Model credentials and provider-account failures16/19
Ship the story landing page10/16 +2
curia · app · maps#600
10/16+2 Ship the story landing page

alp82/curia · destination: the page is live at curia.sh

10 walked#627 the preview · #626 the Discord scene · #625 the opening arc
The app scene of the story pageruns · claude-opus-5 · #628 chat →
the frontier0 takeable
nothing takeable. the way is in flight

blocked · 5

The terminal scene of the story page#629 · behind the app scene
The ticket run scene of the story page#630 · behind the terminal scene
The VPS scene of the story page#631 · behind the ticket run scene
Cut over to the story page#604 · behind the VPS scene
Announce and distribute the page#145 · behind the cutover

the fog · 2

the README beyond the scene 11 link exchange · what becomes of the two prototype directories

06the harness, live

Watch the agent type in your browser tab.

harness

gravity · preview
box.tailnet.ts.net/terminal/?arg=gravity
   Claude Code v2.1.220
  Opus 5 (1M context) · API Usage Billing
  ~/gravity


GRAVITY — the size waterfall on the fonts page
  Nine weights, two widths, twelve sizes, 10px to 96px.

Read(site/copy/pangram.txt)
  ⎿  1 line, 62 characters

Write(site/fonts.html)
  ⎿  Wrote 189 lines

Bash(npx serve site -l 4000)
  ⎿  Serving site on http://0.0.0.0:4000

The waterfall reads down from 96px, so the first
  thing on screen is the face and not the smallest
  setting of it.

✻ Cooked for 36s
──────────────────────────────────────────────────────────
 
──────────────────────────────────────────────────────────
  ⏵⏵ bypass permissions on (shift+tab to cycle)
╭────────────────────────────────────────────────────╮
>_ OpenAI Codex (v0.146.0)                        
                                                  
model:       gpt-5.6-sol   /model to change       
directory:   ~/gravity                            
permissions: YOLO mode                            
╰────────────────────────────────────────────────────╯

GRAVITY — check the waterfall at the small end

Ran node tools/contrast.mjs site/fonts.html
  └ 12 steps measured

──────────────────────────────────────────────────────────

Below 14px the Thin weight drops under 3:1 against
  the cream background. The waterfall should stop at
  14px for Thin, or the background should darken.

──────────────────────────────────────────────────────────
 

  gpt-5.6-sol high · ~/gravity

Claude Code and Codex are supported

07one ticket on GitHub

You are in charge

alp82 / curia Open Closed

Choose the words of every scene of the final page #587

wayfinder:prototype alp82 opened this issue on Aug 21, 2026
  1. alp82 opened this issue · Aug 21, 15:08
  2. curia-sh assigned this to alp82 · Aug 21, 18:46
  3. curia-sh commented · Aug 21, 18:55🔗 curia pushed curia/587 (1 commit) and opened #597
  4. curia-sh commented · Aug 22, 19:10🔗 curia pushed curia/587 (5 commits) and updated #597
  5. curia-sh merged #597 as a71e154 and closed this as completed · Aug 22, 2026, 19:13
box.tailnet.ts.net/
curia
Curia appMapsAgentsSettings
The frontier1 takeable

Choose the words of every scene of the final page

alp82/curia#587wayfinder:prototype

Ship the story landing page 13 of 17 walked
🎫 587 · prototype

CuriaBotAPP18:41

⚙️ dispatched on claude-opus-5

CuriaBotAPP09:18

🔎 round 2 of 4

five candidates per slot

github.com/alp82/curia/pull/597
alp82 / curia
CodePull requests 1IssuesActions

Choose the words of every scene of the final page #597

Opencuria-sh wants to merge 5 commits into main

5 commits3 files changed+757−0

baa02ff The words locked: verdict in NOTES

🔎 587 · prototype

CuriaBotAPP21:10

Is alp82/curia#587 done?

The words of all twelve scenes are locked.

approved by @Alper

github.com/alp82/curia/pull/597
alp82 / curia
CodePull requests 1IssuesActions

Choose the words of every scene of the final page #597

Mergedcuria-sh wants to merge 5 commits into main

5 commits3 files changed+757−0

baa02ff The words locked: verdict in NOTES

✅ 587 · prototype

CuriaBotAPP21:13

✅ reports resolved

#597 merged · #587 closed

01You open a ticket.

02You tell it to start.

03The agent starts working on it.

04It waits for your confirmation.

05It finishes the work.

Your approval merges the pull request and closes the ticket

just type your rejection reasons if you don't agree with the result

This page itself was planned, decided and written by curia agents.

08your VPS

Your VPS is enough.

memory on a 4 GB box1 column = 0.1 GB
04 GB
  • the system · Docker, tmux, ttyd, Tailscale, Curia
  • 4 agents · about 0.5 GB each
  • 1 GB free

four agents at once on a small box · about 0.5 GB each

09open source

Open source.

Your box, your subscription, your keys.

git clone https://github.com/alp82/curia.git

10the guide

Set it up

What you need: One Linux box with Docker, Tailscale, a Discord server and your coding agent subscription

1Tailscale

Install Tailscale on the box and on your phone. Turn on HTTPS certificates for your tailnet, then run tailscale set --operator=$USER.

2GitHub

Log in with gh auth login. Create the GitHub App curia uses to reach your repos, and install it on each owner you watch.

3The Discord bot

Create a bot, turn on the message content intent, and invite it to your server. It makes the #curia channel itself.

4Two files

Put the bot token in daemon/.env.daemon. Put your repos and a workspace root in config/curia.yaml.

5Run it

docker compose -f deploy/compose.yaml up -d --build

Send a message in #curia, and a thread answers you.

All steps are described in the set up guide