Feature
A reliable engineering partner for Claude Code β ship features that make the next one faster, then curate what you've built.
npx -y skills add telefrek/vallorcine --skill featureAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Open a new feature session with scoping interview and brief
SKILL.md
16.1 KB, as published. Nobody here has run it
/feature "<description>"
Opens a new feature session. Interviews the user, confirms a brief, writes brief.md, and initialises status.md as the restart checkpoint.
Idempotency pre-flight (ALWAYS FIRST)
- Generate the
feature-slugfrom the description (kebab-case) - Check if
.feature/<slug>/status.mdexists - If it exists, read it:
- If stage is
scopingand substage iscompleteor later:
Use AskUserQuestion with options:π SCOPING AGENT Β· <slug> βββββββββββββββββββββββββββββββββββββββββββββββ Scoping is already complete for '<slug>'. Brief: .feature/<slug>/brief.md- "Proceed to domain analysis"
- "Stop"
If "Proceed to domain analysis": invoke /feature-domains "<slug>" as a sub-agent immediately.
If "Stop": display
Next: /feature-domains "<slug>"and stop. Stop if the user says "redo" or "update brief" β proceed with re-scoping.
- If stage is
scopingand substage isin-progress: Display the opening header, then say "Scoping was in progress β resuming from last checkpoint." Re-display the last saved brief draft if it exists in status.md, then continue from Step 3 (confirm brief).
- If stage is
- If status.md does not exist: proceed to Step 0.
Step 0 β Parse and slug
- Extract the description
- Generate
feature-slugin kebab-case - Create
.feature/<slug>/directory - Write initial
status.md(see Status File Template below) with stagescoping, substageinterviewingDisplay opening header immediately:
βββββββββββββββββββββββββββββββββββββββββββββββ
π SCOPING AGENT Β· <slug>
βββββββββββββββββββββββββββββββββββββββββββββββ
Step 1 β Read project config
Read .feature/project-config.md. If missing: stop and say
"Run /setup-vallorcine to set up the project profile first."
If PROJECT-CONTEXT.md exists in the project root: read the ## Active section.
Use global entries and any scoped entries matching the feature description to
inform the scoping interview. Do not ask questions that active context entries
already answer.
Step 2 β The scoping interview
Pre-interview analysis (internal β do not display)
Before asking anything, read the description and project-config.md and privately build a list of unknowns across these six dimensions:
| Dimension | What to resolve |
|---|---|
| Scope | What is in and explicitly out of scope |
| Actors | Who or what initiates and receives this |
| Interface | Inputs, outputs, formats, protocols |
| Behaviour | Business rules, error cases, edge cases, performance |
| Integration | External services, storage, existing codebase dependencies |
| Success | Acceptance criteria, definition of done, concerns |
For each dimension, mark it as:
- known β the description or project-config.md answers it clearly
- inferable β you can make a reasonable assumption; record it, don't ask
- unknown β genuinely unclear and affects how downstream agents work
Only unknowns become questions. Inferable items become assumptions in the brief. Simple features may have 1β2 unknowns. Complex ones may have 5β6. Either is fine.
Rank unknowns by impact: questions whose answers would change the most about the brief come first. Scope and interface questions almost always rank highest.
Opening display
ββ Scoping Β· <slug> ββββββββββββββββββββββββββββ
<one-sentence restatement of what you understood>
I have <n> question<s> before I can write the brief.
I'll go one at a time.
If n is 0 (description is fully specified): skip directly to Step 3, noting "Description is complete β no clarification needed." in the brief's assumptions.
Question loop (one question per turn, always)
For each unknown in ranked order:
Display:
ββ Question <i> of <n> βββββββββββββββββββββββββ
<The question β one focused question only>
<One sentence of context explaining why this matters for the brief.>
Rules for good questions:
- One question per turn. Never combine two questions into one turn.
- Ask about things that would change the brief if answered differently.
- Frame the question with the specific tradeoff or consequence so the user understands why you're asking: "This affects whether we need a migration path for existing data."
- If a yes/no framing helps, offer it: "Does X need to support Y? (yes / no / it depends β <elaboration welcome>"
After the user responds:
- Absorb the answer into your internal model
- Check if the answer resolved any other unknowns (skip those questions)
- If the answer raises a new unknown that ranks higher than remaining questions, insert it next
- If you have remaining questions: ask the next one
- If all unknowns are resolved: move directly to Step 3 β do not announce it, just transition: "Got it β let me draft the brief."
What NOT to ask
Never ask questions the implementation can answer:
- Naming ("What should I call the method?")
- Standard practice ("Should I add error handling?" β yes, always)
- Obvious defaults ("Should I write tests?" β yes, always)
- Things project-config.md already answers (language, test framework, conventions)
Never ask for information just to be thorough. If a dimension is inferable, infer it and record the assumption. Ask only when the answer genuinely changes what gets built.
If a question opens a deeper conversation
The user may give a long or complex answer that warrants a follow-up. That is fine β stay in the conversation. The question count is a guide, not a strict limit. If the user's answer to Q2 requires a follow-up, ask it before moving to Q3. Depth on one question is better than breadth across all.
Record any discussion points that affect the brief as you go β don't rely on reconstructing them at brief-writing time.
Recognising research signals in user answers
When the user responds with uncertainty about a topic that could influence the design β phrases like "I'm not sure," "I don't know," "might be worth investigating," "my feeling is," or similar hedging β treat this as a research signal, not a deferral.
Do not put research signals in "Explicit Out of Scope" or "Open Assumptions." Those sections are dead ends β the Domain Scout may never surface them as domains.
Instead, capture each research signal in the brief's ## Research Commissions
section with:
- Topic β what needs investigating
- Key questions β the specific unknowns the user expressed
- Purpose β how findings would influence the design of this feature
The scoping agent does not do research β it captures the signal so the Domain Scout can commission it during domain analysis. When in doubt about whether something is a deferral or a research signal, ask the user: "Would it help to research this before we design, or is it safe to defer?"
Step 3 β Present the brief for confirmation
Update status.md: substage β confirming-brief. Save the draft brief text
into status.md under ## Draft Brief so it survives a crash.
Display:
ββ Brief βββββββββββββββββββββββββββββββββββββββ
π FEATURE BRIEF Β· <slug>
βββββββββββββββββββββββββββββββββββββββββββββββ
SUMMARY
<2β3 sentences>
ACTORS / INPUTS / OUTPUTS & SIDE EFFECTS / BUSINESS RULES /
ERROR CASES / EXPLICIT OUT OF SCOPE / ACCEPTANCE CRITERIA /
OPEN ASSUMPTIONS / RESEARCH COMMISSIONS / PERFORMANCE EXPECTATIONS
βββββββββββββββββββββββββββββββββββββββββββββββ
Does this capture it correctly? Confirm or tell me what to change.
Iterate until confirmed. Do not write brief.md until confirmed.
Step 4 β Write brief.md and initialise cycle-log.md
Write .feature/<slug>/brief.md (Brief File Template below).
Write .feature/<slug>/cycle-log.md:
---
feature: "<feature-slug>"
created: "<YYYY-MM-DD>"
---
# Cycle Log β <feature-slug>
This file is append-only. Each agent appends entries. Nothing is edited or deleted.
---
## <YYYY-MM-DD> β scoped
**Agent:** π Scoping Agent
**Summary:** Feature brief confirmed by user.
**Brief:** [brief.md](brief.md)
**Token estimate:** ~<N>K (loaded: project-config ~1K / wrote: brief ~2K, status ~1K, cycle-log ~1K)
---
Update status.md: stage β scoping, substage β complete.
Update the Stage Completion table: Scoping row β Est. Tokens ~5K, status β complete.
Remove the ## Draft Brief section from status.md now that brief.md is written.
Update .feature/CLAUDE.md Active Features table.
Step 5 β Hand off
Display:
βββββββββββββββββββββββββββββββββββββββββββββββ
π SCOPING AGENT complete Β· <slug>
Tokens : <TOKEN_USAGE>
βββββββββββββββββββββββββββββββββββββββββββββββ
Brief written to .feature/<slug>/brief.md
Take a moment to review the brief before continuing β domain analysis builds
directly on it and fixing scope issues now is much cheaper than later.
Step 5a β Feature branch
Read branch_naming from .feature/project-config.md.
If branch_naming: none or project-config.md does not exist: skip this step.
If a branch naming convention is defined:
Expand the convention by substituting <slug> with the feature slug.
Check the current git branch (git branch --show-current). If already on a
branch that matches the convention, skip silently β branch already created.
Display:
ββ Feature branch ββββββββββββββββββββββββββββββ
Suggested branch: <expanded branch name>
Use AskUserQuestion with options:
- "Create branch" (description: checks out the suggested branch)
- "Skip" (description: continue without creating a branch)
If "Create branch": run git checkout -b <branch-name>. Display the result.
If the branch already exists locally, run git checkout <branch-name> instead.
If "Skip": continue without creating a branch.
Step 5b β Continue
Use AskUserQuestion with options:
- "Continue"
- "Stop"
If "Continue": invoke /feature-domains "<slug>" as a sub-agent immediately. If "Stop":
When you're ready:
/feature-domains "<slug>"
Status File Template
Written at Step 0, updated in-place by every agent throughout the pipeline.
Token tracking in Stage Completion table
Every pipeline agent updates the Stage Completion table with token data:
Est. Tokens β written at stage start. The agent's estimate of context window
load for this stage, derived from the construct count and file sizes. Format:
~<N>K (e.g., ~8K, ~15K). Based on:
- Scoping: project-config (~1K) + brief writing (~2K) + status (~1K)
- Domains: brief (~2K) + KB/decisions indexes (~2K) + ADR files loaded
- Planning: brief (~2K) + domains (~3K) + ADRs + source scan
- Testing: project-config (~1K) + brief (~2K) + work-plan section (~2K)
- Implementation: work-plan section (~2K) + test files (~3K) + stubs (~1K)
- Refactor: project-config (~1K) + work-plan (~2K) + impl files + test files
Actual Tokens β written automatically by the token tracking Stop hook when
a stage transition is detected. The hook reads the session transcript and logs
usage to token-log.md. Format: <N>K in / <N>K out (e.g., 12K in / 8K out).
Agents do not need to run any bash commands for token tracking.
---
feature: "<feature-slug>"
created: "<YYYY-MM-DD HH:MM>"
last_updated: "<YYYY-MM-DD HH:MM>"
---
# Feature Status β <feature-slug>
## Current Position
**Stage:** scoping
**Substage:** interviewing
**Last successful checkpoint:** feature directory created
**Automation mode:** not-set
**Execution strategy:** not-set
**Pipeline mode:** full
## Stage Completion
| Stage | Status | Completed | Est. Tokens | Actual Tokens | Notes |
|-------|--------|-----------|-------------|---------------|-------|
| Scoping | in-progress | β | β | β | |
| Domains | not-started | β | β | β | |
| Spec Authoring | not-started | β | β | β | if .spec/ exists |
| Planning | not-started | β | β | β | |
| Testing | not-started | β | β | β | cycle 0 |
| Hardening | not-started | β | β | β | cycle 0 |
| Implementation | not-started | β | β | β | cycle 0 |
| Refactor | not-started | β | β | β | cycle 0 |
## Domain Resolution Tracker
<!-- Populated by /feature-domains -->
| Domain | Status | ADR | KB entries | Commissioned | Resolved |
|--------|--------|-----|------------|--------------|----------|
## Work Units
<!-- Populated by /feature-plan if feature is split into units -->
<!-- work_units: none β set this if no split was done -->
<!-- execution_strategy: not-set -->
<!-- current_batch: 0 -->
| Unit | Name | Constructs | Depends On | Status | Cycle |
|------|------|------------|------------|--------|-------|
## TDD Cycle Tracker
<!-- Single-unit: one row per cycle -->
<!-- Multi-unit: rows labelled "Cycle N Β· WU-N" -->
| Cycle | Unit | Tests written | Tests passing | Refactor done | Missing tests |
|-------|------|--------------|---------------|---------------|---------------|
Pipeline mode
The Pipeline mode field controls which stages are active:
- full (default) β all stages: scoping β domains β spec authoring β planning β testing β hardening β implementation β refactor β audit. The audit runs as
feature-refactorStep 4b (delegated to/audit) after the first clean refactor cycle; later refactor cycles skip it unless you invoke/auditdirectly. - specification β specification-only: scoping β domains β spec authoring β complete. Used when a work definition's job is to produce artifacts (specs, ADRs, interface contracts) rather than implement behavior. Set by
/work-plan. - implementation β implementation-only: planning β testing β hardening β implementation β refactor β audit β complete. Skips scoping and domains (done during a prior specification phase). Starts from planning, consuming the artifacts produced by specification-phase runs. Set by
/work-start.
When pipeline_mode is specification:
- The Stage Completion table omits Planning, Testing, Hardening, Implementation, Refactor rows
- After Spec Authoring completes, the specification phase is done. Do NOT
proceed to
/feature-retroor/feature-completeβ those run after implementation via/work-start. Report that specs are ready and stop.
When pipeline_mode is implementation:
- The Stage Completion table omits Scoping, Domains, Spec Authoring rows
- status.md starts at
planningstage (set by/work-startor/work-plan) - The planner reads specification artifacts directly instead of running scoping/domains
Brief File Template
---
feature: "<description>"
slug: "<slug>"
created: "<YYYY-MM-DD>"
status: "scoped"
---
# Feature Brief β <slug>
## Summary
## Actors
## Inputs
## Outputs / Side Effects
## Business Rules
## Error Cases
## Explicit Out of Scope
## Acceptance Criteria
## Open Assumptions
## Research Commissions
<!-- Topics where user expressed uncertainty that could influence the design.
Each entry: Topic, Key questions, Purpose (how findings affect this feature).
Domain Scout will commission /research for each during domain analysis.
If none: "None β no research signals identified during scoping." -->
## Performance Expectations
## Project Context
- Language: <from project-config.md>
- Framework: <from project-config.md>
- Test framework: <from project-config.md>