AstralXVoid
/
NoWreck
A CLI tool that verifies AI coding assistant claims against actual structural changes — catching hallucinated functions, fake calls, and missed modifications before they ship.
NoWreck
Deterministic AI Verifier — v0.11.0
NoWreck is a deterministic structural verifier for AI-generated code-change claims. When an AI describes a code change, NoWreck compares the claims against structural evidence derived by its own scanners — the verifier never asks another AI for an opinion. Where the evidence comes from depends on the mode: in Pre/Post and Claims modes, from actual before/after repository snapshots; in Prompt Mode, from the model's own proposed diff.
$ nowreck fix "Add email validation to auth.py"
Summary
────────────────────
● 3 claims total
● 2 confirmed
● 1 contradicted
CONFIRMED
─────────
✓ ADD_FUNCTION validate_email → auth.py (conf: 100%)
Evidence: Function 'validate_email' was added in auth.py
CONTRADICTED
────────────
✗ CALLS_FUNCTION validate_email → auth.py (conf: 100%)
Evidence: Function 'validate_email' was added in auth.py
What it catches
- Hallucinated functions or classes — a claim that something was added when it isn't there
- Fake internal API calls — a claim…
What's New In v0.11.0-
NoWreck v0.11.0 — Multi-Provider Support (Anthropic + Gemini)
Release date: August 2026
Previous release: v0.10.0 (Independent Verification Architecture)
Focus: Extend NoWreck beyond the OpenAI-compatible format to two major
providers with different API shapes — Anthropic (Claude) and Google Gemini —
via isolated provider adapters, with zero changes for existing
OpenAI-compatible users.
What's new in v0.11.0
Provider adapters ✅
Non-OpenAI providers get adapters, not rewrites. The existing
ModelProvider core logic (retries, parsing, failure saving) is untouched.
Adapters translate between the provider's native format and the internal
format:
ModelProvider
├── _detect_adapter(base_url) → adapter
├── OpenAIAdapter — passthrough (OpenAI, Groq, OpenRouter, Grok,
│ Kimi, Ollama, LM Studio, any compatible endpoint)
├── AnthropicAdapter — /v1/messages, x-api-key auth, top-level system
└── GeminiAdapter — /v1beta/models/{model}:generateContent,
x-goog-api-key auth, systemInstruction
Anthropic support ✅
Endpoint: POST /v1/messages
Auth: x-api-key header (+ required anthropic-version header)
System messages extracted from the messages array into the top-level
system field
Response parsed from the content block array
nowreck config set base_url https://api.anthropic.com
nowreck config set api_key sk-ant-...
nowreck config set model claude-sonnet-4-20250514
nowreck fix "Add email validation to auth.py"
Gemini support ✅
Endpoint: POST /v1beta/models/{model}:generateContent (model in URL path)
Auth: x-goog-api-key header
Messages translated to contents with parts; system messages go to
systemInstruction; assistant role maps to model
Response parsed from candidates[0].content.parts[*].text
nowreck config set base_url https://generativelanguage.googleapis.com
nowreck config set api_key AIza...
nowreck config set model gemini-2.0-flash
nowreck fix "Add email validation to auth.py"
Auto-detection + explicit override ✅
The adapter is inferred from base_url (api.anthropic.com → Anthropic,
generativelanguage.googleapis.com → Gemini, anything else → OpenAI).
An optional provider config key overrides auto-detection when needed:
nowreck config set provider anthropic # or: gemini, openai
No new CLI flags. The same commands work with every provider.
Phase 4 integration tests ✅
Six behavioral tests drive the real _default_http_call HTTP path
(urlopen patched) and prove per-provider request shape, auth headers,
and response round-trip through the correct adapter.
Top comments (0)