Best for
- Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.
oaustegard/claude-skills/featuring/SKILL.md
Generate hierarchical _FEATURES.md files that describe what a codebase DOES from a user/consumer perspective, anchored to source symbols via tree-sitting. Supports large complex codebases through feature-driven decomposition into sub-feature files. Uses a multi-pass synthesis: orientation → detail → overview rewrite. Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.md", or needs to understand a codebase's purpose before modifying it. Complements tre
Decision brief
Generate FEATURES.md files — top-down documentation of what a codebase does, organized by feature/capability, anchored to specific source symbols.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Declared | Source record | Install path and trigger |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/oaustegard/claude-skills --skill "featuring"Inspect the Agent Skill "featuring" from https://github.com/oaustegard/claude-skills/blob/4043d027cb302cc269c135a310be4191327a53ad/featuring/SKILL.md at commit 4043d027cb302cc269c135a310be4191327a53ad. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Feature documentation is built in three passes. The overview is written LAST, after all features are understood — not first.
Add to CLAUDE.md or equivalent:
Requires tree-sitting skill. Uses its engine for AST scanning.
/home/claude/.venv/bin/python $TREESIT /path/to/repo --depth=-1 --detail=sparse bash /home/claude/.venv/bin/python /mnt/skills/user/featuring/scripts/gather.py /path/to/repo \ --skip tests,.github,nodemodules --source-budget 8000 markdown
--orient when you are not writing the file. The full output is a complete symbol inventory — 5,697 lines on a 71k-line repo — and it exists so a FEATURES.md can cite every symbol. When the deliverable is your own understanding (a review, an orientation read), pass --orient: comp…
Permission review
The documentation asks the agent to read local files, directories, or repositories.
tree-sitting caches its scan to `/tmp/treesit-cache`, keyed by repo path plusThe documentation asks the agent to read local files, directories, or repositories.
**"Read when" guidance** on every sub-file link — tells agents WHEN to drill inEvidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 100/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 147 | Source | Repository attention, not individual Skill quality |
| Compatibility | 1 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Generate _FEATURES.md files — top-down documentation of what a codebase does,
organized by feature/capability, anchored to specific source symbols.
tree-sitting tells you WHAT symbols exist. _FEATURES.md tells you WHY they exist and what they accomplish together.
For large codebases, the root _FEATURES.md decomposes into sub-feature files
linked by capability area — not by folder structure. An agent starts at the root
and is drawn into sub-files only when working on a relevant area.
Requires tree-sitting skill. Uses its engine for AST scanning.
uv venv /home/claude/.venv 2>/dev/null
uv pip install tree-sitter-language-pack --python /home/claude/.venv/bin/python
tree-sitting caches its scan to /tmp/treesit-cache, keyed by repo path plus
skip set. That cache persists symbols and imports but NOT file source, so a
cache HIT returns source=None. gather.py re-reads those files from disk;
do not assume entry.source is populated if you write against the engine
directly. (Before this was handled, gather crashed on its second run against a
repo while the first succeeded — diagnosed 2026-08-22.)
For quick structural orientation before running gather.py, use tree-sitting's CLI:
TREESIT=/mnt/skills/user/tree-sitting/scripts/treesit.py
# Complete tree, sparse detail — see the full shape
/home/claude/.venv/bin/python $TREESIT /path/to/repo --depth=-1 --detail=sparse
Feature documentation is built in three passes. The overview is written LAST, after all features are understood — not first.
/home/claude/.venv/bin/python /mnt/skills/user/featuring/scripts/gather.py /path/to/repo \
--skip tests,.github,node_modules --source-budget 8000
--orient when you are not writing the file. The full output is a complete
symbol inventory — 5,697 lines on a 71k-line repo — and it exists so a
_FEATURES.md can cite every symbol. When the deliverable is your own
understanding (a review, an orientation read), pass --orient: complexity
assessment, decomposition ranking, directory tree and entry points, and nothing
else. ~115 lines. Reaching for head on the full output means --orient was
the right mode.
Pass 1 of THIS skill is the case that wants the full output — you are about to write the inventory down.
Read the gather output. Before writing anything, form a hypothesis:
"This codebase appears to be a [what it is] that provides [capability A], [capability B], and [capability C]."
Write this down as a DRAFT overview. It will be wrong or incomplete — that's fine. The point is to orient before diving into detail.
How to identify capability areas:
For each capability area identified in Pass 1:
get_source())During this pass, you'll discover:
Hierarchy decision (per feature, during this pass):
| Signal | Action |
|---|---|
| ≤6 key symbols, self-contained | Inline in root _FEATURES.md |
| >6 key symbols OR clear sub-capabilities | Own _FEATURES.md sub-file |
| Spans many files but is ONE capability | Inline (breadth ≠ complexity) |
| Has sub-features that are independently useful | Own sub-file |
| Is infrastructure (logging, DB layer) | Inline briefly, unless it IS the product |
NOW — after all features are documented — rewrite the overview. The Pass 1 draft was a hypothesis. Pass 3 replaces it with a proper progressive-disclosure overview that:
This is the most important part. The overview IS the entry point for every agent session. It must be accurate, complete, and fast to scan.
# Features: {project-name}
> One-sentence description of what this codebase is and does.
**Capability areas:**
- **[Area A]** — one-sentence summary
- **[Area B]** — one-sentence summary → [details](path/to/_FEATURES.md)
- **[Area C]** — one-sentence summary
## {Inline Feature Name}
{2-3 sentences: what this feature does from a user perspective.}
**Key symbols:**
- `file.py#function_name` — role in this feature
- `file.py#ClassName` — role in this feature
**Workflow:** {How a user exercises this feature or how symbols collaborate.}
**Constraints:** {Invariants, limits, rules.}
---
## {Complex Feature Area}
> One-sentence summary of what this area covers.
This area is documented in detail in [{area-name}/_FEATURES.md]({path}).
Read it when working on {specific trigger — e.g., "the memory retrieval pipeline",
"adding a new API endpoint", "modifying the build system"}.
At a glance, this area provides:
- {sub-capability 1} — one line
- {sub-capability 2} — one line
- {sub-capability 3} — one line
Sub-feature files follow the SAME format as the root, recursively. They can contain inline features and further sub-file references. Each sub-file:
# Features: {area-name} header← [Root features](../_FEATURES.md)file#symbol notation (relative to repo root)Good: "Memory Storage — Persist observations across sessions. Stores typed, tagged memories to a Turso database with BM25 full-text search. Memories have priority levels that affect retrieval ranking."
Bad: "memory.py — Contains remember(), recall(), forget(), and
supersede() functions."
The first tells you WHAT you can do. The second describes file contents — tree-sitting already gives you that.
The hierarchy is feature-driven, not folder-driven. Folders are natural candidates for decomposition boundaries, but the decision is based on:
Counter-examples — do NOT split just because:
Heuristics for finding feature boundaries:
Features to SKIP in _FEATURES.md:
Three mechanisms, layered:
/home/claude/.venv/bin/python /mnt/skills/user/featuring/scripts/check.py /path/to/repo \
[--features _FEATURES.md] [--skip tests,.github]
Parses file#symbol references from ALL _FEATURES.md files (root + sub-files),
resolves them against the live codebase via tree-sitting, and reports:
Exit code 0 = clean, 1 = drift detected. Suitable for CI or pre-commit hooks.
Add to CLAUDE.md or equivalent:
## Feature Documentation
- `_FEATURES.md` documents what this codebase does, organized by capability.
- Start here when orienting to the codebase. Follow sub-file links as needed.
- After changing behavior (new feature, renamed API, deleted functionality):
run `python featuring/scripts/check.py .` and fix any broken refs.
- After adding a new public API surface: add it to the appropriate feature
section, or create a new feature section if it's a new capability.
- Run check before committing. Broken refs = broken documentation.
When check reports broken refs, the fix is usually surgical: update the
file#symbol reference to the new name/location. For dead features (all refs
gone), either delete the section or regenerate it.
Full regeneration (re-running all three passes) is the nuclear option. Prefer targeted updates — they're cheaper and preserve hand-written narrative.
# .github/workflows/features-check.yml
name: Check _FEATURES.md
on: [push, pull_request]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v4
- run: uv pip install tree-sitter-language-pack
- run: python featuring/scripts/check.py . --skip tests
In Claude Code, use tree-sitting's CLI or engine directly. The agent should:
treesit.py /path --depth=-1 --detail=sparse for full structural overviewtreesit.py /path --path=DIR --detail=full for each capability areatreesit.py /path --no-tree 'source:symbol_name' where intent isn't clearAdd to CLAUDE.md:
## Codebase Understanding
Read `_FEATURES.md` for top-down feature orientation before modifying code.
Follow links to sub-feature files when working on a specific area.
Use tree-sitting MCP tools for structural queries (symbol lookup, source retrieval).
After adding new features or changing behavior, update the relevant _FEATURES.md.
A CLI tool with 15 public symbols → single _FEATURES.md, all features inline.
No sub-files needed.
The remembering skill (memory system for an AI agent) has ~60 public symbols
across 8 files. Hierarchical decomposition:
_FEATURES.md (root — overview + 3 inline features + 3 sub-file refs)
├── scripts/_FEATURES.md (memory operations — storage, retrieval, lifecycle, maintenance)
└── utils/_FEATURES.md (utility modules — therapy, reminders, blog publishing)
Root _FEATURES.md would contain:
scripts/_FEATURES.md
("Read when working on storage, retrieval, or memory lifecycle")utils/_FEATURES.md
("Read when working on therapy sessions, reminders, or blog publishing")| Skill | What it provides | Drift detection |
|---|---|---|
| tree-sitting | Structural inventory (symbols, signatures) | N/A (live queries) |
| featuring | Feature documentation (what/why), hierarchical | check.py — docs → code |
| generating-lattice | Bidirectional knowledge graph | lat check — docs ↔ code |
| mapping-webapp | Web app behavioral docs (pages, flows) | None |
featuring's check is lighter than lattice's: no source code annotations needed,
no @lat: comments, just reference resolution. The trade-off is that new code
without docs is only flagged as "uncovered symbols" — it's advisory, not
enforced. Use lattice when you need strict bidirectional traceability; use
featuring when you need good-enough orientation docs that catch renames and
deletions.
Frequently asked questions
Generate FEATURES.md files — top-down documentation of what a codebase does, organized by feature/capability, anchored to specific source symbols.
The source record exposes this install command: npx skills add https://github.com/oaustegard/claude-skills --skill "featuring". Inspect the command and pinned source before running it.
The pinned source record declares support for: claude code.
Static rules flagged read-files in the source; the page lists the matching lines and excerpts.
Alternatives
vasilyu1983/AI-Agents-public
Designs developer tools, SDKs, CLIs, IDE extensions, and code generators. Use when shaping DX, typed clients, code generation, or package distribution workflows.
Jamie-BitFlight/claude_skills
Use when creating a new Claude Code plugin from scratch — orchestrates prerequisite check, user discussion, parallel research, design with verification, atomic implementation, multi-layer validation, documentation, and final verification. For existing plugin improvement, use /plugin-creator:plugin-lifecycle instead.
upex-galaxy/agentic-qa-boilerplate
Plan, write, and review automated tests following KATA (Komponent Action Test Architecture) on Playwright + TypeScript, or explain existing automated tests in a sealed read-only mode. Use when writing E2E or API/integration tests, creating Page or Api components, designing ATCs, parameterizing test data, registering fixtures, reviewing test code for KATA compliance, or requesting break-down-tests / a plain-English test breakdown. The explain mode reads source and reports assertions without enter
upex-galaxy/agentic-qa-boilerplate
Analyze, prioritize, and document test cases in TMS (Jira/Xray), or repair an existing Story-ATS-ATP-ATR-TC cascade through a sealed explicit mode. Use for Test/ATP/ATR artifacts, ROI and automation verdicts, maintaining traceability, fix-traceability, or broken TMS links. The repair-traceability mode audits, plans, waits for explicit approval, applies, and verifies without launching the general documentation workflow. Do NOT use for writing test code (test-automation) or running suites (regress