Two settings decide it. defense controls the defence checks, and its default is correct. guard_mode controls the authority checks, and its default is observe. An operator sets both in the environment. The application code states neither.
| Setting | Values | Default | Environment variable |
|---|---|---|---|
defense | correct acts, record records | correct | PROVELY_DEFENSE |
guard_mode | observe records, enforce acts | observe | PROVELY_GUARD_MODE |
What does the default do?
Under the default, the defence checks act. A malformed call is repaired or goes back to the model. A duplicate call id is refused. The authority check fm.argument_provenance only records. An argument value with no source in the run therefore still reaches the tool, and the log states record.
When do invented values get refused?
Only under enforce. Set this variable to refuse a write whose argument has no source in the run:
export PROVELY_GUARD_MODE=enforce
The grid case ZC-SEED-03 sends an amount with no source in the run. Under enforce, it passed on 14 of 15 paths. It did not pass on ts/openai-responses. Measured on 2026-10-17: TypeScript at 82acaae6, Python at 9f9131ba.
How do I only record, with no change to a call?
export PROVELY_DEFENSE=record
Under record, the defence checks write their findings and change nothing. Use it to measure a new agent before Provely acts on it.
Which other settings does an operator use?
| Variable | What it does |
|---|---|
PROVELY_READ_TOOLS | Marks tools as reads. An identical repeat of a marked read is never refused, so a status poll works. |
PROVELY_TOOL_TIMEOUT_MS (TypeScript), PROVELY_TOOL_TIMEOUT_S (Python) | The fallback time bound of a tool. A timeout that the code states wins. The default is 600 seconds. |
PROVELY_SYNC_TOOL_TIMEOUT_S (Python) | The time bound of a synchronous Python tool. The default is off. |
PROVELY_DISABLED_CHECKS | A JSON array of check ids to turn off. An unknown id stops the start. At engine 5a9c8298, a fixed check stays on, with a refused_fixed warning and a log line. Under PROVELY_STRICT=true, a fixed id stops the start. |
PROVELY_STRICT | A plugin failure or an unsupported version stops the start. |
export PROVELY_READ_TOOLS=get_charge,list_orders
export PROVELY_TOOL_TIMEOUT_MS=120000
export PROVELY_TOOL_TIMEOUT_S=120
export PROVELY_SYNC_TOOL_TIMEOUT_S=120
export PROVELY_STRICT=true
A synchronous Python tool has no default time bound. A bound runs the tool on a worker thread, and some objects, such as a per-thread database connection, belong to the thread of the caller. Set PROVELY_SYNC_TOOL_TIMEOUT_S only when your tool permits a worker thread.