Living Docs Governance
qshanx/docs-governance
把长期项目的文档当成一个小系统来维护,防止文档腐烂——四份各司其职的脊柱文件(CLAUDE.md 共享章程 / CLAUDEMAP.md 地图 / PROJECTSTATUS.md 健康仪表盘 / PROJECTLOG.md 流水账)+ Codex 的 AGENTS.md 入口桥接 + 固定读序,并按需连接 ARCHITECTURE、CONTEXT、ADR、契约、测试、回归和 Issue…
Run a Tier 1 or Tier 2 feature end to end — feature level, story level, parallelism, integration, and retrospective.
$ npx skills add Inebrio/Routerly --skill feature-lifecycle -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Inebrio/Routerly feature-lifecycle --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/Inebrio/Routerly.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/feature-lifecycle .claude/skills/feature-lifecycle && 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 "feature-lifecycle" agent skill from https://github.com/Inebrio/Routerly/tree/develop/.agents/skills/feature-lifecycle into .claude/skills/feature-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "feature-lifecycle", 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/Inebrio/Routerly/tree/develop/.agents/skills/feature-lifecycleType 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 Inebrio/Routerly --skill feature-lifecycle -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Inebrio/Routerly feature-lifecycle --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Inebrio/Routerly.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/feature-lifecycle .agents/skills/feature-lifecycle && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "feature-lifecycle" agent skill from https://github.com/Inebrio/Routerly/tree/develop/.agents/skills/feature-lifecycle into .agents/skills/feature-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "feature-lifecycle", 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 Inebrio/Routerly --skill feature-lifecycle -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Inebrio/Routerly feature-lifecycle --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Inebrio/Routerly.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/feature-lifecycle .cursor/skills/feature-lifecycle && 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 "feature-lifecycle" agent skill from https://github.com/Inebrio/Routerly/tree/develop/.agents/skills/feature-lifecycle into .cursor/skills/feature-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "feature-lifecycle", 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/Inebrio/Routerly.git --path .agents/skills/feature-lifecycle--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 Inebrio/Routerly --skill feature-lifecycle -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Inebrio/Routerly feature-lifecycle --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Inebrio/Routerly.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/feature-lifecycle .gemini/skills/feature-lifecycle && 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 "feature-lifecycle" agent skill from https://github.com/Inebrio/Routerly/tree/develop/.agents/skills/feature-lifecycle into .gemini/skills/feature-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "feature-lifecycle", 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 Inebrio/Routerly feature-lifecycleInstalls 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 Inebrio/Routerly --skill feature-lifecycle -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Inebrio/Routerly.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/feature-lifecycle .github/skills/feature-lifecycle && 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 "feature-lifecycle" agent skill from https://github.com/Inebrio/Routerly/tree/develop/.agents/skills/feature-lifecycle into .github/skills/feature-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "feature-lifecycle", 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 Inebrio/Routerly --skill feature-lifecycle -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Inebrio/Routerly feature-lifecycle --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Inebrio/Routerly.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/feature-lifecycle .opencode/skills/feature-lifecycle && 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 "feature-lifecycle" agent skill from https://github.com/Inebrio/Routerly/tree/develop/.agents/skills/feature-lifecycle into .opencode/skills/feature-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "feature-lifecycle", 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.
feature-lifecycleRun a Tier 1 or Tier 2 feature end to end — feature level, story level, parallelism, integration, and retrospective.
Feature Lifecycle is an agent skill from Inebrio/Routerly. Run a Tier 1 or Tier 2 feature end to end — feature level, story level, parallelism, integration, and retrospective. Use when you are running a multi-agent feature per AGENTS.md's Workflow tiers, not for Tier 0 inline work.
Its SKILL.md is about 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 Agent Workflows, covering Retrospectives and Agent instruction files. The repository describes itself as: Self-hosted LLM gateway that routes requests across AI providers (OpenAI, Anthropic, Gemini, Mistral, Ollama) using intelligent multi-policy scoring — including an LLM-native… The licence is AGPL-3.0.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit bcf58f1. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
nodegitshdockerFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and docker, which can reach the network depending on how they are called.
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.
Feature Lifecycle loads about 3k tokens when it runs. Until then it costs about 60 tokens; SKILL.md has 1,882 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 Inebrio/Routerly at commit bcf58f1, republished under its AGPL-3.0 licence (© Inebrio). 1,882 words, ~2,986 tokens.
.claude/skills/feature-lifecycle/SKILL.md (or your agent's skills folder).The mechanics for running a Tier 1 or Tier 2 feature, once the tier is picked
per AGENTS.md's Workflow section. See story-lifecycle for what a single
story does inside its own worktree; this skill covers the layer above it —
feature level, parallelism across stories, integration, and the retrospective.
NEEDS-INPUT, put its questions to the user with AskUserQuestion: state the problem, the options with their consequences, and the recommendation. Send the answers back to the same agent and let it finish.Each story runs the story-lifecycle skill in its own worktree, branch story/<feature>/<story-id>, its own ports, its own ROUTERLY_HOME:
node .Codex/scripts/story.mjs claim <story-id> --feature <feature> --base 0.4.0remediation-loop, three iterations maximum, then escalate to the user with what survived and why.story.mjs state <id> done and story.mjs release <id>. qa-engineer and docs-writer do not run per story — every story merges as fast as validation clears it, and formalization happens once, at the feature-level user-check gate below, after every story is in.An agent returns a summary and a path, never the report itself. Its deliverable is already on disk by rule; returning the full text a second time puts it into the main session's context, where it is then re-read on every later turn. The main session is 27% of this feature's input tokens, more than any agent role except the engineers, and that is what most of it is. Ten lines and the path to the file is the whole contract: verdict, blocking count, and where to read the rest.
This is a hard cap, not a target: no pasted file contents, no blueprint excerpts, no diffs, no findings lists in the return message, whatever the reason feels compelling in the moment. If the summary would need more than ten lines to be useful, the extra belongs in the file, not the message: the main session reads the file when it needs the detail, once, not on every later turn by way of the conversation. A follow-up feature measured this rule "in force" and still watched the main session's share grow 27% → 32%; a rule that erodes under its own weight needs a harder edge, not a reminder.
An agent's report is not evidence. When an agent returns, the main session checks the worktree before believing it: git status --short plus the files the blueprint said would exist. Agents have returned confident summaries for files they never wrote, and have returned nothing at all after ninety minutes of work. Both are caught by looking, and only by looking. An agent that returns without a result is resumed with an order to write the deliverable to disk before composing any prose.
Stories are the unit, not features. Independent stories run at once; the dependency graph decides what is allowed to run in parallel, and the machine decides how many of those actually do.
Concurrency is measured, not chosen. Between one and six, never a fixed number. Before every dispatch:
sh .Codex/scripts/capacity.shIt samples for five seconds and prints the slot count, the reason it is that number, how many stories are already in flight, and how many more to dispatch. The exit code is the slot count, so it can gate a loop. Dispatch what it says and not one more. If it says zero more, the answer is to let the running stories finish, never to push the seventh and hope.
The signals it reads, and why each is there:
kern.memorystatus_vm_pressure_level) is the one to trust over the others, because it is what the OS itself acts on. WARN caps at three, CRITICAL at one.Two things the script cannot see, so they are yours to apply on top of it:
docker buildx --platform linux/amd64,linux/arm64 on this machine froze it hard: buildkit OOM-killed in an eight-gigabyte VM, load average fifty-nine, swap at thirteen gigabytes of fourteen. If a story needs one, it runs alone or it moves to CI.A slot is held by a story's implementation, not by its paperwork. Once a story passes validation it merges and its slot frees immediately — nothing holds a slot open waiting on a human or on tests and documentation, because neither runs per story any more. Stories touching the same file or the same contract run sequentially, in graph order. The registry (.Codex/registry.json, main checkout, lock-protected) is what stops two sessions taking the same story or the same ports.
Merging is the main session's job, never a teammate's. When a story passes: merge its branch into the integration branch in dependency order, then story.mjs state <id> done and story.mjs release <id>. release refuses a worktree holding unmerged work; merge first, never force past it.
Finished work goes back to its base branch immediately. This is not a gate. A story that has passed validation with zero blocking findings is merged as soon as it passes, without asking. Asking costs a round trip and leaves the branch drifting from a base that other stories are still moving; the user's instruction is that anything finished is always carried back to the branch it started from. The two things that still stop a merge are a blocking finding and a genuine conflict, and both are work, not permission.
Two mechanical notes, both learned by hitting them:
merge(RA-07): ... is rejected: the type must be one of the conventional set. Use the type of the change being merged (fix, feat, docs) and name the branch in the body.story.mjs state has merging and blocked for a reason. capacity.sh counts only in-progress against the machine's slots. A story that has passed and is waiting to merge is merging; a story parked on CI or an external gate is blocked. Leaving either at in-progress makes the capacity script refuse dispatches the machine could have carried, which is how this feature spent a stretch reporting "dispatch 0 more" with nothing actually running.Once every story that can merge locally has merged (git branch --merged <base> against what the analysis scoped), stop dispatching and report to the user: what merged, what's blocked and why, and how to run and test the integration branch themselves. This is the feature's one formalization gate — nothing past it runs without the user's go-ahead, and it replaces asking per story, which was slower and produced the same information in smaller, more expensive pieces.
On go-ahead: dispatch qa-engineer and docs-writer against the integration branch, covering everything the feature shipped, in parallel with each other. They commit directly to the integration branch; no story worktree is reopened for this. Then the retrospective, below.
A feature closes when every story is done, the integration branch builds and its tests pass, and the user approves. Specs stay on disk after closing: they are gitignored and they are the record of why the code looks the way it does.
Human gates: two. The analyst's questions, and the single feature-level user-check gate above, before qa-engineer and docs-writer. Everything else runs without asking.
Every merged story gets a retrospective entry, written by the main session, appended to .Codex/specs/<feature>/04-retrospective.md at merge time. This is a phase of the process, not a courtesy. A feature does not close without it.
The entry answers four questions and nothing else:
Where did the wall-clock and the tokens actually go? From
node .Codex/scripts/agent-cost.mjs, never from memory. It reports minutes,
tokens in and tokens out for every point in the process, per story and per
role, plus resumes and stalls. The first time it was run it contradicted the
entry written from impressions the day before: stalls were 10% of the cost,
not the headline, and one story out of eighteen was 37%.
Run it before the agents' own transcripts are reaped. Nested agents, which is to say the engineers, exist nowhere else.
What was rework? An agent that stalled and needed resuming, a blueprint corrected mid-flight, a validator round that a better prompt would have made unnecessary, two agents solving the same problem twice in different places. Name it and say what it cost.
What changes because of it? A concrete edit: to this file, to an agent definition, to a skill, to a blueprint template. If nothing changes, write "nothing changes" and the reason. A retrospective whose every entry is "went well" is not being written honestly.
What is now known that the next story should not rediscover? Goes to .ai/memory.md if it is about the code, stays here if it is about the process.
The rule that makes it worth anything: a lesson that does not become an edit is not a lesson. If three stories in a row report the same waste, the process is what is broken, and fixing it takes priority over the next story.
Report the retrospective to the user in chat when it is written. The user is the one deciding whether the process is worth what it costs, and cannot decide that from a file they were never shown.
Interrupt policy: stop and explain only when a story is unachievable for architectural or irreversible reasons. Give the exact problem, why it blocks, and the options with tradeoffs. Never interrupt for ordinary implementation difficulty: the remediation loop handles that.
© Inebrio, AGPL-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 .agents/skills/feature-lifecycle of Inebrio/Routerly.
Open the folder on GitHubat commit bcf58f1
Feature Lifecycle 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 |
|---|---|---|---|---|---|---|
| Feature Lifecycle this skillInebrio/Routerly | 100 | — | ~3k | Automated safety check: Pass | AGPL-3.0 | |
| Living Docs Governanceqshanx/docs-governance | 132 | — | ~4.1k | Automated safety check: Pass | MIT | |
| Retrospective Codifymizchi/skills | 356 | — | ~3.2k | Automated safety check: Pass | None | |
| Refit Environment RetrospectiveYeachan-Heo/oh-my-claudecode | 40k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Codex Retrospectivemajiayu000/spellbook | 286 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Agent Development SpecificationSmartSunruiyang/Agent-development-specification | 150 | — | ~2.5k | Automated safety check: Pass | MIT |
qshanx/docs-governance
把长期项目的文档当成一个小系统来维护,防止文档腐烂——四份各司其职的脊柱文件(CLAUDE.md 共享章程 / CLAUDEMAP.md 地图 / PROJECTSTATUS.md 健康仪表盘 / PROJECTLOG.md 流水账)+ Codex 的 AGENTS.md 入口桥接 + 固定读序,并按需连接 ARCHITECTURE、CONTEXT、ADR、契约、测试、回归和 Issue…
mizchi/skills
Pair "what failed first" with "what finally worked" and codify the should-have-known-it insight as an ast-grep rule, a skill, or a CLAUDE.md rule.
Yeachan-Heo/oh-my-claudecode
Reads an agent environment's own traces, friction reports and logs across sessions, then proposes fixes on the surface that owns each one, only with your approval.
majiayu000/spellbook
A skill your agent uses when you want Codex to review its own recent history (last N days or specific period) and improve its behavior.
SmartSunruiyang/Agent-development-specification
Bootstraps the Day-0 agent-governance + documentation scaffold for ANY project on ANY stack.
notque/vexjoy-agent
Process: retrospectives, session handoff, pair programming, subagent-driven development, condition-based waiting.
Inebrio/Routerly
Where documentation lives in this repository, how a page is structured, and what a change owes the docs.
Inebrio/Routerly
Run one user story end to end in its own worktree, from claim to merge.
Inebrio/Routerly
Where tests live in this repository, how to run them, and what a story owes in coverage.
Inebrio/Routerly
How to validate a story against its criteria and write the report, including what counts as evidence and what counts as blocking.
Inebrio/Routerly
Shape of a feature analysis document (00-analysis.md). An agent skill from Inebrio/Routerly.
Inebrio/Routerly
Shape of a story blueprint, the technical plan an orchestrator executes.
Run a Tier 1 or Tier 2 feature end to end — feature level, story level, parallelism, integration, and retrospective. Feature Lifecycle is an agent skill from Inebrio/Routerly. Run a Tier 1 or Tier 2 feature end to end — feature level, story level, parallelism, integration, and retrospective.
Feature Lifecycle fits situations like: you are running a multi-agent feature per AGENTS.mds Workflow tiers; not for Tier 0 inline work.
Run `npx skills add Inebrio/Routerly --skill feature-lifecycle -a claude-code`. Or copy the skill folder (.agents/skills/feature-lifecycle in Inebrio/Routerly) into .claude/skills/feature-lifecycle in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Inebrio/Routerly --skill feature-lifecycle -a codex`. Or copy the skill folder (.agents/skills/feature-lifecycle in Inebrio/Routerly) into .agents/skills/feature-lifecycle 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 Inebrio/Routerly --skill feature-lifecycle -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/feature-lifecycle, .gemini/skills/feature-lifecycle, .github/skills/feature-lifecycle and .opencode/skills/feature-lifecycle in your project.
Going by SKILL.md and its folder, Feature Lifecycle needs the command-line tools its instructions call (node, git, sh and docker). Our summary lists: Docker.
SKILL.md contains no URLs. Its commands use git and docker, which can reach the network depending on how they are called. 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.
Feature Lifecycle is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k 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 Feature Lifecycle: Living Docs Governance (qshanx/docs-governance, 132 stars), Retrospective Codify (mizchi/skills, 356 stars), Refit Environment Retrospective (Yeachan-Heo/oh-my-claudecode, 40k stars) and Codex Retrospective (majiayu000/spellbook, 286 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Inebrio (a GitHub organization) maintains it in Inebrio/Routerly, which has 100 GitHub stars. The repository holds 17 skills in this directory. The repository was last updated on October 6, 2026.
Source: Inebrio/Routerly on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.