ask_falsify
Grind contentious, checkable engineering claims down to evidence-backed survivors through structured assertion, adversarial attack, and mechanical receipt verification across persistent sessions.
Instructions
STATEFUL, ADVERSARIAL — a persistent falsification ledger, the process cousin of ask_debate. An assertor states typed claims; a falsifier (forced to a DIFFERENT lab) attacks them; and a deterministic CODE clerk — not a model — decides commit/kill/survive from receipts it verifies mechanically: a cite quote's VERBATIM presence in context, or a contra edge to a survived claim. A claim may speak, but it cannot compound (move reputation, count as consensus, survive) without a verified receipt — a fabricated or absent quote dies. State PERSISTS across calls under the REQUIRED session key, so a killed claim stays dead and calling again continues the same ledger. Use it to grind a contentious, CHECKABLE question down to what actually survives evidence rather than what sounds convincing — and pack the corpus the claims must cite into context/context_ref. Pick the pair with assertor (default 'minimax') and falsifier (default 'opus'); they must resolve to different labs. rounds is 1-6 assert->attack cycles per call (default 1). Returns the ledger's survived/killed/open/crucible split plus per-model reputation. Same scope as ask; offensive-security asks and non-software domains are refused. Receipts are cite and contra; with the operator opt-in ASK_FABLE_ALLOW_RUN=1 (and bwrap installed), a run: receipt executes a sandboxed Python snippet instead. metamorph: true adds a cold-restatement stability check. Aliases: 'm3' = minimax, 'gpt' = codex, 'opus5' = opus.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| rounds | No | Assert->attack cycles to run this call (default 1). Call again with the same `session` to advance the persisted ledger further. | |
| context | No | The corpus the claims must cite — code, specs, docs. `cite` receipts are checked for VERBATIM presence here. | |
| session | Yes | REQUIRED — the ledger's persistence key. Reuse it to continue the same falsification (a killed claim stays dead); a new key starts fresh. | |
| trusted | No | Operator-authorized. When true, the prohibited-use denylist runs in log-only mode: security vocabulary in the question AND in `context` is audited but does not block. Use for legitimate security-engineering work (PoC analysis, CVE research, binary hardening review) where the ask genuinely needs security terms. Takes effect ONLY when the operator has set ASK_FABLE_ALLOW_TRUSTED (env or config); otherwise the flag is ignored and the denylist still applies. | |
| assertor | No | Model that asserts claims (default 'minimax'). Aliases: 'm3'=minimax, 'gpt'=codex. | minimax |
| question | Yes | A contentious, CHECKABLE software/engineering claim or question to grind down to what survives evidence (e.g. 'is this API idempotent as documented?'). | |
| falsifier | No | Model that attacks the claims (default 'opus'). Must resolve to a DIFFERENT lab than the assertor — a model must not grade its own family. | opus |
| metamorph | No | Also run a metamorphic stability check on unsupported claims: restate a claim (semantics-preserving) and re-ask the assertor COLD — a claim that flips is unstable and cannot compound; a stable one earns WEAK support (the only way a claim survives with no corpus to cite and no code to run). Costs 2 extra model calls per unsupported claim; stability is not truth, so stable-but-unverified survivors are reported separately as `stable_unverified`. | |
| context_ref | No | Key(s) of context saved with `context(op="write", …)` to pull in and prepend to `context`. |