cd /news/artificial-intelligence/show-hn-i-made-claude-quiz-me-on-my-… Β· home β€Ί topics β€Ί artificial-intelligence β€Ί article
[ARTICLE Β· art-74502] src=github.com β†— pub= topic=artificial-intelligence verified=true sentiment=Β· neutral

Show HN: I made Claude quiz me on my own code before showing it

A developer created a Claude skill that quizzes users on their own code before revealing AI-generated solutions, aiming to prevent 'comprehension debt' where developers stop understanding their code. The skill uses prediction moments, fatigue detection, and tradeoff discussions to keep users engaged, with real sessions showing it caught a silent test failure the developer would have merged.

read4 min views1 publishedJul 26, 2026
Show HN: I made Claude quiz me on my own code before showing it
Image: source

Copilot, not autopilot. A Claude skill that keeps you thinking while AI writes your code.

When AI generates working code, it's easy to stop reviewing for "do I understand every choice in this?" and start reviewing for "does it look plausible?". That gap is comprehension debt β€” invisible today, brutal the day something breaks and you don't know why, or the day you can't defend a design decision in code review.

This is not "Claude explains more." Reading a good explanation is still passive. This skill is built on two ideas:

Understanding comes from producing, not reading. At key moments, Claude reverses direction:youpredict the behavior or failure mode before seeing the solution. A failed prediction is the highest-value learning moment there is.Autopilot is gradual. Nobody disengages at step 1 β€” they disengage at step 6, tired, typing "ok" faster and faster. The skilldetectsfading engagement and adapts instead of firing checkpoints mechanically.

Numbered plan firstβ€” every later interaction anchors to it** Tradeoffs before code, not after**β€” why this approach, what was viable instead, what's being given up** Anchored checkpoints**β€” "any doubts on point 2 specifically?", never a generic "look good?"** Prediction moments**β€” every 2–3 steps, you guess the behavior before Claude shows it** Fatigue detection**β€” three bare "ok"s in a row and Claude names it, offering an honest downshift instead of ritual compliance** Closing recap by you**β€” at the end,yousummarize the key decisions; Claude fills the gaps

Without the skill:

You:add rate limiting to /loginClaude:(wall of code)Done! Let me know if you need anything else.You:(skims, merges, forgets)

With the skill:

Claude:Plan: 1) limiting strategy & where state lives, 2) middleware, 3) wire to /login, 4) rejected-request response, 5) boundary tests. On point 1, the real decision: sliding-window in Redis vs in-process token bucket. Redis adds a network hop β€” but an in-process limiter silently breaks with two instances behind a load balancer, and login abuse is exactly where that matters. Single-instance forever? I'd flip the choice. Which holds for you? …Claude:Before step 4, quick prediction: with the window as implemented, what does a client get on their 6th attempt β€” and does the counter reset all at once or gradually?

Two exchanges from real sessions on a private project. Domain names are changed and my replies are translated from Italian β€” the exchanges themselves are otherwise unedited, including the part where I get it wrong.

Claude was moving a set of module-level functions into a class. A test monkeypatches a module-level name to capture which branch gets taken.

Claude:When I movemake_chart

into the class, the instinct is to callself._renderer.render(data)

β€” I already have the renderer as an object, so why go through the module-level function? Before I write it: does the test blow up, pass but lie to you, or change nothing?

Me:nothing changes. Before we were handingdata

to a module, now we hand it to an object, soself.render

is enough.

Claude:Wrong β€” and it's the nastiest of the three: it passes but lies to you.patch.object(mod, "render_chart", cap)

doesn't replace the function. It replaces the attribute namedrender_chart

in the module's namespace. That works today only becausemake_chart

resolves that global at call time. Going throughself._renderer.render(...)

never performs that lookup β€” the patch is sitting on a name nobody reads anymore.

Then a ten-line repro:

via module   -> result='PNG(pie)'  captured={'chart_type': 'pie'}
via object   -> result='PNG(pie)'  captured=NOTHING

Same output either way. On the real test that means every case reports PASS with the captured type set to None

β€” the one thing the test exists to verify, gone, silently.

I would have merged that.

Deciding whether to keep a script that re-scores saved results without re-running the expensive part.

Claude:Option A β€” delete it β€” means every future correction costs you a full live re-run.

Me:but you say option A costs a full re-run, and I already added a flag that skips unchanged cases.

Claude:True, and you're right to correct me β€” "full re-run" was an overstatement. But look at what the cache signature actually covers: it's computed over the case content only. Change a case, and the signature changes: only that case re-runs. Your skip works exactly as you say. Change thescoring code, and the signature doesn't move a millimetre. Every case is skipped, and the old scores β€” computed with the broken scorer β€” stay in the file as if nothing had happened.

Me:no, let's delete it.

Claude's recommendation was to keep it. I deleted it anyway, knowing precisely what I was trading away. That is the difference between making a decision and accepting one.

/plugin marketplace add De-Cri/dont-kick-me-out
/plugin install dont-kick-me-out@dont-kick-me-out

Later fixes reach you with /plugin marketplace update

β€” no reinstall.

Manual install, without the plugin system #

mkdir -p ~/.claude/skills/dont-kick-me-out
curl -sL https://raw.githubusercontent.com/De-Cri/dont-kick-me-out/main/skills/dont-kick-me-out/SKILL.md \
  -o ~/.claude/skills/dont-kick-me-out/SKILL.md
  • Download dont-kick-me-out.zip

fromReleases - Settings β†’ Capabilities β†’ Skills β†’ Upload skill

  • Start any coding conversation β€” it triggers automatically on non-trivial tasks

Renames, typo fixes, formatting, mechanical migrations β€” no checkpoints, no essays. The loop applies only when there's at least one choice a reviewer could contest in a PR. Intensity tracks the stakes of the decision, not the length of the code.

MIT

── more in #artificial-intelligence 4 stories Β· sorted by recency
── more on @claude 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/show-hn-i-made-claud…] indexed:0 read:4min 2026-07-26 Β· β€”