feature
Skill2 starsChanged 14 days agoMITView on GitHub
Plan and build a feature the agent-craft way — user journey and business rules first, a flat component tree, an explicit state and communication map, then a colocated feature folder with direct imports, and a shared package only when 2+ consumers exist. Use whenever the user asks to add a feature, module, domain area, or "section of the app", or to add hooks, actions, or services to an existing one, and whenever a task would create a new folder under app/, features/, or packages/, even if they don't say "feature".
71 other projects use a version of this.
Adopted by
Most recently taken up by
- 5hirish/ducttheir own version, first seen Nov 8, 2026
- paulocsb/worldcup-fifa-pooltheir own version, first seen Nov 8, 2026
- vocion/vocion-coretheir own version, first seen Nov 8, 2026
- jisuzzzz/haechitheir own version, first seen Nov 8, 2026
- yicheng47/runnertheir own version, first seen Nov 7, 2026
- crbnos/carbontheir own version, first seen Nov 7, 2026
Used with
Projects with it also use bug, bugfix and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
paulocsbSkillbug
Investigation playbook for fixing a bug. Walks through 5 phases: reproduce → isolate → root cause → propose fix → validate. Forces concrete reasoning with code reads, log inspection, and git blame instead of pattern-matching guesses. Use for any non-trivial defect.
Also in 8 projects that use this
team-attentionSkillbugfix
Root cause based one-shot bug fix. debugger diagnosis → requirements.md generation → /execute. /bugfix "error description" Full investigation pipeline: debugger + gap-analyzer + standard verify. QA suggestion after successful fix.
Also in 7 projects that use this
codebycoreySkilladopt
Adopt an existing plan from conversation context into delta-spec format. Use when importing a plan, adopting planning that already happened, capturing plan mode output, or bringing in prior design work.
Also in 4 projects that use this
Google CloudSkillfix
Plan a remediation strategy after a test failure.
Also in 10 projects that use this
marylinSkillrecover
Recover work from a crashed or interrupted session. Use when Claude crashed mid-task, after an unexpected exit, when you see 'stale sessions detected', or when you lost context and need to figure out what was happening.
Also in 3 projects that use this
aegiswizardSkillcontext
Also in 4 projects that use this
Other versions71 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 71
- crbnos/carbon★ 2.8ksame name
- aaronjmars/aeon★ 789same name
- aeonfun/aeon★ 789same name
- astashov/liftosaur★ 775same name
- me2resh/apexyard★ 542same name
- yicheng47/runner★ 490same name
- bradtraversy/coding-with-ai-course-resources★ 344same name
- garagon/nanostack★ 206same name
- DeL-TaiseiOzaki/claude-code-orchestra★ 199same name
- vide/matedroid★ 86same name
61 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository9 other files it gives its agents.
- templates/CLAUDE.mdCLAUDE.md
- componentSkill
- conventionsSkill
- debugSkill
- formSkill
- nextjs-pageSkill
- planSkill
- reviewSkill
- serviceSkill
The file
We split this skill into the rules it gives an agent
4 rules. 0 are common, 4 are distinctive, and 0 are very specific to this project.
0
Common
Most of the 65 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 22
Search for what exists: similar features, services, hooks, primitives.
- Distinctive: line 23
Ask about anything ambiguous.
- Distinctive: line 91
Every journey step from step 1 works, including loading, empty, and failure.
- Distinctive: line 96
Every changed line traces to the plan.
“Common” is measured: kept by at least 6 in 10 of the 65 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
agent-craft Feature
How a feature is planned, where it lives, and how its folder is laid out. Load agent-craft:conventions for the rules inside each file.
Gates
- No code before the plan (steps 1–3) is confirmed.
- No files before the home (step 4) is answered from the repo. A second layout pattern in one repo costs every reader.
- No package for a single consumer.
- No
types/,constants/, orlib/file with a single consumer. It stays in the file that uses it.
1. Journey and business rules
- Walk the user journey step by step: what the user sees, does, and expects at each point, including loading, empty, and failure. "A Gmail-like inbox" becomes: scan the list → open a message → read → reply, archive, or delete → back to the list.
- Pull out the business rules behind each step (what marks a message read, who can archive, what orders the list). These are pure decisions and get tests.
- Restate both as verifiable targets: behaviors, inputs and outputs, error keys.
- Search for what exists: similar features, services, hooks, primitives. Extend before duplicating; duplicate a small pure thing rather than reach into another feature's files.
- Ask about anything ambiguous.
2. Component tree
Outline top-down, build bottom-up:
- Pages: one per journey destination (
/inbox,/inbox/[messageId]), thin server components. - Sections: one per journey step or screen region (
MessageList,ThreadView,ComposePanel). - Primitives: the existing UI layer first; a new one only when nothing fits.
Page → section → primitive, nothing in between that only forwards props. Name every unit by business meaning (MessageRow, not ListItem2) and note what data each renders.
3. State and communication
For every piece of state, write down:
- Owner: the lowest common owner of what reads it. Selected message → the URL param; a row's hover → the row.
- Server or client: server data is fetched where it's used or held in the query cache, never copied into
useState. - Communication: parent → child by props, child → parent by
on*callbacks, siblings through their shared owner, cross-page through the URL, a subtree-wide concern through one context. Write the chains out:MessageRow → onArchive → MessageList → archiveMessage action. - Optimistic or not: reversible, low-stakes writes (archive, star) are optimistic; destructive or server-decided ones wait.
Present steps 1–3 as the plan, with the files that change and an out-of-scope list. Wait for confirmation.
4. Home
| Situation | Home |
| Default: one app uses it | The route folder under app/, or features/<name>/, whichever the repo already uses |
| Two or more apps use it, or it ships on its own version | A package |
5. Folder layout
<feature>/
components/ # JSX
hooks/ # use-*.ts, only when two components share one
actions/ # 'use server' mutations
services/ # reads and shared I/O
lib/ # schemas and decisions shared by 2+ files, or that need their own tests- One level deep. A directory exists only when a file lives in it.
- Types, constants, and error keys live in the file that uses or produces them. A
types/orconstants/directory appears only for things two files share. - Consumers import the defining file through the repo's alias (
@/features/upload/components/dropzone). There is noindex.tsand no "public" layer. - Code another feature needs moves to a shared top-level folder; a feature never imports another feature's internals.
- Two known cases are a
switchor a lookup map. A plugin-style registry only when outside code must register new cases.
6. Package — only when extracted
Same layout, plus per-file wildcard exports so nothing needs a barrel:
{
"name": "@scope/upload",
"type": "module",
"sideEffects": false,
"exports": {
"./components/*": { "types": "./dist/components/*.d.ts", "default": "./src/components/*.tsx" },
"./hooks/*": { "types": "./dist/hooks/*.d.ts", "default": "./src/hooks/*.ts" },
"./actions/*": { "types": "./dist/actions/*.d.ts", "default": "./src/actions/*.ts" }
}
}A wildcard resolves one extension per directory: JSX only in components/, everything else .ts. Follow the repo's workspace and naming conventions; don't introduce workspaces into a single-package repo.
7. Verify
- Every journey step from step 1 works, including loading, empty, and failure.
rg --files <feature> | rg "index\.ts$"returns nothing.rg "export default" <feature>matches only Next.js file conventions.- Pick any file in the feature: it can be understood by opening at most two other files.
- The repo's
typecheck,lint, andtestscripts pass, including tests for the business rules from step 1. - Every changed line traces to the plan.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

