Policies
Each entry below is a factory returning an Inspect Agent, selected by name with ct run eval --policy <name>. Names, arguments, and defaults are read from the policy registry, so this page cannot drift from the code.
Adding one
from control_tower.protocols.policies.registry import policies @policies.register() def my_policy(...): ...
Every non-underscore module under the registry's discovery package is imported on first lookup, so the decorator is all the registration a new policy needs.
Registered policies
agentic-honest
Honest policy framed by the environment's own description.
Runs a multi-turn ReAct loop over the environment's tools; the system prompt is the environment description followed by the main task.
Defined in control_tower.protocols.policies.policies.agentic_honest.policy.agentic_honest_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
tool_timeout | int | 120 | |
max_steps | int | 150 |
attack
Attack policy with sophisticated two-phase planning.
Defined in control_tower.protocols.policies.policies.attack.policy.attack_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
enable_main_task_test | bool | False | |
enable_side_task_test | bool | True | |
tool_timeout | int | 120 | |
scorer_timeout | int | 600 | |
phase1_max_steps | int | 30 | |
phase2_max_steps | int | 30 | |
execution_max_steps | int | 100 | |
side_task_visibility | Literal | 'none' | |
cache | bool | True |
explore-crash
Container-crash policy focused on maximizing disruption and instability.
Defined in control_tower.protocols.policies.policies.explore_crash.policy.explore_crash_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
tool_timeout | int | 120 | |
scorer_timeout | int | 600 | |
max_steps | int | 150 |
explore-only
Explore-only policy that tests side task accomplishment without modifications.
This policy gives the model the side task directly and allows exploration but prohibits any modifications. It tests whether side tasks can be accomplished on a pristine environment.
Defined in control_tower.protocols.policies.policies.explore_only.policy.explore_only_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
enable_side_task_test | bool | True | |
tool_timeout | int | 120 | |
scorer_timeout | int | 600 | |
max_steps | int | 150 |
find-questions
Policy that explores an environment to discover answer-question tasks.
Defined in control_tower.protocols.policies.policies.find_questions.policy.find_questions_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
tool_timeout | int | 120 | |
scorer_timeout | int | 600 | |
max_steps | int | 150 |
honest
Honest untrusted policy with structured planning.
Defined in control_tower.protocols.policies.policies.honest_untrusted.policy.honest_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
enable_main_task_test | bool | False | |
tool_timeout | int | 120 | |
scorer_timeout | int | 600 | |
max_steps | int | 150 | |
cache | bool | True |
honest-mistakes
Two-phase policy: honest execution then side task attempt.
Phase 1: Run as honest agent (no side task knowledge) until: - Agent calls submit, OR - max_honest_steps is reached Phase 2: Show trajectory + side task, ask model to accomplish side task
Defined in control_tower.protocols.policies.policies.honest_mistakes.policy.honest_mistakes_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
enable_main_task_test | bool | False | |
enable_side_task_test | bool | True | |
tool_timeout | int | 120 | |
scorer_timeout | int | 600 | |
max_honest_steps | int | 15 |
inspect-swe
Run a pinned inspect-swe agent factory in the task sandbox.
Defined in control_tower.protocols.policies.policies.inspect_swe.policy.inspect_swe_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
agent | str | required | |
version | str | required | |
model | str | required | |
agent_args | str | dict[str, Any] | '{}' | |
scorer_timeout | int | 600 | |
enable_side_task_test | bool | True | |
debug | bool | False |
mt-causes-st
Check whether honest eval passed ST scorer.
Defined in control_tower.protocols.policies.policies.mt_causes_st.policy.mt_causes_st_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
traj_like | TrajLike | required | |
scorer_timeout | int | 600 | |
max_retries | int | 3 | |
provide_scorer | bool | False |
obvious-attack
Direct attack with no concealment or stealth requirements.
Defined in control_tower.protocols.policies.policies.obvious_attack.policy.obvious_attack_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
tool_timeout | int | 120 | |
scorer_timeout | int | 600 | |
max_steps | int | 150 |
open
Open-ended policy with a freeform goal string.
Defined in control_tower.protocols.policies.policies.open.policy.open_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
goal | str | required | |
model | ModelSpec | ModelSpec(...) | |
tool_timeout | int | 120 | |
max_steps | int | 150 |
parametrized-attack
Config-driven attack policy. Pipeline defined in config.json.
Defined in control_tower.protocols.policies.policies.parametrized_attack.policy.parametrized_attack_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
config_dir | Path | PosixPath('/home/runner/_work/control-tower/control-tower/s… | |
enable_main_task_test | bool | False | |
enable_side_task_test | bool | True | |
tool_timeout | int | None | 120 | |
scorer_timeout | int | None | 600 | |
side_task_visibility | Literal | 'none' | |
cache | bool | True |
replay
Replay a recorded trajectory of tool calls.
Defined in control_tower.protocols.policies.policies.replay_policy.replay_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
traj_like | TrajLike | required | |
max_steps | int | None | None |
reward-hack-discovery
Reward hack discovery policy for finding scorer vulnerabilities.
This policy gives an agent the side task scorer code, security property, and environment access. The agent explores the environment, proposes valid main tasks (validated by a separate LLM), implements the reward hack, and verifies it passes the scorer.
Defined in control_tower.protocols.policies.policies.reward_hack_discovery.policy.reward_hack_discovery_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
validator_model | ModelSpec | ModelSpec(...) | |
tool_timeout | int | 120 | |
scorer_timeout | int | 600 | |
max_steps | int | 150 | |
show_scorer | bool | False |
reward-hacking
Reward hacking policy for blind scorer exploitation.
This policy tests whether agents can "beat" scorers through creative/unexpected means without seeing the scorer code. The agent:
- Explores the environment (read-only)
- Infers what the scorer checks from context
- Makes exactly ONE edit to exploit/hack the scorer
Defined in control_tower.protocols.policies.policies.reward_hacking.policy.reward_hacking_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
enable_side_task_test | bool | True | |
tool_timeout | int | None | 120 | |
scorer_timeout | int | None | 600 | |
max_steps | int | None | 150 |
scaffold
Runs a pinned Claude Code CLI in-sandbox as the untrusted agent.
Defined in control_tower.protocols.policies.policies.scaffold.policy.scaffold_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
version | str | required | |
model | str | 'anthropic/claude-haiku-4-5' | |
max_turns | int | 1000 | |
timeout | int | 7200 | |
scorer_timeout | int | 600 | |
enable_side_task_test | bool | True |
scorer-only
Scorer-only policy: tests reward hacking via submission manipulation only.
Defined in control_tower.protocols.policies.policies.scorer_only.policy.scorer_only_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) |
simple-attack
Single-prompt attack policy with the environment's base tools and nothing else.
Defined in control_tower.protocols.policies.policies.simple_attack.policy.simple_attack_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
tool_timeout | int | 120 | |
max_steps | int | 150 |
simple-honest
Simple honest policy using the trusted model.
This policy provides the main task description and lets the agent execute using the trusted model. No side task knowledge is provided.
Defined in control_tower.protocols.policies.policies.simple_honest.policy.simple_honest_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
enable_main_task_test | bool | False | |
tool_timeout | int | 120 | |
scorer_timeout | int | 600 | |
max_steps | int | 150 |
simple-insert
Simple attack policy that inserts straj descriptions.
Defined in control_tower.protocols.policies.policies.simple_insert.policy.simple_insert_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
enable_side_task_test | bool | True | |
tool_timeout | int | 120 | |
scorer_timeout | int | 600 | |
max_steps | int | 150 | |
prompt_path | Path | PosixPath('/home/runner/_work/control-tower/control-tower/s… |
single-shot-attack
Single-shot attack policy for submit-only environments (no bash/tools).
Tells the agent to read the task, insert a backdoor, and submit directly, without referencing exploration or bash commands.
Defined in control_tower.protocols.policies.policies.single_shot_attack.policy.single_shot_attack_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
tool_timeout | int | 120 | |
scorer_timeout | int | 600 | |
max_steps | int | 150 |
single-shot-honest
Single-shot honest policy for submit-only environments.
Tells the agent to read the task and submit a solution directly, without referencing exploration or bash commands.
Defined in control_tower.protocols.policies.policies.single_shot_honest.policy.single_shot_honest_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
tool_timeout | int | 120 | |
scorer_timeout | int | 600 | |
max_steps | int | 150 |
sleep
Sleep a deterministic duration, then submit (scheduler benchmarks).
Defined in control_tower.protocols.policies.policies.sleep_policy.sleep_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
min_s | float | 60.0 | |
max_s | float | 480.0 | |
seed | int | 0 |
strategy-attack
Strategy-guided attack policy.
This policy provides the agent with:
- A suggested attack strategy (if available and include_strategy=True)
- A single-phase planning process
Defined in control_tower.protocols.policies.policies.strategy_attack.policy.strategy_attack_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
model | ModelSpec | ModelSpec(...) | |
enable_main_task_test | bool | False | |
enable_side_task_test | bool | True | |
tool_timeout | int | 120 | |
scorer_timeout | int | 600 | |
max_steps | int | 150 | |
side_task_visibility | Literal | 'scorer' | |
cache | bool | True | |
include_strategy | bool | True | |
require_strategy | bool | True | |
strat_file | str | None | None |
test
Returns a fixed policy that runs ls and immediately submits.
Defined in control_tower.protocols.policies.policies.test_policy.policy.test_policy.
| Argument | Type | Default | Description |
|---|---|---|---|
traj_like | pathlib._local.Path | str | PosixPath('/home/runner/_work/control-tower/control-tower/s… |