{"id":51150425,"url":"https://github.com/humanbased-ai/crosscheck","last_synced_at":"2026-06-26T06:00:24.149Z","repository":{"id":356200913,"uuid":"1231455492","full_name":"humanbased-ai/crosscheck","owner":"humanbased-ai","description":"AI code review pipeline that turns agent-written PRs into merge-ready patches","archived":false,"fork":false,"pushed_at":"2026-06-23T08:24:53.000Z","size":3971,"stargazers_count":4,"open_issues_count":17,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-23T10:17:57.625Z","etag":null,"topics":["agentic-coding","ai-agents","ai-code-review","claude-code","cli","code-quality","codex","devtools","github-webhooks","pull-request"],"latest_commit_sha":null,"homepage":"https://github.com/humanbased-ai/crosscheck","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/humanbased-ai.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-07T01:26:44.000Z","updated_at":"2026-06-23T08:24:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/humanbased-ai/crosscheck","commit_stats":null,"previous_names":["motivation-labs/crosscheck","humanbased-ai/crosscheck"],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/humanbased-ai/crosscheck","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanbased-ai%2Fcrosscheck","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanbased-ai%2Fcrosscheck/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanbased-ai%2Fcrosscheck/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanbased-ai%2Fcrosscheck/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/humanbased-ai","download_url":"https://codeload.github.com/humanbased-ai/crosscheck/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanbased-ai%2Fcrosscheck/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34805072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-26T02:00:06.560Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agentic-coding","ai-agents","ai-code-review","claude-code","cli","code-quality","codex","devtools","github-webhooks","pull-request"],"created_at":"2026-06-26T06:00:23.007Z","updated_at":"2026-06-26T06:00:24.133Z","avatar_url":"https://github.com/humanbased-ai.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"right\"\u003e\n  \u003ch5\u003e\u003ca href=\"./README.zh.md\"\u003e🌏 \u0026nbsp;中文\u003c/a\u003e\u003c/h5\u003e\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/logo.png\" alt=\"crosscheck\" width=\"160\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cem\u003eA Humanbased project, built with crosscheck.\u003c/em\u003e\u003c/p\u003e\n\n# crosscheck\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/screenshot-watch.png\" alt=\"crosscheck watch — live pipeline view\" width=\"860\" /\u003e\n\u003c/p\u003e\n\n**Your agents ship fast. Crosscheck makes sure they ship right.**\n\nAI coding agents create PRs faster than review habits can absorb. The failure mode isn't broken builds — it's *early victory*: patches that pass CI, look complete, and still hide regressions, brittle edge cases, or half-finished fixes.\n\nCrosscheck adds an independent Review → Fix → Recheck loop. One agent writes the patch. Another reviews it. Findings go back to the author to repair. The result gets rechecked before merge. The PR moves toward genuinely merge-ready — not just \"looks green.\"\n\nNo new hosted service. No per-review API bill. Crosscheck runs through the `claude` and `codex` CLIs you already have — your existing subscriptions, your machine or server.\n\nBuilt by [Humanbased](https://github.com/humanbased-ai). Read the field report: [What 295 Agentic PRs Taught Us About Code Review](https://blog.humanbased.ai/posts/agentic-pr-quality-crosscheck/) — 295 agentic PRs analyzed, real Crosscheck logs included.\n\n## Why crosscheck?\n\n**Agent velocity without lowering the merge bar.**\n\n- **Independent eyes, not self-review** — route Claude-authored PRs to Codex and vice versa. Self-review is exactly where early-victory failures hide.\n- **Review → Fix → Recheck, not just comments** — findings return to the author agent for repair; a clean recheck follows before merge. PRs move forward, not sideways.\n- **No new vendor** — runs through the `claude` and `codex` CLIs you already pay for. No per-review bill, no extra trust surface.\n- **Configurable for any team size** — review-only mode, review + fix, or the full loop. Personal laptop via `watch`, always-on server via `serve`, one-shot via `review`.\n\n## Who uses crosscheck\n\n| Persona | Problem | How crosscheck helps |\n|---|---|---|\n| **Solo agentic builder** | Same agent that wrote the code may self-approve incomplete work | Independent reviewer from a different vendor, on your machine |\n| **Technical founder** | AI PRs look done before delivering stable value | Closes the loop: review finding → agent fix → clean recheck |\n| **Engineering lead** | Agent use is hard to supervise or standardize | Configurable workflow, review-only mode, and a visible PR audit trail |\n| **OSS maintainer** | Review bandwidth is scarce; comments must be actionable | One-shot `crosscheck review` posts concrete findings directly on the PR |\n\n### Common workflows\n\n```bash\n# Catch regressions before merging a solo PR\ncrosscheck run \u003cpr-url\u003e\n\n# Continuous review on every incoming agent PR\ncrosscheck serve            # always-on team server\n\n# Review stale PRs from a queue\ncrosscheck scan \u0026\u0026 crosscheck kickass\n\n# One-shot review of a specific PR\ncrosscheck review \u003cpr-url\u003e\n\n# Loop until the agent produces an approved patch\ncrosscheck run \u003cpr-url\u003e --crazy\n```\n\n---\n\n## Quick start\n\n### First useful review in 10 minutes\n\nStart with one low-risk PR before turning on continuous watch mode. You only need GitHub CLI plus one authenticated reviewer CLI.\n\n```bash\n# 1. Install crosscheck\nnpm install -g @humanbased/crosscheck\n\n# 2. Authenticate GitHub\nbrew install gh \u0026\u0026 gh auth login\n\n# 3. Authenticate one reviewer\nnpm install -g @openai/codex \u0026\u0026 codex login --device-auth\n# or:\nnpm install -g @anthropic-ai/claude-code \u0026\u0026 claude\n\n# 4. Check your setup\ncrosscheck status\n\n# 5. Review the public fixture PR\ncrosscheck review https://github.com/humanbased-ai/crosscheck-proof-fixture/pull/1 --reviewer codex\n```\n\nThis fixture PR intentionally contains a realistic agentic-code regression, so you can see whether Crosscheck produces a useful review before pointing it at your own repo. Use `--reviewer claude` if Claude Code is the authenticated reviewer. After the fixture review works, swap in one low-risk PR from your repo, then run `crosscheck onboard` to configure repos, workflow mode, and continuous monitoring.\n\n### Continuous mode\n\n```bash\n# 1. Install crosscheck and the agent CLIs\nnpm install -g @humanbased/crosscheck\nnpm install -g @anthropic-ai/claude-code \u0026\u0026 claude        # Claude Pro/Max subscription\nnpm install -g @openai/codex \u0026\u0026 codex login --device-auth # ChatGPT Plus/Pro subscription\nbrew install gh \u0026\u0026 gh auth login                          # GitHub CLI\n\n# 2. Guided setup — repos, review mode, workflow pipeline\ncrosscheck onboard\n\n# 3. Start watching\ncrosscheck watch        # personal laptop\ncrosscheck serve        # always-on team server\n```\n\n---\n\n## Commands\n\n```bash\ncrosscheck onboard                  # guided setup — pick repos, mode, and pipeline\ncrosscheck watch                    # personal use — tunnel + webhook + listening on your laptop\ncrosscheck serve                    # team use — fixed port, register webhook once\ncrosscheck review \u003cpr-urls...\u003e      # review one or more PRs (comma lists, ranges, cross-repo)\ncrosscheck run \u003cpr-urls...\u003e         # run the full workflow: review → (fix → recheck) × max_rounds\ncrosscheck recheck|fix|resolve \u003cpr-urls...\u003e   # force one workflow step on one or more PRs\ncrosscheck scan                     # show open PR workflow state across monitored repos\ncrosscheck detect-step \u003cpr-url\u003e     # explain the next workflow step for one PR\ncrosscheck kickass                  # advance stale PRs from an interactive operator queue\ncrosscheck init                     # check prerequisites, write starter config\ncrosscheck status                   # auth state, config summary, CLI versions\n```\n\n**Operator queue (scan + kickass)**\n\n`crosscheck scan` tracks two independent dimensions per PR:\n\n| Workflow stage (`reviewState`) | Meaning | Next action |\n|---|---|---|\n| `NEEDS_REVIEW` | No crosscheck review for current HEAD | review |\n| `NEEDS_FIX` | Reviewed — fix requested | fix |\n| `NEEDS_RECHECK` | Fix committed, recheck pending | recheck |\n| `APPROVED` | Reviewed and approved | merge |\n\n| Verdict (`verdict`) | Meaning |\n|---|---|\n| `UNREVIEWED` | No review found |\n| `APPROVE` | AI approved |\n| `NEEDS_WORK` | AI requested changes |\n| `BLOCK` | AI hard-blocked merge |\n\n`BLOCK` and `NEEDS_WORK` both map to `NEEDS_FIX` stage — same next action, but the `verdict` field preserves severity so operators can prioritise.\n\n**How workflow steps are counted**\n\nCrosscheck reconstructs PR workflow state from visible artifacts:\n\n| Evidence | Counts as |\n|---|---|\n| Review or recheck comment with `\u003c!-- crosscheck: ... verdict=... --\u003e` | completed `review` / `recheck` step |\n| Fix or conflict-resolve comment, such as `\u003c!-- crosscheck: fix_applied ... --\u003e` | completed `fix` / `conflict-resolve` step |\n| PR commit trailer, such as `Crosscheck-Step: fix` | completed step declared by that trailer |\n\nCommit trailers are accepted as operator-declared workflow state. In practice, a PR author may command Claude, Codex, or another agent to apply a fix outside a standalone Crosscheck post; if the resulting PR commit carries `Crosscheck-Step: fix`, Crosscheck counts it as fix evidence.\n\nThat evidence only advances the next step to `recheck` when the fix commit is the current PR HEAD. If another commit lands after the fix evidence, Crosscheck starts a fresh review round so the newer code is reviewed normally. This prevents an old fix trailer from marking later changes as ready for recheck.\n\n```bash\ncrosscheck scan [--tidy] [--stale-after \u003cduration\u003e] [--force] [--json]\ncrosscheck kickass [--dry-run] [--stale-after \u003cduration\u003e] [--force]\n```\n\n`crosscheck review --reviewer`, `crosscheck run --reviewer`, `crosscheck run --fixer`, and `crosscheck run --vendor` accept vendor aliases:\n- Claude: `claude`, `claude-code`, `cc`, `anthropic`\n- Codex: `codex`, `openai`\n\n**Continuous improvement** *(experimental)*\n\n```bash\ncrosscheck diagnose                 # surface failure patterns from review logs\ncrosscheck optimize [--apply]       # rewrite reviewer instructions based on diagnose output\ncrosscheck impact [--money]         # time saved, issues caught, code quality trends\ncrosscheck issue                    # draft and file a bug report from recent error logs\n```\n\n---\n\n### `crosscheck onboard`\n\nInteractive setup wizard. Picks repos/orgs to monitor, selects single-vendor or cross-vendor mode, configures the review pipeline, and writes `~/.crosscheck/config.yml` and `workflow.yml`.\n\n```bash\ncrosscheck onboard              # guided setup\ncrosscheck onboard --personal   # skip persona prompt, go straight to personal mode\ncrosscheck onboard --team       # skip persona prompt, go straight to team mode\ncrosscheck onboard -y           # accept all defaults non-interactively\n```\n\n---\n\n### `crosscheck watch`\n\nPersonal mode. Starts an SSH tunnel (localhost.run), registers GitHub webhooks, and listens for PR events. Everything self-cleans on Ctrl+C.\n\n```bash\ncrosscheck watch\ncrosscheck watch --no-backtrace       # skip startup scan for unreviewed open PRs\ncrosscheck watch --reconfigure        # re-run deployment setup before starting\n```\n\n---\n\n### `crosscheck serve`\n\nTeam mode. Binds to a fixed port — register the webhook once, cover the whole team. Designed for a mac-mini or home server.\n\n```bash\ncrosscheck serve\ncrosscheck serve --no-backtrace       # skip startup scan\ncrosscheck serve --personal           # personal scope this session only\ncrosscheck serve --reconfigure        # re-run deployment setup\n```\n\n---\n\n### `crosscheck review \u003cpr-urls...\u003e`\n\nReviews one or more PRs. Clones, checks out, reviews, and posts the comment. The PR argument accepts the [multi-PR spec syntax](#multi-pr-syntax) — multiple PRs are reviewed concurrently.\n\n```bash\ncrosscheck review https://github.com/org/repo/pull/42\ncrosscheck review \u003cpr-url\u003e --reviewer claude    # force Claude regardless of detection\ncrosscheck review \u003cpr-url\u003e --reviewer codex     # force Codex regardless of detection\ncrosscheck review \u003cpr-url\u003e --reviewer cc        # alias for Claude\ncrosscheck review \u003cpr-url\u003e --reviewer openai    # alias for Codex\ncrosscheck review .../pull/245,255              # review several PRs at once\ncrosscheck review .../pull/245-256              # review an inclusive range\n```\n\n---\n\n### `crosscheck run \u003cpr-urls...\u003e`\n\nRuns the full configured workflow against one or more PRs: review → (fix → recheck) × `max_rounds`. Loops autonomously through fix→recheck cycles up to the `max_rounds` value configured in `workflow.yml` (default: 1). Use `--crazy` or `--half-crazy` to loop until approved or unblocked, ignoring `max_rounds`. The PR argument accepts the [multi-PR spec syntax](#multi-pr-syntax); multiple PRs run concurrently (one agent per PR by default).\n\n```bash\ncrosscheck run \u003cpr-url\u003e\ncrosscheck run \u003cpr-url\u003e --steps review           # only the review step\ncrosscheck run \u003cpr-url\u003e --steps fix,recheck      # skip initial review\ncrosscheck run \u003cpr-url\u003e --reviewer claude        # force review/recheck agent\ncrosscheck run \u003cpr-url\u003e --fixer claude           # force fix agent\ncrosscheck run \u003cpr-url\u003e --vendor claude          # force review/recheck/fix agent\ncrosscheck run \u003cpr-url\u003e --dry-run                # review without posting or fixing\ncrosscheck run \u003cpr-url\u003e --crazy                  # 🔥🔥 loop until APPROVE\ncrosscheck run \u003cpr-url\u003e --half-crazy             # 🔥  loop until not BLOCK\ncrosscheck run \u003cpr-url\u003e --timeout 10m            # custom reviewer timeout\ncrosscheck run .../pull/245,255                  # several PRs, concurrently\ncrosscheck run .../pull/245-256 --concurrent 3   # range, max 3 agents in parallel\n```\n\n---\n\n### `crosscheck recheck` / `fix` / `resolve \u003cpr-urls...\u003e`\n\nForce a single workflow step against one or more PRs, bypassing next-step auto-detection. Each is sugar for `crosscheck run \u003cspec\u003e --steps \u003ctype\u003e` and accepts the same [multi-PR spec syntax](#multi-pr-syntax) and `--concurrent` / `--sequential` / `--stagger` flags as `run`.\n\n| Command | Forces the step |\n|---|---|\n| `crosscheck recheck \u003cspec\u003e` | `recheck` — re-evaluate against the latest review |\n| `crosscheck fix \u003cspec\u003e` | `fix` — apply fixes for the latest review |\n| `crosscheck resolve \u003cspec\u003e` | `conflict-resolve` — resolve merge conflicts (Claude only) |\n\n```bash\ncrosscheck recheck https://github.com/org/repo/pull/42\ncrosscheck fix .../pull/245,255 --fixer claude\ncrosscheck resolve .../pull/245-256 --vendor claude\n```\n\nWhen the step is absent from the active `workflow.yml`, `recheck` and `conflict-resolve` are synthesized with built-in defaults so the command still runs.\n\n---\n\n### Multi-PR syntax\n\n`run`, `review`, `recheck`, `fix`, and `resolve` accept a single PR URL or a **spec** that expands to many PRs — a comma-separated list of full URLs, bare numbers, and `N-M` ranges:\n\n```bash\n.../pull/245,255                                   # two PRs in the same repo\n.../pull/245-256                                   # an inclusive range\n.../repo/pull/245,https://github.com/o/other/pull/3  # across repos\n```\n\nThe first token must be a full URL (a bare number inherits the most recent repo). Duplicates are de-duplicated and a spec expands to at most 100 PRs. Multiple PRs run concurrently by default — control parallelism with `--concurrent \u003cn\u003e`, `--sequential`, or `--stagger \u003cms\u003e`.\n\n---\n\n### `crosscheck scan`\n\nScans every open PR in the configured monitor scope and reports where each one is in the crosscheck workflow. Results are cached for 60 seconds.\n\nStates: `NEEDS_REVIEW` · `NEEDS_FIX` · `BLOCK` · `NEEDS_RECHECK` · `APPROVE`\n\n```bash\ncrosscheck scan                          # all open PRs, grouped stale/not-stale\ncrosscheck scan --tidy                   # stale actionable rows only\ncrosscheck scan --stale-after 4h         # custom staleness threshold (default 24h)\ncrosscheck scan --force                  # bypass cache\ncrosscheck scan --json                   # machine-readable output\n```\n\n---\n\n### `crosscheck detect-step`\n\nExplains the workflow history for one PR and prints the next step Crosscheck would run. Use this when a PR has mixed evidence from comments, Crosscheck commits, or ad hoc agent commits with `Crosscheck-Step` trailers.\n\n```bash\ncrosscheck detect-step \u003cpr-url\u003e\ncrosscheck detect-step \u003cpr-url\u003e --json\n```\n\n---\n\n### `crosscheck kickass`\n\nSelects stale PRs from the operator queue and advances them — runs `scan` first, presents a multi-select picker, shows a preflight summary, then executes after confirmation.\n\n```bash\ncrosscheck kickass                       # interactive operator queue\ncrosscheck kickass --dry-run             # preflight only — no mutations\ncrosscheck kickass --stale-after 2h      # tighter staleness threshold\ncrosscheck kickass --force               # bypass scan cache before picking\ncrosscheck kickass --crazy               # 🔥🔥 auto loop until APPROVE\ncrosscheck kickass --half-crazy          # 🔥  auto loop until not BLOCK\n```\n\nActions: `NEEDS_REVIEW → CR` · `NEEDS_FIX/BLOCK → Fix` · `NEEDS_RECHECK → Recheck` · `APPROVE → Merge`\n\n**`kickass` + `watch` combo**\n\nFor the best recovery experience when a batch of PRs is stuck (timed out, stopped before `watch` was running), run both commands together. Each plays a distinct role:\n\n- `kickass` kicks each stuck PR **one step at a time** — it uses `detect-step` to read live PR history and dispatches only the next needed step (review, fix, or recheck).\n- `watch` owns **all continuation** — it listens for the webhooks each completed step produces and runs the full remaining pipeline from there.\n\n```\ncrosscheck kickass\n  └─ ck run \u003curl\u003e  --trigger kickass  (one step; detect-step finds where to start)\n       └─ detect-step → \"review\"      run review only → posts comment\n       └─ detect-step → \"fix\"         run fix only → pushes commit\n       └─ detect-step → \"recheck\"     run recheck only → posts verdict\n\ncrosscheck watch\n  ├─ issue_comment (type=review) → pick up fix step automatically\n  └─ synchronize   (fix commit)  → pick up recheck step automatically\n```\n\n\u003e **Note:** `crosscheck run \u003cpr-url\u003e` invoked directly runs the **full remaining pipeline** from the detected starting step. The one-step behaviour above applies only when kickass dispatches it with `--trigger kickass`.\n\nStart `watch` first, then run `kickass` in a second terminal:\n\n```bash\n# terminal 1\ncrosscheck watch\n\n# terminal 2\ncrosscheck scan --force    # refresh PR state\ncrosscheck kickass\n```\n\n\u003e **How the review→fix bridge works:** after `kickass` posts a review comment, GitHub fires an `issue_comment` webhook (not a `pull_request` event). `watch` subscribes to `issue_comment` and, when it sees a crosscheck `type=review` annotation on an open PR, fetches the current PR head and runs the fix step automatically — no new commit required to wake it up. (Introduced in [#193](https://github.com/Motivation-Labs/crosscheck/pull/193).)\n\n**Autonomous loop modes**\n\n`--crazy` and `--half-crazy` turn `run` and `kickass` into autonomous fix→recheck loops that keep going until the verdict improves — no manual re-runs needed.\n\n| Flag | Stops when | Max rounds | Timeout |\n|---|---|---|---|\n| `--crazy` 🔥🔥 | verdict = `APPROVE` | ∞ | none |\n| `--half-crazy` 🔥 | verdict ≠ `BLOCK` | ∞ | none |\n\nBoth flags disable all reviewer subprocess timeout constraints — long fixes on large PRs won't be cut short. Use `--timeout \u003cduration\u003e` (e.g. `--timeout 10m`) without these flags to set a custom cap.\n\n```bash\n# Run full workflow and keep looping until approved\ncrosscheck run \u003cpr-url\u003e --crazy\n\n# Advance every stale PR until it's no longer blocked\ncrosscheck kickass --half-crazy\n\n# Custom timeout without looping\ncrosscheck run \u003cpr-url\u003e --timeout 10m\n```\n\n---\n\n## Configuration\n\nCrosscheck uses `~/.crosscheck/config.yml` by default. If that file exists, it wins over `./crosscheck.config.yml` unless you pass `--config ./crosscheck.config.yml`.\n\n### Review depth (`quality.tier`)\n\n```yaml\n# crosscheck.config.yml\nquality:\n  tier: balanced    # fast | balanced | thorough\n```\n\n| Tier | Claude model | Codex model | Latency |\n|---|---|---|---|\n| `fast` | Haiku | default | ~10s |\n| `balanced` | Sonnet (default) | default | ~30s |\n| `thorough` | Opus | default | ~60s |\n\n### Pipeline (`workflow.yml`)\n\n```yaml\nsteps:\n  - name: review\n    type: review\n    reviewer: auto          # auto | claude | codex | origin\n\n  - name: fix\n    type: fix\n    reviewer: origin\n    when: review.verdict != 'APPROVE'\n\n  - name: recheck\n    type: recheck\n    reviewer: auto\n    when: fix.applied_count \u003e 0\n```\n\n### Config snapshot\n\n```yaml\n# ~/.crosscheck/config.yml\norgs:\n  - your-org\n\nrouting:\n  allowed_authors:\n    - your-github-login\n\nmode: cross-vendor          # cross-vendor | single-vendor\n\nvendors:\n  claude:\n    enabled: true\n  codex:\n    enabled: true\n\nquality:\n  tier: balanced\n\nclone_protocol: ssh         # ssh (default) | https\n```\n\nFull reference: [get-started.md](./get-started.md)\n\n---\n\n## Requirements\n\n| | Minimum |\n|---|---|\n| Node.js | 18+ |\n| Claude Code CLI | latest — `npm install -g @anthropic-ai/claude-code` |\n| Codex CLI | latest — `npm install -g @openai/codex` |\n| GitHub CLI | 2.65+ — `brew install gh` |\n\n`GITHUB_TOKEN` is derived automatically from `gh auth login`. No manual export needed.\n\n---\n\n## Documentation\n\n| | |\n|---|---|\n| **[get-started.md](./get-started.md)** | Full setup guide — prerequisites, all flags, complete config reference, FAQ |\n| **[What 295 Agentic PRs Taught Us About Code Review](https://blog.humanbased.ai/posts/agentic-pr-quality-crosscheck/)** | Humanbased field report on agentic PR quality, review routing, and why Crosscheck exists |\n| **[docs/fixture-pr.md](./docs/fixture-pr.md)** | Safe public fixture PR for the first Crosscheck review |\n| **[crosscheck.config.example.yml](./crosscheck.config.example.yml)** | Annotated config with every option |\n| **[CHANGELOG.md](./CHANGELOG.md)** | Release notes |\n\n---\n\n## Contributing\n\nIssues and PRs welcome at [github.com/humanbased-ai/crosscheck](https://github.com/humanbased-ai/crosscheck).\n\n---\n\n## License\n\n[MIT](./LICENSE) — Copyright (c) 2025–2026 Humanbased PTE LTD.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhumanbased-ai%2Fcrosscheck","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhumanbased-ai%2Fcrosscheck","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhumanbased-ai%2Fcrosscheck/lists"}