DISSENT

Dissent documentation

Confidence without changing how you work.

Dissent is a model-independent assurance layer for AI-made work. Your existing harness sends the artifact; independent models challenge it; Dissent returns one actionable verdict and a tamper-evident receipt.

01

What Dissent does

AI coding and reasoning tools are exceptionally capable—and every model has blind spots. Dissent gives the tool you already use an independent review bench. It does not ask you to move the work into another chat or manually compare four model outputs.

You submit the work, the objective, and explicit acceptance criteria. Dissent selects independent model families, normalizes their findings, preserves material disagreement, applies deterministic decision rules, and sends the complete result back to the originating harness.

The core idea

The maker and the checker should not share the same blind spots. Dissent keeps the distinction explicit and auditable.

02

One request. Independent scrutiny.

  1. Submit. Your harness calls dissent.check with an artifact, objective, acceptance criteria, risk level, and any evidence already available.
  2. Confirm access. Dissent confirms that the run is available under your organization's plan before review begins.
  3. Review. Independent model families assess every server-assigned criterion and return structured findings.
  4. Adjudicate. A separate qualified model evaluates the disagreement and recommends a disposition.
  5. Decide. Deterministic rules—not a popularity vote—produce the final verdict.
  6. Return. Your harness receives the verdict, required actions, preserved disagreement, normalized runs, and signed evidence receipt.

You fix the work in the tool you were already using, then submit a new check. Dissent never deploys, merges, trades, sends, or approves anything on your behalf.

03

Connect the MCP

After activation, you receive a Dissent MCP URL and tenant API key. Add one Streamable HTTP server to Codex, Cursor, Claude Code, or another MCP-capable harness.

{
  "mcpServers": {
    "dissent": {
      "url": "https://api.dissent.works/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_DISSENT_API_KEY"
      }
    }
  }
}

Available tools

  • dissent.check — run a bounded independent assurance decision.
  • dissent.get — retrieve a tenant-owned decision.
  • dissent.usage — read remaining included and authorized capacity and whether another run can start.
  • dissent.record_outcome — record what happened next without rewriting the receipt.

Example request

Use dissent.check to review this authentication diff.

Objective: prevent cross-tenant data access.
Acceptance criteria:
1. Tenant identity comes only from authentication.
2. Every record read is scoped to that tenant.
3. Foreign record IDs return 404.
Risk: high.
04

Verdicts mean something specific

PASS

Required independent coverage completed, every criterion passed, the judge agreed, and no deterministic blocker remains.

FAIL

A deterministic check failed, a qualified reviewer found a blocking issue, or the judge confirmed failure.

NEEDS_HUMAN

Coverage exists, but evidence, agreement, or confidence is insufficient for automated approval.

INCONCLUSIVE

No usable independent result was obtained. Dissent never converts unavailable coverage into a pass.

A PASS is evidence that the submitted contract survived independent review. It is not proof that unsubmitted requirements were met, and it does not replace your organization's approval policy.

05

The evidence receipt

Every completed decision carries a canonical, service-authenticated receipt that binds the full request and the complete normalized provider-run record.

  • Artifact, request, and acceptance-contract SHA-256 digests
  • Prompt and deterministic verdict-rule versions
  • Required independent-review policy
  • Provider, model, attempt status, latency, and request identity
  • Canonical digests binding the receipt to the exact submitted work and complete review record
  • Final verdict, timestamp, signing-key identity, and signature
Integrity scope

Each receipt is authenticated by Dissent and detects later mutation. Publicly verifiable receipt signatures are planned for a future release.

06

Model independence is policy, not theater

Dissent can draw independent perspectives from OpenAI, Anthropic, xAI, and Moonshot/Kimi. Model selection follows a controlled qualification policy so the maker cannot quietly become its own checker.

If the producing family is unknown, PASS requires two qualified reviewer families plus a distinct qualified judge. If the producer is declared, PASS requires a qualified reviewer plus a distinct qualified judge, both different from the producer.

Kimi may currently contribute an advisory perspective, but it does not satisfy a required PASS lane until it clears Dissent's repeatable qualification gate.

07

Fail closed by design

  • Every REST and MCP request authenticates independently with a tenant bearer key.
  • Tenant identity never comes from request content or an MCP session ID.
  • Foreign decision identifiers return 404.
  • Artifacts and provider prose are treated as untrusted data.
  • Review models cannot take actions, call tools, or alter the submitted work.
  • Incomplete model coverage can never be converted into a PASS.
  • Retries and execution time are bounded for every run.
  • Model-provider credentials are never exposed to your harness.

See the MCP security guidance for the broader transport threat model.

08

Predictable access, bounded usage

$500per month

One organization. One independent assurance layer. Includes the orchestration service, model policy, tenant controls, persistent decisions and receipts, and a useful monthly assurance allowance.

Additional usage is opt-in. Raise the hard monthly ceiling in $500 increments and pay only for usage actually consumed inside the authorized block. Rejected work reaches zero providers.

Enrollment opening soon
09

REST API

The same assurance contract is available over a small authenticated REST surface.

POST /v1/checks
GET  /v1/checks/:decisionId
POST /v1/checks/:decisionId/outcome
GET  /v1/usage/current

Authorization: Bearer YOUR_DISSENT_API_KEY
Idempotency-Key: YOUR_REQUEST_KEY

Idempotent retries return the original decision. Reusing an idempotency key with different request content returns a conflict. Each request is capacity-checked before review begins.