Agent skill

Wf Spec Housekeeping

by changkun in changkun/wallfacer

Repair the numbering of a specs/ directory: give name-only specs a stable NNN id, retire terminal specs into .archive/ keeping their number, fix the cross-references the moves break, and optionally…

MITAuto-check passedDevelopment

Install Wf Spec Housekeeping

skills CLI
$ npx skills add changkun/wallfacer --skill wf-spec-housekeeping -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install changkun/wallfacer wf-spec-housekeeping --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/changkun/wallfacer.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/wf-spec-housekeeping .claude/skills/wf-spec-housekeeping && rm -rf skills-src

Use ~/.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/

Facts

Skill name
wf-spec-housekeeping
GitHub stars
112
Token cost
~3k tokens
SKILL.md length
1,234 words
Files
1
Skills in repo
14
Repo updated
First seen
Licence
MIT

At a glance

Repair the numbering of a specs/ directory: give name-only specs a stable NNN id, retire terminal specs into .archive/ keeping their number, fix the cross-references the moves break, and optionally…

  • Works in 10 steps: Fix the scope → Inventory → Classify — terminal vs live → …
  • Development work in your project
  • SKILL.md covers Step 0: Fix the scope, Step 1: Inventory, Step 2: Classify — terminal vs… and Step 3: Assign numbers, plus 8 more sections
  • Calls git

What it does

Wf Spec Housekeeping is an agent skill from changkun/wallfacer. Repair the numbering of a specs/ directory: give name-only specs a stable NNN id, retire terminal specs into .archive/ keeping their number, fix the cross-references the moves break, and optionally rebuild the index in number order. Moves files and commits. Operates on one directory at a time, so it works whether specs sit flat under specs/ or inside a track.

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 Development. The repository describes itself as: Chat, specs, tasks, and code. An autonomous engineering platform. Full autonomy when you trust it. Full control when you don't. The licence is MIT.

When your agent uses it

  • Development work in your project

Example prompts

  • “/wf-spec-housekeeping”

Requirements

  • Pre-approved tools (allowed-tools): Read, Grep, Glob, Edit, Write, Agent, Bash(ls *), Bash(git mv *), Bash(git add *), Bash(git restore *), Bash(git commit *), Bash(git status *), Bash(git log *), Bash(git push *), Bash(grep *), Bash(sed *), Bash(awk *), Bash(perl *), Bash(cat *), Bash(wc *), Bash(sort *), Bash(uniq *), Bash(cut *), Bash(basename *)

Workflow steps

10 steps, taken from the step headings in SKILL.md.

  1. Fix the scope
  2. Inventory
  3. Classify — terminal vs live
  4. Assign numbers
  5. Cross-reference grep BEFORE renaming (the step that blocks)
  6. Move with git mv and fix same-repo references
  7. Verify the moves (do this before committing)
  8. Commit the numbering pass (atomic)
  9. Rebuild README as a clean index (skip if --number-only)
  10. Verify the README, then commit

What it can do on your machine

Read from SKILL.md and the folder at commit 9fc9f06. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Grep
    • Glob
    • Edit
    • Write
    • Agent
    • Bash(ls *)
    • Bash(git mv *)
    • Bash(git add *)
    • Bash(git restore *)

    …and 14 more on the same allowed-tools line.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Wf Spec Housekeeping loads about 3k tokens when it runs. Until then it costs about 96 tokens; SKILL.md has 1,234 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~96
When it runs · the whole SKILL.md, loaded when a task matches
~3k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from changkun/wallfacer at commit 9fc9f06, republished under its MIT licence (© changkun). 1,234 words, ~2,968 tokens.

