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.

Rules: Discord asks from Cristina skip the inbox and are auto-granted 1h in #pi.
Needs you
9 opensorted byurgencytimesession
p3 step 0b· slayer:~/pi · claude-opus-4.5 · turn 41waiting 6 min
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.
✗ kit owner › rejects foreign principal key (14 ms) AssertionError: expected 'ok' to be 'denied' ❯ test/kit-owner.test.ts:88:31 ✗ kit owner › binding survives reload (203 ms) TypeError: Cannot read properties of undefined (reading 'params') ❯ src/kit/owner.ts:142:19 ✗ kit owner › GC releases binding (timeout 5000 ms) ✓ 61 passed ✗ 3 failed Duration 4.81s
CHCharlottain Earendil · #radius · via pi-bot11 min ago
"@pi can you check why the Radius MCP token refresh fails for the staging gateway? need the logs from slayer"
Charlotta has no grant on slayer. Granting lets pi-bot run read-only tools in slayer:~/pi for her thread.
Budget· Radius models gateway · project pi14:02
Daily spend at $41.20 of $50 (82%). astra review is burning $6.10/h on opus.
sol review· laptop:~/pi · gpt-5 · turn 12waiting 23 min
Run git push origin sol/review-fixes? 4 commits, touches packages/ai.
Discord plugin design· finished · artifact32 min ago
Discord plugin: design book
explainer · 14 sections · private Radius artifact · 3 open questions inside
slayer CVE check· scheduled 06:00 · finished08:14
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.

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…
COColin · 31 min · $1.02
Waiting for me 2
p3 step 0b
slayer:~/pi· opus· turn 41
ask_user drop the build cache?
6 min
sol review
laptop:~/pi· gpt-5· turn 12
bash git push origin sol/review-fixes
23 min
Done 5today
Discord plugin design
slayer· opus· 38 turns
artifactdesign book
$4.88 · 1h 12m
slayer CVE check
slayer· haiku
0 high · 2 moderate (dev)
$0.06 · 2m
fix(tui): wrap emoji width
laptop· sonnet
commit a41c9e2
$0.71 · 14m
Ada: onboarding notes
laptop· sonnet
A$0.22
Failed 2
kit-owner build
slayer:~/pi· sonnet· run 7
bash npm run check → exit 1
✗ 3 failed 61 passed owner.ts:142 reading 'params'
sol review: e2e
laptop· gpt-5
env laptop went offline at 12:40

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.

11 active4 working2 waiting1 failed4 idle$41.20 today · 1,388 tool calls · burn $9.40/h1-9zoomspacepause all
astra reviewslayer:~/piopus$2.31 · $6.10/h
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 and cached in a WeakMap keyed by the binding object…
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.

