Grounding A Design
andrew-blake/melcloudhome
A skill your agent uses when about to propose, brainstorm, review or revise a design, fix approach or plan for a feature or behaviour change in this repo, including "brief" or "quick" design…
Lints existing Architecture Decision Records against the four verification gates (Completeness, Evidence, Clarity, Consistency).
$ npx skills add rvdbreemen/OTGW-firmware --skill lint -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install rvdbreemen/OTGW-firmware lint --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/rvdbreemen/OTGW-firmware.git skills-src && mkdir -p .claude/skills && cp -r skills-src/tools/adr-kit/skills/lint .claude/skills/lint && 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 "lint" agent skill from https://github.com/rvdbreemen/OTGW-firmware/tree/dev/tools/adr-kit/skills/lint into .claude/skills/lint/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lint", 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/rvdbreemen/OTGW-firmware/tree/dev/tools/adr-kit/skills/lintType 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 rvdbreemen/OTGW-firmware --skill lint -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install rvdbreemen/OTGW-firmware lint --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rvdbreemen/OTGW-firmware.git skills-src && mkdir -p .agents/skills && cp -r skills-src/tools/adr-kit/skills/lint .agents/skills/lint && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "lint" agent skill from https://github.com/rvdbreemen/OTGW-firmware/tree/dev/tools/adr-kit/skills/lint into .agents/skills/lint/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lint", 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 rvdbreemen/OTGW-firmware --skill lint -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install rvdbreemen/OTGW-firmware lint --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rvdbreemen/OTGW-firmware.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/tools/adr-kit/skills/lint .cursor/skills/lint && 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 "lint" agent skill from https://github.com/rvdbreemen/OTGW-firmware/tree/dev/tools/adr-kit/skills/lint into .cursor/skills/lint/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lint", 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/rvdbreemen/OTGW-firmware.git --path tools/adr-kit/skills/lint--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 rvdbreemen/OTGW-firmware --skill lint -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install rvdbreemen/OTGW-firmware lint --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rvdbreemen/OTGW-firmware.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/tools/adr-kit/skills/lint .gemini/skills/lint && 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 "lint" agent skill from https://github.com/rvdbreemen/OTGW-firmware/tree/dev/tools/adr-kit/skills/lint into .gemini/skills/lint/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lint", 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 rvdbreemen/OTGW-firmware lintInstalls 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 rvdbreemen/OTGW-firmware --skill lint -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/rvdbreemen/OTGW-firmware.git skills-src && mkdir -p .github/skills && cp -r skills-src/tools/adr-kit/skills/lint .github/skills/lint && 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 "lint" agent skill from https://github.com/rvdbreemen/OTGW-firmware/tree/dev/tools/adr-kit/skills/lint into .github/skills/lint/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lint", 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 rvdbreemen/OTGW-firmware --skill lint -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install rvdbreemen/OTGW-firmware lint --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rvdbreemen/OTGW-firmware.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/tools/adr-kit/skills/lint .opencode/skills/lint && 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 "lint" agent skill from https://github.com/rvdbreemen/OTGW-firmware/tree/dev/tools/adr-kit/skills/lint into .opencode/skills/lint/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lint", 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.
lintLints existing Architecture Decision Records against the four verification gates (Completeness, Evidence, Clarity, Consistency).
Lint is an agent skill from rvdbreemen/OTGW-firmware. Lints existing Architecture Decision Records against the four verification gates (Completeness, Evidence, Clarity, Consistency). Run on a single ADR file or on the whole docs/adr/ tree. Reports pass/fail per gate per file with file:line citations for failures. Read-only.
Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Architecture decision records and Linting and formatting. It works with Home Assistant. The repository describes itself as: A ESP8266 devkit firmware for the Nodoshop version of the Opentherm Gateway (OTGW). The licence is GPL-3.0.
Read from SKILL.md and the folder at commit 5e66c3b. 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:
ReadGlobGrepFrom allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are json, html and dot).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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.
Lint loads about 4.3k tokens when it runs. Until then it costs about 69 tokens; SKILL.md has 1,653 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 rvdbreemen/OTGW-firmware at commit 5e66c3b, republished under its GPL-3.0 licence (© rvdbreemen). 1,653 words, ~4,267 tokens.
.claude/skills/lint/SKILL.md (or your agent's skills folder).You are running /adr-kit:lint. The user wants to know whether existing ADRs in their project pass the four verification gates that the main adr skill enforces. You read files; you do not modify them. You report.
docs/adr/ADR-*.md file in the project root.ADR-*.md file under that directory.If the user passed something else (a glob, a non-existent path), explain politely and stop.
Established projects often have a long history of ADRs that predate the four canonical gates. Linting them under strict rules produces noise rather than actionable feedback. Two opt-in mechanisms let a project apply the gates surgically: strict on new ADRs, advisory on legacy ones.
Before linting, look for docs/adr/.adr-kit.json (relative to the project root, or to the directory passed as argument if the user pointed elsewhere). If it exists, read it and apply it as policy. If it does not exist, fall back to default behaviour (everything strict, exact match to v0.7.x output).
Recognised fields:
strict_from (string, optional): first ADR identifier (inclusive) on which all gates are enforced strictly. ADRs with a numerically lower number are linted in advisory mode for the gates that opt in (see severity). Format: ADR-XXX matching the filename pattern. Example: "ADR-082".ignore (array of strings, optional): list of ADR identifiers (ADR-XXX) or full filenames to skip entirely. Useful for archived or superseded ADRs whose status is final. Skipped ADRs appear in the aggregate as SKIPPED but produce no gate output.severity (object, optional): per-gate severity. Keys are the four gate names lower-cased (completeness, evidence, clarity, consistency). Values are one of:always_strict: failures are FAIL regardless of strict_from.always_advisory: failures are ADVISORY regardless of strict_from.advisory_before_strict_from: failures are ADVISORY for ADRs that predate strict_from, FAIL otherwise. This is the default for completeness, evidence, clarity when strict_from is set.consistency the implicit default stays always_strict even when strict_from is set, because the things it catches (filename / heading mismatch, duplicate numbers, broken cross-references) are real bugs regardless of when the ADR was written. Projects can override this in their config but the default is loud-on-purpose.template.required_sections (array of strings, optional): override the canonical seven required sections with a project-specific list. Each entry is the exact heading text including the ## prefix. When set, the Completeness gate uses this list instead of the canonical one. Useful for projects whose template legitimately differs from the toolkit's default.Example .adr-kit.json:
{
"strict_from": "ADR-082",
"ignore": ["ADR-001", "ADR-007"],
"severity": {
"completeness": "advisory_before_strict_from",
"evidence": "advisory_before_strict_from",
"clarity": "always_advisory",
"consistency": "always_strict"
},
"template": {
"required_sections": ["## Status", "## Context", "## Decision", "## Consequences"]
}
}The file may contain top-level "_comment" keys (any name starting with _); ignore them silently. They are a convention to embed annotations in JSON without breaking parse.
If the file is malformed JSON, report the parse error and stop without linting. Do not silently fall back to defaults: a broken policy file is a bug the user should know about. If a field has an unrecognised value (e.g. "severity.completeness": "lol"), report the unrecognised value, list the legal values, and stop.
Inside an individual ADR, an HTML comment line of one of these shapes flips the policy for that file only:
<!-- adr-kit-lint: skip -->
<!-- adr-kit-lint: skip completeness, evidence -->
<!-- adr-kit-lint: advisory -->Forms (case-insensitive on the directive, whitespace-tolerant):
skip (no args): the ADR is skipped entirely. Counts as SKIPPED in the aggregate.skip <gate>[, <gate>...]: those gates are skipped on this file only. Other gates still run.advisory: all gates run on this file in advisory mode. Failures are ADVISORY, not FAIL.The marker may appear anywhere in the file (top, bottom, inside or outside a section). Scan the full file for the first matching marker line and apply it. If multiple marker lines disagree (e.g. one says skip, another says advisory), the first matching marker wins; report the conflict in the file's output.
When evaluating a single (file, gate) pair, apply policies in this order. The first matching rule wins.
digraph severity {
"Is the file in config.ignore?" [shape=diamond];
"Skip whole file" [shape=box];
"Per-ADR marker says skip (no args)?" [shape=diamond];
"Per-ADR marker says skip <this gate>?" [shape=diamond];
"Skip this gate only" [shape=box];
"Per-ADR marker says advisory?" [shape=diamond];
"ADVISORY (reason: marker)" [shape=box];
"config.severity[gate] resolved to always_strict?" [shape=diamond];
"FAIL on failure" [shape=box];
"config.severity[gate] resolved to always_advisory?" [shape=diamond];
"ADVISORY (reason: severity=always_advisory)" [shape=box];
"config.severity[gate] = advisory_before_strict_from AND ADR predates strict_from?" [shape=diamond];
"ADVISORY (reason: predates strict_from)" [shape=box];
"Is config absent?" [shape=diamond];
"FAIL on failure (default behaviour)" [shape=box];
"FAIL on failure (post-strict_from)" [shape=box];
"Is the file in config.ignore?" -> "Skip whole file" [label="yes"];
"Is the file in config.ignore?" -> "Per-ADR marker says skip (no args)?" [label="no"];
"Per-ADR marker says skip (no args)?" -> "Skip whole file" [label="yes"];
"Per-ADR marker says skip (no args)?" -> "Per-ADR marker says skip <this gate>?" [label="no"];
"Per-ADR marker says skip <this gate>?" -> "Skip this gate only" [label="yes"];
"Per-ADR marker says skip <this gate>?" -> "Per-ADR marker says advisory?" [label="no"];
"Per-ADR marker says advisory?" -> "ADVISORY (reason: marker)" [label="yes"];
"Per-ADR marker says advisory?" -> "Is config absent?" [label="no"];
"Is config absent?" -> "FAIL on failure (default behaviour)" [label="yes"];
"Is config absent?" -> "config.severity[gate] resolved to always_strict?" [label="no"];
"config.severity[gate] resolved to always_strict?" -> "FAIL on failure" [label="yes"];
"config.severity[gate] resolved to always_strict?" -> "config.severity[gate] resolved to always_advisory?" [label="no"];
"config.severity[gate] resolved to always_advisory?" -> "ADVISORY (reason: severity=always_advisory)" [label="yes"];
"config.severity[gate] resolved to always_advisory?" -> "config.severity[gate] = advisory_before_strict_from AND ADR predates strict_from?" [label="no"];
"config.severity[gate] = advisory_before_strict_from AND ADR predates strict_from?" -> "ADVISORY (reason: predates strict_from)" [label="yes"];
"config.severity[gate] = advisory_before_strict_from AND ADR predates strict_from?" -> "FAIL on failure (post-strict_from)" [label="no"];
}In plain words: ignore beats markers, markers beat config, and within config the precedence is always_strict > always_advisory > advisory_before_strict_from. If the gate would PASS on its own checks, the severity rule does not apply: PASS stays PASS regardless of policy.
For every ADR you read, evaluate each of the four gates separately. A gate either passes or fails for a given file. Cite line numbers when reporting a failure.
A passing ADR has every load-bearing section present, in the canonical order, with non-empty content.
Required sections (heading text, in this order):
## Status## Context## Decision## Alternatives Considered## Consequences## Related Decisions## ReferencesIf .adr-kit.json defines template.required_sections, use that list instead of the canonical seven. Order matters: the headings must appear in the listed order. The toolkit's main adr skill still recommends the canonical seven; the override exists for projects whose template legitimately differs.
Sub-checks within sections:
Proposed, Accepted, Deprecated, Superseded by ADR-XXX, Amended by ADR-XXX. Date in YYYY-MM-DD format must be present.Benefits/Trade-offs/Positive/Negative subheadings or a clearly mixed list. A one-sided Consequences section fails this gate.Risks and mitigations or similar).Failure example: Completeness: missing ## Risks and mitigations subsection (line 47); only positive consequences listed.
A passing ADR replaces challengeable claims with measurements or citations.
Heuristic checks:
file:line or file.ext references. A claim about an algorithm that does not cite the implementation is suspicious.You will see false positives ("the new system is faster" might be acceptable in a Context paragraph if a measurement appears later in Consequences). Use judgment: if a measurement or citation backs the claim within ~5 lines, count it as supported.
Failure example: Evidence: line 24 says "improves performance" with no measurement in the surrounding paragraphs. Suggest replacing with a measured improvement, e.g. "reduces request latency from 120 ms to 40 ms p99 (load-test on staging, see PERF-103)".
A passing ADR is readable to a developer who has never seen the codebase.
Heuristic checks:
Failure example: Clarity: line 12 uses "WAL" without expansion. Suggest "WAL (write-ahead log)" on first use. Line 31 opens the Decision section with "There are several considerations..." instead of a declarative sentence; suggest leading with the choice and unpacking after.
A passing ADR fits the existing record without contradictions.
Heuristic checks:
ADR-042-foo.md should have a first-line heading # ADR-042 .... Mismatch fails this gate.ADR-XXX-kebab-case-title.md with uppercase prefix and 3-digit zero-padded number. Lowercase prefixes (adr-), unpadded numbers (ADR-42-), or non-kebab-case (ADR-042-MyTitle.md) fail.## Related Decisions follow the ADR-XXX format. References to non-existent files (broken links) fail.Failure example: Consistency: filename ADR-042-foo.md but heading says "# ADR-42 Foo" (missing zero-padding, line 1). Filename and heading must agree.
For each ADR file, produce a one-line summary plus details for any failing or advisory gate. Three result tiers exist: PASS, ADVISORY (a finding that does not block but is reported), and FAIL.
If a config file is in effect, prefix the run with a one-line config banner so the user knows which policy is being applied.
ADR-042-foo.md
Completeness: PASS
Evidence: FAIL
line 24: "improves performance" with no measurement.
line 38: "scales better" with no number.
Clarity: PASS
Consistency: PASS
Summary: 3 of 4 gates pass strictly. 1 FAIL. To flip Status to Accepted, fix the Evidence gate.ADR-042-foo.md
Completeness: PASS
Evidence: ADVISORY
line 24: "improves performance" with no measurement (ADVISORY: ADR predates strict_from=ADR-042)
line 38: "scales better" with no number (ADVISORY: ADR predates strict_from=ADR-042)
Clarity: PASS
Consistency: PASS
Summary: 3 of 4 gates pass strictly. 1 advisory. No FAIL.Linting docs/adr/ (12 ADRs)
PASS (9):
ADR-001-foo.md
ADR-003-bar.md
...
FAIL (3):
ADR-002-baz.md
Evidence: line 24 ("faster"), line 38 ("scales better").
ADR-007-qux.md
Completeness: missing ## Related Decisions section.
ADR-011-quux.md
Consistency: filename has lowercase prefix "adr-011-...", expected "ADR-011-...".
Aggregate:
Most common FAIL gate: Evidence (2 of 3 failures).
Next steps: focus on ADR-002-baz.md, which fails the most gates.Linting docs/adr/ (50 ADRs)
Config: .adr-kit.json found (strict_from=ADR-042; severity: completeness=advisory_before_strict_from, evidence=advisory_before_strict_from, consistency=always_strict)
PASS strictly (8):
ADR-042-...
ADR-043-...
...
ADVISORY only (38):
Most common advisory gate: Completeness (38 of 38; legacy template predates canonical seven).
Listed by ADR id; expand on request.
FAIL (4):
ADR-045-foo.md
Evidence: line 24 ("faster") with no measurement.
ADR-046-bar.md
Consistency: filename ADR-046-bar.md but heading "# ADR-46 Bar" (line 1).
...
SKIPPED (0)
Aggregate:
Most common FAIL gate: Evidence (3 of 4 failures).
Next steps: focus on ADR-045-foo.md, which fails 2 of 4 gates.The aggregate's bottom line always names the FAIL count, never the ADVISORY count. ADVISORY is informational; FAIL is what the user is asked to act on.
If docs/adr/ is empty or does not exist, say so plainly:
No ADRs found at docs/adr/. The toolkit is installed but no decisions have been recorded yet.
Create your first ADR with /adr-kit:adr.Always end with a single recommended next action that points at a FAIL, not an ADVISORY. ADVISORY findings are background noise the project has explicitly chosen to tolerate; FAIL findings are what the user is being asked to fix. The next-action sentence names which ADR to fix first (the one with the most FAIL gates, or the most-referenced one) and which gate to focus on. Concrete, not abstract.
If the run produced zero FAILs, say so plainly: "All linted ADRs pass at the configured severity. <N> ADVISORY findings remain, treated as informational by the project's policy." Do not invent a FAIL where there is none.
adr-generator agent. The lint skill is informational; the user decides whether to fix.© rvdbreemen, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in tools/adr-kit/skills/lint of rvdbreemen/OTGW-firmware.
Open the folder on GitHubat commit 5e66c3b
Lint 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 |
|---|---|---|---|---|---|---|
| Lint this skillrvdbreemen/OTGW-firmware | 207 | — | ~4.3k | Automated safety check: Pass | GPL-3.0 | |
| Grounding A Designandrew-blake/melcloudhome | 142 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Okf Frontmatterlongsizhuo/openInvest | 108 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Ha Code QualityFutureTense/keymaster | 349 | — | ~462 | Automated safety check: Pass | MIT | |
| Adk Stylegoogle/adk-python | 22k | — | ~769 | Automated safety check: Pass | Apache-2.0 | |
| Lintroryeckel/wyoming_openai | 219 | — | ~707 | Automated safety check: Pass | Apache-2.0 |
andrew-blake/melcloudhome
A skill your agent uses when about to propose, brainstorm, review or revise a design, fix approach or plan for a feature or behaviour change in this repo, including "brief" or "quick" design…
longsizhuo/openInvest
Maintain openInvest's docs (docs/wiki chapters + docs/wiki/adr) under Google's Open Knowledge Format (OKF).
FutureTense/keymaster
Standards and commands for linting, code formatting, typing validation (Ruff, MyPy, Codespell, ESLint, Pre-commit/Prek, Tox), and adherence to Home Assistant Python 3.14 standards in Keymaster.
google/adk-python
Python style and codebase conventions for ADK (Agent Development Kit): private-by-default file visibility, imports, type hints, Pydantic v2 models, formatting, docstrings, logging, async I/O, file…
roryeckel/wyoming_openai
Run all linters (ruff, pyright) and fix issues in a loop until the codebase is clean.
harumiWeb/exstruct
Review an ExStruct ADR draft for required sections, status values, evidence quality, supersede links, and balanced consequences.
rvdbreemen/OTGW-firmware
A skill your agent uses whenever the user wants to create, read, edit, or manipulate Word documents (.docx files).
rvdbreemen/OTGW-firmware
Use this skill any time a .pptx file is involved in any way — as input, output, or both.
rvdbreemen/OTGW-firmware
Use this skill any time a spreadsheet file is the primary input or output.
rvdbreemen/OTGW-firmware
Drive the autonomous 2.0.0 ESP32-S3-only async + FreeRTOS migration (epic TASK-865).
rvdbreemen/OTGW-firmware
Publish an OTGW-firmware beta prerelease — bump VERSIONPRERELEASE, push to otgw-1.x.x, tag, and let CI build + publish the GitHub prerelease
rvdbreemen/OTGW-firmware
Guided rewrite of legacy-shaped ADRs into the canonical-seven-section template enforced by /adr-kit:lint.
Works with
Categories
Lints existing Architecture Decision Records against the four verification gates (Completeness, Evidence, Clarity, Consistency). Lint is an agent skill from rvdbreemen/OTGW-firmware. Lints existing Architecture Decision Records against the four verification gates (Completeness, Evidence, Clarity, Consistency).
Lint fits situations like: tasks that involve Architecture decision records; tasks that involve Linting and formatting.
Run `npx skills add rvdbreemen/OTGW-firmware --skill lint -a claude-code`. Or copy the skill folder (tools/adr-kit/skills/lint in rvdbreemen/OTGW-firmware) into .claude/skills/lint in your project. Claude Code loads it when a task matches its description.
Run `npx skills add rvdbreemen/OTGW-firmware --skill lint -a codex`. Or copy the skill folder (tools/adr-kit/skills/lint in rvdbreemen/OTGW-firmware) into .agents/skills/lint 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 rvdbreemen/OTGW-firmware --skill lint -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/lint, .gemini/skills/lint, .github/skills/lint and .opencode/skills/lint in your project.
SKILL.md names no scripts, command-line tools or credentials: Lint is instructions for the agent only. Its frontmatter pre-approves these tools: Read, Glob, Grep.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Lint is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.3k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Lint: Grounding A Design (andrew-blake/melcloudhome, 142 stars), Okf Frontmatter (longsizhuo/openInvest, 108 stars), Ha Code Quality (FutureTense/keymaster, 349 stars) and Adk Style (google/adk-python, 22k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
rvdbreemen (a GitHub user) maintains it in rvdbreemen/OTGW-firmware, which has 207 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 6, 2026.
Source: rvdbreemen/OTGW-firmware on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.