Skip to content

windaddict/impasse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

31 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Impasse

An independent second opinion for any high-stakes call β€” a decision, an essay, a research claim, a dataset, or code β€” from a cross-provider AI whose blind spots don't match your own.

The independent reviewer never edits your work β€” it argues, with evidence. Keeping the critic away from the pen is the point: fixes get applied by the host driving Impasse (or by you), never by the model that's supposed to be checking you. And unlike a plain code reviewer, it doesn't hand you a raw list to triage β€” it verifies each finding, reconciles the two models, and escalates only the genuine disagreement. You get the verified problems, plus the one call that's actually yours.

flowchart TB
    A["Your artifact<br/>decision Β· essay Β· research Β· data Β· code"] --> R["πŸ”Ž Reviewer<br/>cross-provider AI Β· read-only"]
    R -->|"anchored findings"| V{"βš–οΈ Host verifies<br/>each finding vs. the real artifact"}
    V -->|"verified"| F["verified real<br/>host applies the fix"]
    V -->|"refuted with evidence"| X["dropped<br/>a confident miss"]
    V -->|"host disagrees,<br/>but has no evidence"| RB{"πŸ”Ž one rebuttal round<br/>reviewer substantiates<br/>or withdraws"}
    V -->|"value / priority call"| Q(["❓ one question<br/>β†’ you decide"])
    RB -->|"withdrawn / evidence found"| X
    RB -->|"neither side can win"| Q
    style R fill:#6366f1,color:#fff
    style RB fill:#6366f1,color:#fff
    style V fill:#0ea5e9,color:#fff
    style Q fill:#f97316,color:#fff
    style X fill:#e5e7eb,color:#111
Loading

The reviewer (indigo) proposes; the host (blue) verifies and applies the fixes they agree on; the judgment calls come to you. The independent reviewer never edits β€” the critic and the editor stay separate. A refutation only drops a finding when the host has contradicting evidence β€” a host disagreement with no evidence isn't a rejection, so it goes back to the reviewer for one round, then to you if neither side can win.

Status: pre-release. The open implementation of the pattern from the essay AI's Second Opinion: When Rival Models Disagree. The Codex path, consent gate, and schemas are implemented and tested; verify β†’ reconcile β†’ escalate is directed by the host skill, not enforced in code β€” a review is only as good as the host's adherence to the protocol (see Guardrails). Dogfooding it on its own source caught a real shipping bug before release. It pins to a fast-moving alpha of the Codex CLI and is best-effort β€” expect rough edges.

Example

Ask Claude Code in plain English:

Use Impasse to get a second opinion on this build-vs-buy memo before I commit.

It runs a cross-provider reviewer, verifies each finding against your artifact, and hands back a report β€” the problems worth acting on, the one the host threw out, and the single call that's yours:

πŸ“Š Decisions: 4 finding(s) raised β†’ 🀝 2 accepted Β· ❌ 1 rejected Β· βš–οΈ 1 escalated to you
──────────────────────────────────────────────────────────────
F002  🟠 high  ❌ rejected
  πŸ”Ž Reviewer: the go-to-market is undifferentiated.
  β—€ Host:     the memo already concedes the mechanic is commodity and stakes its case on
              distribution β€” a rediscovered premise, not a gap. Rejected, with the quote.
F004  🟠 high  βš–οΈ ESCALATED β€” needs your decision
  ❓ Enter Europe first to cut concentration risk, or protect the nine-month runway?
──────────────────────────────────────────────────────────────
πŸ“ˆ Your Impasse record β€” 9 reviews reconciled
   31 findings reviewed Β· 18 accepted Β· 7 refuted with evidence Β· 2 resolved Β· 4 escalated to you

Example output. The reviewer never edits your work; the host applies the fixes it verifies, and only the genuine disagreement reaches you. Your record is local to your machine and grows as you use it.

Why

The value of a second AI is independence, not a smarter answer. A reviewer trained by a different provider may fail in different places, so a disagreement is a useful signal for where a human should look. Impasse runs that cross-provider review, verifies each finding, reconciles the two models, and reports the verified problems plus the disagreements that need your judgment β€” not a raw list to triage. Agreement is evidence, not proof.