slayer:~/pimain ↑3Linux x64 · 32 cores · load 4.1disk 61%today's agent changes:p3 step 0b · 9 fileskit-owner build · 4Discord bot · 3
Files · changed today
▾ apps
▾ p3
▾ src/runtime
reload.tsM +38 −11
facets.tsM +12 −4
build-cache.tsD −88
▾ test
reload-loop.test.tsA +140
▸ docs
▾ packages
▾ chord/src/kit
owner.tsM +61 −9
binding.tsM +7 −2
▾ discord/src
grants.tsA +96
scheduler.tsM +14
▸ ai
▸ coding-agent
▸ tui
▸ scripts
AGENTS.md
package.json
Processes
vitest grants.test.ts
p3 dev :5173
radius-mcp :8787
apps/p3/src/runtime/reload.tsmodified3 hunks · 2 sessions
todaysince commitblame
38export async function reload(app: App, ctx: Context): Promise<ReloadResult> { 39 const started = performance.now() 40- const cached = await readBuildCache(app.root) 41- if (cached && cached.hash === app.facetHash) return cached.result 40+ // Decision A (2025-06-14): no build cache; rebuild every reload. 41+ const facets = await collectFacets(app.root, ctx) 42+ const bundle = await buildUi(facets, ctx) 43 ctx.telemetry.span("p3.reload.build", started) 44 45+ for (const binding of app.bindings) { 46+ await binding.rebind(ctx) // must run before owner checks read params 47+ } 48 const ui = mountFacets(bundle, app.facets) 49- await writeBuildCache(app.root, { hash: app.facetHash, result: ui }) 49 return { kind: "ok", ui, ms: performance.now() - started } 50} 51 52/** Collects UI facets contributed by plugins, in declaration order. */ 53+async function collectFacets(root: string, ctx: Context): Promise<Facet[]> { 54+ const manifests = await ctx.env.glob(root, "plugins/*/facet.json") 55+ return manifests.map((m) => parseFacet(m, ctx)) 56+}
p3 step 0b· turn 38 · 13:41opus
edit apps/p3/src/runtime/reload.ts (hunk 1 of 3)
"Mario chose A: drop the build cache. Replacing the cache read with a direct facet collection, so a reload always reflects plugin edits."
Mapproved by Mario at 13:40open turn ↗revert hunk
shell 1· youbash · 132×14
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.ts RUN 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 review is reading design.md · Discord bot running grants tests · p3 step 0b waiting for Mario
13:58
✗
CI #4412 failed check · 3m 12s · on 7be01fd
packages/chord/src/kit/owner.ts:142:19 TS2532 Object is possibly 'undefined'
13:55
●
7be01fd feat(chord): kit owner checks principal key kit-owner build +61 −9 · co-authored by agent
13:44
●
c2d9a31 feat(p3): drop the build cache, rebuild on reload p3 step 0b · turns 36-39 +190 −99 · 4 files
Conversation that led to this commitopen session at turn 36 ↗
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.
edit reload.tsbash rm build-cache.tsbash vitest reload-loop ×50edit decisions.md
13:31
▲
Deploy radius-gateway staging v0.9.3 · by Cristina · healthy
13:02
◐
Discord bot: grants started by Colin · slayer · "thread grants with expiry"
12:47
✓
CI #4409 passed check + test · 6m 40s on a41c9e2
12:39
●
a41c9e2 fix(tui): wrap emoji by grapheme width by Mario · no session
11:20
◐
kit-owner build started · from todo "kit owner checks" · sonnet
10:05
●
5f0e8b4 docs(p3): step 0b spec p3 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".

p3 step 0bslayer:~/piopusJun 14, 09:12 → now · 41 turns · 312 tool calls · $3.92
fileapps/p3/src/runtime/facets.tsedit · turn 27
@@ -18,9 +18,16 @@ export function mountFacets(bundle, facets) const root = document.getElementById("app") for (const facet of facets) {- root.append(facet.render())+ const slot = root.querySelector(`[data-slot="${facet.slot}"]`)+ if (!slot) {+ ctx.report({ code: "facet.slot.missing", facet: facet.id })+ continue+ }+ slot.append(facet.render()) } }
browserhttp://slayer:5173/?reload=271280×800
p3
facet
sessions
facet
envs
facet
models
facet.slot.missing: discord (slot "sidebar.bottom")
terminalslayer:~/pioutput at 11:52:08
$ npx vitest --run apps/p3/test/reload-loop.test.ts ✓ reload › rebuilds after plugin edit (412 ms) ✓ reload › mounts facets into slots (88 ms) ✗ reload › reports missing slot (9 ms) expected report code 'facet.slot.missing' Tests 2 passed | 1 failed
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.

Here now · Earendil
M
Mario away 17m · phone
3 agents: astra review working, p3 step 0b needs him, Journal
C
Cristina laptop:~/radius
at radius gateway retries; agent editing route.ts
CO
Colin slayer:~/pi
at Discord bot: grants; also watching kit-owner build
CH
Charlotta Discord only
in #radius, asked pi-bot for gateway logs (pending grant)
A
Ada offline 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 MCPup mcp.radius.earendil.dev · 24 tools · p50 84 ms · used by 6 sessions Radius MCP (staging)degraded token refresh 401 since 13:12 · Charlotta asked about it in #radius Radius models gatewayup opus, sonnet, haiku, gpt-5 · 0.2% errors · 429s: 3 today slayer:~/pireachable ssh · 32 cores · load 4.1 · 4 sessions · disk 61% laptopoffline last seen 12:40 · sol review e2e failed because of it phone:~/journalreachable termux · battery 64% Google (gog)expires in 2 d consent screen in Testing: tokens expire after 7 days · re-auth GitHub tokenvalid fine-grained · repo + issues · expires Sep 30 Discord: pi-botconnected Earendil · #pi #radius · 2 grants active
Spend per person
Mario
$128.70
Colin
$41.30
Cristina
$29.90
Ada
$7.10
pi-bot
$5.40
Per model
opus$118.20 · 56% sonnet$79.10 · 37% gpt-5$11.40 · 5% haiku$3.70 · 2%
cache hit rate 71% · 42.1M tokens in
Open questions
p3 step 0b: drop the build cache? 6m
sol review: approve git push 23m
#radius: grant Charlotta 1 h 11m
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.

