README.md

  1# Crosscheck
  2
  3Crosscheck is an [OpenProse 14][OpenProse]\* workflow that has a main LLM agent
  4orchestrate parallel subagents to review code, come up with findings, validate
  5those findings, and provide a report.
  6
  7[OpenProse]: https://github.com/openprose/prose/tree/v0.14.0
  8
  9I hate that there's terminology, but I think there has to be 😭 Maybe I'll come
 10up with clearer terms for the non-OpenProse things that won't require
 11explanation.
 12
 13For Prose:
 14
 15- OpenProse: Markdown files ("contracts") that turn the LLM agent you're
 16  interacting with into a sort of "virtual machine" that executes those Markdown
 17  contracts.
 18- Prose Complete: describes any LLM harness, like Crush, Claude Code, etc., with
 19  the required tools to execute OpenProse.
 20- Prose VM: the main, front-and-center conversation/session/thread with an LLM
 21  agent in a Prose Complete harness.
 22
 23For Crosscheck:
 24
 25- Runner: either a subagent in your Prose VM or a standalone Prose Complete
 26  harness invoked by your Prose VM through its shell tool.
 27
 28\*Specifically OpenProse 14 because later versions change drastically, adding a
 29whole "reactor" thing that replaces Prose Complete harnesses, and OpenProse's
 30harness agnosticism is a huge reason I like it. So we're sticking with when it
 31was good :)
 32
 33Run Crosscheck from the repository or worktree being reviewed:
 34
 35<!-- rumdl-disable MD013 -->
 36
 37```bash
 38# simple use
 39prose run ~/where/you/cloned/crosscheck/src -- subject: "current diff"
 40# with preferences
 41prose run ~/where/you/cloned/crosscheck/src -- subject: "git diff main" preferences: "crush run --yolo with minimax, kimi, qwen, and deepseek reviewers, no mimo"
 42```
 43
 44<!-- rumdl-enable MD013 -->
 45
 46- `subject`: current diff, ref range, branch, paths, PR description, or a
 47  natural-language review target
 48- `preferences`: optional runner/model/focus/exclusion/local-testing guidance
 49
 50## Setup
 51
 52You'll need [OpenProse 14][OpenProse]'s agent skill and standard-library
 53dependency cache. This installs both from the `v0.14.0` zip archive, replacing
 54any existing copies at those two paths.
 55
 56<!-- rumdl-disable MD013 -->
 57
 58```bash
 59set -euo pipefail
 60
 61OPENPROSE_TAG=v0.14.0
 62tmpdir="$(mktemp -d)"
 63
 64curl -fsSL \
 65  "https://github.com/openprose/prose/archive/refs/tags/${OPENPROSE_TAG}.zip" \
 66  -o "${tmpdir}/openprose.zip"
 67
 68unzip -q "${tmpdir}/openprose.zip" -d "${tmpdir}"
 69srcdir="$(find "${tmpdir}" -mindepth 1 -maxdepth 1 -type d -name 'prose-*' | head -n 1)"
 70test -n "${srcdir}"
 71
 72mkdir -p \
 73  "${HOME}/.agents/skills" \
 74  "${HOME}/.agents/prose/deps/github.com/openprose"
 75
 76rm -rf \
 77  "${HOME}/.agents/skills/open-prose" \
 78  "${HOME}/.agents/prose/deps/github.com/openprose/prose"
 79
 80cp -R "${srcdir}/skills/open-prose" \
 81  "${HOME}/.agents/skills/open-prose"
 82
 83cp -R "${srcdir}" \
 84  "${HOME}/.agents/prose/deps/github.com/openprose/prose"
 85
 86rm -rf "${tmpdir}"
 87```
 88
 89<!-- rumdl-enable MD013 -->
 90
 91The first `cp` installs the `open-prose` skill. OpenProse has a global
 92dependency cache of Markdown (seems crazy, but I guess it makes sense?) and the
 93second copy puts the `std/...` and `co/...` deps in the right place.
 94
 95Other dependencies:
 96
 97- `bash`, `curl`, `unzip`, and ordinary shell utilities such as `mktemp`,
 98  `find`, `head`, `mkdir`, `rm`, and `cp` for the setup command above.
 99- At least one Prose Complete harness like [Crush][Crush], [Pi][Pi], [Amp][Amp],
100  [Claude Code][Claude Code], or [Codex][Codex] on your PATH that can load the
101  `open-prose` skill and give the LLM filesystem and shell access.
102  - You'll interact with the Prose VM and it must either use built-in subagents
103    or invoke itself/another Prose Complete harness through the shell tool. If
104    you want a read-only review, the Prose Complete harness should have an
105    effective read-only mode.
106- Model/provider credentials configured for the runner. Local models _can_ work
107  well for this, but unless you have stellar hardware, the quantisations you'll
108  be limited to might yield very poor results.
109- The VCS CLI needed by your `subject`. The examples above use `git`, if your
110  repo is `jj`, you'll need that.
111
112Microsandbox is not required yet, but it will be for the escalation path where
113reviewers and validators can build and execute adversarial probes inside
114isolated environments.
115
116[Crush]: https://github.com/charmbracelet/crush
117[Pi]: https://github.com/earendil-works/pi/tree/main/packages/coding-agent
118[Amp]: https://ampcode.com
119[Claude Code]: https://claude.com/product/claude-code
120[Codex]: https://github.com/openai/codex