Executor and reviewer: how Claude works inside a Pragma run
Every stage of a Pragma run has two agents. The executor does the stage’s work: it drafts the hypothesis card, writes the strategy code, or prepares the data and checks for validation. The reviewer reads what the executor produced and either approves it or sends it back with reasons. Either seat can run on Claude.
This note explains how that pairing works, what Claude receives, and what keeps it inside the run.
Two seats per stage
The executor and the reviewer are configured separately. Each has its own provider, model, reasoning effort, attempt budget and timeout. A stage can use the same model in both seats or two different ones.
We split the roles because an agent that checks its own work tends to agree with itself. A second agent with its own instructions, and if you choose, a model from another provider, gives every stage an independent check before anything moves on. Pairing providers is one way to keep the two seats from sharing the same blind spots: Claude can draft a hypothesis that another model reviews, or review code that another model wrote.
What Claude receives
Every role, on every provider, starts from the same shared context: a description of the system it works in, the instructions for its role, and the inputs of the run, such as the research direction and the tickers. The hypothesis stage can also receive reference examples: earlier hypotheses with their descriptions, designs and code, chosen by the person who launches the run.
Web access is off by default and is switched on per role.
Whatever Claude returns has to fit the stage’s contract. A hypothesis card without acceptance criteria does not pass to implementation, whichever model wrote it.
Connecting Claude
Claude connects through an Anthropic API key or a Claude subscription, set once for the workspace. The access mode is then chosen for each role. Pragma never switches a role from a subscription to API billing on its own.
The same arrangement shapes how Pragma is priced. Model usage runs on your own provider accounts and is billed by the provider. Pragma does not resell it.
Limits that apply to every seat
The limits belong to the role, not to the model, so they are the same for Claude and every other provider:
- Attempts. Each role has a maximum number of attempts per cycle. Revisions, rejected results and invalid output all count against it. When the budget is spent, the stage stops.
- Timeouts. Each attempt has a time limit.
- Interruptions. If the infrastructure fails, the run pauses without spending the attempt budget.
More on why we keep agents inside hard limits is in Bounded autonomy.
Every run records what it used
A run freezes its inputs and configuration when it starts: the provider, model, effort and limits of every role. Changing the settings later affects only new runs. Each run also records its usage: model requests, input and output tokens, cached tokens and reasoning tokens.
When a result looks wrong, you can see which model produced it, under which settings, and how many tokens it took.
Why the model is a setting
Models change faster than research methods. Because the provider is a per-role setting, a new Claude model can be tried in one seat of one stage, compared with an earlier run on the same inputs, and kept only if the stage’s output holds up.