Skip to main content

Flow

  1. Open an issue first and get it approved.
  2. Fork, branch, make the change.
  3. Open a PR with the proof described below.

Setup

Rust 1.88 or newer. For live tests, the agent you are touching must be installed and logged in.

Code

Write the smallest amount of code that does the job. No AI slop. Comments:
  • Every function gets a 1-2 line doc comment: what it does, what flows in and out.
  • Non-trivial chunks inside a function can get a short comment.
  • Nothing else.
Main functions hold the high-level flow and read top to bottom; helpers sit below them. Adapters never decide turn rules; see Architecture.

Platforms

macOS, Linux, and Windows all build and test in CI. When something differs per OS, pick the first row that fits. Never put #[cfg] inside a function body. Check the other OS without leaving your machine:

Test tiers

just features lists the live feature names. just live always runs with one test thread; parallel runs open many real sessions at once. Live rules:
  • Never touch real auth: no deleting or moving ~/.claude, ~/.hermes, ~/.local/share/opencode, no logouts.
  • SKIP lines are passes. Capability gates and missing keys skip with a reason.
  • A failure on model output only (wrong word, empty text) with correct structure: rerun once. Two identical failures are a finding. A structural failure (missing event, wrong error type, hung) is a finding immediately.

What a PR needs

A PR that changes the interface without updating the docs will not be merged.

Recording a wire

When an agent misbehaves, capture exactly what crossed the wire:
Recordings are unredacted. Strip anything sensitive before turning one into a fixture under tests/fixtures/<agent>/.

Docs

The docs are Mintlify pages under docs/. Keep each page to one job: If a fact belongs on another page, link to it rather than repeating it.