migrate
Skill13 starsChanged 4 months agoMITView on GitHub
Preview or migrate ADR metadata and body profiles. Use for legacy ADRs, MADR, Nygard, canonical conversion, or migration planning.
63 other projects use a version of this.
Adopted by
Most recently taken up by
- tuist/agent-plugintheir own version, first seen Nov 8, 2026
- dsifry/metaswarmtheir own version, first seen Nov 8, 2026
- codewithmukesh/dotnet-claude-kittheir own version, first seen Nov 8, 2026
- jwm-axoni/claude-workbenchtheir own version, first seen Nov 8, 2026
- AsiaOstrich/EngramGraphtheir own version, first seen Nov 8, 2026
- DawnEver/claude-code-configtheir own version, first seen Nov 6, 2026
Used with
Projects with it also use incident, sdd and 8 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
JkudjoSkillincident
Production incident response — structured triage, hypothesis tree, safe remediation, incident record
Also in 4 projects that use this
liatrio-labsSkillsdd
Execute the Liatrio Spec-Driven Development (SDD) workflow when explicitly invoked by the user. NOTE: this skill is NOT intended to be dynamically loaded or automatically triggered; it should only ever be explicitly called by the user.
Also in 4 projects that use this
BerryKuipersSkillscaffold
Detect project stack, apply architecture patterns, wire quality gates, and scaffold features. Use when bootstrapping a project, adding a vertical slice, wiring CI/CD, adding Docker compose, or setting up quality gates.
Also in 4 projects that use this
genomewalkerSkillcheckpoint
Save a checkpoint of task status, decisions, active files, and next steps
Also in 5 projects that use this
PydanticSkillcoverage
Fetch coverage diff from Codecov for the current branch or a specific PR. Shows uncovered lines, patch coverage, and overall coverage change.
Also in 3 projects that use this
JohnJBorenSkillci-cd
CI/CD pipeline design, GitHub Actions, testing automation, and deployment strategies
Also in 3 projects that use this
Other versions63 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 63
- garrytan/gbrain★ 32ksame name
- tuist/tuist★ 5.9ksame name
- parcadei/Continuous-Claude★ 3.9ksame name
- parcadei/Continuous-Claude-v2★ 3.9ksame name
- parcadei/Continuous-Claude-v3★ 3.9ksame name
- codewithmukesh/dotnet-claude-kit★ 808same name
- dsifry/metaswarm★ 426same name
- pipecat-ai/gradient-bang★ 420same name
- govctl-org/govctl★ 276same name
- AsiaOstrich/universal-dev-standards★ 84same name
53 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository19 other files it gives its agents.
The file
Show its rules and text
We split this skill into the rules it gives an agent
20 rules. 0 are common, 11 are distinctive, and 9 are very specific to this project.
0
Common
Most of the 50 edited versions we read keep these.
11
Distinctive
This author's own choices. Worth a look.
9
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 13
Use $ARGUMENTS as the file or directory.
- Distinctive: line 21
Start with the shared read-only discovery report:
- Distinctive: line 46
Use the deterministic CLI whenever the source is already a supported profile:
- Very specific: line 54
Use --from-profile only to disambiguate an unknown or hybrid record after reading it.
- Distinctive: line 66
If the path does not exist or contains no ADR files, say so plainly and stop.
- Distinctive: line 70
Read-then-confirm: Always read every target file before proposing edits.
- Very specific: line 71
No fabrication: If a target-profile section is missing and the source contains no content that maps to it, do not invent a decision.
- Very specific: line 80
Look for docs/adr/.adr-kit.json (relative to project root, or the directory passed).
- Very specific: line 131
If only Status: exists with no Date:, the Status section reads Accepted (without date).
- Very specific: line 150
When ambiguous, leave in ## Related Decisions (safer default).
- Very specific: line 154
If after Pattern D there are no external references to populate ## References, create the section with a placeholder:
- Distinctive: line 162
Never invent references. The placeholder makes it clear to a human reviewer that this is a known gap.
- Distinctive: line 166
If the source legitimately has no alternatives discussion anywhere, create the section with a placeholder:
- Distinctive: line 199
If the source has no Related Decisions or References content, apply Patterns E / F TODO placeholders.
- Distinctive: line 228
Before applying any edit, show the user a per-file summary:
- Distinctive: line 250
If the user declines, stop without writing.
- Distinctive: line 254
After confirmation, apply each transformation via Edit.
- Very specific: line 258
After all edits, suggest the user run /adr-kit:lint <path> to confirm the migrated files now PASS strictly.
- Very specific: line 305
Source uses
## Pros and Consor## Decision drivers: if the file matches the MADR shape, Pattern G consumes these (## Pros and Cons of … - Distinctive: line 309
If the migration would require any of these, refuse and explain:
“Common” is measured: kept by at least 6 in 10 of the 50 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
adr-kit migrate
Reply in the language the user writes in; default to English. Keep command output, identifiers, paths, and ADR file content unchanged.
Use $ARGUMENTS as the file or directory; default to docs/adr/. Always
preview before applying a migration.
You are running /adr-kit:migrate. The user wants to add invariant adr-kit
metadata or convert between the supported madr, nygard, and canonical
body profiles. This is a write skill: preview first, show the result, obtain
confirmation, then apply it.
Start with the shared read-only discovery report:
python bin/adr-migrate --plan <path>The plan detects MADR, Nygard, canonical, conservative Y-Statement,
Tyree/Akerman, and arc42 markers, including recognizable files that do not yet
use an ADR-NNN-...md filename. It reports an exact deterministic preview
when metadata and filename normalization are safe. Ambiguous, hybrid, and
semantically lossy formats are routed to this guided workflow. --plan never
writes, and detection never authorizes migration.
Selective-context metadata is a separate, read-only preview:
python bin/adr-migrate --suggest-retrieval --dry-run <path>It proposes topics, components, symbols, and Decision Contract candidates from existing source facts. It never writes automatically. Review every candidate against the authoritative ADR, obtain explicit human approval, apply only the approved metadata deliberately, rebuild the generated index, and run the project retrieval probes. Do not combine this mode with profile conversion.
Use the deterministic CLI whenever the source is already a supported profile:
python bin/adr-migrate --dry-run --to-profile madr <path>
python bin/adr-migrate --to-profile madr <path>
python bin/adr-migrate --check --to-profile madr <path>Use --from-profile only to disambiguate an unknown or hybrid record after
reading it. The same source and target is an idempotent no-op. Existing
frontmatter, Status History, relationships, references, and Enforcement remain
unchanged. Use the guided patterns below only for genuinely legacy shapes that
cannot be converted by semantic headings alone.
Inputs
- No argument: migrate ADRs in
docs/adr/(the whole tree). - A directory path: migrate ADRs under that directory.
- A file path: migrate that one file.
If the path does not exist or contains no ADR files, say so plainly and stop.
Cardinal rules
- Read-then-confirm. Always read every target file before proposing edits. Always show the proposed restructure (file by file, summarised) and ask for explicit confirmation before calling Edit. Silent writes are forbidden.
- No fabrication. If a target-profile section is missing and the source contains no content that maps to it, do not invent a decision. The deterministic CLI inserts an explicit TODO or
Noneextension; guided migration uses a<!-- TODO: populate -->placeholder. - Preserve content. The migration restructures shape, not substance. Bullet points, prose, examples, and links from the source must appear in the target unchanged. Reorder; do not rewrite.
- Idempotent. Running migration when the record already uses the selected target profile is a no-op.
- Skip files that opt out. A file with
<!-- adr-kit-lint: skip -->is left untouched. A file with<!-- adr-kit-lint: advisory -->gets a warning ("this file is currently in advisory mode; migrating will make the marker meaningless") and a confirmation prompt.
Workflow
Step 1: read the policy
Look for docs/adr/.adr-kit.json (relative to project root, or the directory
passed). If template.profile is set, use it as the target unless the user
selected another profile. template.required_sections describes a custom
shape and requires guided migration. The default target is MADR. Every profile
keeps Status, Status History, Related Decisions, References, and
Enforcement. The semantic choice headings are:
| Profile | Context | Alternatives | Decision |
| MADR | Context and Problem Statement | Considered Options | Decision Outcome |
| Nygard | Context | Alternatives Considered | Decision |
| Canonical | Context | Alternatives Considered | Decision |
MADR also requires Decision Drivers. Use the shared registry and selected
template as the ordering contract instead of assuming canonical headings.
Step 2: classify each input file
For each file, determine:
- Already on the selected profile (required semantic sections present) -> skip, report as "no changes needed".
- Marker says skip -> skip, report as "skipped per marker".
- Marker says advisory -> ask "advisory marker is on this file; migrate anyway?"
- Migratable -> identify which patterns apply (see next section).
Step 3: identify patterns
The skill body below documents the patterns observed in real-world legacy ADRs. Apply each pattern that fits, in this order. Do not invent new transformations.
Pattern A: inline status promotion
Source:
# ADR-NNN Title
**Status:** Accepted
**Date:** 2026-04-25
**Supersedes:** ADR-XXX (optional)Target:
# ADR-NNN Title
## Status
Accepted, 2026-04-25. Supersedes ADR-XXX (optional).If only **Status:** exists with no **Date:**, the Status section reads Accepted (without date).
Pattern B: alternatives inside Context
Source has a ### Alternatives considered: (or ### Alternatives considered and rejected) heading nested inside ## Context. Target: lift the entire block out, change ### to ## , and place the new top-level ## Alternatives Considered heading between ## Decision and ## Consequences. Preserve content verbatim; only the heading level and position change.
Pattern C: alternatives inside Consequences
Same as Pattern B but the source nests alternatives inside ## Consequences. Target: same restructure, place between Decision and Consequences.
Pattern D: Related to Related Decisions + References split
Source: a ## Related section that mixes ADR/TASK references with file paths, PR links, vendor doc URLs, internal docs.
Target: rename to ## Related Decisions. Move pure-external references (files, URLs, PRs that are not ADR or TASK identifiers) to a new ## References section that follows. Keep ADR-NNN and TASK-NNN entries in ## Related Decisions.
Heuristic for splitting:
- Lines starting with
ADR-,TASK-, or referencing those identifiers ->## Related Decisions. - Lines starting with backticks (file path), URL, or
PR/Issuereferences ->## References. - When ambiguous, leave in
## Related Decisions(safer default).
Pattern E: missing References with no inline content
If after Pattern D there are no external references to populate ## References, create the section with a placeholder:
## References
<!-- TODO: populate from inline citations or external sources cited in the body. -->Never invent references. The placeholder makes it clear to a human reviewer that this is a known gap.
Pattern F: missing Alternatives Considered with no source
If the source legitimately has no alternatives discussion anywhere, create the section with a placeholder:
## Alternatives Considered
<!-- TODO: document at least 2 alternatives that were considered and rejected, with reasoning. -->This is a real gap a human should fill, but the skill must not fabricate.
Guided Pattern G: unsupported MADR variant
Source is a MADR-shaped ADR (madr.github.io): YAML frontmatter carrying
status: / date:, plus ## Context and Problem Statement,
## Considered Options, ## Decision Outcome, and often
## Pros and Cons of the Options and ### Positive Consequences /
### Negative Consequences subsections. Standard MADR records are supported
directly and should use bin/adr-migrate --to-profile .... Use this mapping
only for an unknown or hybrid MADR variant that the semantic registry
cannot convert safely.
Mapping to semantic roles (content moves verbatim; target headings come from the selected profile):
| MADR source | Semantic target |
frontmatter status: + date: (or inline * Status: lines) | invariant Status; preserve and complete frontmatter |
## Context and Problem Statement plus ## Decision Drivers | context and drivers roles |
## Considered Options plus ## Pros and Cons of the Options | alternatives role; keep the chosen option marked |
## Decision Outcome ("Chosen option: ..., because ...") | decision role |
| positive/negative consequence subsections or bullets | consequences role |
## Links / ## More Information | split per Pattern D: ADR identifiers to ## Related Decisions, external links to ## References |
If the source has no Related Decisions or References content, apply
Patterns E / F TODO placeholders. Never invent rejection reasons that the
Pros and Cons section does not state; if an option has no documented cons,
carry it over with <!-- TODO: state why this option was rejected -->.
Guided Pattern H: minimal or unsupported Nygard variant
Source is a Nygard / adr-tools ADR: exactly ## Status, ## Context,
## Decision, ## Consequences, nothing else. Standard Nygard records are a
supported source profile. Prefer the deterministic CLI, which preserves those
four sections and adds the selected profile's explicit extension placeholders.
The four sections map directly to semantic roles and their content is
preserved verbatim. Missing target-profile sections are created with explicit
TODO or None placeholders:
## Alternatives Consideredbetween Decision and Consequences, via Pattern F's placeholder.## Related Decisionsafter Consequences, with- None.unless the Status or Context text references other ADRs (e.g. "Supersedes ADR-9"), in which case those references move here.## Referenceslast, via Pattern E's placeholder.
Nygard Status sections often contain supersession links ("Superseded by
[ADR-12]"). Keep them in ## Status as prose and mirror the ADR identifier
into ## Related Decisions.
Step 4: present the plan
Before applying any edit, show the user a per-file summary:
Proposed migration plan (3 files):
ADR-007-timer-based-task-scheduling.md
Pattern A: inline `**Status:**` -> `## Status` heading
Pattern D: `## Related` -> `## Related Decisions` + new `## References`
ADR-029-simple-xhr-ota-flash.md
Pattern A: inline `**Status:**` -> `## Status` heading
Pattern F: missing `## Alternatives Considered`, will create with TODO placeholder
ADR-058-nonblocking-pic-command-response.md
Pattern A: inline `**Status:**` -> `## Status` heading
Pattern F: missing `## Alternatives Considered`, will create with TODO placeholder
Pattern E: missing `## References`, will create with TODO placeholder
No `## Related Decisions` content found in source; will create with `- None.`
Confirm to apply (y/n)?If the user declines, stop without writing.
Step 5: apply edits
After confirmation, apply each transformation via Edit. One Edit per logical change, so the diff is reviewable. Report what was changed per file.
Step 6: post-migration verification
After all edits, suggest the user run /adr-kit:lint <path> to confirm the migrated files now PASS strictly. Do NOT run lint yourself: that is a separate skill the user invokes.
What you do not do
- You do not modify the body content of sections. Headings move; prose stays.
- You do not auto-fabricate Alternatives Considered or References content. Use TODO placeholders.
- You do not rename ADR files (Consistency-gate filename FAILs). Out of scope.
- You do not edit ADRs that already PASS strict.
- You do not invoke
/adr-kit:lintafter migration. The user decides when to verify.
Reporting format
Single-file migration:
ADR-007-timer-based-task-scheduling.md migrated.
Applied: Pattern A (Status promotion), Pattern D (Related split).
Run /adr-kit:lint on this file to verify.Directory migration:
Migrated 3 of 80 candidate files. 1 already on the target profile (skipped). 76 deferred (no patterns matched, manual review needed).
Applied:
ADR-007 (A, D)
ADR-029 (A, F)
ADR-058 (A, F, E, no Related content)
Skipped:
ADR-022 (already on the target profile)
Deferred (manual review): 76 files.
Reason: complex shape that did not match any of patterns A through H. Inspect by hand.
Run /adr-kit:lint docs/adr/ to confirm overall result.The aggregate's bottom line tells the user one concrete next step (run lint), never invents a status the migration did not actually achieve.
Edge cases
- Multiple inline metadata lines: source has
**Status:**,**Date:**,**Supersedes:**,**Amended by:**, etc. Fold all into the new## Statussection as a comma-separated sentence. Order: Status, date, supersedes/amended. - Empty Related section: source has
## Relatedwith no body or only whitespace. Target:## Related Decisionswith- None.body. - Anchor comments inline at top: source has a
Renumbered from ADR-XXX ...line before**Date:**. Fold into the new## Statussection as a trailing sentence: "Renumbered from ADR-XXX on YYYY-MM-DD to resolve duplicate numbering. Content unchanged." - Body has Markdown that confuses heading-detection: e.g. a
##inside a fenced code block. The skill treats only headings outside code fences as semantic sections. If unsure, ask the user. - Source uses
## Pros and Consor## Decision drivers: if the file matches the MADR shape, Pattern G consumes these (## Pros and Cons of the Optionsfeeds## Alternatives Considered,## Decision Driversfolds into## Context). Otherwise do not rename these; they are project-specific and the user can address custom subsections in a follow-up pass.
Anti-patterns to refuse
If the migration would require any of these, refuse and explain:
- Renaming ADR files. Out of scope; surfaces commit / cross-ref breakage.
- Modifying body prose ("the Decision section reads better if reorganised..."). Restructure shape only.
- Fabricating Alternatives or References. TODO placeholder is the answer.
- Skipping the user confirmation. Read-then-confirm is non-negotiable.
- Running
/adr-kit:lintautomatically after migration. The user decides.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