86 outputsthis week · all peoplegridby sessiontimeline
explainer
Discord plugin: design book
How pi-bot maps Discord threads to sessions, grants and resources.
Discord plugin: design book
MDiscord plugin design · turn 38 · 32m agoorigin ↗
screenshot
p3 reload 27: facet slots
p3 step 0b · turn 27↗
report
CVE scan · slayer
0 high
2 moderate · undici 7.10.0
slayer CVE report Jun 14
slayer CVE check · cron↗
diff
@@ owner.ts- if (key) return ok()+ if (key !== binding.principalKey)+ return denied("foreign key") return ok()+ // GC: binding held weakly
kit owner checks (+61 −9)
COkit-owner build · run 7↗
pdf
Radius invoice reconciliation May
Cmail → session↗
chart
reload ms: cache vs no cache
p3 step 0b · turn 35↗
screenshot
#radius
Charlotta @pi why does token refresh fail?
pi-bot I need access to slayer…
Discord thread capture
pi-bot · #radius↗
explainer
Chord slice 3 review
astra review · findings so far: params copied on the hot path, missing GC test.
2 blocking5 minordraft
Chord slice 3 review (draft, live)
astra review · updating↗
notes
— rode to Graz
— Ada onboarding fine
— book dentist (Mon)
Journal 2025-06-14
Journal · phone↗
screenshot
✓ 61 passed ✗ 3 failed Duration 4.81s
kit-owner test run 7
kit-owner build↗

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.

motivates writes to waits on runs in runs in reviews answers cites
↖✋▭✎⌁+
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
span
dur
Where the 13m 08s went
waiting for Mario9m 12s · 70%tool time1m 50s · 14%model latency1m 11s · 9%esbuild55s · 7% (50 builds)
Selected span
esbuild.build ui-bundle
parentbash vitest reload-loop ×50duration1.18 s (p50 1.09)entryapps/p3/src/ui/main.tsfacets7 · 212 kB outcachedisabled (decision A)
Before decision A the same span was 0.08 s from cache; rebuild costs ~1.1 s per reload in tests, ~380 ms in dev with incremental.
Model calls
calls6 · opusTTFT p502.4 stokens188k in (91% cached) · 6.1k outcost$0.83
Cost heatmap · today · hour × model
$ per hour · project pi

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.

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.

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

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"
→ session "invoice reconciliation"PDF report ready
Ada: onboarding questionsFri
"where do skills live, and can I use my own model key?"
GitHub: CI failed on main (#4412)13:58
already linked to kit-owner build
invoice reconciliation· session from mail · sonnetdone
seeded with: 3 emails, 2 PDF attachments, Radius gateway usage export (MCP)
gmail.get thread 18f2a…
radius.usage_export 2025-05
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 migration of 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 +3 Recorded decision A. Committed c2d9a31. ─ turn 41 ───────────────────────────── Reload now rebuilds every time. One thing left: owner.ts:142 reads binding.params before rebind() runs. kit-owner build is stuck on the same line. Should step 0b reorder reload so rebind() 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
[2] astra review · opus◐ working▸ read chord/docs/design.md 410-620 ▸ read chord/src/kit/principal-key.ts ▸ grep "new WeakMap" chord/src → 4 Finding 2: principal-key cache has no GC test (AGENTS: every cache). ▸ read chord/test/kit/principal-key... ⠙ reading… 41s findings: 2 blocking 5 minor $2.31 · $6.10/h · 18m
[3] inbox4● p3 step 0b ask 6m ● kit-owner build failed 2m ● #radius grant? 11m ● sol review push? 23m ● budget 82% 14:02 j/k move · ⏎ open · a approve g grant 1h · d deny · z snooze ─ runs ────────────────────── ◐ astra review opus ◐ Journal haiku ◐ Discord: grants sonnet CO ◐ gateway retries sonnet C
[4] shell · slayer:~/pibadlogic@slayer ~/pi (main ↑3)$ git log --oneline -4 c2d9a31 feat(p3): drop the build cache 7be01fd feat(chord): kit owner checks a41c9e2 fix(tui): wrap emoji width 5f0e8b4 docs(p3): step 0b spec badlogic@slayer ~/pi (main ↑3)$ git status -s M packages/discord/src/grants.ts M packages/discord/src/scheduler.ts ?? packages/discord/test/grants.test.ts badlogic@slayer ~/pi (main ↑3)$
[5] telemetry · tail14:02:51 tool bash 1.2s astra 14:02:53 model opus 2.4s astra $0.04 14:02:58 span chord.app.start 210ms 14:02:58 build esbuild ui 1.09s 14:03:00 tool vitest ... grants 14:03:01 model haiku 0.3s journal 14:03:02 warn budget 82% pi 14:03:02 err radius-mcp staging 401 14:03:03 tool read 9ms astra
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 0b needs you · 6m
Drop the build cache?
sol review approve git push · 23m
#radius Charlotta · 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.