Reversible Migration
JuliusBrussee/caveman
Implement reversible compatibility-safe transitions. Use for schema, data, API, protocol, configuration, or dependency migrations requiring rollback and…
Set up docs-ssot SSOT documentation structure — migrate existing docs, build, and validate
$ npx skills add hiromaily/go-crypto-wallet --skill docs-ssot -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install hiromaily/go-crypto-wallet docs-ssot --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/hiromaily/go-crypto-wallet.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/docs-ssot .claude/skills/docs-ssot && 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 "docs-ssot" agent skill from https://github.com/hiromaily/go-crypto-wallet/tree/main/.claude/skills/docs-ssot into .claude/skills/docs-ssot/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "docs-ssot", 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/hiromaily/go-crypto-wallet/tree/main/.claude/skills/docs-ssotType 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 hiromaily/go-crypto-wallet --skill docs-ssot -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install hiromaily/go-crypto-wallet docs-ssot --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hiromaily/go-crypto-wallet.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/docs-ssot .agents/skills/docs-ssot && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "docs-ssot" agent skill from https://github.com/hiromaily/go-crypto-wallet/tree/main/.claude/skills/docs-ssot into .agents/skills/docs-ssot/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "docs-ssot", 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 hiromaily/go-crypto-wallet --skill docs-ssot -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install hiromaily/go-crypto-wallet docs-ssot --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hiromaily/go-crypto-wallet.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/docs-ssot .cursor/skills/docs-ssot && 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 "docs-ssot" agent skill from https://github.com/hiromaily/go-crypto-wallet/tree/main/.claude/skills/docs-ssot into .cursor/skills/docs-ssot/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "docs-ssot", 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/hiromaily/go-crypto-wallet.git --path .claude/skills/docs-ssot--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 hiromaily/go-crypto-wallet --skill docs-ssot -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install hiromaily/go-crypto-wallet docs-ssot --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hiromaily/go-crypto-wallet.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/docs-ssot .gemini/skills/docs-ssot && 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 "docs-ssot" agent skill from https://github.com/hiromaily/go-crypto-wallet/tree/main/.claude/skills/docs-ssot into .gemini/skills/docs-ssot/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "docs-ssot", 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 hiromaily/go-crypto-wallet docs-ssotInstalls 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 hiromaily/go-crypto-wallet --skill docs-ssot -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/hiromaily/go-crypto-wallet.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/docs-ssot .github/skills/docs-ssot && 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 "docs-ssot" agent skill from https://github.com/hiromaily/go-crypto-wallet/tree/main/.claude/skills/docs-ssot into .github/skills/docs-ssot/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "docs-ssot", 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 hiromaily/go-crypto-wallet --skill docs-ssot -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install hiromaily/go-crypto-wallet docs-ssot --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hiromaily/go-crypto-wallet.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/docs-ssot .opencode/skills/docs-ssot && 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 "docs-ssot" agent skill from https://github.com/hiromaily/go-crypto-wallet/tree/main/.claude/skills/docs-ssot into .opencode/skills/docs-ssot/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "docs-ssot", 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.
docs-ssotSet up docs-ssot SSOT documentation structure — migrate existing docs, build, and validate
Docs Ssot is an agent skill from hiromaily/go-crypto-wallet. Set up docs-ssot SSOT documentation structure — migrate existing docs, build, and validate
Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: Cryptocurrency wallet for trading for Bitcoin, Bitcoin cash, Ethereum, ERC20, XRP Leger (Ripple). The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 798ab10. 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:
ReadWriteEditBash(docs-ssot *)Bash(make docs*)Bash(git diff *)From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitjqyqbrewgomakeFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.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.
Docs Ssot loads about 2.7k tokens when it runs. Until then it costs about 25 tokens; SKILL.md has 859 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 hiromaily/go-crypto-wallet at commit 798ab10, republished under its MIT licence (© hiromaily). 859 words, ~2,746 tokens.
.claude/skills/docs-ssot/SKILL.md (or your agent's skills folder).This skill migrates existing Markdown documentation into a modular Single Source of Truth (SSOT) structure managed by docs-ssot, then builds and validates the output.
docs-ssot in a new or existing repository (follow the main Workflow)SETUP.md) to an existing SSOT structure (follow Adding a new output file)docs-ssot build)| Command | Purpose |
|---|---|
docs-ssot migrate <files> | Decompose existing docs into SSOT section structure |
docs-ssot migrate --dry-run <files> | Preview migration without writing files |
docs-ssot validate | Dry-run: check all includes resolve (no files written) |
docs-ssot build | Generate all output files from templates |
docs-ssot check | Detect near-duplicate sections (SSOT violations) |
docs-ssot index | Show include relationships and orphan detection |
docs-ssot include <template> | Expand and print a template to stdout (debugging) |
Verify required tools are installed:
docs-ssot version # docs-ssot itself
jq --version # required by the generated-file protection hook
yq --version # required by the generated-file protection hook and lefthook checkInstall docs-ssot if missing:
# Homebrew (macOS/Linux)
brew tap hiromaily/tap && brew install docs-ssot
# or Go install
go install github.com/hiromaily/docs-ssot/cmd/docs-ssot@latestBefore running migration, check whether this repository already has a docs-ssot structure:
ls docsgen.yaml 2>/dev/null
ls template/sections/ 2>/dev/nullIf both exist, the repository is already (partially or fully) migrated. Do not run docs-ssot migrate on generated output files. Instead, skip to Step 5 to review the structure, or Step 8 to validate the current state.
If docsgen.yaml does not exist, or template/sections/ is empty or missing, proceed with Steps 3–6.
List Markdown files in the repository root:
ls *.mdCommon candidates: README.md, CLAUDE.md, AGENTS.md, SETUP.md, ARCHITECTURE.md
Do not migrate files that are already outputs in docsgen.yaml — migrating a build artifact instead of a source file will produce incorrect results.
First, preview without writing files:
docs-ssot migrate --dry-run README.md CLAUDE.mdReview the output to understand how sections will be categorised and which are detected as duplicates. Then run the actual migration:
docs-ssot migrate README.md CLAUDE.md AGENTS.mdThis will:
template/sections/<category>/template/pages/ with @include directivesdocsgen.yaml with build targetsdocsgen.yaml reference (the file created/updated by migration):
index:
output: template/INDEX.md # optional: generates include-relationship index
targets:
- input: template/pages/README.tpl.md
output: README.md
- input: template/pages/CLAUDE.tpl.md
output: CLAUDE.mdAdd or remove targets to control which files are generated.
docs-ssot indexInspect:
template/sections/ — modular section files (edit these, not the generated outputs)template/pages/*.tpl.md — template files defining document structuredocsgen.yaml — build targets mapping templates to output filesRun this before creating any new section file. The docs-ssot migrate command deduplicates across the files it processes, but any additional content you create manually must be checked:
docs-ssot checkAlso inspect existing sections:
ls template/sections/Rule: If content for a new section already exists in a section used by another template (e.g., installation-guide.md already covers prerequisites and setup), do not create a duplicate. Instead, have the new template include the existing section:
<!-- template/pages/SETUP.tpl.md -->
<!-- @include: ../sections/development/installation-guide.md -->
<!-- @include: ../sections/development/setup-release.md -->Only create a new section file when the content is genuinely new and not covered anywhere else.
All section files under template/sections/ must start at heading level 2 (##).
## My Section Title ← ✅ correct
# My Section Title ← ❌ wrongWhy: Section files are embedded into larger documents where # is reserved for the document title. Starting at ## means most includes need no level parameter.
Exception — when a section file is used as a standalone output (e.g., .claude/rules/*.md), use level=-1 in the template to shift ## → #:
<!-- @include: ../sections/ai/rules/docs.md level=-1 -->First validate (dry-run — checks includes without writing files):
docs-ssot validateIf validation passes, build:
docs-ssot build
# or, if a Makefile target exists:
make docsVerify output is correct:
git diff README.md CLAUDE.mdNever edit generated outputs (README.md, CLAUDE.md, or any docsgen.yaml output) directly — they are overwritten on every build.
Templates use include directives to compose sections:
<!-- @include: ../sections/project/overview.md -->
<!-- @include: ../sections/development/ -->
<!-- @include: ../sections/**/*.md level=+1 -->| Parameter | Effect |
|---|---|
level=+1 | ## → ### (deepen by one) |
level=-1 | ### → ## (shallow by one) |
level=0 | no change (same as omitting) |
Paths are resolved relative to the file containing the directive. Includes are expanded recursively.
To add a new generated file (e.g., SETUP.md) to an existing SSOT structure:
template/pages/SETUP.tpl.md, including existing sections where applicable.docsgen.yaml:- input: template/pages/SETUP.tpl.md
output: SETUP.mddocs-ssot validate && docs-ssot build
git diff SETUP.mdIf the repository has a VitePress site, detect it by checking for docs/.vitepress/:
ls docs/.vitepress/ 2>/dev/nullIf present, convert each docs/ page from standalone content into a thin @include wrapper so template/sections/ becomes the single source of truth for both the generated root-level files and the VitePress site.
Before (docs/guide/installation.md with standalone content):
# Installation
## Prerequisites
...full content here...After (docs/guide/installation.md as a thin wrapper):
<!-- @include: ../../template/sections/development/installation-guide.md -->The canonical content lives in template/sections/ and is referenced by any template that needs it.
Prevent AI agents from directly editing generated files. The hook reads docsgen.yaml at runtime so the block list stays in sync automatically.
Create .claude/hooks/prevent-generated-edit.sh:
#!/bin/sh
# Blocks Edit and Write tool use on auto-generated files.
# Generated files are defined as outputs in docsgen.yaml.
# Edit the source files in template/ instead, then run `make docs`.
# Requires: jq, yq
command -v jq >/dev/null 2>&1 || { echo "jq required but not found — hook inactive" >&2; exit 0; }
command -v yq >/dev/null 2>&1 || { echo "yq required but not found — hook inactive" >&2; exit 0; }
FILE=$(echo "$TOOL_INPUT" | jq -r '.file_path // empty')
if [ -z "$FILE" ]; then
exit 0
fi
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
REL_PATH="${FILE#"${REPO_ROOT}/"}"
CONFIG="docsgen.yaml"
if [ ! -f "$CONFIG" ]; then
exit 0
fi
GENERATED=$(yq -r '.targets[].output' "$CONFIG" 2>/dev/null)
if [ -z "$GENERATED" ]; then
exit 0
fi
if echo "$GENERATED" | grep -Fqx "$REL_PATH"; then
echo "BLOCKED: '$REL_PATH' is auto-generated by docs-ssot. Edit the source in template/ instead, then run 'make docs'." >&2
exit 2
fi
exit 0Make it executable:
chmod +x .claude/hooks/prevent-generated-edit.shRegister in .claude/settings.json. If the file already exists, merge into the existing hooks.PreToolUse array rather than overwriting:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit",
"hooks": [
{ "type": "command", "command": ".claude/hooks/prevent-generated-edit.sh" }
]
},
{
"matcher": "Write",
"hooks": [
{ "type": "command", "command": ".claude/hooks/prevent-generated-edit.sh" }
]
}
]
}
}Add to lefthook.yml to fail a push when generated files are stale. Derive the file list from docsgen.yaml so it stays in sync automatically:
pre-push:
commands:
docs-check:
glob: "{template/**/*,docsgen.yaml}"
run: |
docs-ssot build
docs-ssot index
if ! yq -r '(.targets[].output, .index.output) | select(. != null)' docsgen.yaml | xargs -I {} git diff --quiet {}; then
echo "ERROR: Generated files are out of date. Run 'make docs' and commit the changes." >&2
exit 1
fiAdd a note so contributors know the documentation is managed by docs-ssot.
Find the section file for the README intro:
head -5 template/pages/README.tpl.md # the first @include is the intro sectionOpen that section file and append:
> **Documentation** is managed as a Single Source of Truth using [docs-ssot](https://github.com/hiromaily/docs-ssot).
> Files such as `README.md`, `CLAUDE.md`, and `ARCHITECTURE.md` are auto-generated —
> edit the source files under `template/` and run `make docs` to regenerate.Then rebuild:
docs-ssot build© hiromaily, MIT. 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 .claude/skills/docs-ssot of hiromaily/go-crypto-wallet.
Open the folder on GitHubat commit 798ab10
Docs Ssot 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 |
|---|---|---|---|---|---|---|
| Docs Ssot this skillhiromaily/go-crypto-wallet | 128 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Reversible MigrationJuliusBrussee/caveman | 111k | 1 repos | ~196 | Automated safety check: Pass | Apache-2.0 | |
| Database Migrationsaffaan-m/ECC | 276k | 4 repos | ~3k | Automated safety check: Pass | MIT | |
| Database Migrationsaffaan-m/ECC | 276k | 1 repos | ~2.4k | Automated safety check: Pass | MIT | |
| Safe Database Migration Patternsaffaan-m/ECC | 276k | — | ~3.3k | Automated safety check: Pass | MIT | |
| Migrate Createruvnet/ruflo | 74k | — | ~583 | Automated safety check: Notes | MIT |
JuliusBrussee/caveman
Implement reversible compatibility-safe transitions. Use for schema, data, API, protocol, configuration, or dependency migrations requiring rollback and…
affaan-m/ECC
Safe, reversible database migration patterns: forward-only production changes, expand-contract zero-downtime renames, concurrent indexes, batched backfills, and per-tool workflows for PostgreSQL…
affaan-m/ECC
Şema değişiklikleri, veri migration'ları, rollback'ler ve PostgreSQL, MySQL ve yaygın ORM'ler (Prisma, Drizzle, Django, TypeORM, golang-migrate) arasında sıfır kesinti deployment'ları için…
affaan-m/ECC
Rules and examples for safe, reversible schema changes in production: zero-downtime column and index changes, large data backfills and ORM migration workflows.
ruvnet/ruflo
Create a new sequentially numbered database migration with up/down SQL files
kortix-ai/suna
How to change the database schema in this repo. An agent skill from kortix-ai/suna.
hiromaily/go-crypto-wallet
Bitcoin Cash (BCH) API implementation rules. An agent skill from hiromaily/go-crypto-wallet.
hiromaily/go-crypto-wallet
Critical Bitcoin terminology rules to prevent confusion between bech32m (encoding) and taproot (address type).
hiromaily/go-crypto-wallet
Database schema and migration workflow. An agent skill from hiromaily/go-crypto-wallet.
hiromaily/go-crypto-wallet
CI/CD and DevOps workflow. An agent skill from hiromaily/go-crypto-wallet.
hiromaily/go-crypto-wallet
Documentation update workflow. An agent skill from hiromaily/go-crypto-wallet.
hiromaily/go-crypto-wallet
Address PR review comments by selecting appropriate skills based on modified files.
Set up docs-ssot SSOT documentation structure — migrate existing docs, build, and validate. Docs Ssot is an agent skill from hiromaily/go-crypto-wallet.
Run `npx skills add hiromaily/go-crypto-wallet --skill docs-ssot -a claude-code`. Or copy the skill folder (.claude/skills/docs-ssot in hiromaily/go-crypto-wallet) into .claude/skills/docs-ssot in your project. Claude Code loads it when a task matches its description.
Run `npx skills add hiromaily/go-crypto-wallet --skill docs-ssot -a codex`. Or copy the skill folder (.claude/skills/docs-ssot in hiromaily/go-crypto-wallet) into .agents/skills/docs-ssot 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 hiromaily/go-crypto-wallet --skill docs-ssot -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/docs-ssot, .gemini/skills/docs-ssot, .github/skills/docs-ssot and .opencode/skills/docs-ssot in your project.
Going by SKILL.md and its folder, Docs Ssot needs the command-line tools its instructions call (git, jq, yq, brew, go and make). Its frontmatter pre-approves these tools: Read, Write, Edit, Bash(docs-ssot *), Bash(make docs*), Bash(git diff *).
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. 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.
Docs Ssot is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k 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 Docs Ssot: Reversible Migration (JuliusBrussee/caveman, 111k stars), Database Migrations (affaan-m/ECC, 276k stars), Database Migrations (affaan-m/ECC, 276k stars) and Safe Database Migration Patterns (affaan-m/ECC, 276k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
hiromaily (a GitHub user) maintains it in hiromaily/go-crypto-wallet, which has 128 GitHub stars. The repository holds 17 skills in this directory. The repository was last updated on April 22, 2026.
Source: hiromaily/go-crypto-wallet on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.