assay · methodology · how the stack is layered
Layers
Assay is five things bolted into one frame, and one thing bolted beside it. Reading from the bottom: the forge you already have, the desk tools that are the only sanctioned way to write to it, the harness the agents run in, the method that says what a brief is and who may say it is done, and the desks, which are sessions that sit inside the method and execute down through everything below. The runtime is where those sessions run, and it is drawn as a side rail because it is not a layer: a laptop and a cluster run the same desks.
- DesksRole sessions on a harness, speaking desk-tools verbs: intake, worker, review, verify, and the coordinator. You start them; the skill bodies ship in
medici-finance/assayas theassayplugin. - MethodBriefs as the unit of work, the five-step lifecycle, non-implementer verification, the five roles, registers, a generated board. The public
spec/tree is canonical;statusgenis its reference implementation. - HarnessThe agent runtime a session runs in. Claude Code is the reference; Codex and Cursor bindings await a live end-to-end run; an MCP server is next. The harness vendor owns it; Assay owns the bindings and skill bodies.
- Desk toolsThe
Forgeseam plus the policy compiled around it: role identities, refusals with exit codes, write budgets and breakers, evidence, human gates. One binary per verb, shipped as pinned, hash-checked releases. The only sanctioned write path; reads may use anything, see the read path. - ForgeGitHub today, the shipped baseline (the App identities); GitLab as a published profile gated on a live pilot. No third forge is built or claimed. Rulesets, App creation, and the merge itself stay on the forge's own surface, human-only.
- RuntimeWhere desks run, not what they are:
cellctlcockpits, the combined desk-tools image, a Kubernetes pod running it. Your infrastructure; the cockpit script and image build ship inmedici-finance/assay.
The method is optional above the tools.
The desk tools stand on their own. A team can run deskpr, deskpost, and deskfile as bounded, audited, role-identified write verbs against its forge and never adopt a brief, a lifecycle, or a verify table. The method is what you add when you want the pipeline to run unattended and still be able to prove what it did.
The runtime is optional beside them; a laptop cockpit and a k8s pod run the same desks.
Nothing in a desk knows where it is running. The same skill body, the same verbs, the same roster and App keys run in a cellctl window on one machine or in a pod built from the same image. Move the runtime and the desks do not change; the evidence they leave does not change either.
Reading the frame
Each plate depends only on the plates below it, and a plate can be run without the plates above. That is the whole point of drawing it as a stack rather than as a list of features: it tells you what you can take and what you must take with it.
- Take the forge alone and you have what you had: a forge, with whatever your credentials allow.
- Add the desk tools and every write from an agent session is a single verb with its policy compiled in: which role may run it, on which repos, how often, and what it refuses. The forge's permission set is a ceiling; the verbs are the control.
- Add a harness and the verbs can be invoked by an agent. The skills bundle is the harness-facing packaging of the roles, and it is written to be neutral across harnesses so the method never depends on one vendor.
- Add the method and the sessions have a unit of work, a lifecycle, a board, and a verification step owned by someone who did not build the thing.
- Start the desks and the pipeline runs unattended between the gates, and stops at every gate that is yours.
How neutral is it, measured
The stack drawing above says the forge is a plate the rest sits on. Whether the tools really treat it that way is a number, not a claim, so here is the number, from the maintainers' forge-neutral audit of the desk verbs against the software-delivery actions a fleet performs.
Measured 2026-09-13. A point-in-time reading: the numbers move as the GitLab backend fills in, and this page will be re-read against the audit rather than left to drift.
Read them plainly. The verbs cover the desk-role work almost entirely on GitHub, which is where the fleet runs today. Across the whole software-delivery lifecycle they cover less than half, and that is by design as much as by backlog: repository administration, ruleset changes, App creation, and the merge itself are a human's acts on the forge's own surface, and no verb will ever perform them. GitLab has a published profile and a partial backend; it is not claimed as supported until a live pilot has round-tripped a brief through the verbs, not around them.
What is deliberately not a layer
The runtime. A cockpit on a laptop and a pod in a cluster are two places to run the same five processes. Drawing the runtime as a layer would suggest that adopting Assay means adopting a deployment, and it does not; the desks are ordinary sessions of an ordinary harness, and the image exists so a cluster can run them without a Go toolchain, not because they need a cluster.
The model. Which model a desk runs on is a tiering policy inside the method, not a plate in the stack. A cheaper implementer can be trusted behind the same gates as an expensive one because the gate, not the implementer, is what the claim rests on. See tiering.
Medici. The house that builds Assay runs its own delivery on this stack, and the numbers on how it runs are that fleet's. It is a user of the frame, not a plate in it.