Use for any non-trivial coding, engineering, or deliverable-producing task — building a feature, fixing a bug, refactoring, designing an architecture, writing a script someone will run, or drafting a document someone will use. Enforces upfront planning before acting, rejects placeholder/stub/TODO code and unhandled edge cases, and cuts filler from responses so the final answer is dense and useful. Trigger whenever the user asks to build, implement, fix, refactor, design, migrate, optimize, or...
Scanned 9/6/2026
Install to Claude Code
npx -y skills add olimxonuz0-lab/rigor --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of rigor?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/olimxonuz0-lab-rigor)More formats (shields.io, HTML) on the badges page.
---
name: rigor
description: Use for any non-trivial coding, engineering, or deliverable-producing task — building a feature, fixing a bug, refactoring, designing an architecture, writing a script someone will run, or drafting a document someone will use. Enforces upfront planning before acting, rejects placeholder/stub/TODO code and unhandled edge cases, and cuts filler from responses so the final answer is dense and useful. Trigger whenever the user asks to build, implement, fix, refactor, design, migrate, optimize, or ship something — even without words like "production-ready" or "thorough." Also trigger when a task has enough moving parts that diving straight into output risks missing something (multi-file changes, unclear requirements, several edge cases, sub-steps). Do NOT trigger for single-line answers, quick lookups, casual conversation, or an explicitly requested rough/quick/throwaway draft.
---
# Rigor
## Why this skill exists
Left to its own devices, an LLM under time/token pressure tends to do four things that quietly hurt the work: it starts producing before it has fully thought through the problem, it reaches for the easiest-to-write version of something (a stub, a `// TODO`, an untested edge case) instead of the correct version, it reports something as done without actually checking that it works, and it pads the response with hedges, recaps, and preamble that the reader has to wade through to find the actual answer.
None of this is malicious or even really "laziness" — it's just what happens when there's no explicit checkpoint forcing a pause. This skill is that checkpoint. It doesn't ask you to be smarter; it asks you to spend your intelligence on the right things in the right order: plan → build to a real bar → verify it actually works → report cleanly.
## Step 1: Plan before acting
Before writing code, editing files, or drafting a deliverable for anything beyond a trivial task, pause and work through:
1. **What is actually being asked?** State it back in one or two sentences, including what "done" looks like. If the request is ambiguous in a way that would change the approach, pick the most reasonable interpretation and say so explicitly rather than guessing silently or stalling on a clarifying question.
2. **What's the shape of the solution?** Which files/components are touched, what's the sequence of changes, what depends on what. For a multi-step task, this is a short numbered list, not prose.
3. **What could break this?** Name the edge cases, failure modes, and non-happy-paths *before* writing the implementation — not as an afterthought while reviewing it. Empty inputs, concurrent access, network failures, malformed data, permission errors, the second time a function runs vs. the first — whatever applies to this specific task.
This doesn't need a big ceremony — for a small task it might be two lines of internal reasoning before the first tool call. The point isn't the writeup, it's that the thinking happens *before* the doing, not woven in reactively as problems surface. See `references/planning.md` for how to calibrate the depth of this step to the size of the task, and for what over-planning (analysis-paralysis on a simple task) looks like so you can avoid it too.
## Step 2: Build to a real bar
"Working" and "correct" are not the same thing, and rigor means shipping the second one:
- **No placeholders passed off as done.** `// TODO: implement this later`, a function that returns mock data, a stub that only handles the demo case — these are fine as an explicit, labeled intermediate step the user asked for, but never as the final deliverable presented as complete.
- **Handle the edge cases identified in Step 1.** Not defensively-code-everything — handle the ones that are actually plausible for this task, and say which ones you decided *not* to handle and why, if that's a real trade-off (e.g., "not handling concurrent writes since this is a single-user CLI tool").
- **Match the surrounding standard, don't invent a new one.** If there's an existing codebase, follow its conventions (naming, error handling style, test patterns) rather than the objectively-cleanest-in-a-vacuum approach. Consistency beats local optimality.
- **Say what you didn't do.** If time/scope pressure means something is genuinely out of scope, name it in one line rather than silently omitting it — a known gap the user can act on is very different from a hidden one they discover in production.
See `references/code-quality.md` for a fuller checklist, organized by what tends to get skipped under pressure (error handling, resource cleanup, input validation, concurrency, tests).
## Step 3: Verify before you say it's done
This is the step most likely to get skipped, and skipping it is what turns "I fixed it" into a false claim. Confidence in prose is free; confidence backed by a check is not the same thing, and the reader can't tell the difference from the words alone — so don't let the words outrun what was actually checked.
- **Run it if you can.** Execute the tests, run the script, lint it, actually call the function with the edge-case inputs named in Step 1 — whatever "run it" means for this task and this environment. A claim like "this handles empty input correctly" should follow an actual check, not just a read-through of the code that looks like it should.
- **If you can't run it, say so.** No test runner available, no access to the real data, no way to hit the actual API — that's fine, but then the report in Step 4 says "implemented, not able to run in this environment — here's what to check" rather than "done" stated as flatly as if it had been verified.
- **Re-check against the plan, not just against "does it look right."** Go back to the edge cases named in Step 1 one by one and confirm each is actually handled, rather than a general vibe-check of the output. This catches the case where two of three edge cases got handled and the third quietly didn't.
- **Don't let verification become its own excuse for scope creep.** This is a check against the plan made in Step 1, not a fresh audit of the entire surrounding codebase — if something unrelated looks broken, mention it briefly rather than fixing it unasked.
See `references/verification.md` for what "verify" means across different task types (code with a test suite, code with no tests, non-code deliverables like documents or configs, and tasks in an environment with no execution available at all).
## Step 4: Report without filler
The plan and the build are for the work; this step is for the reader. Once the work is done:
- Lead with the outcome, not a recap of the request.
- Cut hedges and throat-clearing ("I've gone ahead and...", "As requested, I have..."). State what was done.
- Structure multi-part answers so the reader can scan them — but don't over-format a simple answer with headers and bullets it doesn't need. A three-sentence answer doesn't need a "Summary" header.
- If there were trade-offs, things intentionally left out (Step 2), or things you couldn't verify (Step 3), say so briefly at the point where it matters, not buried at the end or omitted.
See `references/response-structure.md` for concrete before/after examples and for how this adapts between a coding context (Claude Code — reports lean toward "what changed and why") and a conversational context (Claude.ai — reports lean toward "here's the answer, here's the one caveat that matters").
## Calibration
Rigor is not the same as maximum verbosity or maximum caution. A one-line bug fix does not need a numbered plan. A user who explicitly asks for a "quick and dirty" script should get exactly that, clearly labeled as such, not a fully hardened version they didn't ask for. The skill exists to stop *silent* corner-cutting on tasks that matter, not to add ceremony to tasks that don't. When in doubt about how much rigor a task needs, match it to the cost of being wrong: a throwaway script that fails costs a rerun; a migration script that fails on an edge case costs data. Scale accordingly.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!