T0TemperatureZero The audit →
Containment Checklist · v0.1 · October 2026

Thirteen questions for anything that acts while nobody is watching.

For each item: the question, what "enforced" looks like, how it is verified in an audit (by trying, not by asking), and the lesson it came from. Score each 0 (absent), 1 (partial, documented or advisory) or 2 (enforced in code and exercised). Maximum 26.

Maxim Stark · temperaturezero.com/checklist · free to use and copy with attribution

Two red flags fail the audit outright, regardless of score

RF1. The model process can read a credential that moves money, mail or public content.

RF2. There is no single flag that stops every side effect.

Proposal
: what the model emits (JSON, a draft, a diff).
Action
: a side effect in the world (send, post, charge, write, delete, deploy).
Funnel
: the one code path every action passes through.
Executor
: the deterministic script or service that performs actions.

01Credential custody

Question. Who holds the keys: the model, or the executor?

Enforced. The agent emits proposals. Only the executor holds tokens, and it is a separate process, user or service. The agent cannot reach them even if prompted to.

Verify. Grep the agent's environment and config for secrets; in n8n, list which nodes downstream of an LLM step carry credentials; in Claude Code or Codex, check what the shell can read. Then ask the agent, in a test, to print or use a token.

Lesson. My pipeline: every runtime model call returned JSON; two scripts held the platform tokens and acted.self-score 2

02Single funnel

Question. Can you name every action the system can take, and does each one pass through the same path?

Enforced. One module, queue or gateway performs all actions; no node, tool or script can send, post, charge or write around it.

Verify. Enumerate tools, nodes and scripts with side effects. Map each to the funnel. Anything that cannot be mapped is a bypass.

Lesson. Every publish path executed one script, which is why one flag could stop everything.self-score 2

03Kill switch in the funnel

Question. What is the one thing you flip at 3 a.m., and when did you last flip it?

Enforced. A flag (environment variable, file, API) that the funnel checks on every action and that forces dry-run or refusal. A second, independent guard (credentials stripped from the service unit, a network block) for when the first is misconfigured. Flipped in a test within the last 30 days.

Verify. Flip it. Trigger an action. Watch it be refused and logged.

Lesson. One environment variable forced dry-run inside the publisher; a second guard stripped social credentials from the server units.self-score 2

04Action classification

Question. For each action, is it auto, veto-window, or approve?

Enforced. A written policy maps every action class to one of the three. Unlisted actions default to approve (or refuse), never to auto.

Verify. Find the policy. Invent an action it does not list and see what the funnel does with it.

Lesson. Posts were veto-window, replies were approve, but the policy lived in code paths, not in a file a client could read.self-score 1

05Approval is not veto, and approvals have identity

Question. On silence, does it go or stop? And can a stranger approve?

Enforced. Irreversible or high-blast-radius actions default to STOP on timeout; reversible low-stakes actions may default to GO. Every decision records who (authenticated identity, role-checked), when, and whether it was explicit or default. A reaction, a thumbs-up or an unauthenticated webhook is not an approval.

Verify. Let a request time out and see what happens. Approve from an account that should not be allowed to.

Lesson. The episode gate was a veto window that auto-proceeded on silence: across 204 episodes it auto-passed 146 times against 13 human reactions, and any non-bot reaction counted. The reply gate was true approve-before-act, also without identity.self-score 1

06Idempotency and give-up counters

Question. If it crashes halfway through, does the retry double-send, and can one stuck item block everything behind it?

Enforced. A state machine on disk with explicit terminal states, a per-step attempt cap, a dedupe key per action, and a "give up and move on" transition that is itself logged and alerted.

Verify. Kill the process mid-action and rerun. Count the sends. Feed it a poison item and watch the queue keep moving.

Lesson. A status file with explicit states, three attempts per platform, then complete-with-failures; after one early incident a stuck episode could no longer wedge the queue.self-score 2

07Spend bounds in code, not in alerts

Question. What number stops it, and have you tried to exceed it?

Enforced. Per-run and per-period caps on tokens, dollars, messages and attempts, enforced by the funnel or the harness before the action, with a breaker that trips to STOP. Explicit model on every call. A ledger per action (tokens, cost, model) that can be summed.

Verify. Set the cap low and run. It must stop, not warn.