Download SKILL.mdSave it as .claude/skills/wf-spec-housekeeping/SKILL.md (or your agent's skills folder).
name
wf-spec-housekeeping
description
Repair the numbering of a specs/ directory: give name-only specs a stable NNN id, retire terminal specs into .archive/ keeping their number, fix the cross-references the moves break, and optionally rebuild the index in number order. Moves files and commits. Operates on one directory at a time, so it works whether specs sit flat under specs/ or inside a track.
allowed-tools
Read, Grep, Glob, Edit, Write, Agent, Bash(ls *), Bash(git mv *), Bash(git add *), Bash(git restore *), Bash(git commit *), Bash(git status *), Bash(git log *), Bash(git push *), Bash(grep *), Bash(sed *), Bash(awk *), Bash(perl *), Bash(cat *), Bash(wc *), Bash(sort *), Bash(uniq *), Bash(cut *), Bash(basename *)
argument-hint
[--number-only | --index-only] [target-dir]

Specs housekeeping

Bring one specs directory back to a single invariant: every spec in it is NNN-name.md in that directory's own number space; active specs stay in place, terminal specs retire under .archive/ but keep their number so depends_on: frontmatter still resolves. Then rebuild the index for that directory in number order.

The scope is a directory, not a repo. Numbering is a per-directory reading order that composes with track grouping: specs/local/003-live-serve.md is both grouped and numbered, and specs/local/003-… and specs/cloud/003-… are separate number spaces that do not collide. Whatever moves here, the dependency graph is unaffected — depends_on paths are repo-root-relative and form one DAG across the whole tree, so keeping numbers stable across an archive move is what keeps that graph resolving.

$ARGUMENTS may contain a mode flag and/or a target directory:

  • default (no flag): do both the numbering pass and the README rebuild.
  • --number-only: number + archive + fix references; skip the README rebuild.
  • --index-only: rebuild the README index only; assume numbering is already clean.
  • a path: operate on that directory — either another repo's specs/, or a single track inside one (specs/local/).

This skill mutates files, renames with history, and commits. Work on main only if that is the repo's convention (check git log); otherwise branch first.

Step 0: Fix the scope

Decide which single directory to work on. A path in $ARGUMENTS names it directly; otherwise use specs/ itself. Glob that directory's own *.md (not recursively — sub-directories are separate scopes, and child specs under a <parent>/ folder belong to their parent, not to this number space).

Then read the intent already in that directory:

  • Some or all specs already carry an NNN- prefix → it has adopted numbering; proceed to make it consistent.
  • No spec carries one → adopting numbering is a new convention, not a repair. Say so and confirm with the user before renaming anything.

A directory full of track sub-directories and no specs of its own has nothing to number. Say which sub-directories are candidates and let the user pick one, rather than recursing on your own.

If the repository, or a sibling repository you can read, already has a specs/README.md, use it as the reference shape for the index. Otherwise use this shape: a status-legend line plus one | # | Spec | Status | table ordered by number, active rows linking to the root and archived rows into .archive/.

Step 1: Inventory

Extract (number, location, filename, status, title) for every spec. Numbers come from the NNN filename prefix; name-only files have none yet.

bash
cd <repo>/specs
meta() { local loc="$1"; shift; for f in "$@"; do
  n=$(basename "$f" | grep -oE '^[0-9]+')
  t=$(grep -m1 '^title:' "$f" | sed 's/^title: *//; s/^"//; s/"$//')
  s=$(grep -m1 '^status:' "$f" | sed 's/^status: *//; s/ *$//')
  printf '%s\t%s\t%s\t%s\t%s\n' "${n:-NONE}" "$loc" "$(basename "$f")" "${s:-none}" "$t"
done; }
meta root    $(ls [0-9]*.md 2>/dev/null)      # numbered active
meta root    $(ls *.md 2>/dev/null | grep -vE '^[0-9]|^README')  # NAME-ONLY: the drift
meta archive $(ls .archive/[0-9]*.md 2>/dev/null)

The name-only list is the work. For each, read its frontmatter status.

Step 2: Classify — terminal vs live

Status vocab varies by repo; map onto two buckets:

  • Terminal (archive it): complete, shipped, implemented, superseded, abandoned, archived, stale, deferred. Also treat a draft/drafted spec that carries an Outcome section (shipped-but-status-stale) as terminal, and flip its status to complete, the lifecycle status for shipped work, when you move it.
  • Live (keep at the root, just give it a number if it lacks one): vague, drafted/draft with no Outcome, validated, testing, in-progress.

When a name-only spec's status is ambiguous, read the body tail for an ## Outcome / "Done"/"shipped" signal before deciding. If still unclear, ask.

Step 3: Assign numbers

Numbers are stable IDs; never renumber an existing spec. Find the highest number in use across both the root and .archive/, and append from max+1 in created-date order (read each created: field). Created-order is a good default because it keeps a superseding spec after the specs it supersedes; contiguous same-family numbering is an equally fine alternative.

Step 4: Cross-reference grep BEFORE renaming (the step that blocks)

A name-only spec is often a cross-repo companion — the same bare filename exists in sibling repos, and its own frontmatter depends_on/affects may point across ../. Renaming can strand references. Grep the whole workspace for every basename first:

bash
cd <workspace-root>   # the dir that holds all sibling repos, e.g. ../
for b in <basename1> <basename2> ...; do
  echo "=== $b.md ==="
  grep -rIn --exclude-dir=node_modules --exclude-dir=.git "$b\.md" .
done

Triage the hits:

  • Same-repo hard links — this repo's own frontmatter (supersedes:, superseded_by:, depends_on:), README rows, and internal doc links. You must fix every one of these in the rename commit.
  • Sibling-repo index/prose listings (another repo's README pointing at thisrepo/specs/name.md). These are usually already stale ecosystem-wide and are that repo's housekeeping, not yours. Do not edit sibling repos; note them for the user instead. (If the ecosystem convention is that every repo numbers its own copy, your rename matches it — say so.)
Show full SKILL.md (524 more words)Show less

Step 5: Move with git mv and fix same-repo references

bash
git mv name.md .archive/NNN-name.md   # history follows; one per file

Then, in the same working set, fix every same-repo reference found in Step 4:

  • superseded_by: / supersedes: / depends_on: frontmatter paths that pointed at the old location (use the repo's path convention — usually repo-root-relative specs/.archive/NNN-name.md).
  • README table rows and internal docs/** markdown links.
  • Flip any shipped-but-draft status to complete.

Leave live-but-newly-numbered specs at the root: git mv name.md NNN-name.md.

Step 6: Verify the moves (do this before committing)

bash
# a) every same-repo depends_on / supersede target still resolves
for f in specs/[0-9]*.md specs/.archive/[0-9]*.md; do
  awk '/^(depends_on|supersedes):/{c=1;next} /^[a-z_]+:/{c=0}
       c&&/^ *- /{gsub(/^ *- */,"");gsub(/"/,"");print}
       /^superseded_by:/{v=$2;gsub(/"/,"",v);print v}' "$f" \
  | while read p; do case "$p" in specs/*) [ -f "$p" ] || echo "BROKEN $f -> $p";; esac; done
done

Any BROKEN line must be fixed before you commit. Optionally run /wf-spec-validate for the full document-model check.

Step 7: Commit the numbering pass (atomic)

One commit for renames + cross-reference fixes, README excluded:

bash
git add -A && git restore --staged specs/README.md
git commit -m "specs: number the N name-only specs into .archive/ (NNN-MMM)"

Follow the repo's commit conventions (check git log): small scoped diffs, no Co-Authored-By trailer unless the repo uses one, no em dashes in the message if the repo avoids them.

Step 8: Rebuild README as a clean index (skip if --number-only)

Generate the table mechanically from the inventory; do not hand-type ~100 rows or invent descriptions (use each spec's title as the topic).

bash
cd <repo>/specs
{ meta root $(ls [0-9]*.md); meta archive $(ls .archive/[0-9]*.md); } \
 | sort -t$'\t' -k1,1n \
 | awk -F'\t' '{
     n=$1; loc=$2; file=$3; st=$4; title=$5
     link=(loc=="root")?file:".archive/" file
     if(loc=="root"){
       d=(st=="drafted"||st=="draft")?"drafted":
         (st=="in-progress")?"in progress":
         (st=="implemented")?"✅ implemented":
         (st=="complete")?"✅ complete":
         (st=="superseded")?"superseded": st
     } else {
       d=(st=="abandoned")?"📦 archived (abandoned)":
         (st=="superseded")?"📦 archived (superseded)":
         (st=="archived")?"📦 archived":"📦 archived (shipped)"
     }
     printf "| [%s](%s) | %s | %s |\n", n, link, title, d
   }' > /tmp/spec-index-table.md

Assemble the README from three parts (write head + foot with the Write tool, then cat head table foot > README.md) so you never paste the long table by hand:

  • Head — the repo's existing intro + a folder-layout paragraph (drop any now-false "unnumbered drafts sit at the root" sentence) + a status legend matching the badges above + the ## Specs heading and table header (| # | Spec | Status |).
  • Table — the generated /tmp/spec-index-table.md.
  • Foot — the institutional-memory sections a flat table cannot encode. Preserve, do not delete: in-progress state, deferral triggers ("un-defer when…"), pending external/tunable decisions, locked decisions, and closed-scope ("do not re-litigate") lists. Fold any older per-track or per-tier status tables into the one index, which now carries their rows, and remove links to index files that no longer exist.

Non-numbered archive files (*-README.md, spikes, reconciled drafts) stay unlisted in the table; mention them once in the folder-layout paragraph.

Step 9: Verify the README, then commit

bash
# every markdown link in the README resolves (skip http and ../ cross-repo)
grep -oE '\]\(([^)]+\.md)\)' specs/README.md | sed -E 's/\]\(//; s/\)$//' | sort -u \
 | while read p; do case "$p" in http*|../*) ;; *) [ -f "specs/$p" ] || echo "MISSING $p";; esac; done

Fix any MISSING, then commit the README as the second atomic diff:

bash
git add specs/README.md
git commit -m "specs: rebuild README as a single NNN-ordered index"

Push if the repo pushes to main directly (check convention).

Report

Tell the user: how many name-only specs were numbered and their new NNN-name.md targets; which were kept live at the root vs archived; every same-repo reference fixed; any sibling-repo listings left stale on purpose (with paths, so they can fix those repos); and whether the README was rebuilt.

Gotchas

  • The .archive grep undercounts the max number. Active specs at the root usually hold the highest numbers. Compute max over root and .archive/.
  • Cross-repo companions look local but aren't. A spec covering one workstream that spans several repositories often carries the same bare filename in each of them. Grep ../ before renaming; expect sibling READMEs to reference the old name and leave them alone.
  • A draft status can be a lie. A spec with an ## Outcome section shipped; treat it as terminal and correct the status on the way to .archive/.
  • Never renumber. Gaps in the sequence are fine and expected (folded/reverted specs). Only ever append at max+1.
  • Don't delete institutional memory. "Clean index" means one ordered table plus the decision-record prose, not a table that erased why things were deferred or ruled out.

© changkun, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/wf-spec-housekeeping of changkun/wallfacer.

Open the folder on GitHubat commit 9fc9f06

Compare with similar skills

Wf Spec Housekeeping 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.

Wf Spec Housekeeping compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Wf Spec Housekeeping this skillchangkun/wallfacer112—~3kAutomated safety check: PassMIT
Vercel Composition Patternssupabase/supabase111k58 repos~726Automated safety check: PassMIT
Finishing a Development Branchobra/superpowers297k5 repos~1.9kAutomated safety check: PassMIT
Typescript Advanced Typesrolling-scopes/rsschool-app10k25 repos~4.2kAutomated safety check: PassMPL-2.0
PR Babysitteropeninterpreter/openinterpreter69k3 repos~4.2kAutomated safety check: PassApache-2.0
Code Review ChecklistshareAI-lab/learn-claude-code78k4 repos~1.1kAutomated safety check: PassMIT

Similar skills

  • Official

    React composition patterns that scale. An agent skill from supabase/supabase.

    111k GitHub starsUsed in 58 repos~726 tokens
    DevelopmentAuto-check passed
  • Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.

    297k GitHub starsUsed in 5 repos~1.9k tokens
    DevelopmentAuto-check passed
  • Typescript Advanced Types

    rolling-scopes/rsschool-app

    Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications.

    10k GitHub starsUsed in 25 repos~4.2k tokens
    DevelopmentAuto-check passed
  • PR Babysitter

    openinterpreter/openinterpreter

    Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.

    69k GitHub starsUsed in 3 repos~4.2k tokens
    DevelopmentAuto-check passed
  • Code Review Checklist

    shareAI-lab/learn-claude-code

    Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.

    78k GitHub starsUsed in 4 repos~1.1k tokens
    DevelopmentAuto-check passed
  • Greploop

    onyx-dot-app/onyx

    Iteratively improves a PR (GitHub), MR (GitLab), or shelved changelist (Perforce) until Greptile gives it a 5/5 confidence score with zero unresolved comments.

    32k GitHub starsUsed in 4 repos~3.3k tokens
    DevelopmentAuto-check passed

More from changkun/wallfacer

All 14 skills in this repo
  • Wf Spec Breakdown

    changkun/wallfacer

    Split one spec into children — sub-design specs when questions are still open, or implementation-ready leaves when the plan is clear.

    112 GitHub stars~2.6k tokensUpdated yesterday
    Auto-check passed
  • Wf Spec Create

    changkun/wallfacer

    Write a new spec from scratch when none exists for the idea yet.

    112 GitHub stars~2.3k tokensUpdated yesterday
    Auto-check passed
  • Wf Spec Dispatch

    changkun/wallfacer

    Mark a validated spec ready to build and resolve its dependency wiring; where a task board with a transition API is present, create the linked task atomically.

    112 GitHub stars~1.6k tokensUpdated yesterday
    Auto-check passed
  • Wf Spec Drive

    changkun/wallfacer

    Run the whole lifecycle for one spec, calling the other skills in order and advancing one legal transition at a time until it reaches a target state (default complete), stopping to ask at…

    112 GitHub stars~2.3k tokensUpdated yesterday
    Auto-check passed
  • Wf Spec Report

    changkun/wallfacer

    Survey the whole spec tree: what is complete, in progress, blocked, and actionable next.

    112 GitHub stars~1.6k tokensUpdated yesterday
    Auto-check passed
  • Wf Spec Review Impl

    changkun/wallfacer

    Read-only verdict on whether an implementation meets its spec: each acceptance criterion classified, unintended changes flagged, test coverage checked.

    112 GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Wf Spec Housekeeping

What does Wf Spec Housekeeping do?

Repair the numbering of a specs/ directory: give name-only specs a stable NNN id, retire terminal specs into .archive/ keeping their number, fix the cross-references the moves break, and optionally…. Wf Spec Housekeeping is an agent skill from changkun/wallfacer.archive/ keeping their number, fix the cross-references the moves break, and optionally rebuild the index in number order.

When should I use Wf Spec Housekeeping?

Wf Spec Housekeeping fits situations like: development work in your project.

How do I install Wf Spec Housekeeping in Claude Code?

Run `npx skills add changkun/wallfacer --skill wf-spec-housekeeping -a claude-code`. Or copy the skill folder (.claude/skills/wf-spec-housekeeping in changkun/wallfacer) into .claude/skills/wf-spec-housekeeping in your project. Claude Code loads it when a task matches its description.

How do I install Wf Spec Housekeeping in Codex?

Run `npx skills add changkun/wallfacer --skill wf-spec-housekeeping -a codex`. Or copy the skill folder (.claude/skills/wf-spec-housekeeping in changkun/wallfacer) into .agents/skills/wf-spec-housekeeping in your project. Codex loads it when a task matches its description.

Can I use Wf Spec Housekeeping in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add changkun/wallfacer --skill wf-spec-housekeeping -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/wf-spec-housekeeping, .gemini/skills/wf-spec-housekeeping, .github/skills/wf-spec-housekeeping and .opencode/skills/wf-spec-housekeeping in your project.

What does Wf Spec Housekeeping need to run?

Going by SKILL.md and its folder, Wf Spec Housekeeping needs the command-line tools its instructions call (git). Its frontmatter pre-approves these tools: Read, Grep, Glob, Edit, Write, Agent, Bash(ls *), Bash(git mv *), Bash(git add *), Bash(git restore *), Bash(git commit *), Bash(git status *), Bash(git log *), Bash(git push *), Bash(grep *), Bash(sed *), Bash(awk *), Bash(perl *), Bash(cat *), Bash(wc *), Bash(sort *), Bash(uniq *), Bash(cut *), Bash(basename *).

Does Wf Spec Housekeeping access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Wf Spec Housekeeping safe to install?

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.

What licence does Wf Spec Housekeeping use?

Wf Spec Housekeeping is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Wf Spec Housekeeping use?

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.

What are the alternatives to Wf Spec Housekeeping?

Skills that share tags, products or a category with Wf Spec Housekeeping: Vercel Composition Patterns (supabase/supabase, 111k stars), Finishing a Development Branch (obra/superpowers, 297k stars), Typescript Advanced Types (rolling-scopes/rsschool-app, 10k stars) and PR Babysitter (openinterpreter/openinterpreter, 69k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Wf Spec Housekeeping?

changkun (a GitHub user) maintains it in changkun/wallfacer, which has 112 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 9, 2026.

Source: changkun/wallfacer on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.