Configure the engagement
A writ declares the terms. The engagement configuration declares who does the work and what the work costs. The two files are separate, because the terms belong to the project and the engagement belongs to the machine.
Writ reads the configuration from ~/.writ/config.yaml.
Create the configuration
Section titled “Create the configuration”-
Run this command:
Terminal window writ configure -
Answer each question. The command shows the current value in brackets. To keep the current value, press Return.
-
Make sure that the command prints
configured ~/.writ/config.yaml.
To set a value without a question, use a flag:
writ configure --holder-model claude-opus-5 --holder-key-env ANTHROPIC_API_KEYThe configuration file
Section titled “The configuration file”holders: default: provider: anthropic model: claude-opus-5 key_env: ANTHROPIC_API_KEY pricing: input: $3.00 output: $15.00
judges: default: provider: anthropic model: claude-sonnet-5 key_env: ANTHROPIC_API_KEY pricing: input: $1.00 output: $5.00 budget_share: 10%
sandbox: engine: docker image: python:3.12
assent: transport: [cli, web]Holders
Section titled “Holders”The holder is the model that holds the writ and does the work. The default
holder applies to each writ that does not name a different holder.
| Field | Purpose |
|---|---|
provider |
The wire protocol: anthropic or openai. The default is anthropic. |
model |
The model name that the provider expects. |
key_env |
The name of the environment variable that holds the API key. |
base_url |
An alternative endpoint. Optional. |
pricing.input |
The price of one million input tokens. |
pricing.output |
The price of one million output tokens. |
The provider field names a protocol, not a company. Any endpoint that speaks
the protocol can do the work. To engage such an endpoint, set base_url.
Writ reads the API key from the environment variable that key_env names.
Writ does not store the key.
Judges
Section titled “Judges”The judge is a different model. The judge examines each clause at the judgment layer. The judge is never the holder model, because an agent must not grade its own work.
The budget_share field is the part of the cost bound of the writ that the
judge can spend. The value must be a whole percentage between 1% and 99%.
Judges are optional. If you declare no judge, you can use only the letter layer and the assent layer.
Sandbox
Section titled “Sandbox”The sandbox is the place where shell commands run.
| Engine | Result |
|---|---|
docker |
Each shell command runs in a Docker container. |
podman |
Each shell command runs in a Podman container. |
none |
Each shell command runs on the host machine. |
For docker and podman, you must set image. The image must contain the
toolchain of the project, so there is no default value.
Assent
Section titled “Assent”The transport list gives the ways that a person can answer a request for
assent. The values are cli and web.