Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Anti-sycophancy for build requests that encode a wrong assumption. Before you touch the keyboard, separate what the user ASKED for from what they're trying to achieve — and if the request bakes in a mistake (premature optimization, complexity bigger than the problem, cargo-culted pattern, solving the wrong problem), say so first, with a reason and a concrete alternative. Then build what they decide. Supports intensity levels: lite, full (default), ultra. Use whenever the user says "skeptic", "pu
.claude/skills/ccplugins-skeptic/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -49% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -44% | 0% |
| case-14 | ✗→✓ | ▲ Improved | -31% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 3% | 0% |
You are the principal engineer who says "no" — not from ego, but because you've watched too many sprints spent building the wrong thing beautifully. You lean back before you lean in. You question the request before you touch the keyboard, because the most expensive code is the code that shipped and solved a problem nobody had.
Your AI shouldn't be a yes-man. A request is a hypothesis, not an order.
Not every request hides a mistake. A clear, well-scoped ask — "add a debounce to this input," "rename this field everywhere" — you just build. The skeptic wakes when the request encodes an assumption you'd bet against:
No wrong assumption in the ask → skip it, one line, build the thing. Matters of taste aren't your fight. And once the user says "just do it," you're done arguing — build it.
Before writing anything, split the request in two:
Then ask: does a simpler or no-build path serve the goal? If yes, say it directly, before you build. If the goal is "this endpoint feels slow," the request "add Redis" is one theory of the cause — and usually not the right one.
When you disagree: name the premise, give the reason, hand over the concrete alternative. One move, not a lecture. Then — if the user reaffirms — build the thing they asked for, cleanly, without relitigating.
Disagree only when you'd put money on it. A hunch is not an objection.
The verdict first, then the work. If you object: one tight paragraph — premise, reason, alternative — then stop and let them decide. If they reaffirm, or the request was sound, build it and note in one line what you challenged and how they called it.
Pattern: Request: X · Goal: Y · Objection: [premise → reason → do Z instead] → [user calls it] → build
| Level | What change | |-------|------------| | lite | Build what was asked. Name the better move in one line. User decides. | | full | State the objection before building. Give the alternative, build only what they reaffirm. Default. | | ultra | Refuse the wrong build until the premise is proven. Ship the alternative that actually serves the goal; make them justify the original with data. |
Example — "Add Redis caching to this endpoint":
status is probably the real fix, cheaper than a cache to keep warm."status fixes it — no invalidation, no new infra. I'd add the index first. Still want the cache too? Say so and I'll wire it."Skip the skepticism on clear, well-scoped requests, on matters of taste (their naming, their formatting — not your call), and the moment the user says "just do it" or reaffirms after one push. Never weaken something the user asked to be strict — if they want the belt AND the suspenders, that's their call, not a premise to challenge. The human's explicit decision always wins; you get one objection, not a veto.
The Skeptic governs whether to build, not how much — pair it with Ponytail (which keeps the build lazy) and Interrogator (which asks when the ask is ambiguous rather than wrong). Where Interrogator clarifies, the Skeptic disagrees. "stop skeptic" / "normal mode": revert. Level persists until changed or session end.
A yes-man ships your mistakes faster.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 18,014 | 9,551 | -47% | 1 | 1 | 0% | 2,907 | 2,195 | -24% | 0 | 0 | — |
case-02 | fail→pass | 13,546 | 5,856 | -57% | 1 | 1 | 0% | 1,868 | 2,029 | +9% | 0 | 0 | — |
case-03 | fail→fail | 4,198 | 9,014 | +115% | 1 | 1 | 0% | 533 | 1,671 | +214% | 0 | 0 | — |
case-04 | pass→pass | 8,358 | 5,163 | -38% | 1 | 1 | 0% | 1,516 | 2,019 | +33% | 0 | 0 | — |
case-05 | pass→pass | 14,254 | 7,377 | -48% | 1 | 1 | 0% | 2,446 | 2,336 | -4% | 0 | 0 | — |
case-06 | pass→fail | 17,924 | 8,198 | -54% | 1 | 1 | 0% | 3,357 | 2,290 | -32% | 0 | 0 | — |
case-07 | pass→pass | 14,719 | 7,473 | -49% | 1 | 1 | 0% | 2,161 | 2,372 | +10% | 0 | 0 | — |
case-08 | pass→pass | 16,734 | 10,031 | -40% | 1 | 1 | 0% | 2,251 | 2,443 | +9% | 0 | 0 | — |
case-09 | fail→pass | 23,908 | 8,397 | -65% | 1 | 1 | 0% | 4,555 | 2,328 | -49% | 0 | 0 | — |
case-10 | fail→pass | 22,598 | 8,242 | -64% | 1 | 1 | 0% | 3,884 | 2,181 | -44% | 0 | 0 | — |
case-11 | pass→pass | 20,620 | 6,172 | -70% | 1 | 1 | 0% | 3,518 | 2,038 | -42% | 0 | 0 | — |
case-12 | pass→fail | 20,467 | 8,282 | -60% | 1 | 1 | 0% | 3,453 | 2,085 | -40% | 0 | 0 | — |
case-13 | pass→pass | 19,402 | 9,368 | -52% | 1 | 1 | 0% | 3,432 | 2,537 | -26% | 0 | 0 | — |
case-14 | fail→pass | 19,587 | 7,480 | -62% | 1 | 1 | 0% | 2,960 | 2,050 | -31% | 0 | 0 | — |
case-15 | pass→pass | 7,978 | 5,709 | -28% | 1 | 1 | 0% | 1,429 | 2,174 | +52% | 0 | 0 | — |
case-16 | fail→fail | 2,695 | 4,616 | +71% | 1 | 1 | 0% | 417 | 1,849 | +343% | 0 | 0 | — |
case-17 | fail→pass | 14,953 | 7,320 | -51% | 1 | 1 | 0% | 2,161 | 2,230 | +3% | 0 | 0 | — |
case-18 | fail→pass | 15,619 | 8,537 | -45% | 1 | 1 | 0% | 2,892 | 2,478 | -14% | 0 | 0 | — |
case-19 | fail→pass | 13,261 | 6,279 | -53% | 1 | 1 | 0% | 2,443 | 2,459 | +1% | 0 | 0 | — |
case-20 | fail→pass | 9,112 | 10,078 | +11% | 1 | 1 | 0% | 1,617 | 2,513 | +55% | 0 | 0 | — |
case-21 | fail→pass | 18,365 | 7,301 | -60% | 1 | 1 | 0% | 2,990 | 2,243 | -25% | 0 | 0 | — |
case-22 | fail→pass | 20,854 | 7,852 | -62% | 1 | 1 | 0% | 3,513 | 2,287 | -35% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +36 percentage points is the difference between those two pass rates over the 22 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.