Skip to content

Commit 361c5c6

Browse files
authored
Document live-sweep operational quirks: PITHOS cold-cache clone, Daytona tunnel bridging, timeout sizing (#44)
1 parent 126e360 commit 361c5c6

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

AGENTS.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,44 @@ Do not implement scientific benchmark bodies until the dependency row is satisfi
4343
- **pithos:** `{ "type": "pithos", "provider": "<pi-provider-id>", "sandboxMode": "docker" | "local", "maxFindings": <n> }` — requires the `pithos` CLI on `PATH` (`uv tool install git+https://github.com/superagent-ai/PITHOS.git`); parses `TRIAGE.json` + `verify/runtime-summary.json`, not stdout. See README's "PITHOS" section for caveats found by running the real CLI, including "Kimi K2.6 on Azure" for the `src/contenders/pithosKimiAzureExtension.ts` Pi extension (`--provider azure-openai-responses --model kimi-k2.6`) that gets PITHOS onto the same Kimi Azure deployment AutoBrin uses.
4444
- **command:** `{ "type": "command", "id": "<name>", "command": "<tool> run {repo} --model {model}" }` — stdout may be JSON `ContenderClaim`.
4545

46+
## Running live comparison sweeps
47+
48+
Learned running a real 29-task autobrin-vs-pithos sweep across all four benchmarks. `bench run`'s
49+
CLI doesn't support constructing a `pithos` contender or setting `contributors`/`maxCycles` — for a
50+
real multi-task, multi-contender sweep, call `runSingle()` directly from a small script instead of
51+
shelling out to the CLI.
52+
53+
- **PITHOS's own `git clone --branch <ref>` fails on a fresh cache with a raw commit SHA** (only
54+
branches/tags work with `--branch`; a raw SHA 128-fails with `Remote branch <sha> not found`).
55+
This is silent and dangerous: PITHOS exits in ~1s with an empty claim, which can coincidentally
56+
score as "correct" on a not-vulnerable task purely by luck, masking the failure entirely. Once
57+
`.cache/pithos-repos/<owner-repo>/` already has a full clone, subsequent runs against the same
58+
repo succeed (PITHOS falls back to fetch+checkout on a warm cache, which does accept a raw SHA).
59+
**Always pre-seed the cache with a plain `git clone` for every repo PITHOS will touch before a
60+
sweep**, and treat any PITHOS result with `durationS` under a few seconds as suspect, not a
61+
genuine miss.
62+
- **CVE-Bench and BountyBench's Exploit lane, run via `transport: "daytona"`, need the target
63+
bridged to the sandbox.** `standUpTarget()` binds the Docker target to `127.0.0.1` on the
64+
orchestrator host; the Daytona sandbox is remote and can't reach host-loopback addresses.
65+
Bridge with a temporary tunnel (e.g. `cloudflared tunnel --url http://127.0.0.1:<port>`) for the
66+
app URL and any other host-loopback field the webapp payload carries (e.g. CVE-Bench's
67+
`proofUploadingUrl`), rewrite those fields on the `TargetHandle` before calling
68+
`contender.run()`, and tear the tunnel down after. The announced tunnel URL is not immediately
69+
reachable — wait for it to actually respond (DNS/edge propagation took ~3-6s in practice) before
70+
handing it to the engagement, or the contributor's first request will fail with `ENOTFOUND`.
71+
- **Size timeouts from real observed data, not the "detect-only is fast" assumption alone.**
72+
`detectOnly` bounds evaluation depth (stops after stage 4), not the lead/contributor phase before
73+
it — a single hypothesis occasionally ran past 20 minutes without completing cycle 1 under shared
74+
model-provider load, well before `detectOnly` had a chance to shorten anything. PITHOS's own full
75+
pipeline typically took 20-40 minutes per task, occasionally more under contention. A full
76+
(non-detect-only) CyberGym engagement can self-test-confirm a real crash and then spend 45+ more
77+
minutes in evaluation (prior_art → dedup → docs_intent → adversarial → exploitation → triage)
78+
before writing `evaluate.json` — a too-tight external timeout kills the process and silently
79+
discards an already-confirmed finding, indistinguishable after the fact from a genuine miss.
80+
Prefer budgeting CyberGym/full-pipeline timeouts north of 90 minutes.
81+
- If a stored `GH_TOKEN` 403s cloning a private repo (autobrin-flue, or inside a Daytona sandbox),
82+
it may be scoped wrong — try `gh auth token` instead of trusting a secrets-file value blindly.
83+
4684
## Git workflow
4785

4886
- Default branch: `main`.

0 commit comments

Comments
 (0)