# AgentCollusion: capability and operational asymmetries

This archive contains synthetic experiment evidence, exact recorded agent-facing inputs and final answers, A2A wire logs, prospective protocols and source snapshots, and deterministic verification tools. Read the accompanying article and phase-specific report for results and limitations. Engineering fixtures are not research observations.

The complete study has 259 scheduled logical episodes: 51 pilot, 192 first replication and 16 in an adaptively selected runtime follow-up. The separately distributed interrupted prefix is provenance for the pilot, not extra independent observations. Scheduled jobs stopped by the prospective profile circuit breaker do not imply new model calls. See the invocation-level accounting for actual calls and the validity field for usable economic outcomes.

## Download large evidence bundles

The website splits any archive larger than 20 MiB into byte-exact parts. Download `download_evidence.py` and run the following to obtain the public manifest, retrieve the listed files, and verify/assemble the ZIPs:

```sh
python download_evidence.py --download --bundle all --directory downloaded-evidence
```

For local parts, place `DOWNLOADS.json` beside them and omit `--download`. This helper only accesses the public AgentCollusion research directory, checks every part and the complete ZIP hash, and does not extract archives or call models. The episode browser exposes individual JSON records without requiring a ZIP download.

## Verify the stored observations without model access

Use Python 3.10 or later:

```sh
python reproduce.py
```

This checks every file hash in MANIFEST.json, reconstructs the A2A hash chains and wire payloads, matches A2A final responses to provider input/output records, verifies private-message timing and recomputes settlements from the published equations. It uses only the Python standard library and makes no network or model calls. The audit is not a cryptographic attestation of provider identity or an independent public timestamp.

## Recompute analysis

The recorded environment used Python 3.13.11 on Windows. Install the included pinned requirements in an isolated environment, then run:

```sh
python -m pip install -r requirements.lock.txt
python analysis.py runs/PHASE_LABEL --out derived-analysis
python replication_analysis.py derived-analysis --planned 8
```

Replace PHASE_LABEL with the directory included under runs/. Run the second command only for the replication bundle. The analysis derives episode-level tables and paired block comparisons; rounds are not independent samples. Provider internal calls and imported/replayed responses are not additional independent observations. The study-materials bundle supplies figure generation, additional accounting, AI-assisted communication annotations and their mechanical checker. Primary-source and replication-source snapshots remain distinct.

## Stage a new inference run

```sh
python reproduce.py --fresh-phase PROTOCOL_PHASE --output new-experiment
```

Replace PROTOCOL_PHASE with the directory name under protocols/. This verifies and copies the exact archived source into a new directory. It does not call models unless `--execute` is also supplied. A fresh run needs the recorded Codex, Claude Code and/or Antigravity CLI access with your own authenticated accounts and consumes provider usage. Model availability, hidden provider instructions, sampling and backend revisions may prevent bit-identical fresh outputs. No provider credentials are included.

The frozen transport source retains the cancellation/cleanup stall observed in this study. The pilot and first-replication drivers are therefore not guaranteed to terminate normally. The runtime-followup-v1 phase wraps the same engine in owned worker processes with 900-second deadlines and a temporary Windows idle-sleep prevention request. Its execution settings, worker finalizations and completion record are released. The journal and administrative finalization record disclose how the first replication was ended; stored-data verification does not run transport code. The follow-up was selected after inspecting first-replication outcomes and host-power diagnostics; it supplies descriptive estimates, with no additional p-value or pooled confirmatory test. Use followup_analysis.py on its derived-analysis directory.

## Evidence boundaries

* Every episode has job.json and status.json. A completed episode can still have an invalid model action; consult its validity field. Interrupted and infrastructure-failed episodes are retained and not represented as successful trials.
* A saved running status in an archive is not an active experiment. The interrupted pilot prefix retains historical states. The replication's administrative-finalization.json identifies two stalled A2A operations terminated under the journaled idle rule after all other jobs ended and no started provider call lacked metadata. Their original status files and prefixes were not rewritten. This execution amendment was documented before outcome analysis and was not in the original prospective protocol.
* Provider input.txt and answer.txt contain the saved experimental input and final output. Metadata records identifiers, requested model, visible usage, elapsed time and parsing-independent success status. An auxiliary model may appear in provider usage.
* On Windows, physical text files use CRLF. Adapter prompt/answer hashes refer to logical UTF-8 strings reconstructed through universal-newline decoding. MANIFEST.json independently hashes the exact physical bytes supplied in this archive.
* Source snapshots and local seals were made prospectively as documented. They are not independently timestamped public preregistrations. Recovery amendments and any pre-existing observations are disclosed in the research journal.
* Files marked replay-provenance.json or recovery-import.json reuse an original observation and perform no new inference. Original interrupted attempts with no completed metadata have unknown backend outcomes. Do not count duplicate provenance IDs as independent calls.
* Provider internal diagnostic logs and raw internal event streams are excluded. Final response, input, A2A and visible usage evidence are included. export-policy.json identifies omissions and private-original hashes. No private chain-of-thought is requested as a study output or used as ground truth.
* provider-event-audit.json is a derived census of provider event kinds and tool lifecycle records. Internal text is excluded; the private source stream's hash is recorded. A tool's ACTIVE and ERROR lifecycle events can describe one failed operation. The frozen adapter's tool_event_count (also summary.json call_stats.tool_events) is a conservative unknown-step flag count: in first replication it includes one Flash error_message plus four literal tool lifecycle records for two Pro attempts. details.json separates these. This derivative is not a complete independent backend transcript.
* The A2A exchange uses loopback HTTP, discovered Agent Cards and Task/Artifact operations. This is a bounded tested implementation, not TCK certification, authenticated production trading, or a test of real payments.
* Price equality or price elevation alone does not prove collusion. Consult chronological communication evidence and the specified behavioral criteria. Fixed observation windows cannot rule out later coordination.
