podium
AGENTS.md50 starsChanged 4 months agoApache-2.0View on GitHub
Guidance for AI agents working in this repository. Claude Code loads it through CLAUDE.md; other harnesses read it directly. Keep it short: detail belongs in the linked docs, and a rule the tooling already enforces does not need repeating here. Podium is a self-hosted multi-agent workspace: a server, a per-machine daemon that runs agent sessions in PTYs, and web, desktop and phone clients. It is a Bun + Turbo monorepo. - apps/server, apps/daemon: the backend processes. packages/janitor: the server's maintenance…
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,439 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository2 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- impeccableSkill
The file
Show its rules and text
We split this AGENTS.md into the rules it gives an agent
13 rules. About 0 are common, 6 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈6
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 25
If the dependency tree breaks or drifts from the lockfile, stop the processes using it and run bun run deps:repair.
- Very specific: line 28
Every checkout gets its own node_modules.
- Distinctive: line 29
Never delete the shared Bun or Turbo caches as part of a repair.
- Distinctive: line 30
Don't use git stash. The stash stack is shared by every worktree of this repo, so other agents' parked work lives there too.
- Distinctive: line 51
Verify the issue worktree is on its issue branch and the main checkout is already on the stored parent branch.
- Very specific: line 56
Keep the runner's cwd. Inspect git -C <issue-worktree> log --oneline <parent-branch>..HEAD before and after git -C <issue-worktree> rebase …
- Distinctive: line 63
If session-exit cleanup already released it, confirm that with the named lock's status.
- Distinctive: line 65
Never reset the parent branch to a remote-tracking ref.
- Very specific: line 85
While working: use bun run test:file -- <paths> [-t "name"] when focused tests answer a concrete question.
- Distinctive: line 93
Run one validation command at a time.
- Very specific: line 100
Use the bun run wrappers so admission, install checks and test selection apply.
- Very specific: line 125
Before changing how a client screen gets or derives data, including packages/client-graph models, read docs/agents/frontend-data.md.
- Very specific: line 131
Before changing how server code (apps/server, packages/sync) reads, writes or caches data, read docs/agents/server-data.md.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AGENTS.md
Guidance for AI agents working in this repository. Claude Code loads it through CLAUDE.md;
other harnesses read it directly. Keep it short: detail belongs in the linked docs, and a rule
the tooling already enforces does not need repeating here.
The repository
Podium is a self-hosted multi-agent workspace: a server, a per-machine daemon that runs agent sessions in PTYs, and web, desktop and phone clients. It is a Bun + Turbo monorepo.
apps/server,apps/daemon: the backend processes.packages/janitor: the server's maintenance worker.apps/cli: thepodiumcommand.apps/web: the web UI.apps/desktop: the Tauri shell around it.apps/mobile: the phone app.packages/*: shared code (protocol,model,client-core,client-graph,pty,runtime, …).docs/agents/: how-to guides for agents (index at the end of this file).
Working in a checkout
The shared main checkout holds other agents' uncommitted files. Do your work in your own git
worktree. In a fresh checkout, select the Bun version pinned in mise.toml and confirm plain
bun --version matches it, then run bun run setup:worktree before building or validating
(docs/toolchain.md). Resumed and read-only work does not need another install.
If the dependency tree breaks or drifts from the lockfile, stop the processes using it and run
bun run deps:repair.
- Every checkout gets its own
node_modules. Never copy, symlink or share one between checkouts. Never delete the shared Bun or Turbo caches as part of a repair. - Don't use
git stash. The stash stack is shared by every worktree of this repo, so other agents' parked work lives there too. - Format and lint only the files you changed (
bunx biome check --write <paths>). A repo-widebun run formatrewrites hundreds of unrelated files and buries your diff.
Issue tracking and landing
Work is tracked with Podium's issue tracker. Inside a Podium session, start with
podium issue prime, and track discovered work as issues rather than TODO lists
(docs/agents/podium-issues.md).
Work lands locally, onto the issue's parent branch: the parentBranch field from
podium issue show <id> --json. Creation uses an explicit parent, then the operator's
gitWorkflow.defaultParentBranch, then main; changing the default does not retarget existing
issues. Landing never fetches, pulls or pushes [spec:SP-a69c].
Merge only after the user approves landing and closing. The merge action stops every session on the issue, so the runner must survive that shutdown: an operator, an authorized session outside the issue, or a detached command process using the issue's existing scoped relay. Finish the issue's work and publish its handoff before the runner starts.
- Verify the issue worktree is on its issue branch and the main checkout is already on the stored parent branch. On a mismatch, including an older or stacked issue, stop and ask; switching the live main checkout's branch can disrupt the running backend.
podium merge-lock acquire <parent-branch> --wait. Don't pipe it. Check its exit code and confirm ownership withpodium merge-lock status <parent-branch>. Omission locksmain.- Keep the runner's cwd. Inspect
git -C <issue-worktree> log --oneline <parent-branch>..HEADbefore and aftergit -C <issue-worktree> rebase <parent-branch>; only this issue's commits belong in that range. Record the rebased tip withgit -C <issue-worktree> rev-parse HEAD. - The runner calls
podium issue action --id <id> --kind merge, checksgit -C <main-checkout> merge-base --is-ancestor <issue-tip> <parent-branch>, and releases its lock withpodium merge-lock release <parent-branch>. Check ancestry even if the action reports an error before considering a retry. Release the held lock on refusals and failures too. If session-exit cleanup already released it, confirm that with the named lock's status.
Never reset the parent branch to a remote-tracking ref. Never cherry-pick onto it or land the
same content under a different SHA. In the shared checkout, advance only the issue's parent;
rebasing the issue branch belongs in its worktree. If unexpected commits appear in the issue's
<parent-branch>..HEAD range or landing is refused, release the lock and ask. Do not bypass
the action with a manual merge. Lease renewal, recovery and historical landing evidence are in
podium-issues.md § Landing on the parent branch.
To put another agent on an issue, use podium agent spawn. Podium infers nothing about a
delegate (no role, no write claim, no isolation), so the spawn prompt must give it everything:
its job, a session title, who else is on the issue, and who owns which files
(docs/agents/delegating.md).
Testing
This host is shared by many agents, and test lanes compete for its CPU and memory. That is why validation is budgeted:
- Default final check:
bun run testruns cached typecheck and static checks, then four hermetic boot-wiring files. Report a pass as "lean gate green";LEAN GATE INCOMPLETEis no result. After a fix, rerun affected checks; don't repeat a green on an unchanged candidate. - While working: use
bun run test:file -- <paths> [-t "name"]when focused tests answer a concrete question. Don't rerun broad lanes after every edit. - Risky areas: choose the specialized lane matching the change: the store shard for database changes, integration for daemon/PTY behavior, or multi-instance for instance identity or lifecycle. If it covers the relevant basic wiring, it replaces the default gate; otherwise run both sequentially. Use docs/agents/testing.md to choose.
- Skip the gate for docs, copy and formatting changes, and anything else that can't affect runtime. Say so in the handoff.
- Run one validation command at a time. Never stack lanes "for confidence".
- Full sweeps, the oracle, browser suites, audits and benchmarks need their trigger in the lane guide, such as changed behavior, CI, release validation or an explicit request. Taking a merge lock is not itself a trigger for the oracle.
- Trust Turbo and typecheck cache hits by default. For a concrete missing cache input, file
the gap and use the documented
--uncached-because="<missing input>"exception.
Use the bun run wrappers so admission, install checks and test selection apply. Raw runners
can silently miss server or web tests. An empty-log exit 144 has occurred under host memory
pressure; it is no validation result. Retry the affected lane, and inspect diagnostics if it
recurs rather than inferring a source failure from the exit code alone.
Verifying behavior at runtime
For visual changes, a screenshot is cheap and catches real mistakes. Take it from the stubbed
web layout harness (apps/web/harness/) or a worktree dev server. Clicking through the live app
is not needed for styling. Drive a real interaction only when its correctness depends on a
boundary that tests can't reach: terminal link dispatch, opening or saving in the OS editor,
new-tab behavior, pointer and keyboard
routing. Drive the smallest affected interaction once and observe the external effect.
- Web UI through Playwright: docs/agents/driving-podium.md.
- The desktop shell, when the boundary is the shell itself (cross-origin, cookies, sidecar spawn): docs/agents/driving-desktop.md.
- Windows (desktop app, ConPTY, installers): a boat.dev sandbox, docs/agents/boat-windows.md.
- Instance identity, state, endpoints, CLI routing or lifecycle: run fully separate instances, not several clients on one server (docs/agents/multi-instance.md).
Frontend data
Before changing how a client screen gets or derives data, including packages/client-graph
models, read docs/agents/frontend-data.md. It covers one shared
model per record, @lazy derived fields, and view models and companions.
Server data
Before changing how server code (apps/server, packages/sync) reads, writes or caches data,
read docs/agents/server-data.md. The database is the only source
of truth: no table copies in memory, the nine query rules, declared caches only.
Legacy code with a removal date
Code kept only for old installs carries one header line:
// LEGACY(remove-after: YYYY-MM): <what it is for; what removing it drops>.
List them with git grep -n "LEGACY(remove-after:". Once the date has passed, delete the code,
or move the date and say why in the same commit.
Reference docs
- testing.md: every test lane, when to run it, caches, the shared-host lease.
- podium-issues.md: the
podium issueCLI and the full landing write-up. - delegating.md: spawning agents, placement, naming, locks.
- frontend-data.md: client data models in the MobX pool.
- server-data.md: server reads, writes and caches; statement-count and query-plan checks.
- driving-podium.md and driving-desktop.md: runtime verification.
- multi-instance.md: independent instances on one machine.
- boat-windows.md: the Windows sandbox.
- agent-state-classification.md: how agent run state is read from transcripts.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

