skills/adr/SKILL.md
Capture architectural decisions made during a coding session and append them as ADR (Architecture Decision Record) files to the project's docs/decisions/ directory, following MADR 4.0.0. Use this skill whenever the user asks to write ADRs, record decisions, document design choices, save session rationale, summarize a session's design output, or wraps up a session that produced non-trivial technology, structural, or process choices. Triggers on phrases like "ADR", "decision record", "意思決定", "設計判断を記録", "セッションをまとめて", "決定事項を残して", "ADR書いて" — and at the end of sessions with notable architectural changes, even when the user does not say "ADR" explicitly.
npx skillsauth add range3/agent-skills adrInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Capture architectural decisions from the current session and write them as new ADR files under <project_root>/docs/decisions/, following this project's MADR 4.0.0 variant. The template lives at assets/adr-template.md (next to this file).
status to deprecated or superseded, plus — when superseding — a single > Superseded by ADR-NNNN-... annotation line in the superseded ADR's body. Nothing else in an existing ADR may be edited.summary value in Japanese. If English, English. Filenames remain ASCII kebab-case regardless, for portability.Record decisions that:
Skip:
If the session contains no qualifying decisions, tell the user plainly — do not fabricate ADRs to fill the directory.
Every call to scripts/adr.py must use absolute paths for --dir (and for the script itself), to avoid CWD-dependent behavior. Resolve <project_root> once at the start of the workflow — typically via git rev-parse --show-toplevel — and reuse it throughout.
uv run <this-skill-dir>/scripts/adr.py --dir <project_root>/docs/decisions <subcommand>
Subcommands used by this skill: init, list, reindex. (validate, get, getfile exist on the script but are not part of the standard flow.)
If <project_root>/docs/decisions/ does not exist:
uv run <this-skill-dir>/scripts/adr.py --dir <project_root>/docs/decisions init
Read <project_root>/docs/decisions/INDEX.md first. It contains the No / Status / Summary table for every existing ADR and is the cheapest way to see what's already on record.
Only open individual ADR-NNNN-*.md files when you actually need full content — typically to:
If INDEX.md is missing or appears stale (e.g. file count doesn't match), run list to regenerate the same table on stdout:
uv run <this-skill-dir>/scripts/adr.py --dir <project_root>/docs/decisions list
The table does not include filenames; pair it with ls <project_root>/docs/decisions/ to map No → filename when needed.
Walk the session and identify distinct decisions at ADR granularity. For each candidate, work out:
Before any file is written or modified, present a plan and wait for confirmation. Use the session's language. Format:
記録予定:
- ADR-0007 — Adopt Biome for linting and formatting
- ADR-0008 — Switch internal API from REST to GraphQL
撤回予定:
- ADR-0004 (use-rest-internally) → superseded by ADR-0008
この内容で書き込んでよろしいですか?
Accept user edits — drop entries, merge entries, change a title, demote a superseded to deprecated, etc. Re-present the plan if changes are substantive. A reply like "OK" / "進めて" / "yes" is sufficient to proceed.
For each confirmed new ADR:
Assign the next NNNN (4-digit zero-padded, smallest unused across the directory).
Generate a short-title in ASCII kebab-case expressing problem + solution. Good: use-vite-react-typescript-as-frontend-stack, manage-skills-via-lock-file-and-symlinks. Bad (too generic): use-typescript, add-tests.
Read the template at <this-skill-dir>/assets/adr-template.md.
Fill the frontmatter:
---
status: accepted
created_at: 2026-05-17T13:45:00+09:00
summary: "One short, declarative sentence — no trailing period"
---
status: default accepted (session decisions are already implemented). Use proposed only if the decision is explicitly tentative.created_at: real current ISO 8601 timestamp with timezone offset — not midnight, not a placeholder.summary: ≤ 80 chars, no trailing period, in the body language.Write the body following the template's section structure. Drop optional sections (those marked <!-- This is an optional element. -->) when they add no signal — keeping empty placeholders is worse than removing them.
If this ADR supersedes an older one, naturally mention Supersedes ADR-NNNN-... in the body (Context, Decision Outcome, or More Information — wherever it reads best).
Save to <project_root>/docs/decisions/ADR-NNNN-<short-title>.md.
For each ADR the plan retires, edit only status, plus — when superseding — one annotation line. Never touch created_at, summary, the title, or any other body content.
deprecated — decision no longer in force, no specific replacement:
status: ... → status: deprecated. Done.superseded — replaced by a specific newer ADR:
status: ... → status: superseded.# Title heading (blank line above and below), before the first ## section. Use the body's language:
> Superseded by ADR-NNNN-<short-title>.> ADR-NNNN-<short-title> によって置き換えられました。If you find yourself wanting to edit anything else in an existing ADR — stop. Either write a new ADR that records the change, or ask the user.
After all writes (new files + status updates), regenerate INDEX.md:
uv run <this-skill-dir>/scripts/adr.py --dir <project_root>/docs/decisions reindex
The script validates every ADR's frontmatter against a strict schema (status ∈ {proposed, accepted, deprecated, superseded}, summary non-empty, created_at parseable as ISO 8601). If validation fails, the offending file is named in the error — fix it and rerun. INDEX.md is only rewritten when validation passes.
One line per change — no full contents:
ADR-NNNN — <title> — <summary>ADR-NNNN — <previous status> → <new status>[ (by ADR-MMMM)]ADR-NNNN-<short-title>.mdNNNN: smallest unused 4-digit number in the directory<short-title>: lowercase ASCII kebab-case, expressing problem + solution# Heading inside the file is the same idea but readable prose, in the body language. Examples:
# Use Vite + React + TypeScript as the frontend stack# フロントエンドスタックとして Vite + React + TypeScript を採用するADRs are reference material, not blog posts — be concise.
Drop ### Confirmation, ## Pros and Cons of the Options, and ## More Information sections when they add no signal.
User: 「セッション終わり。今日決めたこと、ADRに残しておいて。」
Resolve <project_root> via git rev-parse --show-toplevel → /home/me/myproj.
Read /home/me/myproj/docs/decisions/INDEX.md → highest existing is ADR-0006.
Identify two session decisions: Biome adoption, and switching the internal API from REST to GraphQL. The GraphQL switch retracts ADR-0004 (which adopted REST).
Present the plan:
記録予定:
- ADR-0007 — Adopt Biome for linting and formatting
- ADR-0008 — Switch internal API from REST to GraphQL
撤回予定:
- ADR-0004 (use-rest-internally) → superseded by ADR-0008
この内容で書き込んでよろしいですか?
User: 「OK」
Write ADR-0007-adopt-biome-for-linting-and-formatting.md and ADR-0008-switch-internal-api-from-rest-to-graphql.md, both status: accepted, body in Japanese (session language). ADR-0008's Context section mentions "Supersedes ADR-0004-use-rest-internally".
Edit ADR-0004-use-rest-internally.md: flip status: accepted → status: superseded, insert > ADR-0008-switch-internal-api-from-rest-to-graphql によって置き換えられました。 right under the # Title. Nothing else changes.
Run:
uv run <this-skill-dir>/scripts/adr.py --dir /home/me/myproj/docs/decisions reindex
Report:
ADR-0007 — Adopt Biome for linting and formatting — ESLint+Prettier から Biome に統一して CI 時間を短縮ADR-0008 — Switch internal API from REST to GraphQL — クライアント側のover-fetching解消のためGraphQLへ移行ADR-0004 — accepted → superseded (by ADR-0008)testing
Fetch subtitles/transcripts from YouTube videos and use them as context for summarization, analysis, translation, or Q&A. Use this skill whenever a user shares a YouTube URL and asks to summarize, explain, or discuss the video content, or when they explicitly ask for subtitles or a transcript. Trigger on any youtube.com, youtu.be, or YouTube Shorts link that appears in conversation where understanding the video content is needed.
development
GitHub上の特定トピックに関するIssue・PR・コードの議論を調査し、要約レポートを作成するスキル。 ghコマンドを使用する。ユーザーがGitHubリポジトリでの議論の調査、Issue/PRの横断的な分析、 特定の機能・バグ・コンポーネントに関する経緯の把握、GitHubでの意思決定の追跡を求めた場合に使用すること。 「このリポジトリで○○についてどんな議論がある?」「○○の経緯を調べて」「関連するIssueやPRをまとめて」 「○○はなぜこういう設計になった?」といったリクエストにも対応する。 既存の調査レポート(md)があり「この調査の続き」「○○の調査を更新して」「再調査して」のように継続調査が 依頼された場合も、このスキルが対応する(既存レポートを読み込んで差分を追記する)。 明示的にGitHubと言及していなくても、OSSの機能議論や設計経緯の調査であればこのスキルを使う。 ただし、機能の使い方・APIリファレンス・一般的な解説など、ドキュメントやコードを直接読めば 分かる質問にはこのスキルを使わない(このスキルは「議論の経緯」「設計判断の背景」の調査用)。
testing
Create, edit, improve, or audit AgentSkills. Use when creating a new skill from scratch or when asked to improve, review, audit, tidy up, or clean up an existing skill or SKILL.md file. Also use when editing or restructuring a skill directory (moving files to references/ or scripts/, removing stale content, validating against the AgentSkills spec). Triggers on phrases like "create a skill", "author a skill", "tidy up a skill", "improve this skill", "review the skill", "clean up the skill", "audit the skill".
testing
Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).