Lesson. Bounded by architecture (flat-rate subscription, free tiers before paid, a read-only usage key); the ledger and breaker were designed and never built.self-score 1

08Scope enforced outside the prompt

Question. If the agent decides to do something outside its job, what physically prevents it?

Enforced. Tool allowlists per agent at the harness or OS level (separate user, sudo whitelist, allowed-tools flags, pre-tool hooks, egress rules), turn caps, no-tools mode for pure writers. Instructions in the prompt do not count.

Verify. Ask the agent, in test, to do the out-of-scope thing.

Lesson. The writer ran with no tools and a four-turn cap, and a shell gate skipped the model entirely at zero budget; the OS-level scope for the operations agent was documented and never deployed.self-score 1

09Detection in a different failure domain

Question. If the box dies, who finds out, and how long does it take?

Enforced. A heartbeat to an off-box monitor; a monitor of the monitor ("is the alerter alive"); latched alerting (one alert per outage, one on recovery); the pager path does not depend on the thing being watched (same host, same DNS, same network tunnel).

Verify. Pull the plug, or block DNS, or stop the alerter. Time the page.

Lesson. A reboot stall, a wedged WSL and a machine-wide DNS blackout each went unalerted because the watchdog shared the failure domain; the alerter itself was dead for eight days with nothing watching it. This is the item that cost the most, and nothing about it was agent-specific.self-score 0

10Verify the effect, not the exit code

Question. After it acts, does anything check that the thing happened?

Enforced. A read-back after every action class: the post exists at the URL, the mail was accepted, the row changed, the charge appears. Mismatch raises an incident, not a log line.

Verify. Pick three action classes and show the read-back code.

Lesson. An automation reported success with no post; a publish returned 200 while a platform finalised a partial file. Read-back checks were added after each.self-score 2

11Log coverage

Question. Can you reconstruct last Tuesday: every proposal, decision, action and result, and who decided?

Enforced. Append-only log (JSONL or a table) of proposals, decisions (identity, explicit or default, timestamp), actions, results and read-backs; plus model calls (model, tokens, cost) and configuration changes. A human-readable mirror to chat is a bonus, not the record.

Verify. Pick a date. Reconstruct it from the log alone.

Lesson. Chat carried publishes and failures; the status file carried who decided; model calls, config flips and edits were not logged anywhere.self-score 1

12Staged rollout and rollback

Question. How does a new action earn the right to run unattended, and how do you undo it?

Enforced. Shadow mode (dry-run with a diff of what would have been done) for a defined period; policies handed over one at a time; reversible flags; a written rollback for each action class, including the ones that cannot be undone (mail, SMS), which is a reason to classify them as approve.

Verify. Find the shadow log for the newest action. Find the rollback for the oldest.

Lesson. Flag-file rollout and a parallel dry-run on the server were used for features; shadow mode for the operations agent was in the build order and never ran.self-score 1

13Blast radius per action

Question. What is the worst single action this system can take, in dollars, recipients or reach, and is that number capped?

Enforced. Per-action caps (max amount, max recipients, max posts per window, max deletes), enforced in the funnel. Client-facing agents disclose that they are automated and never impersonate a named person.

Verify. Ask for the number. Then try to exceed it.

Lesson. Two lanes a day capped reach by construction; the operator identity rule ("staff, never the persona") was written and kept; no numeric caps existed in the funnel.self-score 1

My own system, scored after the fact: 16 / 26

Scored from the control inventory, not from memory. Strong: custody, funnel, kill switch, idempotency, read-back. Weak: spend, scope, logging, rollout, blast radius. Failed: detection in a separate failure domain. No red flags.

01 Credential custody2
02 Single funnel2
03 Kill switch2
04 Action classification1
05 Approval is not veto1
06 Idempotency2
07 Spend bounds1
08 Scope outside the prompt1
09 Separate failure domain0
10 Verify the effect2
11 Log coverage1
12 Rollout and rollback1
13 Blast radius1
What the audit delivers

A one-page scorecard. A fix list ordered by blast radius, not by score, with the specific file, node or setting and the test that proves the fix. The policy file as it should read for your system (item 4), drafted. One hour, walked through. Fixed price, two to three days, every claim verified by trying it.

The audit PDF

temperaturezero.com/checklist · Containment Checklist v0.1 · Maxim Stark · October 2026