Record A Decision
inkeep/open-knowledge
Records an architecture decision as a Nygard/MADR-shaped ADR under decisions/ — capturing the context that forced the choice, the options weighed, the decision itself, and its consequences in both…
Creates and updates coding standards, conventions, rules, and guidelines for the current project.
$ npx skills add testdouble/han --skill coding-standard -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install testdouble/han coding-standard --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .claude/skills && cp -r skills-src/han-coding/skills/coding-standard .claude/skills/coding-standard && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "coding-standard" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/coding-standard into .claude/skills/coding-standard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-standard", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/testdouble/han/tree/main/han-coding/skills/coding-standardType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add testdouble/han --skill coding-standard -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install testdouble/han coding-standard --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .agents/skills && cp -r skills-src/han-coding/skills/coding-standard .agents/skills/coding-standard && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "coding-standard" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/coding-standard into .agents/skills/coding-standard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-standard", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add testdouble/han --skill coding-standard -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install testdouble/han coding-standard --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/han-coding/skills/coding-standard .cursor/skills/coding-standard && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "coding-standard" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/coding-standard into .cursor/skills/coding-standard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-standard", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/testdouble/han.git --path han-coding/skills/coding-standard--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add testdouble/han --skill coding-standard -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install testdouble/han coding-standard --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/han-coding/skills/coding-standard .gemini/skills/coding-standard && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "coding-standard" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/coding-standard into .gemini/skills/coding-standard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-standard", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install testdouble/han coding-standardInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add testdouble/han --skill coding-standard -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .github/skills && cp -r skills-src/han-coding/skills/coding-standard .github/skills/coding-standard && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "coding-standard" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/coding-standard into .github/skills/coding-standard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-standard", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add testdouble/han --skill coding-standard -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install testdouble/han coding-standard --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/han-coding/skills/coding-standard .opencode/skills/coding-standard && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "coding-standard" agent skill from https://github.com/testdouble/han/tree/main/han-coding/skills/coding-standard into .opencode/skills/coding-standard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-standard", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
coding-standardCreates and updates coding standards, conventions, rules, and guidelines for the current project.
Coding Standard is an agent skill from testdouble/han. Creates and updates coding standards, conventions, rules, and guidelines for the current project. Use when creating new standards from scratch, converting existing documents into coding standards, or updating existing standards. Does not create architectural decision records — use architectural-decision-record for ADRs. Does not write feature or system documentation — use project-documentation for that. Does not research open-ended options — use research. Does not produce runbooks for operational scenarios — use…
Its SKILL.md is about 8.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/adr-conversion-mapping.md`, `references/durable-references.md` and `references/index-file-template.md`).
It sits in Development, covering Code quality, Runbooks and postmortems and Architecture decision records. The repository describes itself as: Han: AI skills and agents for "Solo" product engineers and small teams. The licence is MIT.
11 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit abba73a. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadWriteEditGlobGrepAgentBash(mkdir *)Bash(find *)Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh")From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
bashgoFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
code.claude.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Coding Standard loads about 8.6k tokens when it runs, and up to ~13k if it reads all its reference files. Until then it costs about 138 tokens; SKILL.md has 4,624 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from testdouble/han at commit abba73a, republished under its MIT licence (© testdouble). 4,624 words, ~8,649 tokens.
.claude/skills/coding-standard/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.find . -maxdepth 1 -name "CLAUDE.md" -type ffind . -maxdepth 1 -name "AGENTS.md" -type ffind . -maxdepth 3 -name "project-discovery.md" -type ffind . -maxdepth 4 -type d -path "*/.claude/rules/coding-standards"bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh" 2>/dev/null || echo "$HOME/.claude"cat .han/config.md 2>/dev/null || echo ""As your first action, use the Read tool on .han/config.md inside the personal config directory path above. A read
that returns no file is no personal configuration: continue silently. When that file or the project .han/config.md
probe supplies content, apply it per config-rule.md, which governs precedence
between the two files, relative-path resolution, and what to do with a file that reads but cannot be used.
Determine which mode to operate in based on the user's request:
| Mode | When | Initial Status | Then |
|---|---|---|---|
| Creating new | Building a coding standard from scratch | proposed | → Step 2 |
| Converting existing | User provides an existing document (ADR, etc.) to convert | accepted | → Step 2 |
| Updating existing | Modifying an existing coding standard | — | Read the existing coding standard, → Step 3 |
Coding standard documents are not a replacement for automated tooling. Before proceeding, evaluate whether the proposed coding standard falls into one of these categories:
If the proposed coding standard falls into one of these categories:
If the proposed coding standard does not fall into these categories, proceed to the YAGNI check below.
Apply the evidence-based YAGNI rule from ../../references/yagni-rule.md alongside the companion evidence rule in ../../references/evidence-rule.md. A coding standard is worth writing only when the project actually does the thing the standard governs today and the standard solves a real, concrete problem the team is currently hitting. Standards about patterns the project doesn't use yet, "for future flexibility", "best practice says we should…", or symmetry with other standards ("we have one for backend, so we should have one for frontend" when the frontend codebase is a single file) are YAGNI candidates. Acceptable evidence the standard is needed now:
If no accepted evidence applies, recommend deferring the standard with the trigger that would justify writing it (a third instance of the pattern lands, a real incident occurs, a recurring review finding accumulates). Surface the recommendation to the user with the override option.
Retrieve project config: Resolve project config: read CLAUDE.md's ## Project Discovery section for docs and
coding-standards directories; fall back to project-discovery.md; fall back to Glob defaults (docs/,
docs/coding-standards/). Continue without any keys that remain unfound.
Determine the coding standards directory:
{docs-dir}/coding-standards/docs/coding-standards/Enumerate existing coding standards: If a coding standards directory was found, use Glob to enumerate existing
.md files in that directory.
Check existing coding standard format: If existing coding standards were found via Glob, read one to understand the project's existing format. If it uses a different format than the template at template.md, ask the user whether to match the existing format or use this skill's template.
Discover the filename hierarchy taxonomy: Coding standards are organized by a one- or two-level hierarchy encoded in the filename so related standards sort together in a directory listing. Discover the taxonomy that applies to this project — never hardcode it.
svelte-component-naming.md → top-level svelte;
svelte-stores-state-shape.md → top-level svelte, second-level stores). Build a list of top-level prefixes and
known second-level prefixes per top-level.svelte, rails, postgres, terraform, api, worker).Discover the project's primary file-type globs and group them into index-file buckets. The paths: frontmatter
in Step 6 needs file globs scoped to the languages and directories the new standard governs. The Step 7 integration
then routes the new standard into one or more per-file-type index files under .claude/rules/coding-standards/,
where each index file owns a single file-type bucket (for example, svelte.md owns **/*.svelte; typescript.md
owns **/*.ts and **/*.tsx; ruby.md owns **/*.rb and app/**/*.rb). Build the candidate glob set and its
bucket grouping now so Steps 6 and 7 have them on hand.
**/*.go, **/*.ts, **/*.tsx, **/*.py, **/*.rb, app/**/*.rb,
services/**/*.go).paths: frontmatter: if any existing standard already carries paths:, collect its
globs as candidate glob prefixes — they reflect the project's accepted scoping vocabulary..claude/rules/coding-standards/: if the rules directory was found in the
project context, enumerate the index files already present and read each one's paths: frontmatter. Each existing
file defines an established bucket; reuse it rather than introducing a parallel bucket for the same file type.**/*.{ext} for
each extension seen in more than a handful of files) and surface what you found.paths: covers the
new glob. Name new buckets after the language, framework, or subsystem they cover (e.g., svelte, typescript,
ruby, sql) — the bucket name becomes the index file's filename in Step 7.AskUserQuestion to clarify before writingSkip these agents when the user has already provided full Correct-usage examples and conflicting-pattern evidence. Otherwise, launch both in parallel — one finds what the codebase already does, the other checks what the project has already documented. Include the topic, scope, and docs/coding-standards directories from Step 3.
Launch han-core:codebase-explorer agent (implementation patterns) — prompt: "Explore the codebase for existing
implementations related to {topic} across {scope}. Return concrete places that illustrate the convention in practice
(Correct-usage candidates), places that violate or contradict the convention (What-to-avoid candidates), and any
places where the convention is applied inconsistently across the codebase. For each place, return a file path, a line
range, and one or more greppable durable anchors — read ${CLAUDE_SKILL_DIR}/references/durable-references.md and
follow its Rules 1 and 2 to derive them; where Rule 2 reaches escalation, return the place flagged for engineer
review instead of an anchor. Focus on real files; do not invent examples."
Launch han-core:codebase-explorer agent (standards and ADRs) — prompt: "Explore {docs-directory} and {coding-standards-directory} for existing coding standards, ADRs, or project docs that touch {topic} across {scope}. Return: any standards or ADRs that already cover this topic (in full or in part), cross-references that the new standard will need to link — each as a document path plus a stable section heading — and any contradictions between existing docs that the new standard will need to resolve or cite."
After both agents complete, merge their findings into a context block:
When converting an existing document into a coding standard:
CLAUDE.md, AGENTS.md, and
other markdown files)Before writing, invoke han-communication:readability-guidance to source the shared readability standard into your
context, then apply it as you write the standard's prose (Purpose, Rationale, when-to-apply, when-not-to-apply, and
example commentary), holding the named audience: the engineer who must follow the standard. The frame governs how a fact
is said, never whether a required fact appears — keep the exact rules, thresholds, and anchors the standard commits to.
Read the durable-reference rule in durable-references.md and apply it throughout this step — this is the rule's authoring mode — all rules apply. For any candidate Step 4 flagged for engineer review — or any example you cannot cleanly anchor yourself — surface it to the engineer with a recommended resolution rather than emitting a coarse or anchorless reference; do not silently resolve it.
{top-level}[-{second-level}]-{hyphenated-name}.md — a one- or two-level hierarchy prefix followed by
the standard's specific name. The hierarchy must come from the taxonomy discovered in Step 3.5, never invented or
hardcoded.svelte, rails, postgres,
api). Reuse an existing top-level prefix from Step 3.5 when one fits; only introduce a new top-level when no
existing prefix applies, and prefer one that matches a language, framework, or subsystem already named in CLAUDE.md
or project-discovery.md.svelte-stores-…, svelte-components-…). Reuse an existing second-level prefix
from Step 3.5 when one fits. Skip the second level when the standard is the only one (or one of a few) under its
top-level.proposed for new, accepted for converted)paths: glob list and get user approval. The paths: field in the YAML frontmatter is the canonical
declaration of which file globs the standard governs. Step 7 uses each glob to route the new standard into one or
more per-file-type index files under .claude/rules/coding-standards/ — the standard itself is never loaded
directly as a path-scoped rule. The index files are what Claude Code loads via
Claude Code path-scoped rules, and they then point Claude at this standard
on demand. Cross-cutting standards whose paths: span multiple file-type buckets get listed in each matching index.src/**/stores/**/*.ts over **/*.ts.AskUserQuestion (or as a recommendation when running unattended). Quote
the Applies To text or scope clause that justifies each glob; mark inferred globs as (inferred). Name the
index-file bucket(s) each glob will be routed into in Step 7 so the user can see the integration consequence. Do
not write the file until the user confirms or proposes a substitute.*, {, [ are YAML-significant and fail to
parse unquoted). Globs follow Claude Code's standard glob syntax (**, *, ?, {a,b}).--- block before the # {Title} heading containing
at minimum the approved paths: list. Example:---
paths:
- "**/*.go"
- "internal/services/**/*.go"
---paths:. Never strip name, description, type, or any other key the file already carries.paths: list that includes one glob per area (e.g., "app/**/*.rb" plus
"services/**/*.go")The standard is consumed by Claude Code through a small set of per-file-type index files under
.claude/rules/coding-standards/. Each index file is itself a
path-scoped rule that carries paths: frontmatter for one file type (or a
closely-related group), a brief load-on-demand instruction paragraph, and a list of entries pointing to the canonical
standards in the project's coding-standards directory. When Claude Code reads a file matching an index file's globs,
Claude loads only that small index, then decides which (if any) of the listed standards to open with the Read tool. The
full text of a standard is never loaded automatically. This replaces the prior one-symlink-per-standard layout, which
forced every standard whose paths: matched the current file into context at once. Do not add the new standard as an
enumerated link in CLAUDE.md (or AGENTS.md). Rules are discovered through the .claude/rules/ surface, not
through the memory file, and enumerating them in the memory file is the failure mode this integration replaces.
Determine which index file(s) the new standard belongs in. Using the buckets carried forward from Step 3.6, map
each glob in the standard's approved paths: to a bucket. The set of matching buckets is the set of index files the
standard will be listed in. A standard whose paths: spans multiple buckets (a cross-cutting standard, e.g.,
"app/**/*.rb" plus "services/**/*.go") will be listed in each matching index — the canonical standards file is
still only ever in one place; only the index entries are repeated.
Ensure .claude/rules/coding-standards/ exists. Run mkdir -p .claude/rules/coding-standards.
For each matching index file, create or update it.
If the index file does not exist yet, copy the template at
index-file-template.md to .claude/rules/coding-standards/{bucket-name}.md
and fill it in:
paths: with the bucket's globs (each double-quoted; see the YAML rule in Step
6.5).{File-type} in the heading with the bucket name (e.g., Svelte, TypeScript, Ruby). Use the
capitalization that matches the language/framework's own conventions.## Available standards heading)
verbatim. It is what tells Claude to make a relevance decision before opening any standard.## Available standards with a single entry for the new standard (see entry
format below).If the index file already exists, edit it in place:
## Available standards, in alphabetical order by standard title (or
by the existing hierarchy already in use in that index).paths:, the instruction paragraph, or any other entries unless this is update-mode
and the change explicitly requires it (see step 5 below).Entry format. Each entry under ## Available standards is a single bullet of the form:
- [{Standard title}]({relative-path-to-canonical-file}) — {1-3 sentence description}# {Title} heading verbatim..claude/rules/coding-standards/. For a canonical file
at docs/coding-standards/{filename}.md, the target is ../../../docs/coding-standards/{filename}.md. Adjust the
../ depth when the docs directory is nested differently.Update-mode delta handling. If the skill is in "Updating existing" mode and the standard's paths: changed:
paths: no longer overlaps
the standard's paths:, remove the standard's entry from that index. Leave the rest of the index untouched.Ensure the pointer paragraph exists in CLAUDE.md (or AGENTS.md). The memory file should mention the rules
surface exactly once; the skill never adds an enumerated entry for the new standard.
.claude/rules/coding-standards/. If yes, leave it alone.Coding standards live in `{docs-directory}`. They are exposed to Claude
Code through a small set of per-file-type index files under
`.claude/rules/coding-standards/`. Each index file is a path-scoped rule
that lists the standards relevant to one file type, with a short
description of each. When Claude reads a file matching an index's
`paths:` glob, Claude loads only the index and then decides which (if
any) standards to open. The full text of a standard is never loaded
automatically. Standards do not appear in the available-skills picker.
Humans continue to browse `{docs-directory}` for the canonical readable
form.Search for related documentation (other coding standards, ADRs, feature docs).
Add cross-references in the new coding standard's "Additional Resources" section.
Add back-references from related docs where they add value.
Standards with conditional applicability tend to drift toward unconditional application unless the document's structure actively pushes back. Coordinately-listed rationales, buried exception cases, and missing "when not to apply" sections all let the pattern spread on speculation rather than evidence. This audit catches those structural failures before downstream readers and synthesizing agents over-apply the standard.
Walk through the six checks below. For each, cite a specific section, paragraph, or line in the draft that satisfies the check. If you cannot cite one, propose and apply a concrete revision before continuing.
Primary-rationale visibility — Does the Purpose section lead with one primary rationale, with secondary benefits
clearly demoted? If multiple rationales appear, is their relative priority explicit (e.g., Primary:, Secondary:,
Side effect:)? Reject Purpose sections that list rationales coordinately ("X, Y, Z, and W") without ranking.
Decision tree near the top — Is there a "When to apply this pattern" section before the prescriptive Coding Standard section, stating preconditions as an explicit decision tree (Q1 → Q2 → outcome) rather than prose? If the standard has any exception case, does the decision tree route to it as a branch, not as a footnote elsewhere?
"When NOT to apply" section, present and substantive — Is there an explicit section listing cases where the pattern is wrong, with examples? Does at least one case acknowledge the simpler-than-the-pattern alternative (direct import, inline code, no abstraction) as a legitimate choice? Reject standards that have only a "When to apply" section — symmetry between the two reduces over-application.
Exceptions surfaced, not buried — If the standard has any "Exception — X" callout, is it visible in the decision tree at the top (or in front matter / table of contents)? Reject standards where an exception case appears for the first time more than two heading levels deep.
Code-example comment audit — For each code example with an inline comment explaining why the pattern is being applied, does the comment match the standard's stated primary rationale? Reject examples where the comment cites a secondary or exception rationale (e.g., "to avoid cycles") when the primary rationale is something else (e.g., testability). Examples reinforce reading habits more than prose.
Verification step for "in doubt" adoptions — If the pattern is sometimes invoked defensively ("I might need this
later"), does the standard provide a concrete command, query, or test the reader can run now to verify the trigger
condition? Examples: go list -deps ./... to verify a cycle exists; a benchmark threshold for performance-motivated
patterns; a coverage metric for testability-motivated patterns. Reject standards whose adoption trigger is purely
"if you think you need it" without an objective check.
Update-mode delta question — If updating an existing standard (Step 1 mode = "Updating existing"), additionally answer: did this update change which rationale is primary? If yes, re-audit every code example and inline comment to confirm they cite the new primary rationale, not the old one.
A standard that passes all six checks is robust against over-application by downstream readers and synthesizing agents. A standard that fails any of them tends to spread beyond its intended scope — fix the failure before proceeding to Step 9.
Before self-verification, dispatch two review agents in parallel to stress-test the draft standard. Pass each the path to the draft file.
Launch han-core:junior-developer agent in artifact-review mode — prompt: "Review the coding standard at {draft_path} as a respected junior-to-mid teammate who has never seen it before. Surface: rules that are not testable, rules whose wording is ambiguous, assumptions baked in without context, cases the rule does not clearly cover, and conflicts with any existing coding standards, ADRs, or CLAUDE.md rules in the project. Every finding must cite a specific section or line and either name the assumption challenged or the standard violated. Return a short prioritized list; return an empty list if the standard is ready as-is."
Launch han-core:information-architect agent — prompt: "Audit the coding standard at {draft_path} for findability, orientation, and comprehension. The intended audience is a developer who hits a code-review finding that points at this standard and needs to resolve it fast. Check: does the title make the scope discoverable from a directory listing? Are the Correct-usage and What-to-avoid sections scannable? Is the Rationale placed where a reader who already agrees with the rule can skip it, but a reader who disagrees can find it? Does the Additional Resources section lead the reader to the next useful artifact, or dead-end them? Return a short list of structural edits; return an empty list if the document reads well."
Apply every actionable edit both agents return. For findings that demand a judgment only the author can make (ambiguous scope, disputed rationale), surface them to the user with a recommended resolution; do not silently resolve.
Read back the coding standard file and confirm:
{placeholder} values remain)paths: list, every glob is double-quoted, and the
frontmatter closes with --- before the # {Title} heading. When updating an existing standard, confirm no
pre-existing frontmatter keys were stripped..claude/rules/coding-standards/ whose
paths: overlaps the standard's paths:, and is not listed in any index file whose paths: does not overlap.
For each index file the standard was added to, confirm: the file's paths: frontmatter still parses; every
pre-existing entry is still present (none were dropped while editing); the instruction paragraph between the heading
and ## Available standards is unchanged from the template (verbatim); the new entry's relative link resolves to the
canonical standard file; the new entry's description is 1-3 sentences, names both what the standard covers and when a
reader should pull the full file, follows durable-reference Rule 3. In update-mode, additionally confirm the
standard's entry was removed from any index file whose paths: no longer overlaps.CLAUDE.md (or AGENTS.md) was not given a new enumerated entry for this standard. If a pointer paragraph was
added because none existed, confirm it appears exactly once and that its wording describes the per-file-type
index-file mechanism (not the prior one-symlink-per-standard mechanism).Once verification in Step 10 passes and the standard is final, dispatch han-communication:readability-editor (one Agent
call) to audit and rewrite the standard's prose against the readability standard. Scope the pass by mode: in create or
convert mode (Step 1), the newly authored prose is in scope; in update mode, only the region this run edited is in scope
— do not rewrite prose the run did not touch. Pass the editor the file path, the in-scope region, and the named audience:
the engineer who must follow the standard; the editor reads han-communication's own canonical rule, so pass no rule path.
It must preserve every fact and operate on prose regions only — never inside the YAML frontmatter, code fences, or the
durable-reference anchors, which must survive unchanged so they still resolve. Apply its rewrite to the file.
Then run the standardized readability self-check (the shared standard is in your context from
han-communication:readability-guidance) over the same in-scope prose regions only — never inside the YAML frontmatter,
code fences, or durable-reference anchors. Confirm each criterion and fix any failure before presenting:
Run the readability rule's standardized self-check, which is already in your context from the readability-guidance
invocation above. Correct every failure before presenting. Its fidelity criterion is not optional: the standard governs
how the content is said, and drops a required fact only when the reader asked for less and losing it would not change
what they do next.
© testdouble, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (references) in han-coding/skills/coding-standard of testdouble/han.
Open the folder on GitHubat commit abba73a
Coding Standard next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Coding Standard this skilltestdouble/han | 279 | — | ~8.6k | Automated safety check: Pass | MIT | |
| Record A Decisioninkeep/open-knowledge | 4.4k | — | ~3.5k | Automated safety check: Pass | GPL-3.0 | |
| Code Assessmentadobe/skills | 195 | — | ~2.8k | Automated safety check: Pass | Apache-2.0 | |
| Technical Writingrsmdt/the-startup | 536 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Technical Documentationkid-sid/claude-spellbook | 189 | — | ~3.4k | Automated safety check: Notes | MIT | |
| Simplified Technical Englishathola/claude-night-market | 342 | — | ~2k | Automated safety check: Pass | MIT |
inkeep/open-knowledge
Records an architecture decision as a Nygard/MADR-shaped ADR under decisions/ — capturing the context that forced the choice, the options weighed, the decision itself, and its consequences in both…
adobe/skills
Detect, review, and fix code-quality and correctness issues in an AEM as a Cloud Service project — locally, with no external services or network calls.
rsmdt/the-startup
Create architectural decision records (ADRs), system documentation, API documentation, and operational runbooks.
kid-sid/claude-spellbook
A skill your agent uses when writing a README, documenting an API with OpenAPI, drafting a runbook for on-call engineers, authoring a technical spec or ADR, or setting up docs-as-code with…
athola/claude-night-market
Applies an ASD-STE100-derived register to operator and procedural text.
bgauryy/octocode
Writes, repairs and copyedits project docs against the Google developer documentation style guide, verifying claims in the repository before stating them.
testdouble/han
Convert a stakeholder summary markdown file into a single self-contained HTML executive report — bottom line and decision asks up front, supporting detail later — styled with a Test Double-derived…
testdouble/han
Update Han plugin documentation so every skill, agent, guidance doc, index, and cross-reference is current and accurate.
testdouble/han
Authoritative guidance for building Claude Code skills, agents, and plugins, plus init and update steps that install and refresh the plugin-building skills in the current repository.
testdouble/han
Cut a Han release: update CHANGELOG.md with the changes since the last release, bump and tag every plugin that changed as {plugin-name}--v{version} so a version-constrained dependency can resolve…
testdouble/han
Builds a feature implementation plan from an existing feature specification (or equivalent context) through a facilitated team conversation.
testdouble/han
Restructure existing code without changing its behavior, through a test-gated refactoring loop: a named target, a green suite over that target before any edit, a planned sequence of small named…
Categories
Creates and updates coding standards, conventions, rules, and guidelines for the current project. Coding Standard is an agent skill from testdouble/han. Creates and updates coding standards, conventions, rules, and guidelines for the current project.
Coding Standard fits situations like: creating new standards from scratch; converting existing documents into coding standards; updating existing standards.
Run `npx skills add testdouble/han --skill coding-standard -a claude-code`. Or copy the skill folder (han-coding/skills/coding-standard in testdouble/han) into .claude/skills/coding-standard in your project. Claude Code loads it when a task matches its description.
Run `npx skills add testdouble/han --skill coding-standard -a codex`. Or copy the skill folder (han-coding/skills/coding-standard in testdouble/han) into .agents/skills/coding-standard in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add testdouble/han --skill coding-standard -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/coding-standard, .gemini/skills/coding-standard, .github/skills/coding-standard and .opencode/skills/coding-standard in your project.
Going by SKILL.md and its folder, Coding Standard needs the command-line tools its instructions call (bash and go). Its frontmatter pre-approves these tools: Read, Write, Edit, Glob, Grep, Agent, Bash(mkdir *), Bash(find *), Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh").
SKILL.md names 1 domain. As links in the text: code.claude.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Coding Standard is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 8.6k tokens (SKILL.md is roughly 35k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 4.3k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Coding Standard: Record A Decision (inkeep/open-knowledge, 4.4k stars), Code Assessment (adobe/skills, 195 stars), Technical Writing (rsmdt/the-startup, 536 stars) and Technical Documentation (kid-sid/claude-spellbook, 189 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
testdouble (a GitHub organization) maintains it in testdouble/han, which has 279 GitHub stars. The repository holds 54 skills in this directory. The repository was last updated on October 1, 2026.
Source: testdouble/han on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.