agent-first one static binary no default host MIT

commis

Embauchez un commis, pas un SaaS. An “AI employee” platform sells you a dashboard and a monthly seat. commis sells you a config row: one JSON document per worker that grants it tools and money, declares when it must ask a human, and prices what a run costs. The row is a file. It lives in your git repo. It runs on your machine.

# who you can hire
commis catalog
commis hire elio --budget-eur 20 --per-run-eur 2
commis brief elio "cabinets comptables FR, 25 leads"
commis plan elio     # exactly what would run — free, and it touches nothing
commis run elio

Why a row and not a repo

Eight “AI employees” is not eight products. It is one runtime and eight config rows. Hiring copies a catalog row into your roster; it does not generate code, and there is nothing to maintain per agent.

catalog row ──hire──▶ roster row ──plan──▶ execution plan ──run──▶ artifact
(in the binary)       (your git)          (pure, free)            (a URL)

Four things it does that a dashboard doesn't

The plan is free and honest

A separate command from run, not a --dry-run flag — so reviewing what an agent would do can never be one typo away from spending money.

The grant is enforced by PATH

Only the granted commands exist on the agent's PATH. An agent not granted curl cannot reach the network, because the binary is not there to find.

Approve from your phone

A destructive command stops and asks — email, webhook or chat, with two one-tap links. Unanswered means refused: silence is not consent.

The deliverable is the receipt

One URL per agent, one version per run: the report plus what it cost, what it was allowed to run, and the goal it was judged against.

The rails are yours to choose

commis is a client of four hosted services, and ships with a host for none of them. Nothing you install talks to anyone else's machine until you say so — commis rails shows what is wired.

railwhat it doeswithout it
peageholds and captures the moneybudget.wallet: none — unmetered
hartpublishes the deliverableoutput.artifact: file — written locally
relaiscatches the approval replycommis approve at the terminal
Resendsends the linkthe link is still in commis runs

A row asking for a rail you have not configured is refused with the opt-out named, never silently downgraded — an unmetered run that was supposed to bill is work you gave away. Each rail is itself one static binary you can self-host: peage, hart, relais.

Proven on a real run

One live agent has gone the whole way: a real model through roam, a real wallet held and captured with a signed receipt, an approval answered from an email, a private artifact published and a completion notice sent. It cost five cents — and it found three bugs that no test double could have.

Install

curl -fsSL https://raw.githubusercontent.com/javimosch/commis/main/install.sh | sh

commis guide         # the mental model, as JSON — read this before the README
commis rails         # what is wired, and what works without it

Needs roam as its runtime. Building from source needs machin and nothing else: ./build.sh.