Feature-marker context-gatherer
Phase 0.1 — Automatic codebase scan before PRD generation. Extracts key terms from the user prompt, searches the codebase for related files, identifies existing patterns, and generates context.md in the state directory.
git clone https://github.com/Viniciuscarvalho/Feature-marker
T=$(mktemp -d) && git clone --depth=1 https://github.com/Viniciuscarvalho/Feature-marker "$T" && mkdir -p ~/.claude/skills && cp -r "$T/feature-marker-dist/feature-marker/resources/spec-workflow/skills/context-gatherer" ~/.claude/skills/viniciuscarvalho-feature-marker-context-gatherer && rm -rf "$T"
feature-marker-dist/feature-marker/resources/spec-workflow/skills/context-gatherer/SKILL.mdContext Gatherer
Runs automatically as Phase 0.1, before
idea-explorer asks its first question.
Purpose: ground the entire spec in the actual codebase — not assumptions.
Slug generation
Derive
{slug} from the user's prompt before doing anything else:
- Lowercase the full prompt string
- Remove punctuation
- Split into words; skip stop words:
a an the to for of in with from and or but is are was - Take the first 6 significant words
- Join with hyphens; truncate to 60 characters
Example:
Prompt: "Allow personal trainers to connect with students after checkout" Slug: allow-personal-trainers-connect-students-checkout
When to run
- Always runs before the first
questionidea-explorer - If
already exists: load it (do not re-scan — resume flow).claude/feature-state/{slug}/context.md - Rerun from scratch only when explicitly asked
Step 1: Extract key terms from the user prompt
Parse the user's feature prompt for:
- Entities: nouns that likely map to data models (e.g., "student", "trainer", "subscription")
- Actions: verbs that describe behavior (e.g., "connect", "enroll", "notify", "list")
- Domain words: business-specific terms (e.g., "checkout", "onboarding", "dashboard")
Example:
Prompt: "Allow personal trainers to connect with students after checkout" Key terms: ["trainer", "student", "connect", "checkout", "personal trainer"]
Step 2: Search the codebase for related files
For each extracted key term, use the Grep tool (not bash grep — Bash is not available for search in this skill):
- Run one Grep call per term, case-insensitive (
),-ioutput_mode: "files_with_matches" - Glob filter covering source files:
*.{ts,tsx,js,swift,rs,py,go} - Also search test files separately with glob:
*{test,spec}*
Deduplicate the file lists across all terms. Score each file by how many distinct terms it matched. Select the 5–10 most relevant files (highest match count + most central paths).
Step 3: Read project context files
Always read these files if they exist:
| File | Purpose |
|---|---|
| Project-level conventions |
| Project DNA (architecture rules, constraints) |
| Project overview |
| Agent-specific instructions |
| Node.js dependencies and scripts |
| Rust dependencies |
| Swift dependencies |
| Go module info |
Step 4: Extract existing patterns
From the files identified in Steps 2–3, extract:
Architecture patterns
- What patterns are in use? (MVVM, Repository, Clean Architecture, MVC, etc.)
- Where are they located in the project?
Naming conventions
- How are entities named? (camelCase, snake_case, PascalCase)
- How are files named? (feature-name.ts, FeatureName.swift, etc.)
Similar features
- Is there already a feature similar to what's being requested?
- Which files implement it? What can be reused or extended?
Existing entities related to the prompt
- Do any of the key terms already have implementations?
- What fields, methods, or relationships do they already have?
Step 5: Generate context.md
First, create the state directory so the Write tool doesn't fail:
mkdir -p .claude/feature-state/{slug}
Then write to
.claude/feature-state/{slug}/context.md using the Write tool:
## Context Report Generated: {timestamp} Prompt: "{original prompt}" ### Related Files Found - `path/to/file1` — [why it's relevant, e.g., "implements Student entity"] - `path/to/file2` — [e.g., "Firestore queries for trainer data"] - `path/to/file3` — [e.g., "authentication middleware used by all API routes"] ### Existing Patterns - Architecture: MVVM + Repository + Use Cases - Auth: Firebase Auth — ID token in Authorization header on all routes - Data: Firestore with soft delete (status: 'archived') - Naming: Firebase UIDs stored as 'uid' throughout ### Similar Features Already Implemented - **Student enrollment** at `src/api/students/` — creates Firestore docs via Cloud Function - **Trainer profile** at `Presentation/Features/Trainer/` — MVVM pattern, fetches from /api/trainers ### Entities Related to Prompt - **Student** — exists at `src/types/student.ts`, fields: uid, name, email, trainerId? - **Trainer** — exists at `src/types/trainer.ts`, fields: uid, name, specialization[] - **checkout** — Cloud Function `handleCheckoutComplete` creates student records after Stripe payment ### Constraints Detected - Stripe webhook creates student-trainer relationships — any new connection flow should integrate with this - FCM token not guaranteed — push notifications are optional for all users - Feature flags via Firebase Remote Config — new user-facing features need a flag ### What DOESN'T Exist (Relevant to Prompt) - No direct trainer-student connection endpoint outside of checkout - No student list view for trainers in CMS - No real-time listener for connection status
Step 6: Surface to user before first question
Before asking the first
idea-explorer question, show a summary:
📂 Context gathered from codebase: Related files found: 7 Existing patterns: MVVM + Repository (iOS) / Firebase Auth + Firestore Similar feature: Student enrollment at src/api/students/ Already exists: ✅ Student entity (src/types/student.ts) — has trainerId? field ✅ Trainer entity (src/types/trainer.ts) ✅ handleCheckoutComplete — creates trainer-student link after Stripe Gaps detected: ❌ No direct connect API outside checkout flow ❌ No trainer CMS view of students Injecting this context into spec generation...
Output location
.claude/feature-state/{slug}/context.md
This file is:
- Injected into idea-explorer as initial context (question framing)
- Injected into spec-writer as architectural context
- Referenced during PRD Validation to verify entity references