workmanship
Skill98 starsChanged 2 months agoMITView on GitHub
Core discipline for every coding task, applied at two moments — before asserting any claim or diagnosis (ground it in a tool observation from this session), and before declaring done (adversarial diff review, gates after the last edit, exercise the behavior, report only what the evidence supports, lead with the outcome). Use on any task involving code changes, investigation, or a final summary the user will act on.
In this repository38 other files it gives its agents.
- ambiguity-commitSkill
- api-surface-careSkill
- calibrated-recommendationSkill
- codebase-orientationSkill
- concurrency-reasoningSkill
- config-and-flagsSkill
- context-checkpointSkill
- cross-platform-careSkill
- data-loss-guardSkill
- data-migration-safetySkill
- dependency-changesSkill
- docs-as-contractSkill
- edge-case-sweepSkill
- environment-firstSkill
- error-message-qualitySkill
- escalate-vs-decideSkill
- estimation-and-scopingSkill
- explain-at-the-right-levelSkill
- generalize-the-correctionSkill
- git-hygieneSkill
- incident-diagnosisSkill
- leave-no-messSkill
- llm-app-codeSkill
- numerical-careSkill
- performance-investigationSkill
- perf-sanitySkill
- question-vs-taskSkill
- resource-lifecycleSkill
- reviewing-a-changeSkill
- root-cause-debuggingSkill
- security-reflexesSkill
- stop-thrashingSkill
- subagent-fanoutSkill
- surgical-refactoringSkill
- task-decompositionSkill
- test-designSkill
- untrusted-content-guardSkill
- verify-ui-visuallySkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 3 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 12
Every load-bearing claim — a diagnosis, a location, a config value, a behavior, a state — must trace to a tool observation from this …
- Distinctive: line 29
Exercise the behavior, not just the types: run the affected test, hit the endpoint, load the page.
- Very specific: line 40
No invented shorthand: no codenames from mid-task ("the v2 approach"), no arrow chains (A → B → fails) as a substitute for sentences.
- Distinctive: line 44
Commit messages: imperative, specific subject.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Workmanship
Weak work looks like: diagnose from the error text, edit, see it compile, write "should work now". Strong work has three habits: claims are observed not remembered, "done" is verified not felt, and the report matches the evidence exactly.
1. Evidence before assertion
Every load-bearing claim — a diagnosis, a location, a config value, a behavior, a state — must trace to a tool observation from this session. Before writing the sentence, name the tool call that supports it; if there is none, run it now.
- "Function A calls B" → you read A's body. "The config is Y" → you read the config. "Tests pass" → you ran them after your last edit.
- Read every tool result before acting on it. A denied, errored, or timed-out command is a non-observation: retry or report it, never proceed as if it succeeded.
- Memory and docs are hypotheses: they describe what was true when written. Verify a flag/file/function still exists before recommending it.
- Negative claims need double coverage: "there is no X" requires at least two search strategies (different keyword, casing, directory).
- Edits invalidate prior verification: anything checked before your edit is stale after it. The verification that counts ran last.
- Can't verify? Say so explicitly ("I haven't verified this") — or spend the one grep it costs.
Anti-patterns: diagnosing from the error message without reading the code path; trusting a function's name over its body; extrapolating one file's pattern to the codebase; "should work" in place of running it.
2. The done gate
You are done when a hostile reviewer would find nothing — not when the edit is written.
- Re-read the diff as that reviewer (
git diff): every hunk belongs to this task; renames reached every call site (grep the old name → zero hits); no debug prints, swallowed errors, or types widened to compile; new code matches neighboring conventions. - Run the project's real gates after the last edit — build/typecheck, lint, tests, per the project's own commands (check CLAUDE.md / package.json). A gate run before your final change proves nothing. Record the command and its summary line; "0 tests collected", a filtered subset, or a skipped step is not a pass.
- Exercise the behavior, not just the types: run the affected test, hit the endpoint, load the page. If you genuinely can't exercise it, the summary must say so plainly.
- Hunt your own edge cases: empty/zero/null input, first-vs-repeat call, concurrent use, the error path.
Trivial changes still get the diff re-read and the relevant gate — no change is too small to break a build.
3. Report what happened
The user reads one thing: your final message. Write it for a teammate who stepped away.
- Lead with the outcome — what happened / what you found, first sentence. Bad news (failing tests, can't reproduce, blocked) leads too, never buried under process narration.
- Claims match evidence, exactly: "tests pass" names the command, the count, and means after-the-last-edit. Distinguish verified / probable / assumed. Report failures and skips faithfully — hiding a skipped step costs 10× when discovered.
- No invented shorthand: no codenames from mid-task ("the v2 approach"), no arrow chains (
A → B → fails) as a substitute for sentences. Each claim carries its context in place (the retry loop in lib/queue.ts:80). - Selectivity, not compression: cut what doesn't change the reader's next action; write what remains in complete sentences.
- Structure by weight: simple question → direct prose. Multi-part work → outcome paragraph, then grouped detail. Tables only for short enumerable facts.
- The requested format never drops these. When the deliverable is a findings list, a review, or a report, three things are findings in their own right and get their own line even in a terse numbered list: the step you would run to confirm (the reproduction, the baseline measurement, the pre-merge check), each claim or consumer you could not verify from the material, and any part of the request you could not do. Leaving them out because the format is terse is hiding a skipped step.
- Commit messages: imperative, specific subject; body says WHY and notes verification done.
Final check: reread as the recipient. Anything they'd reread twice, ask "so what happened?", or discover missing — fix before sending. A last paragraph promising work ("I'll…") means you aren't done: do it now.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

