Build1 distinct publisher3 min readPublished
A commit-crafter tutorial splits judgment from enforcement the right way, but only message formatting makes it inside the deterministic check. The approval gate stays a sentence the model can reinterpret.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Step 4 of the commit-crafter workflow is the only instruction in SKILL.md with a machine on the other end of it. The agent shells out to `python scripts/check_message.py --file message.txt`, and step 5 tells it to fix violations and run the validator again [3]. That loop terminates on a process exit status and nothing else. The tutorial's guidance is to keep the script deterministic and return meaningful exit codes [2], which is correct, and it is also where the design work is handed to you: no mapping from failure class to code is given. The visible snippet returns a list of Violation records, and both examples carry the severity "error" [8]. Add a warning severity and you decide whether warnings exit nonzero, and the retry loop will be exactly as reliable as that decision.
Then count what the check encloses. The validator rules on subject format, maximum length, the blank-line separator and the breaking-change footer [6]. The Rules section lists four prohibitions: never stage files yourself, never commit without explicit approval, never add an AI attribution footer unless asked, and read the reference files when the type or format is unclear [5]. Score those against a function whose only input is the message string, and one of the four is checkable, the footer [17]. The other three describe actions and reading habits. They stay prose, as does the separation the tutorial itself calls out between drafting a message and running git commit [10], and the approval gate at step 6 [4].
That is the shape of the problem rather than a flaw in the write-up. A function that receives a string can only rule on the string. For "never commit without approval" to be enforced rather than requested, the return value has to sit where the commit happens: a script that owns the git invocation and hands back a code, or a hook that refuses. Judgment is what belongs in prose because it genuinely varies, and the source leaves the feature-or-fix call to the model, which is the correct half of the split [9].
Cost to adopt the validation path is close to nothing. Standard library only, no package install step [7]. The stated Python 3.12 floor is attached to the repository's CI example rather than to the validator itself [13], so an older interpreter is plausible, though that is my reading of the scope and not something the tutorial promises. The bill arrives upstream: there is no stable release tag and the examples are checked against current main [14], so copying the structure is cheap and tracking it is a maintenance commitment you own.
Read the frontmatter rules before you write any of it. The name must match the directory, and the description has to carry the vocabulary a user would actually type, because that is the discovery contract [12]. A skill with airtight enforcement and a vague description never runs.
Ranked by verification strength, evidence, and original report placement.
A dev.to tutorial titled "Build a Tested Agent Skill with SKILL.md and Python Scripts", by paladini, builds a commit-crafter skill consisting of a SKILL.md file, a Python validator and tests that run with the Python standard library.
An Agent Skill is a directory containing at least SKILL.md; only SKILL.md is required, while scripts/, references/ and assets/ are conventions for executable code, on-demand documentation and reusable resources.
The documented example layout is commit-crafter/ containing SKILL.md, scripts/check_message.py, references/conventional-commits.md and references/examples.md.
The tutorial's guidance is to put the workflow and safety boundaries in SKILL.md, put exact validation in a script, keep the script deterministic, return meaningful exit codes, and run it before presenting the result to a user.
Workflow steps 4 and 5 of the example SKILL.md are: run `python scripts/check_message.py --file message.txt`, then fix violations and run the validator again.
Workflow step 6 of the example SKILL.md is to show the message and commit only after explicit approval.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 30, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
The release-notes bot that treats its own rate limit as a spec, not an outage1 distinct publisher
build
Golden files replace reviewer judgment with a byte-exact comparison1 distinct publisher
build
Force the tool call, then hand Lightsail a long-lived key1 distinct publisher
build
A cache hit is a quota refund: semantic caching with trigrams and no vector database1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
One author, showing his work
Everything checkable in this story — the directory contract, the violation records, the exit codes, the sixteen passing tests — comes from a single dev.to post written by the person who owns the repository. It is specific enough that a reader could clone the project and confirm it in ten minutes, which is more than most tutorials offer, but nobody has. The validator itself is printed in abbreviated form, with the post telling you to consult the repository file for the complete behaviour, so even the code in front of us is a summary of the code that matters.
No usage signal to score
We have a passing test suite and an untagged main branch. That is not adoption: no installs, no team running the skill, no second agent client confirmed against the directory convention, not even a claim of users. Scoring this would mean inventing a denominator, so we leave it blank and note the absence.
The tested part isn't the risky part
"Tested agent skill" is accurate about commit message shape — subject format, 72-character limit, blank-line separator, breaking-change footer — and silent about everything a reviewer would lose sleep over. The post opens by insisting an agent can misread "never commit without approval," then leaves that instruction, and the no-staging rule, in exactly the prose it just called weak. The gap is modest rather than large because the piece undersells itself elsewhere: it volunteers the missing release tag and admits its own code listing is trimmed.
Author documenting his own repository
paladini is writing up a tutorial project he maintains, on a platform where the payoff is developer reputation rather than revenue. There is no vendor money, no product to buy, no pricing — which caps the distortion. What it does not cap is the framing: the choice of which rules to demonstrate mechanically, and the confidence that the pattern generalises to release notes and config generation, both come from the person who designed the pattern.
Sure of the shape, blind to the reception
We can describe what this skill contains and where its enforcement stops with real assurance, because the SKILL.md and the validator are on the page. What one publisher and one author cannot tell us is whether the pattern holds up in another agent client, in a shared repository, or under an agent that decides step 4 is optional.