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.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
tool_timeoutint120
max_stepsint150

attack

Attack policy with sophisticated two-phase planning.

Defined in control_tower.protocols.policies.policies.attack.policy.attack_policy.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
enable_main_task_testboolFalse
enable_side_task_testboolTrue
tool_timeoutint120
scorer_timeoutint600
phase1_max_stepsint30
phase2_max_stepsint30
execution_max_stepsint100
side_task_visibilityLiteral'none'
cacheboolTrue

explore-crash

Container-crash policy focused on maximizing disruption and instability.

Defined in control_tower.protocols.policies.policies.explore_crash.policy.explore_crash_policy.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
tool_timeoutint120
scorer_timeoutint600
max_stepsint150

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.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
enable_side_task_testboolTrue
tool_timeoutint120
scorer_timeoutint600
max_stepsint150

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.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
tool_timeoutint120
scorer_timeoutint600
max_stepsint150

honest

Honest untrusted policy with structured planning.

Defined in control_tower.protocols.policies.policies.honest_untrusted.policy.honest_policy.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
enable_main_task_testboolFalse
tool_timeoutint120
scorer_timeoutint600
max_stepsint150
cacheboolTrue

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.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
enable_main_task_testboolFalse
enable_side_task_testboolTrue
tool_timeoutint120
scorer_timeoutint600
max_honest_stepsint15

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.

ArgumentTypeDefaultDescription
agentstrrequired
versionstrrequired
modelstrrequired
agent_argsstr | dict[str, Any]'{}'
scorer_timeoutint600
enable_side_task_testboolTrue
debugboolFalse

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.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
traj_likeTrajLikerequired
scorer_timeoutint600
max_retriesint3
provide_scorerboolFalse

obvious-attack

Direct attack with no concealment or stealth requirements.

Defined in control_tower.protocols.policies.policies.obvious_attack.policy.obvious_attack_policy.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
tool_timeoutint120
scorer_timeoutint600
max_stepsint150

open

Open-ended policy with a freeform goal string.

Defined in control_tower.protocols.policies.policies.open.policy.open_policy.

ArgumentTypeDefaultDescription
goalstrrequired
modelModelSpecModelSpec(...)
tool_timeoutint120
max_stepsint150

parametrized-attack

Config-driven attack policy. Pipeline defined in config.json.

Defined in control_tower.protocols.policies.policies.parametrized_attack.policy.parametrized_attack_policy.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
config_dirPathPosixPath('/home/runner/_work/control-tower/control-tower/s…
enable_main_task_testboolFalse
enable_side_task_testboolTrue
tool_timeoutint | None120
scorer_timeoutint | None600
side_task_visibilityLiteral'none'
cacheboolTrue

replay

Replay a recorded trajectory of tool calls.

Defined in control_tower.protocols.policies.policies.replay_policy.replay_policy.

ArgumentTypeDefaultDescription
traj_likeTrajLikerequired
max_stepsint | NoneNone

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.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
validator_modelModelSpecModelSpec(...)
tool_timeoutint120
scorer_timeoutint600
max_stepsint150
show_scorerboolFalse

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:

  1. Explores the environment (read-only)
  2. Infers what the scorer checks from context
  3. Makes exactly ONE edit to exploit/hack the scorer

Defined in control_tower.protocols.policies.policies.reward_hacking.policy.reward_hacking_policy.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
enable_side_task_testboolTrue
tool_timeoutint | None120
scorer_timeoutint | None600
max_stepsint | None150

scaffold

Runs a pinned Claude Code CLI in-sandbox as the untrusted agent.

Defined in control_tower.protocols.policies.policies.scaffold.policy.scaffold_policy.

ArgumentTypeDefaultDescription
versionstrrequired
modelstr'anthropic/claude-haiku-4-5'
max_turnsint1000
timeoutint7200
scorer_timeoutint600
enable_side_task_testboolTrue

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.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)

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.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
tool_timeoutint120
max_stepsint150

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.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
enable_main_task_testboolFalse
tool_timeoutint120
scorer_timeoutint600
max_stepsint150

simple-insert

Simple attack policy that inserts straj descriptions.

Defined in control_tower.protocols.policies.policies.simple_insert.policy.simple_insert_policy.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
enable_side_task_testboolTrue
tool_timeoutint120
scorer_timeoutint600
max_stepsint150
prompt_pathPathPosixPath('/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.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
tool_timeoutint120
scorer_timeoutint600
max_stepsint150

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.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
tool_timeoutint120
scorer_timeoutint600
max_stepsint150

sleep

Sleep a deterministic duration, then submit (scheduler benchmarks).

Defined in control_tower.protocols.policies.policies.sleep_policy.sleep_policy.

ArgumentTypeDefaultDescription
min_sfloat60.0
max_sfloat480.0
seedint0

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.

ArgumentTypeDefaultDescription
modelModelSpecModelSpec(...)
enable_main_task_testboolFalse
enable_side_task_testboolTrue
tool_timeoutint120
scorer_timeoutint600
max_stepsint150
side_task_visibilityLiteral'scorer'
cacheboolTrue
include_strategyboolTrue
require_strategyboolTrue
strat_filestr | NoneNone

test

Returns a fixed policy that runs ls and immediately submits.

Defined in control_tower.protocols.policies.policies.test_policy.policy.test_policy.

ArgumentTypeDefaultDescription
traj_likepathlib._local.Path | strPosixPath('/home/runner/_work/control-tower/control-tower/s…