@mfelix.org/quibble
v1.0.0
Published
Adversarial AI document review CLI
Readme
Quibble
Adversarial AI document review CLI that iterates between Codex (reviewer) and Claude (author) until consensus is reached. Quibble is designed for markdown documents and keeps a resumable session history on disk by default.

Requirements
- Node.js >= 18
- OpenAI Codex CLI available on PATH (
codex) - Anthropic Claude Code CLI available on PATH (
claude)
Install
npm install
npm run buildRunning locally (no global install)
node dist/index.js <file>Optional: npm link for development
If you are working on this repo and want a global quibble command without publishing:
npm linkUsage
quibble <file>Example:
quibble docs/plan.mdCLI Options
--json Output structured JSONL events
--debug-claude Log raw Claude stream lines for debugging
--debug-codex Log raw Codex stream lines for debugging
--dry-run Show resolved config and exit
--context-max-files <n> Max auto-included context files
--context-max-file-bytes <n> Max bytes per context file
--context-max-total-bytes <n> Max total bytes across context files
--no-summarize-items Disable LLM summarization of issues/opportunities
--keep-debug Keep debug logs after a successful run
--max-rounds <n> Maximum review cycles before forced stop (default: 5)
--no-persist Disable session storage; runs in-memory only
--output <path> Output path for final document
--resume <id> Resume a previous session by ID
--session-dir <p> Override session storage locationHow It Works
Each round has three phases:
- Codex reviews the document and returns issues/opportunities.
- Claude responds, updates the document, and assesses consensus.
- Codex checks whether the response resolves the feedback.
The loop stops when consensus is approved, the max rounds are reached, or a failure occurs.
Context Discovery
Quibble auto-includes repo files referenced by path in the document. It looks for file path mentions and pulls the matching files as context for Codex and Claude, with size caps and skipping common build/output directories.
Output Files
Quibble writes a final document next to the input by default:
<input>-quibbled.mdIt also writes session artifacts (unless --no-persist) under:
.quibble/sessions/<session-id>/Typical session layout:
.quibble/sessions/<session-id>/
manifest.json
round-1/
codex-review.json
claude-response.json
codex-consensus.json
timings.json (durations + token counts)
document-v1.md
final/
document.md
summary.json
debug/
claude-stream-round-1.log
codex-stream-round-1.logJSONL Output
When --json is set, Quibble emits one JSON object per line with event types:
start,round_startcodex_review,codex_progressclaude_progress,claude_responseconsensus,complete,error
This is useful for CI or custom UIs.
Exit Codes
0: Completed successfully (or max rounds reached with no unresolved critical/major issues)1: Max rounds reached with unresolved major issues2: Failure or unresolved critical issues
Debugging
If Claude or Codex progress appears stuck, enable debug logs:
quibble example.md --debug-claude --debug-codex --keep-debugLogs are written to the session debug/ directory. By default they are deleted after a successful run; use --keep-debug to retain them.
Development
npm run build
npm run typecheck
npm testTroubleshooting
- Ensure
codexandclaudeare on PATH. - If the CLI times out, re-run with debug flags and inspect the logs.
- For large documents, increase
--max-roundsor edit prompts insrc/prompts/.
