Vercel Composition Patterns
supabase/supabase
React composition patterns that scale. An agent skill from supabase/supabase.
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…
$ npx skills add changkun/wallfacer --skill wf-spec-housekeeping -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install changkun/wallfacer wf-spec-housekeeping --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/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-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 "wf-spec-housekeeping" agent skill from https://github.com/changkun/wallfacer/tree/main/.claude/skills/wf-spec-housekeeping into .claude/skills/wf-spec-housekeeping/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wf-spec-housekeeping", 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/changkun/wallfacer/tree/main/.claude/skills/wf-spec-housekeepingType 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 changkun/wallfacer --skill wf-spec-housekeeping -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install changkun/wallfacer wf-spec-housekeeping --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/changkun/wallfacer.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/wf-spec-housekeeping .agents/skills/wf-spec-housekeeping && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "wf-spec-housekeeping" agent skill from https://github.com/changkun/wallfacer/tree/main/.claude/skills/wf-spec-housekeeping into .agents/skills/wf-spec-housekeeping/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wf-spec-housekeeping", 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 changkun/wallfacer --skill wf-spec-housekeeping -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install changkun/wallfacer wf-spec-housekeeping --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/changkun/wallfacer.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/wf-spec-housekeeping .cursor/skills/wf-spec-housekeeping && 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 "wf-spec-housekeeping" agent skill from https://github.com/changkun/wallfacer/tree/main/.claude/skills/wf-spec-housekeeping into .cursor/skills/wf-spec-housekeeping/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wf-spec-housekeeping", 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/changkun/wallfacer.git --path .claude/skills/wf-spec-housekeeping--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 changkun/wallfacer --skill wf-spec-housekeeping -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install changkun/wallfacer wf-spec-housekeeping --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/changkun/wallfacer.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/wf-spec-housekeeping .gemini/skills/wf-spec-housekeeping && 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 "wf-spec-housekeeping" agent skill from https://github.com/changkun/wallfacer/tree/main/.claude/skills/wf-spec-housekeeping into .gemini/skills/wf-spec-housekeeping/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wf-spec-housekeeping", 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 changkun/wallfacer wf-spec-housekeepingInstalls 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 changkun/wallfacer --skill wf-spec-housekeeping -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/changkun/wallfacer.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/wf-spec-housekeeping .github/skills/wf-spec-housekeeping && 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 "wf-spec-housekeeping" agent skill from https://github.com/changkun/wallfacer/tree/main/.claude/skills/wf-spec-housekeeping into .github/skills/wf-spec-housekeeping/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wf-spec-housekeeping", 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 changkun/wallfacer --skill wf-spec-housekeeping -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install changkun/wallfacer wf-spec-housekeeping --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/changkun/wallfacer.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/wf-spec-housekeeping .opencode/skills/wf-spec-housekeeping && 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 "wf-spec-housekeeping" agent skill from https://github.com/changkun/wallfacer/tree/main/.claude/skills/wf-spec-housekeeping into .opencode/skills/wf-spec-housekeeping/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wf-spec-housekeeping", 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.
wf-spec-housekeepingRepair 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. 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.
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 9fc9f06. 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:
ReadGrepGlobEditWriteAgentBash(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.
Shell commands in SKILL.md call:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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 changkun/wallfacer at commit 9fc9f06, republished under its MIT licence (© changkun). 1,234 words, ~2,968 tokens.
.claude/skills/wf-spec-housekeeping/SKILL.md (or your agent's skills folder).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:
--number-only: number + archive + fix references; skip the README rebuild.--index-only: rebuild the README index only; assume numbering is already clean.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.
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:
NNN- prefix → it has adopted numbering;
proceed to make it consistent.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/.
Extract (number, location, filename, status, title) for every spec. Numbers
come from the NNN filename prefix; name-only files have none yet.
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.
Status vocab varies by repo; map onto two buckets:
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.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.
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.
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:
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" .
doneTriage the hits:
supersedes:,
superseded_by:, depends_on:), README rows, and internal doc links. You
must fix every one of these in the rename commit.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.)git mv and fix same-repo referencesgit mv name.md .archive/NNN-name.md # history follows; one per fileThen, 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).docs/** markdown links.draft status to complete.Leave live-but-newly-numbered specs at the root: git mv name.md NNN-name.md.
# 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
doneAny BROKEN line must be fixed before you commit. Optionally run
/wf-spec-validate for the full document-model check.
One commit for renames + cross-reference fixes, README excluded:
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.
--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).
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.mdAssemble 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:
## Specs heading and table header
(| # | Spec | Status |)./tmp/spec-index-table.md.Non-numbered archive files (*-README.md, spikes, reconciled drafts) stay
unlisted in the table; mention them once in the folder-layout paragraph.
# 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; doneFix any MISSING, then commit the README as the second atomic diff:
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).
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.
.archive grep undercounts the max number. Active specs at the root
usually hold the highest numbers. Compute max over root and .archive/.../ before renaming; expect sibling READMEs
to reference the old name and leave them alone.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/.max+1.© changkun, 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/wf-spec-housekeeping of changkun/wallfacer.
Open the folder on GitHubat commit 9fc9f06
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Wf Spec Housekeeping this skillchangkun/wallfacer | 112 | — | ~3k | Automated safety check: Pass | MIT | |
| Vercel Composition Patternssupabase/supabase | 111k | 58 repos | ~726 | Automated safety check: Pass | MIT | |
| Finishing a Development Branchobra/superpowers | 297k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Typescript Advanced Typesrolling-scopes/rsschool-app | 10k | 25 repos | ~4.2k | Automated safety check: Pass | MPL-2.0 | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Code Review ChecklistshareAI-lab/learn-claude-code | 78k | 4 repos | ~1.1k | Automated safety check: Pass | MIT |
supabase/supabase
React composition patterns that scale. An agent skill from supabase/supabase.
obra/superpowers
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.
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.
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
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.
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.
changkun/wallfacer
Split one spec into children — sub-design specs when questions are still open, or implementation-ready leaves when the plan is clear.
changkun/wallfacer
Write a new spec from scratch when none exists for the idea yet.
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.
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…
changkun/wallfacer
Survey the whole spec tree: what is complete, in progress, blocked, and actionable next.
changkun/wallfacer
Read-only verdict on whether an implementation meets its spec: each acceptance criterion classified, unintended changes flagged, test coverage checked.
Categories
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.
Wf Spec Housekeeping fits situations like: development work in your project.
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.
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.
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.
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 *).
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.
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.
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.
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 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.
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.