Skip to content

Architecture & ADRs

The agent is a plain async pipeline. LangGraph was dropped in 0.4.0 (ADR 0013). Each pipeline stage is a step over two seams: a browser gateway and a structured LLM call. A run writes its artifacts to runs/<id>/. Since 0.8.0 an optional decision layer can answer some of the steps’ pick-from-a-list questions.

observe ground design generate & validate judge & learn

Deep-dive documents live in the repository (canonical for contributors):

DocumentCovers
overviewThe big picture — how the pieces compose
state-machineGraph nodes, edges, checkpoints
browser-gatewayThe lib | cli browser backends (BROWSER_BACKEND)
data-contractsCase/report file formats
self-improvementKeep-best repair + learning across runs
module-mapSource layout
ADRDecision
0001Language & agent framework
0002LLM: Anthropic tiering
0003Browser gateway: hybrid
0004Prompts in Langfuse
0005Test output format
0006Observability: Langfuse v5 + OTel
0007Single package, not monorepo
0008Methodology port from qa-skills
0009TUI on Ink
0010Rename to Cairn
0011Per-role model routing
0012Relicense to Apache-2.0
0013Drop LangGraph; telemetry at the LLM layer; Ink optional
0014The run artifact is a versioned, self-describing contract
0015The api modality generates from the spec, not from an LLM
0016MCP, the CI/PR bot and --into-project are thin adapters over the core
0017The pipeline grows by opt-in passes; a flag-off run is byte-identical
0018Page understanding is an artifact, cached by ARIA fingerprint
0019Adversarial styles: port the taxonomy, not the mechanism
0020An LLM verdict is untrusted; only self-created data is disposable
0021A human-authored case is a first-class input
0022An optional decision layer (Jev / Laya): a separate seam, off by default, never trusted

Cairn is Apache-2.0 (relicensed from GPL-3.0 in v0.3.0 — see ADR 0012). Methodology prompts are ported from AZANIR/qa-skills (ADR 0008).