Inbox. A cross-session feed of everything that needs a human, ranked by urgency, not by session. A layout plugin over tool calls awaiting approval, runs (failed/finished), artifacts, Discord resources, telemetry (budget). Acting on a card answers the session in place; the transcript is one click away.
The reload loop test needs the build cache removed. Drop .p3/cache/esbuild and rebuild from scratch on every reload (adds ~380 ms), or keep the cache and key it by facet hash?
ask_user options: A drop cache · B key by facet hash · C defer
kit-owner build· slayer:~/pi · run 7 · npm run check2 min ago
3 tests failed in packages/chord/test/kit-owner.test.ts. Agent stopped after 2 fix attempts.
No new high CVEs. 2 moderate in undici 7.10.0 (dev only). Report attached.
Agents now
astra review
read packages/chord/docs/design.md
slayer · opus · 18 min · $2.31
Journal
bash git -C ~/journal add 2025-06-14.md
phone · haiku · 1 min · $0.01
p3 step 0b
waiting for you · 6 min
sol review
waiting for you · 23 min
kit-owner build
stopped · 3 tests failing
C
Cristina · radius gateway
edit gateway/src/route.ts
Today
$41.20spend · 82% of cap
214turns · 9 sessions
1,388tool calls
7commits · 3 by agents
41 minagents waited on you
4artifacts
Spend per hour
06091214
Board of runs. Kanban where a card is one run (an agent working toward a goal across turns). Columns are run state; the card shows the live current tool call. View over runs, turns, tool calls, envs. Dragging a card from "failed" to "queued" retries it with your note.
⌕ filter runs…
project: pienv: anyperson: me + Colingroup bystateenvperson
Queued 3
Regenerate models catalog
slayer:~/pi· sonnet
after: kit-owner build ✓
Mscheduled · waits on dependency
slayer CVE check
slayer· haiku· cron 06:00
⏱ tomorrow 06:00
Journal: weekly summary
phone:~/journal· haiku
⏱ Sun 20:00
drop here to queue
Working 4
astra review
slayer:~/pi· opus· turn 23$6.10/h
read packages/chord/docs/design.md:410-620
"Checking §7 principal keys against the slice 3 spec…"
M18 min · $2.31 · 4 of 6 steps
Journal
phone:~/journal· haiku
bash git add 2025-06-14.md && git commit
1 min · $0.01
radius gateway retries
laptop:~/radius· sonnet
edit gateway/src/route.ts
- const tries = 1+ const tries = cfg.retries ?? 3
CCristina · 9 min · $0.44
Discord bot: thread grants
slayer:~/pi· sonnet
bash npx vitest --run test/grants.test.ts
✓ grant expires after 1h
✓ thread grant scoped running…
Mission control. A wall of live tiles, one per active session: tail of the transcript, running tool call, cost, env. Built for a second monitor. View over sessions, turns, tool calls, envs, telemetry. Hover zooms a tile in place; the zoomed one below accepts input directly.
Mario › review slice 3 against design.md, be strict about cost guards
Read the slice spec and §5-§9 of design.md. Two findings so far:
1. bindParams() copies the params object on every call. design.md §6.2 says same-host values are never copied. This is hot-path work nobody asked for.
2. The WeakMap cache in principal-key.ts has no GC test.
Now checking §7 principal keys against the slice 3 test list…
read packages/chord/docs/design.md 410-620§7 Principal keys. A principal key names who acts. It is derived once per binding andcached in a WeakMap keyed by the binding object…
› steer astra review…
turn 23· 47 tool calls· 18 min· ctx 61%
p3 step 0b$3.92
Reload loop is green except cache invalidation.
? Drop the build cache, key it by facet hash, or defer?
slayer· opuswaiting 6m
Journal$0.01
Mario › (voice) rode to Graz, Ada's onboarding went fine, need to book the dentist
Added to 2025-06-14.md, reminder "dentist" for Mon 09:00.
bash git commit -m "journal: 06-14"
phone:~/journal· haiku
kit-owner build$1.77
Second fix attempt did not help. owner.ts:142 reads binding.params before the reload re-binds. Stopping; need a decision on reload order.
bash npm run check · exit 1
slayer· sonnet3 failing
sol review$1.12
4 commits ready on sol/review-fixes.
? approve git push
laptop· gpt-523m
radius gateway retriesC
Cristina › make retries configurable per route
Editing route.ts, then adding a test for 429 backoff.
edit gateway/src/route.ts
laptop:~/radius· sonnet$0.44
Discord bot: grantsCO
Thread grants now expire via the scheduler. Running the grants tests.
bash vitest --run test/grants.test.ts
slayer· sonnet$1.02
Discord plugin designdone
Published "Discord plugin: design book" (private). 3 open questions listed at the end.
slayer· idle 32m$4.88
slayer CVE checkdone
0 high. undici 7.10.0: 2 moderate, dev only.
slayer· idle 6h$0.06
Ada onboardingA
Ada › where do skills live?
~/.pi/p2/skills on the env; see README §Skills.
laptop· idle 1h$0.22
Env as the main view. The machine is the page: its checkout, shells and today's changes. Sessions are secondary, shown as authors of lines. View over an env, its files, terminals, and the tool calls (edit/write) that produced each hunk. Gutter colour = session; hovering a line reveals the turn that wrote it.
badlogic@slayer ~/pi(main ↑3)$ npm run check
> check> biome check --write . && tsgo --noEmit
Checked 1,204 files in 812ms. No fixes applied.
packages/chord/src/kit/owner.ts:142:19 - error TS2532:
Object is possibly 'undefined'.
142 const p = binding.current.params ~~~~~~~~~~~~~~~
Found 1 error in packages/chord/src/kit/owner.ts
badlogic@slayer ~/pi(main ↑3)$
shell 2· Discord bot: grants (Colin's agent)read-only for you
$ npx vitest --run test/grants.test.tsRUN v3.2.4 /home/badlogic/pi/packages/discord
✓ grants › grant expires after 1h (3 ms)✓ grants › thread grant is scoped to thread (2 ms)✓ grants › owner can revoke (1 ms)⠙ grants › scheduler fires expiry on restart
↳ waiting for fake timers…Test Files 0 passed (1) Tests 3 passed | 1 running
Repo timeline. One time axis for a checkout: git commits, agent sessions (as vertical lanes), CI runs and deploys. View over a repo's commits joined to the sessions and turns that produced them, plus CI/deploy resources. A commit expands into the conversation that led to it.
earendil-works/pi · mainToday, Jun 14commitssessionsCIdeploysPRsissues
0bkitdcastra
newest first
14:03
◔
astra reviewis reading design.md · Discord bot running grants tests · p3 step 0b waiting for Mario
13:58
✗
CI #4412failedcheck · 3m 12s · on7be01fd
packages/chord/src/kit/owner.ts:142:19 TS2532 Object is possibly 'undefined'
13:55
●
7be01fdfeat(chord): kit owner checks principal keykit-owner build+61 −9 · co-authored by agent
13:44
●
c2d9a31feat(p3): drop the build cache, rebuild on reloadp3 step 0b · turns 36-39+190 −99 · 4 files
agent · turn 36 The reload loop test fails 1 in 5 runs: the build cache keys by app.facetHash, which is computed before plugin edits are flushed. Options: A drop the cache (+380 ms per reload), B key by per-facet content hash, C defer.
Mario · 13:40 A. 380 ms is fine, a stale UI is not. Put it in decisions.md.
agent · turn 39 Removed build-cache.ts, reload now collects facets directly. reload-loop.test.ts passes 50/50. Added decision "A: drop the build cache" to apps/p3/docs/decisions.md.
Deployradius-gateway stagingv0.9.3 · by Cristina · healthy
13:02
◐
Discord bot: grants started by Colin · slayer · "thread grants with expiry"
12:47
✓
CI #4409passedcheck + test · 6m 40s ona41c9e2
12:39
●
a41c9e2fix(tui): wrap emoji by grapheme widthby Mario · no session
11:20
◐
kit-owner build started · from todo "kit owner checks" · sonnet
10:05
●
5f0e8b4docs(p3): step 0b specp3 step 0b
09:12
◐
p3 step 0b resumed · from handoff of step 0a
This day in numbers
commits7 (4 from sessions)CI runs5 · 1 faileddeploys1 staginglines+812 −340agent share71% of lines
Unpushed with sessions
7be01fd kit owner checks CI red
c2d9a31 drop the build cache
3a0f11c discord grants WIP uncommitted
Sessions with no commit yet
astra review · review only
Discord bot: grants · 3 files dirty
Day timeline. One lane per session, agent or person; a block is a turn coloured by model (striped = waiting for a human), ticks are tool calls. View over turns, tool calls, people's presence and telemetry. Drag the scrub line; the cards below show each lane's state at that instant.
Saturday, Jun 14‹ Fri
opussonnetgpt-5haikuwaiting for humantool call
lane
p3 step 0b14:03
waiting 6 min on ask_user
ask_user drop the build cache?
turn 41 · ctx 54% · $3.92 so far
kit-owner build
stopped at 13:58 after CI #4412
bash npm run check → exit 1
run 7 · 2 fix attempts · $1.77
astra review
turn 23, 41 s into a read
read design.md:410-620
opus · 12k tokens in flight · $2.31
sol review
waiting 23 min on approval
bash git push origin sol/review-fixes
laptop · gpt-5 · $1.12
Discord bot: grantsCO
running tests, 3/4 passed
bash vitest grants.test.ts
Journal
committing today's entry
bash git commit -m "journal: 06-14"
MMario
away since 13:46 (phone: locked)
last: answered p3 step 0b turn 36 at 13:40
CCristina
active on laptop:~/radius
driving "radius gateway retries"
Replay. A finished (or running) session as a timelapse: every pane is reconstructed as it was at turn N: the file being edited, the terminal, the browser the agent drove. Transcript runs as subtitles. View over one session's turns, tool calls, files (snapshots), terminal output and browser screenshots. Good for review, onboarding Ada, or "what did it actually do".
AGENT · TURN 27 · 11:52Facets now mount into named slots. The Discord facet targets a slot that does not exist yet, so I report it instead of appending to root. One test still expects the old code.
turn 27 / 4111:52:08speed1×8×skip idleonly edits
Mario spoke edit test failure09:1212:3114:03
The room. Presence first: who is here, what each person's agents are doing, and shared sessions drawn as tables people sit at (sit down = join the session; agents are seats too). View over people, sessions (membership), runs, Discord resources. Walking up to a table shows its live tail without joining.
at Discord bot: grants; also watching kit-owner build
CH
CharlottaDiscord only
in #radius, asked pi-bot for gateway logs (pending grant)
A
Adaoffline since 12:10
left "Ada onboarding" idle; 1 note for Mario
Agents without a person
astra review · Mario's, unattended
slayer CVE check · cron
p3 step 0b
slayer · opus
waiting for Mario
π
M
CO
"Drop the build cache, key by facet hash, or defer?"
Discord bot: grants
slayer · sonnet · 2 people
bash vitest grants
π
CO
C
Colin: "make the expiry survive a bot restart"
radius gateway retries
laptop
edit route.ts
π
C
astra review
no one seated
π
Ada onboarding
empty
click a table to sit · S stand up
Discord · Earendil
#pipi-bot14 today
Colin: @pi is the thread grant PR ready? pi-bot: tests 3/4, ETA ~5 min
#radiuspi-bot1 pending grant
Charlotta: @pi why does the MCP token refresh fail on staging? pi-bot: waiting for Mario to grant access to slayer
#vibesno bot
Ada: first PR merged!
Grants active
Cristina · #pi · auto · standing
Colin · slayer · 1 h · 38 min left
Project dashboard. One project ("pi") as an operations page: every resource with health (MCP servers, envs, model providers, tokens, bots), spend per person and per model, open questions, recent artifacts and members. View over resources, telemetry, people, artifacts and pending tool calls.
piearendil-works/pihealthy · 1 degradedlast 7 days ▾
Spend this week
$212.40
of $350 budget · today $41.20
Runs
143
121 done · 9 failed · 2 waiting
Human wait time
3h 41m
agents idle on approvals · median 4 min
Open questions
4
oldest 23 min (sol review)
Resources
Radius MCPupmcp.radius.earendil.dev · 24 tools · p50 84 ms · used by 6 sessionsRadius MCP (staging)degradedtoken refresh 401 since 13:12 · Charlotta asked about it in #radiusRadius models gatewayupopus, sonnet, haiku, gpt-5 · 0.2% errors · 429s: 3 todayslayer:~/pireachablessh · 32 cores · load 4.1 · 4 sessions · disk 61%laptopofflinelast seen 12:40 · sol review e2e failed because of itphone:~/journalreachabletermux · battery 64%Google (gog)expires in 2 dconsent screen in Testing: tokens expire after 7 days · re-authGitHub tokenvalidfine-grained · repo + issues · expires Sep 30Discord: pi-botconnectedEarendil · #pi #radius · 2 grants active
Discord plugin design: 3 questions in artifact 32m
Members
MownerCadminCOmemberCHdiscordAmember
1 invite pending
Recent artifacts
Discord plugin: design book
Discord plugin design · Mario · 32m ago · private
explainer
slayer CVE report Jun 14
slayer CVE check · cron · 08:14
report
astra vs sol: review diff
sol review · Mario · yesterday
diff
Activity
14:02 budget warning at 82% sent to Mario
13:58 CI #4412 failed on 7be01fd (kit-owner build)
13:31 Cristina deployed radius-gateway v0.9.3 to staging
13:12 Radius MCP (staging) token refresh started failing
12:40 env laptop went offline
12:10 Ada left; 1 note for Mario
Gallery. Everything agents produced, as a visual grid: artifacts (explainers, reports), screenshots from browser tool calls, diffs, PDFs, charts. View over artifacts and file outputs of tool calls; every tile links back to its origin (session + turn) and can be filtered by session, person, kind and time.
Canvas. An infinite board where any addressable thing can be dropped as a live node: notes, sessions, envs, artifacts, files (decisions.md), people. Wires are typed relations (blocks, writes to, owns, discusses). The board itself is context: "ask the agent about this board" sends the selected nodes and wires to a session.
↖✋▭✎⌁+
note · Mario
Reload must always reflect plugin edits. A stale UI after reload is worse than 400 ms more.
session
p3 step 0b
slayer · opus · turn 41 · $3.92
ask_user drop the build cache?
file · decisions.md
## 2025-06-14 - A: drop the build cache - UI is contributed from facets - no worktrees; one checkout per env
session
kit-owner build
3 tests failing · owner.ts:142
blocks step 0b
env
slayer:~/pi
reachable · load 4.1
env
slayer:~/pi
(same env, second reference)
artifact
Discord plugin: design book
3 open questions
person
CO
Colin
reviewing kit owner
person
MMario
note · Cristina
Gateway retries need the same "no hidden cache" rule?
4 nodes · 3 wires selectedsends tonew session · opus
Ask the agent about this board: "What still blocks step 0b, and who has to decide it?"
72%fitminimap
Traces. One run as a waterfall: model latency vs tool time vs waiting for the user, with runtime spans (chord.app.start, esbuild builds) nested under the tool calls that caused them. Below, a cost heatmap per hour × model. View over telemetry spans, turns, tool calls of one run, and spend telemetry of the project.
p3 step 0b · turns 36–39trace 7f3a…e2113:31:02 → 13:44:10 · 13m 08smodeltoolbuildruntimewaiting for user
Decisions. Every decision made in the project, harvested from decisions.md files and transcripts (an ask_user answer, "let's go with…", a reversed choice). Each links to who decided, when, the alternatives, and the turn where it happened. View over files, turns, people; supersession chains show when a decision was overturned.
⌕ cache4 of 63
all sourcesdecisions.mdtranscripts onlyby Mariosuperseded
Jun 14 13:40
p3
A: drop the build cache
Rebuild the UI bundle on every reload. Stale UI after a plugin edit is worse than ~380 ms per reload.
alternatives: B key by facet hash · C defersupersedes Jun 3 "cache UI bundle by app hash"
MMario
p3 step 0b · turn 36 decisions.md:41
Jun 12 17:05
p3
UI is contributed from facets
Plugins contribute UI through declared facets mounted into named slots; the shell owns no feature UI.
MMario
p3 step 0 · turn 12 decisions.md:28
Jun 11 10:22
p3
No worktrees
One checkout per env; parallel sessions share it and must touch different files. Worktrees doubled build caches and confused agents about paths.
MMario CO
Discord #pi thread decisions.md:19
Jun 10 15:48
chord
Caches are WeakMaps keyed by their owner
No module-level strong caches; every cache gets a GC test.
MMario
chord design.md §3 AGENTS.md
Jun 3 11:10
p3
Cache UI bundle by app hash
Superseded Jun 14 by "A: drop the build cache".
p3 step 0a · turn 8
Not matching "cache" (59): "Discord grants expire after 1 hour by default" · "Radius MCP is a resource, not a plugin" · "Sessions are addressable, layouts are plugins" · "Owner keys never leave the device" · …
A: drop the build cacheactive
decided byMario (answer to ask_user)whenJun 14, 13:40 · 6 min after askedwherep3 step 0b, turn 36 ↗recordedapps/p3/docs/decisions.md:41affectsreload.ts, build-cache.ts (deleted)commitc2d9a31
Conversation
agent · turn 36 The reload loop test fails 1 in 5: the cache keys by app.facetHash, computed before plugin edits flush. A drop the cache (+380 ms), B key by per-facet content hash, C defer.
Mario A. 380 ms is fine, a stale UI is not. Put it in decisions.md.
agent · turn 39 Added: "A: drop the build cache. Supersedes Jun 3."
Referenced by
astra review · "decision A means esbuild spans should be budgeted"
Cristina's note on canvas · "same rule for gateway?"
Plans and todos. One task list across sessions and people, with dependencies between sessions ("step 0b waits for kit review"). Todos come from agent plans (todo tool calls), handoffs and humans. View over runs, todo items in turns, people; the graph on the right shows the critical path.
pi · this week23 open31 donegroup by goalby personby session
Goal: p3 step 0b · reload loop
Facets mount into named slots
p3 step 0b · t27done
Drop the build cache (decision A)
p3 step 0b · t39done
Reload rebinds before owner checks
waits on kit-owner build: "binding.rebind order"
p3 step 0bblocked
Step 0b handoff + slices.md carry-over
after the two above
p3 step 0bnext
Goal: Chord slice 3 · kit owner
Fix 3 failing kit owner tests
owner.ts:142 reads params before rebind
kit-owner build · run 7failed
GC test for principal key WeakMap
from astra review finding 2
astra review → kitnew
Kit review by Colin
waits on tests green
COColinblocked
Goal: Discord plugin
Design book
Discord plugin designdone
Answer 3 open questions in design book
MMarioyou
Thread grants survive bot restart
Discord bot: grantsrunning
Personal
Book dentist
from Journal · remind Mon 09:00
JournalMon
Re-auth gog (tokens expire in 2 d)
project resourceMon
Dependencies
critical path: 4 steps
Fix kit tests
kit-owner build · failed
Kit review
Colin · blocked
GC test
from astra review
Rebind before owner check
p3 step 0b · blocked
Step 0b handoff
p3 step 0b · next
Drop build cache
done
Earliest finish for step 0b: today ~17:30 if kit tests are fixed in the next hour. Suggested: hand the owner.ts:142 question to p3 step 0b, it already knows the rebind order.
Knowledge graph. Files, concepts, decisions and the sessions that discussed them, as a node graph built from transcripts (which turns read/edited which files, which concepts co-occur). View over files, sessions, turns, decisions, people. Searching "reload" lights up its cluster; edge weight = number of turns linking two nodes.
⌕ reload11 nodes · 3 sessions · 142 turns
concept file session decision person
Cluster: reload
Reload rebuilds the UI from plugin facets and rebinds Chord bindings. Discussed in 3 sessions over 142 turns; 1 decision; 2 open threads.
central fileruntime/reload.tsmost talkp3 step 0b (96 turns)last touched13:44 todayopenrebind order vs owner check
Strongest links
reload ↔ build cache· 41 turns
reload ↔ bindings· 23 turns
reload.ts ↔ owner.ts· 9 turns, 2 sessions
facets ↔ Discord plugin· 6 turns
Surprising bridge
kit-owner build and p3 step 0b both edit around binding.rebind but never referenced each other. Link sessions
Ask
› what do we know about reload and auth?
Calendar and mail. Time as the organising axis: a week with scheduled agent runs, reminders agents created, meetings from Google Calendar; and mail threads that become sessions. View over scheduled runs, reminders (from turns), calendar and Gmail resources (via gog). Dragging an agent run moves its schedule.
Jun 9 – 15‹›today agent run meeting reminder done
Mon9
Tue10
Wed11
Thu12
Fri13
Sat14
Sun15
Mail · mario@earendil.comvia gog · read-only
Radius: May invoice reconciliation3 msgs · 10:12
Cristina, billing@radius… "the gateway numbers don't match the provider invoices by $212"
The $212 gap is opus cache writes billed by the provider but counted as input by the gateway. Draft reply to Cristina ready; not sent.
sending needs your approval
Voice-first. The phone as a radio: a spoken digest rendered as large text and a waveform, then drill-down chips you can tap or say. No transcript scrolling; one thing at a time. View over the inbox (pending tool calls, finished runs) and runs, summarised by a small model; answers go back as tool results.
14:035G 64%
pi · speaking · digest
Three agents are done. One needs you about the migrationof the build cache. Kit-owner failed its tests. Spend is at 82%.
The migrationWhat failed?What's doneSpendLater
hold to talk · "skip" · "stop"
14:045G 64%
p3 step 0b · asks
Drop the build cache and rebuild on every reload, about 380 ms slower, or key it by facet hash?
ADrop the cache
BKey by facet hash
CDefer
You said: "A, and write it down"
✓ sent to agentnext: what failed?
Spoken flow
pi: digest (12 s) you: "the migration" pi: reads the question + 3 options you: "A, and write it down" pi: "Sent. It will record decision A." you: "what failed?" pi: "kit-owner: three tests, owner.ts line 142 reads params before rebind. Want Colin to look?"
Rules
Max 3 items per digest. Approvals that run code on an env need a confirm word. Diffs are never read aloud, only summarised.
Terminal tiling. A tmux-like TUI where every pane is an addressable thing: a session, an env shell, a log/telemetry stream, the inbox. Keyboard only, splits are saved per project. View over sessions, envs, tool calls and telemetry; runs over SSH on any env.
1:pi 2:radius 3:journal slayer · badlogic · 14:03
[1] p3 step 0b · opus · slayer:~/pi● waiting─ turn 38 ─────────────────────────────▸ bash npx vitest --run reload-loop ×50
✓ 50/50 passed(1m 44s)▸ edit apps/p3/docs/decisions.md +3Recorded decision A. Committed c2d9a31.─ turn 41 ─────────────────────────────Reload now rebuilds every time. Onething left: owner.ts:142 readsbinding.params before rebind() runs.kit-owner build is stuck on the sameline. Should step 0b reorder reload sorebind() runs first (touches kit code),or wait for kit-owner?[a] reorder here (I touch owner.ts)
[b] wait for kit-owner build
[c] hand the hint to kit-owner build
────────────────────────────────────────›c, and tell it rebind runs in reload.ts:45 ctx 54% · $3.92 · ⏎ send · ⌥⏎ newline
NORMAL pane 1: p3 step 0b 4 working · 4 need you · 1 failed $41.20 / $50 slayer ● laptop ○ phone ●
^a prefix | split v - split h o open session e env shell i inbox t telemetry z zoom 1-9 focus / search all : command
Ambient. p3 when you are not looking at p3: a phone lock screen, a desktop menu-bar item, a watch complication. One number that matters ("1 agent needs you", red) and actions that answer without opening the app. View over the inbox (pending tool calls) and run counts; grant/approve actions call back into the session.
Earendil●●●● 64%
Saturday, June 14
14:03
1 needs you
4 working
$41 of $50
pi · p3 step 0b6m
1 agent needs you Drop the build cache, key by facet hash, or defer?
ABCOpen
pi · #radius11m
Charlotta asks pi-bot for slayer logs
Grant 1 hourDecline
pi32m
3 agents finished · 1 failed (kit-owner build)
●FinderFileEditViewπ 1◐ 4100%Sat 14:03
pi · 4 working · $41.20 today⚙
p3 step 0bneeds you · 6m
Drop the build cache?
sol reviewapprove git push · 23m
#radiusCharlotta · grant 1 hour?
astra review · read design.md
Discord bot: grants · vitest (Colin)
kit-owner build · 3 tests failing
Do not disturb until 16:00Open p3
Desktop widget
1
agent needs you p3 step 0b · 6 min
4 working 3 done
SAT 14
14:03
π 1◐ 4
1
needs you 2 done · 1 failed
p3 step 0b
Drop the build cache?
ABC
or speak
Complication: red badge only when something blocks on you; working count is grey. Tapping opens the oldest question with its options; wrist-raise reads the question aloud if AirPods are connected.