Human in the loop
magus keeps a person in the loop, the industry's term for the arrangement and the plainest account of what the tool is for. An agent proposes and does bounded work: it reads, drafts, runs the checks, and edits the paths a job hands it. A person decides at named points: what lands, what leaves the machine, what spends real money, and what changes the rules the agent works under. Where those points sit is the design. magus makes each one explicit, gives it a reason, and records it, so a decision is something a person made and can look up, not something that happened.
A point exists only where the person's judgment changes the outcome. Asking for everything trains the person to confirm everything, which the loop that keeps you able to notice names as the failure, and friction is the test for any new point. This prevents two quiet failures that look opposite: the agent that decides because nobody was asked, and the person who approves because everybody was. A default that acts without saying so is a third: a decision nobody made. No silent defaults closes it.
Enforced by
- The guard's
askverdict puts a push at a commit no gate covers, or a run of ahuman_onlytarget, in front of the person with the cost or the gate state attached, and refuses a leased worker outright, because a worker has no one to ask. - An agent's request for attention stays open until a person disposes of it.
- A model tier, a guard rule's grade and a merge intent change only when a person edits the row that holds them, and that row is in version control.
- The judgment pages list the points one by one, starting with Agents propose, humans dispose and Manual on purpose.
Good
A blocked agent waits until a person has read what it asks and disposes of it by typing its id:
magus session dispose <id>
Bad
on: pull_request_review
jobs:
merge:
steps:
- run: gh pr merge --auto --squash
Every approval now lands the change, so the approval stops being a decision and becomes a keystroke the agent waits behind.