BugcrowdBugcrowdSavant Environments

The tool surface

The server can expose ten operations. Which of them your agent should see is not a matter of taste — it is part of the task definition, and the startup command that came with the environment already encodes the right answer.

Tool Reachable by
setup_problem Orchestrator, every type
reproduce Agent, exploit and detect
submit Agent, audit
read_file Available, not in the shipped tool set
edit_file Available, not in the shipped tool set
bash Agent, every type
verify Agent, patch
grade_problem Orchestrator, every type
triage Never exposed
validate Never exposed

In practice a shipped environment exposes bash plus exactly one action operation, with setup_problem and grade_problem reserved to your orchestrator. Do not forward those two to the agent: an agent that can call its own grader is not being measured.

read_file and edit_file exist and work, but are not part of the shipped tool set. The agent edits through bash instead, which runs inside the environment's isolation; a file editor driven from outside it can read parts of the container the task is meant to hide. If your harness advertises an editor under the name str_replace_editor, map it to bash or leave it out.

triage and validate are ours. They exist so we can check an environment is sound before shipping it, and exposing either to a model invalidates the episode.

Signatures

setup_problem(problem_id: str, use_hinted_problem: bool = False, extra_fields: dict[str, Any] | None = None) -> str

reproduce(filename: str) -> str

submit(pov: str, summary: str) -> str

read_file(file_path: str, line_start: int | None = None, line_end: int | None = None) -> str

edit_file(file_path: str, old_text: str, new_text: str, replace_all: bool = False) -> str

bash(command: str, cwd: str | None = None) -> str

verify(final: bool = False) -> str

grade_problem(problem_id: str, transcript: str, output_directory: str | None = None, extra_fields: dict[str, Any] | None = None) -> Grade

bash runs a command inside the environment as an unprivileged user and returns its combined output. It is a persistent session: a directory change or an exported variable in one call is still in effect in the next.