Crosscheck
Crosscheck is an OpenProse 14* workflow that has a main LLM agent orchestrate parallel subagents to review code, come up with findings, validate those findings, and provide a report.
I hate that there's terminology, but I think there has to be 😭 Maybe I'll come up with clearer terms for the non-OpenProse things that won't require explanation.
For Prose:
- OpenProse: Markdown files ("contracts") that turn the LLM agent you're interacting with into a sort of "virtual machine" that executes those Markdown contracts.
- Prose Complete: describes any LLM harness, like Crush, Claude Code, etc., with the required tools to execute OpenProse.
- Prose VM: the main, front-and-center conversation/session/thread with an LLM agent in a Prose Complete harness.
For Crosscheck:
- Runner: either a subagent in your Prose VM or a standalone Prose Complete harness invoked by your Prose VM through its shell tool.
*Specifically OpenProse 14 because later versions change drastically, adding a whole "reactor" thing that replaces Prose Complete harnesses, and OpenProse's harness agnosticism is a huge reason I like it. So we're sticking with when it was good :)
Execution ownership
The Prose VM is the coordinator/runtime. If you type prose run ... into Amp,
then that thread in Amp is the Prose VM. If you run crush run "prose run ...",
then that session in Crush is the Prose VM.
The VM owns Crosscheck's sequencing and run state: resolving the subject, discovering runners and model availability, planning the reviewers and validators, preparing workspaces, indexing candidates, merging findings, and writing the final packet.
Runners are workers. A reviewer runner gets one lane prompt and returns one lane report. A validator runner gets neutralized candidate briefs and returns verdicts.
Usage
Run Crosscheck from the repository or worktree being reviewed:
# simple use
prose run ~/where/you/cloned/crosscheck/src -- subject: "current diff"
# with preferences
prose run ~/where/you/cloned/crosscheck/src -- subject: "git diff main" preferences: "crush run --yolo with minimax, kimi, qwen, and deepseek reviewers, no mimo"
subject: current diff, ref range, branch, paths, PR description, or a natural-language review targetpreferences: optional runner/model/focus/exclusion/local-testing guidance
Setup
You'll need OpenProse 14's agent skill and standard-library
dependency cache. This installs both from the v0.14.0 zip archive, replacing
any existing copies at those two paths.
set -euo pipefail
OPENPROSE_TAG=v0.14.0
tmpdir="$(mktemp -d)"
curl -fsSL \
"https://github.com/openprose/prose/archive/refs/tags/${OPENPROSE_TAG}.zip" \
-o "${tmpdir}/openprose.zip"
unzip -q "${tmpdir}/openprose.zip" -d "${tmpdir}"
srcdir="$(find "${tmpdir}" -mindepth 1 -maxdepth 1 -type d -name 'prose-*' | head -n 1)"
test -n "${srcdir}"
mkdir -p \
"${HOME}/.agents/skills" \
"${HOME}/.agents/prose/deps/github.com/openprose"
rm -rf \
"${HOME}/.agents/skills/open-prose" \
"${HOME}/.agents/prose/deps/github.com/openprose/prose"
cp -R "${srcdir}/skills/open-prose" \
"${HOME}/.agents/skills/open-prose"
cp -R "${srcdir}" \
"${HOME}/.agents/prose/deps/github.com/openprose/prose"
rm -rf "${tmpdir}"
The first cp installs the open-prose skill. OpenProse has a global
dependency cache of Markdown (seems crazy, but I guess it makes sense?) and the
second copy puts the std/... and co/... deps in the right place.
Other dependencies:
bash,curl,unzip, and ordinary shell utilities such asmktemp,find,head,mkdir,rm, andcpfor the setup command above.- At least one Prose Complete harness like Crush, Pi, Amp,
Claude Code, or Codex on your PATH that can load the
open-proseskill and give the LLM filesystem and shell access.- You'll interact with the Prose VM and it must either use built-in subagents or invoke itself/another Prose Complete harness through the shell tool. If you want a read-only review, the Prose Complete harness should have an effective read-only mode.
- Model/provider credentials configured for the runner. Local models can work well for this, but unless you have stellar hardware, the quantisations you'll be limited to might yield very poor results.
- The VCS CLI needed by your
subject. The examples above usegit, if your repo isjj, you'll need that.
Microsandbox is not required yet, but it will be for the escalation path where reviewers and validators can build and execute adversarial probes inside isolated environments.