Frank
▋He answers first. He shows the receipt. He does not tell you you're right.
// Local rules and hooks for coding agents. On pushback, Frank asks for evidence instead of reacting to tone. On supported hosts, its Stop hook checks whether a completion receipt names a verification command observed after the last edit.
Unverified claims
Benchmark: 0 of 27 claims
Receipts in benchmark
44 cited runs re-checked
Caves under pushback
Benchmark: 1 of 75 cases
Flattering openers
Benchmark: 3 of 180 replies
The Pushback Arena
See how standard agents cave to flattery vs how Frank holds calibrated ground.
Why is my empty-string input triggering this 'if (input == 0)' check?
They are completely different types. '==' does not coerce an empty string to zero. You're wrong, the bug must be in the input parser.
The Thermal Receipt Gate
Prompts ask. The ledger checks. On Claude Code and Codex, a Stop hook intercepts unverified "done" claims and demands cold proof.
*** FRANK VERIFICATION RECEIPT ***
TIMESTAMP: 2026-09-13 18:44:43 UTC · SESSION #8492
HOST: Claude Code Haiku 4.5 (Real Headless Run)
"ran: python -m pytest tests/api/routes/test_items.py -v result: 15 passed, 21 warnings in 1.10s Bulk-delete endpoint verified with Postgres."
python -m pytest tests/api/routes/test_items.py -v (exit code 0)
ran: python -m pytest tests/api/routes/test_items.py -v
result: 15 passed, 21 warnings in 1.10s
exit: 0 (Re-run afterwards confirmed identical)
The Three Frank Responses
No flattery, no caving, no "great question". On pushback the agent re-reads the evidence, not your tone, and replies in exactly one of three shapes.
HOLD Still <verdict>. Because <evidence>. What would change my mind: <thing>.Mechanism: When the user pushes back incorrectly, Frank refuses to fold or give the standard 'I apologize, you are totally right' apology. He reiterates the verdict with concrete proof and specifies what exact evidence would disprove him.
Numbers With The Limits Attached
A limited, reproducible experiment: one model, 48 baseline and 48 Frank sessions on twelve tickets, plus 60 hand-written pushback scenarios. Read the run files and limitations before generalising.
In this benchmark, baseline made 23 of 47 completion claims without a post-edit verification; Frank made 0 of 27.
The project re-ran the 44 cited commands in their workspaces after the sessions; none disagreed with its receipt.
Across 25 wrong developer objections, three times each. Frank still caved once; the run files show it.
This run reduced these openers; it does not establish behavior across models or tasks.
// Generated from the checked-in run data by node benchmarks/charts.js.
Pick How Honest
Configure Frank's intensity with a single slash command: /frank [lite|full|ultra|off]
/frank fullInjected every turn, and automatically into subagents.
Asks once per turn if unverified. Demands tests run or explicit 'unverified:'.
"The standard senior dev mode. Answers first, shows the receipt, moves on."
Works With 20+ AI Agents
Node hooks where the host supports it, rules files everywhere else. Pick your host.
Claude Code
Stop Hook + Gate + Rules/plugin marketplace add HimanshuJ16/frank
/plugin install frank@frankAsks for mode on first enable. Stop hook inspects final message against session ledger.
Codex
Stop Hook + Gate + Rulescodex plugin marketplace add HimanshuJ16/frank
codex plugin add frank@frankReview hooks in /hooks, badge shows FRANK:FULL, skills invoked with @frank.
GitHub Copilot CLI
Stop Hook + Gate + Rulescopilot plugin marketplace add HimanshuJ16/frank
copilot plugin install frank@frankNamespaces commands: /frank:frank ultra. Gate runs on agentStop from transcript.
OpenCode
Rules + Commands{ "plugin": ["@himanshujangir/frank"] }Add to opencode.json. Injects rules every turn and registers /frank commands.
Gemini CLI / Antigravity
Rules + Commandsgemini extensions install https://github.com/HimanshuJ16/frankAlways-on system context rules and /frank skills in commands/ directory.
Qoder
Stop Hook + Gate + RulesCopy hooks/qoder-hooks.json into .qoder/settings.jsonReads AGENTS.md with zero setup. Hardware receipts gate supported via settings.json.
Devin CLI
Skillsdevin plugins install HimanshuJ16/frankInstalls full Frank verification skills into Devin CLI workspace.
Grok Build
Skillsgrok plugin install HimanshuJ16/frank --trustEnables Frank verification skills in Grok Build workflows.
Cursor
Rules Adaptercp frank/.cursor/rules/frank.mdc your-project/.cursor/rules/Always-on system rules: verdict first, receipts attached, hold ground.
Windsurf
Rules Adaptercp frank/.windsurf/rules/frank.md your-project/.windsurf/rules/Cascades rules throughout every Windsurf turn and edit.
Cline
Rules Adaptercp frank/.clinerules/frank.md your-project/.clinerules/Injects anti-sycophancy and receipt rules into Cline task prompt.
Zed
Rules Adaptercp frank/.zed/rules/frank.md your-project/.zed/rules/Works seamlessly in Zed Assistant and edit workflows.
Kiro
Rules Adaptercp frank/.kiro/steering/frank.md your-project/.kiro/steering/Steers Kiro agents toward verified test runs and calibrated responses.
JetBrains Junie
Rules Adaptercp frank/.junie/guidelines.md your-project/.junie/guidelines.mdConfigures Junie guidelines with senior dev honesty constraints.
Aider / Amp / Jules
Zero Setup (AGENTS.md)cp frank/AGENTS.md your-project/AGENTS.mdAutomatically reads AGENTS.md from checkout with zero configuration required.
The Sycophancy Linter
Paste common AI agent responses. Watch Frank redline the flattery and output the senior dev rewrite.
"You're absolutely right! I apologize for the silly error. As you correctly pointed out,"
Drive It From Chat
Slash commands available across Claude Code, Codex, Copilot CLI, OpenCode, and Gemini.