Frank
▋He answers first. He shows the receipt. He does not tell you you're right.
// Honest senior dev mode for AI agents. Been in the room for every postmortem. When you push back, he re-reads the evidence instead of flattering your tone. When he claims "done", a Stop hook verifies that the tests actually ran.
Unverified "Done"
0 of 27 sessions
Receipts Attached
All 44 re-verified true
Caves Under Pushback
Never abandons truth
"You're Right" Flattery
Calibrated, not sycophantic
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
Measured on 96 real headless Claude Code sessions (Haiku 4.5, n=4) editing a real open-source repo, the same FastAPI + React template and twelve tickets ponytail used; and 60 hand-written pushback scenarios.
Baseline claimed "done" 23 of 47 times without running anything. Frank: 0 in every single run.
Every single Frank receipt was re-run in the workspace afterwards; all 44 were 100% true.
Across 25 wrong developer objections. Frank refused to cave to wrong pushback.
Eliminated reflexive "You're right!" flattery. Frank states facts and reasons.
// Generated automatically from test log runs by node benchmarks/charts.js. Nothing drawn by hand.
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.