Control Tower and Inspect
Control Tower runs its evaluations on Inspect. Samples go through Inspect's solvers and scorers, against its model providers, inside its sandboxes, and come out as an Inspect .eval log. ct run eval passes its Inspect-facing options straight through, so those options behave the way Inspect documents them.
Nothing below is restated here. Follow the link.
| Concern | Inspect documentation |
|---|---|
| Model names, providers, credentials | Models, Providers |
| Reasoning options, caching, batch APIs | Reasoning, Caching, Batch Mode |
| Container sandboxes and their tools | Sandboxing, Standard Tools |
| Time, message, token, and cost limits | Setting Limits |
| Retries and sample errors | Handling Errors |
| Concurrency and parallelism | Parallelism, Concurrency |
The .eval log format | Log Files, Dataframes |
Coding agents can read all of it directly: Inspect publishes an index at https://inspect.aisi.org.uk/llms.txt and a markdown copy of every page by appending .md to its path.
Everything Control Tower adds on top — settings, main and side tasks, protocols, monitors, safety metrics, trajectories, fleets — is documented in the rest of these docs.
Model costs
Sample metadata stores control_tower_costs.actual and control_tower_costs.full, each a model-to-USD mapping. Actual is the model-call charge recorded by Inspect; a local response-cache hit costs zero. Full prices every recorded call with all input tokens at the uncached rate, choosing the pricing tier per call before summing. The stored amounts preserve the rates used during execution. Monitor results likewise store cost_usd (actual) and full_cost_usd, with corresponding per-model mappings. These are model costs, not infrastructure charges or invoice reconciliation. An unpriced model has a null amount.