It is domain-general β€” the same protocol reviews:

  • a decision / strategy memo (hidden assumptions, unpriced tradeoffs),
  • a document / essay (unsupported claims, weak or self-contradicting arguments),
  • research (a citation that doesn't support its claim, overgeneralization),
  • code (correctness, security, missing error handling),
  • a dataset or other artifact.

How it works

  1. Review β€” an independent reviewer returns structured findings, each with anchored evidence (a location in the artifact plus an observation β€” a bare location isn't evidence).

  2. Verify β€” the host checks each finding against the actual artifact before trusting it.

  3. Reconcile β€” accept / reject (with evidence) / resolve each finding; one rebuttal round.

  4. Report + escalate β€” you get the verified findings to act on, and only the deadlock β€” an evidence conflict, a value/priority judgment that's yours to make, or a host objection it couldn't back with evidence β€” comes to you as a crisp question:

    Question for you: The reviewer argues that entering Europe first reduces concentration risk; the memo argues it delays break-even by nine months. Which matters more here β€” runway, or geographic diversification?

See a full decision review end to end β€” a build-vs-buy memo, not code β€” from rival finding to the single call that needs a human: docs/walkthrough-decision.md.

Full protocol: docs/protocol.md.

What the reviewer checks for

The reviewer observes and argues β€” it never edits your artifact; the critic never holds the pen. Every finding must carry anchored evidence: a specific location and an observation of what's wrong there β€” never a bare "line 40 looks off." What it looks for adapts to the artifact:

  • Decision / strategy β€” hidden assumptions, unpriced tradeoffs, and each materially-affected stakeholder's view (who executes it, who bears the downside, the customer, the regulator).
  • Document / essay β€” unsupported claims, weak or self-contradicting arguments, structure.
  • Research β€” a citation that doesn't support its claim, overgeneralization, missing counter-evidence.
  • Code β€” correctness, security, edge cases, missing error handling.
  • Data / other β€” whatever the artifact's own structure makes checkable.

Then the host does the half the reviewer can't be trusted to do alone: verify each finding against the real artifact, reject the confident misses with evidence, and escalate only the judgment call. The reviewer proposes, the host verifies and fixes, and you decide the rest.

What a run surfaces

The output is what survived scrutiny β€” the reviewer's findings, with a disposition on each. On a decision artifact (a market-entry memo, not code), a run can produce all three outcomes:

  • Accepted β€” the reviewer flags that the revenue model leans on a churn rate cited nowhere in the memo. The host checks, confirms the number is unsupported, and accepts it. β†’ a real gap to fix.
  • Refuted with evidence β€” the reviewer calls the go-to-market "undifferentiated." The host points to the paragraph where the memo already concedes the mechanic is commodity and stakes its case on distribution β€” the reviewer rediscovered a stated premise, not a hole. Rejected, with the quote. β†’ the verify step catching a confident miss, so it never reaches you.
  • Escalated β€” the reviewer wants Europe first to cut concentration risk; the memo wants to protect a nine-month runway. Neither is a fact. It comes to you as one question. β†’ routed, not decided.

That mix β€” most findings verified, some refuted on evidence, a few escalated β€” is what a run is for: an independent model checks the work, the host filters its misses where it can, and the genuine judgment calls come to you. Each show closes with a running tally across your reviews.

Requirements

  • Claude Code (the host).
  • The OpenAI Codex CLI installed and logged in β€” the recommended, cross-provider reviewer backend β€” docs/backends/codex.md. No Codex? A same-provider Claude fallback (--backend claude) runs on Claude Code alone, no second vendor account β€” but it shares the host's blind spots, so it buys breadth, not independence β€” docs/backends/claude.md.
  • Python 3 (standard library only β€” the shipped helpers have no pip dependencies).
  • macOS or Linux. Windows via WSL; native Windows is a roadmap.

How independent is it?

Independence is a ladder, not a switch β€” and Impasse always tells you which rung you're on. A different provider is the point; the fallbacks trade independence for reach.

flowchart TB
    B1["Different provider β€” Codex<br/>real independence Β· default"] --> B2["Same provider, fresh process<br/>Claude fallback Β· breadth, not independence"]
    B2 --> B3["Self-review<br/>last resort Β· sandbox/Cowork only Β· refused for code"]
    style B1 fill:#16a34a,color:#fff
    style B2 fill:#eab308,color:#111
    style B3 fill:#dc2626,color:#fff
Loading

Genuine independence needs a Codex login; the weaker rungs run on Claude alone. Detail: docs/environments.md.

Install

Impasse is a Claude Code skill β€” the repository is the skill directory:

git clone https://github.com/windaddict/impasse ~/.claude/skills/impasse

Then ask Claude Code to use Impasse β€” for example, "Use Impasse to review this decision memo."

Choosing the reviewer model: by default the backend's own default is used. Ask Claude Code to pick one and it presents the options (Codex can't enumerate models, so it's a curated list plus a free-text "other" β€” availability depends on your account). Or set it directly: --model <name> per run, scripts/impasse_run.py set-model --backend codex <name> to persist, or the IMPASSE_CODEX_MODEL / IMPASSE_CLAUDE_MODEL env var. Precedence: flag > env > persisted > default. Pinning a model different from the host's also climbs a rung on the independence ladder.

Fast checks (--raw): for a quick, low-stakes look at your own work, review --raw returns the reviewer's findings and skips the verify β†’ reconcile β†’ escalate protocol (and doesn't record). The findings are unverified β€” the host hasn't checked them β€” so use the full protocol when it matters.

Data boundary & consent

Reviewing an artifact sends its content to a third-party provider. Impasse blocks by default until you approve the destination, and shows a payload manifest so you approve what is sent, not just where:

python3 scripts/impasse_consent.py grant https://api.openai.com --backend-type codex-cli

Consent is keyed to the normalized endpoint (a custom OPENAI_BASE_URL needs its own grant), stored 0600 in your platform config dir. Don't send secrets or regulated data without authorization. See docs/security-model.md.

Structured output

Reviews and reconciliations are JSON, validated against schemas/reviewer-response.v1.json and schemas/reconciliation-result.v1.json. Domain generality comes from an evidence anchor union (file_range | text_quote | section | structured_path | generic) plus an optional external-source citation β€” see the worked schemas/examples/.

Disclaimer

Impasse is provided under the MIT License, "AS IS", without warranty of any kind β€” including no warranty of merchantability, fitness for a particular purpose, or non-infringement. Its outputs (and the reviewer's) may be wrong and are not legal, financial, medical, tax, or other professional advice, nor a substitute for professional or human judgment. Verify important conclusions; you remain responsible for every decision and every change you make. A second model is not an independent source of truth β€” see the independence caveat in the security model.

To the maximum extent permitted by law, the authors are not liable for any damages arising from use of the software, and are not responsible for the third-party AI providers (OpenAI, Anthropic) β€” their availability, output, pricing, or handling of the data you choose to send them. Impasse is pre-release: interfaces, storage formats, and behavior may change without notice.

Acceptable use

These are reminders of your responsibilities under the law and the providers' terms β€” not additional conditions Impasse places on the MIT license:

  • Don't send secrets, credentials, personal or regulated data, or anyone else's confidential information without authorization β€” the tool doesn't scan for them, and a send leaves your machine for a third-party provider.
  • Comply with the backends' own terms β€” the OpenAI Usage Policies and the Anthropic Usage Policy, and each provider's privacy and data-handling terms, govern what you send; you are responsible for your API keys, provider accounts, and any usage costs.
  • Don't rely on it for unlawful, harmful, or high-stakes automated decisions without human review. Impasse routes the judgment calls to a human by design β€” keep it that way.
  • Export/sanctions: you are responsible for complying with applicable export-control and sanctions laws, and with your providers' geographic restrictions.

Impasse stores run records locally (the config dir's runs/) β€” they hold whatever you sent, so treat the local store as sensitive. Impasse itself sends your artifact only to the provider you invoke. Delete Impasse's local records with impasse_report.py forget <id> or prune β€” this removes only Impasse's local copies, not anything already sent to a provider.

Related work

OpenAI ships an official Codex plugin for Claude Code with read-only and adversarial code review, an optional review gate, and delegated Codex tasks. Impasse is a different layer: a domain-general review-and-reconciliation protocol (decisions, documents, research, data, and code) that verifies each finding and reconciles the two models, escalating only what they can't settle rather than returning the review to triage. It uses the Codex CLI as its cross-provider reviewer, with a same-provider Claude fallback (claude -p) for users without Codex β€” breadth, not independence; the protocol is backend-neutral.

Repository layout

SKILL.md              the skill (how the host drives Impasse)
schemas/              reviewer-response + reconciliation-result + examples
scripts/              stdlib-Python helpers (consent, supervised runner, lib)
docs/                 protocol, security model, backend, delegate mode, platform support
tests/                schema validation + helper tests (CI)

Audit trail & reports

Every run is recorded β€” the reviewer's findings, and (once you save it) the reconciliation β€” under your config dir, and scripts/impasse_report.py show <review_id> renders it: the reviewer↔host back-and-forth on each finding, the decision made, a tally (raised / resolved / accepted / rejected / escalated), and the questions escalated to you. list shows past runs (flagging which still have open escalations); forget deletes one. open surfaces runs with decisions you haven't answered yet; prune --older-than N cleans up old records (keeping any with open escalations unless --include-open). Records contain artifact content β€” they're kept 0600 and never committed.

Every show closes with a running recap across your reconciled runs β€” findings reviewed, accepted, refuted with evidence, and escalated to you β€” a plain reminder of what independent review has surfaced. Deeper longitudinal reporting (trends over time, per-artifact history) is still roadmap; each run is fully inspectable on its own.

Who builds this

Impasse is a working artifact from Moving Average, an AI advisory practice for CEOs and founders. The pattern behind it β€” running a rival model as an independent reviewer and routing only the real disagreements to a human β€” is written up in the essay AI's Second Opinion. Wiring model-to-model governance into how a team actually decides is the kind of thing the AI Workshop for CEOs works through with a group of executives. If that's the problem you're facing, start there.

License & trademarks

MIT β€” see LICENSE. Claude, Claude Code, Codex, OpenAI, and Anthropic are trademarks of their respective owners, used here only for identification and comparison (nominative fair use). Impasse is independent and is not affiliated with, sponsored by, or endorsed by them. See NOTICE.

About

Independent, evidence-first second opinions on decisions, docs, research, data, and code. A rival-provider AI reports read-only findings; the host verifies and reconciles them, and escalates only the genuine disputes that need a human.

Topics

Resources

License

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages