Canny — AI skill for Claude Code
Stops AI coding agents from claiming work is done without evidence.
How to install Canny
This entry records only its repository, not the path inside it, so there is no
exact command to give. Open qkal/Canny and copy the folder into
~/.claude/skills/, or the file into ~/.claude/agents/.
What Canny does
Stops AI coding agents from claiming work is done without evidence. Deterministic hooks decide, TypeSafe's Jev advises. Append-only ledger, zero runtime dependencies.
Alternatives in AI
- Open Multi Agent — TypeScript multi-agent orchestration engine — one runTeam() call from goal to result 5.8k ★
- Surface — Show ranked attack surface for a target from its recon manifest + hunt memory 3.8k ★
- Typesafe MCP — An mcp connector to evaluate anything fast and cheap 258 ★
README
Canny
A warden for AI coding agents. It hooks into Claude Code and Codex CLI, keeps a ledger of what the agent actually did, and will not let it finish on a claim.
[](https://github.com/qkal/canny/actions/workflows/ci.yml) [](LICENSE) [](#install-by-pasting-a-prompt) [](#claude-code-and-codex-differ-in-four-places) [](package.json) [](https://typesafe.ai) [](https://github.com/qkal/canny/commits/main)
Done. Skipped tests — one-liner, no branch to break.
That is Claude Code, verbatim, during this project's first live run. It had been asked to add a function, it wrote the file with a shell heredoc, ran nothing, and finished. No error. No warning. Nothing in `CLAUDE.md` could have stopped it, because a rules file only asks the model to remember, and nothing checks that it did.
Canny is the hook that noticed. On the next run of the same prompt, the agent's "done" was refused with this message:
Canny: math.js changed, but no check has passed since the last edit. The last command was `cat > math.js <<'EOF' …` (exit 0). Run the project's checks and fix what fails before finishing. A test, build, lint, or type-check command counts. If no check applies to this change, say so explicitly and stop again.
Claude ran `npm test`. It passed. The next "done" went through. The whole exchange is in the [session ledger](#what-a-guarded-session-looks-like) below.
The one rule
**Facts go to code. Judgments go to Jev. Only
Related Skills
AI Workflow OS
Append-only ledger + 5-state machine that keeps 6 divisions honest across 5 AI platforms (Claude, ChatGPT, Gem
Before AI
Before you reach for AI — interrogate one real workflow from first principles, delete the dead weight, then de
Self Growth Loop
Self-governed skill-growth loop for AI agents: propose -> owner-approve -> trial -> council-review -> adopt, w
Headsign
A tiny phase gate for coding agents: your shell checks decide pass/fail (never the LLM), your workflow routes
AI Handoff
Hand a job to someone else's machine, and let a command decide whether it came back done. Coding agents on sev
Nissth
Deterministic execution framework for LLM coding agents. Pre-structured context, append-only state, no explora
Related Agents
Typesafe Architect
Finds the shape of a TypeSafe solution: decides whether Jev fits at all, what stays in deterministic code, wha
Jev Judge
Reusable Judge/Verifier question-drafter for text-shaped deliverables — pass/fail, meets-bar yes/no, or rubric
Band Reader
Reads the rows jev could not decide (the uncertain band) and labels each one yes or no against a stated questi