Before generating any project artifact a repo has a generator for (changelog, formatted source, build/lock files, license lists), create it with the repo's OWN documented tooling — never hand-craft a file a task owns. A maintainer detects careless or AI-assisted work by tool BYPASS, not by code style: a hand-made file doesn't match the pattern the generator produces. Use before writing any file the project ships a task/command for, and before saying "done". Trigger terms: changelog, AGENTS.md, gradle task, tidy, formatter, generated file, lock file, "it compiles and tests pass".
Every mature repo owns some of its files through generators: a changelog task, a
code formatter, a dependency-lock command, a license-list generator. When you
hand-write one of those files instead of running the tool, the output almost
never matches — spacing, ordering, category names, section shape all drift. To a
maintainer that mismatch is a loud signal, and the most defensible AI-detection
vector they have: it isn't about how the code reads, it's that you bypassed the
house's own machinery. Compliance with the repo's tooling is what makes
agent-assisted work acceptable in a strict house.
The same root produces a second rule: "it compiles and my tests pass" is a
checkpoint, not "done". The project defines "done" — encoded in its gate task
(check, verify, lint, license/lock validation). Skipping it ships the miss to CI.
When to use
You are about to produce a file the repo has a task for: changelog entry,
formatted source, build config, dependency lock, license/NOTICE list.
You are about to say a change is "done" or "validated".
You matched a changelog/doc category or a title by hand instead of by convention.
When NOT to use
The file has no generator or the repo ships no gate task — then there's no house pattern to match, and hand-authoring is simply how that file is made.
The practice (checklist)
Read AGENTS.md first (then CONTRIBUTING / dev-docs). It lists the exact
commands — don't stop at CONTRIBUTING/README/CLAUDE.md; strict houses put the
generator commands in AGENTS.md. Done when you can name the house's gate
command and every generator it documents, quoted from the file.
Never hand-craft a generated file. If a task owns it (writeChangelog,
the formatter, the lock command), run the task. If you already hand-made one,
regenerate it with the task so it matches the pattern.
Match the house's conventions exactly for anything you do write by hand:
correct changelog type category, link the issue tracker (JIRA) not the PR
when the house prefers it, write an informative summary not a terse title.
Run the repo's own gate before "done" — the project's check / verify
task plus formatter (tidy) plus the full dependency-lock command (run the
documented commands together, not a convenient subset), not just compile + a
few targeted tests. "Compiles + my tests pass" is a checkpoint, not the finish.
Rationalizations
Shortcut
Why it fails
"It compiles and my tests pass — it's done."
The house gate (tidy / license / lock validation) defines done; skipping it just ships the miss to the reviewer's CI.
"I'll just hand-make this one file."
A hand-made file won't match the generator's spacing/ordering/categories — the most defensible AI-detection vector a maintainer has.
"Running the full lock/license regen is overkill for a small change."
The gate is the documented command set, not a convenient subset; a partial run leaves exactly the mismatch the tool exists to prevent.
RECEIPT
A Solr committer, apache/solr PR #4612 (corpus-solr-prs/pr-solr-4612.json, review
comment) — the AI-detection-by-tool-bypass moment, verbatim:
"I suspect you are using AI to create these files, and that AI is not using the
Gradle tasks we've built & documented (including AGENTS.md) to create them. I can
tell because the file doesn't match the pattern that tool creates. Same with your
GJF upgrade."
Recovery (same PR, Serhiy): acknowledged the hand-creation and regenerated the
files with writeChangelog so they matched.
The positive twin — the same Solr committer, apache/solr PR #4632 (pr-solr-4632.json), on a
changelog entry that did follow the house convention:
"That's the best changelog entry I've seen in a long time; thank you!"
And on category/link conventions (pr-solr-4612.json):
"this is undoubtedly a 'other' category change and not 'changed'";
"When we have JIRA issues, we favor the JIRA issue instead of PR."
The "done"-gate half (journal, Solr→Lucene-11 port): a change reported "done +
validated" while the project's own gate then caught three mandatory steps compile
unit tests never surface — tidy (5 files not format-clean),
validateConfigFileSanity + validateJarLicenses failures, and the full
updateLicenses resolveAndLockAll collectJarInfos --write-locks regen of 74 files.
Lifecycle
Signals it worked: generated files match on first push; a maintainer stops
flagging "this doesn't match our tool"; the house gate is green before review;
positive convention feedback (the "best changelog" reaction).
What to log on a misfire: which file you hand-made, which task owned it, and
the exact mismatch the maintainer named — so the next run knows that generator
exists. Record it in LEDGER.md (the #4612 row is the first).
Death criterion: retire for a given repo only if it stops shipping
generators/gate tasks (rare) — then the file just isn't tool-owned and this
doesn't apply.
Relates to: using the repo's own build system, reading AGENTS.md, and the
AI-detection-by-tool-bypass insight. Absorbs the "run the repo's own done-gate"
and "match the changelog/doc standard" lessons.
1---2name: obey-the-houses-own-tooling3description: Before generating any project artifact a repo has a generator for (changelog, formatted source, build/lock files, license lists), create it with the repo's OWN documented tooling — never hand-craft a file a task owns. A maintainer detects careless or AI-assisted work by tool BYPASS, not by code style: a hand-made file doesn't match the pattern the generator produces. Use before writing any file the project ships a task/command for, and before saying "done". Trigger terms: changelog, AGENTS.md, gradle task, tidy, formatter, generated file, lock file, "it compiles and tests pass".4---56# Obey the house's own tooling78## Purpose910Every mature repo owns some of its files through generators: a changelog task, a11code formatter, a dependency-lock command, a license-list generator. When you12hand-write one of those files instead of running the tool, the output almost13never matches — spacing, ordering, category names, section shape all drift. To a14maintainer that mismatch is a loud signal, and the most defensible AI-detection15vector they have: it isn't about how the *code* reads, it's that you bypassed the16house's own machinery. Compliance with the repo's tooling is what makes17agent-assisted work acceptable in a strict house.1819The same root produces a second rule: "it compiles and my tests pass" is a20checkpoint, not "done". The project defines "done" — encoded in its gate task21(`check`, `verify`, lint, license/lock validation). Skipping it ships the miss to CI.2223## When to use2425- You are about to produce a file the repo has a task for: changelog entry,26 formatted source, build config, dependency lock, license/NOTICE list.27- You are about to say a change is "done" or "validated".28- You matched a changelog/doc category or a title by hand instead of by convention.2930## When NOT to use3132The file has no generator or the repo ships no gate task — then there's no house pattern to match, and hand-authoring is simply how that file is made.3334## The practice (checklist)3536- [ ] **Read AGENTS.md first** (then CONTRIBUTING / dev-docs). It lists the exact37 commands — don't stop at CONTRIBUTING/README/CLAUDE.md; strict houses put the38 generator commands in AGENTS.md. *Done when* you can name the house's gate39 command and every generator it documents, quoted from the file.40- [ ] **Never hand-craft a generated file.** If a task owns it (`writeChangelog`,41 the formatter, the lock command), run the task. If you already hand-made one,42 regenerate it with the task so it matches the pattern.43- [ ] **Match the house's conventions exactly** for anything you do write by hand:44 correct changelog `type` category, link the issue tracker (JIRA) not the PR45 when the house prefers it, write an informative summary not a terse title.46- [ ] **Run the repo's own gate before "done"** — the project's `check` / `verify`47 task plus formatter (`tidy`) plus the *full* dependency-lock command (run the48 documented commands together, not a convenient subset), not just compile + a49 few targeted tests. "Compiles + my tests pass" is a checkpoint, not the finish.5051## Rationalizations5253| Shortcut | Why it fails |54|---|---|55| "It compiles and my tests pass — it's done." | The *house* gate (tidy / license / lock validation) defines done; skipping it just ships the miss to the reviewer's CI. |56| "I'll just hand-make this one file." | A hand-made file won't match the generator's spacing/ordering/categories — the most defensible AI-detection vector a maintainer has. |57| "Running the full lock/license regen is overkill for a small change." | The gate is the documented command *set*, not a convenient subset; a partial run leaves exactly the mismatch the tool exists to prevent. |5859## RECEIPT6061**A Solr committer, apache/solr PR #4612** (`corpus-solr-prs/pr-solr-4612.json`, review62comment) — the AI-detection-by-tool-bypass moment, verbatim:6364> "I suspect you are using AI to create these files, and that AI is not using the65> Gradle tasks we've built & documented (including AGENTS.md) to create them. I can66> tell because the file doesn't match the pattern that tool creates. Same with your67> GJF upgrade."6869Recovery (same PR, Serhiy): acknowledged the hand-creation and regenerated the70files with `writeChangelog` so they matched.7172**The positive twin — the same Solr committer, apache/solr PR #4632** (`pr-solr-4632.json`), on a73changelog entry that *did* follow the house convention:7475> "That's the best changelog entry I've seen in a long time; thank you!"7677And on category/link conventions (`pr-solr-4612.json`):7879> "this is undoubtedly a 'other' category change and not 'changed'";80> "When we have JIRA issues, we favor the JIRA issue instead of PR."8182**The "done"-gate half (journal, Solr→Lucene-11 port):** a change reported "done +83validated" while the project's own gate then caught three mandatory steps compile84+ unit tests never surface — `tidy` (5 files not format-clean),85`validateConfigFileSanity` + `validateJarLicenses` failures, and the full86`updateLicenses resolveAndLockAll collectJarInfos --write-locks` regen of 74 files.8788## Lifecycle8990- **Signals it worked:** generated files match on first push; a maintainer stops91 flagging "this doesn't match our tool"; the house gate is green before review;92 positive convention feedback (the "best changelog" reaction).93- **What to log on a misfire:** which file you hand-made, which task owned it, and94 the exact mismatch the maintainer named — so the next run knows that generator95 exists. Record it in [`LEDGER.md`](../../LEDGER.md) (the #4612 row is the first).96- **Death criterion:** retire for a given repo only if it stops shipping97 generators/gate tasks (rare) — then the file just isn't tool-owned and this98 doesn't apply.99- **Relates to:** using the repo's own build system, reading AGENTS.md, and the100 AI-detection-by-tool-bypass insight. Absorbs the "run the repo's own done-gate"101 and "match the changelog/doc standard" lessons.
Run npx skillmds@latest add serhiy-bzhezytskyy/obey-the-houses-own-tooling in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Before generating any project artifact a repo has a generator for (changelog, formatted source, build/lock files, license lists), create it with the repo's OWN documented tooling — never hand-craft a file a task owns. A maintainer detects careless or AI-assisted work by tool BYPASS, not by code style: a hand-made file doesn't match the pattern the generator produces. Use before writing any file the project ships a task/command for, and before saying "done". Trigger terms: changelog, AGENTS.md, gradle task, tidy, formatter, generated file, lock file, "it compiles and tests pass". It is listed under Productivity on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
serhiy-bzhezytskyy (@serhiy-bzhezytskyy) published this skill. Their other Agent Skills are listed on their SkillMD profile.