Skill v1.0.1
currentAutomated scan100/100+2 new
name: faf-go description: 'Runs faf score, then asks about each empty slot with AskUserQuestion, one question at a time, until the score reaches 100%. Use when someone wants to fill in what only they know about their project: "interview me", "ask me what''s missing", "get my project.faf to 100%". The answers go into project.faf; faf sync carries them into CLAUDE.md. Finishes the BETTER rung: every fact Claude can''t detect, supplied by the person who knows it.' license: MIT metadata: version: "1.0.1"
<!-- faf:start -->
v: 1needs:- "faf-cli on Node 22+ (not installed: run `npx faf-cli <command>` in place of `faf <command>`)"- "AskUserQuestion (Claude Code)"reads: [project.faf]writes:- "project.faf (the answers)"- "CLAUDE.md (faf sync, faf's block only)"network: ["registry.npmjs.org (read, only when npx fetches faf-cli)"]publishes: falsedone_when: "project.faf scores 100%, or every slot still empty is one the user chose to skip; CLAUDE.md re-synced by faf sync"project: project.faf
<!-- faf:end -->
FAF Go — Guided Path to 100% ✪
"Just type /faf-go, answer questions till you're done. 100% target."
.faf is an IANA-registered context format (application/vnd.faf+yaml) — a typed, portable file you own, readable by any AI. Every `.faf` is scored against the same 33 slots: faf-cli fills the 21 base slots and marks the 12 enterprise slots slotignored unless your app type uses them. Your app_type selects which are active, and 100% ✪ = every active slot filled. This skill is the guided interview that gets you there: the AI fills what it can detect, then asks you — via Claude Code's AskUserQuestion — only for the gaps it can't source.
When to Use This Skill
Activate when:
- User wants to improve their .faf score
- User mentions "Trophy" or "100%"
- User has incomplete project context
- After
faf initto fill in missing fields - User says "help me with my .faf"
Integration with Claude Code
FAF Go is built FOR Claude Code:
- AskUserQuestion - Native Claude Code UI for questions
- multiSelect: true - Allow multiple answers (e.g., "pytest + WJTTC")
- TodoWrite - Track progress through the interview
- Structured output - JSON that Claude Code understands
- Sync - Answers go into project.faf;
faf syncwrites them into CLAUDE.md (one way)
multiSelect Support
Some questions allow multiple selections:
stack.testing→ "pytest + WJTTC" (informational — not one of the 33 scored slots)stack.cicd→ "GitHub Actions + Cloud Build"stack.frontend→ "React + Tailwind"human_context.who→ "Developers + AI agents"
When multiSelect: true, user can pick 2+ options. Results are joined with " + ".
Workflow
Step 1: Check Current State
Run faf score to understand current position:
faf score --verbose
Or get it as structured data for programmatic use:
faf score --json
--json returns the score + per-slot breakdown — the empty slots are what you interview on (the priority order is in Step 2).
Step 2: Ask Questions Using AskUserQuestion
For each missing field, use Claude Code's AskUserQuestion tool:
Priority Order (most impactful first):
project.goal- What does this project do?human_context.why- Why does this exist?human_context.who- Who uses this?human_context.what- What problem does it solve?project.main_language- Primary languagestack.database- Database choicestack.hosting- Where is it deployed?stack.frontend- Frontend frameworkstack.backend- Backend frameworkhuman_context.where- Environmenthuman_context.when- Timeline/phasehuman_context.how- How the project is built (sourced from the stack)
Step 3: Apply Answers
After collecting answers, update the .faf file:
# Read current .fafcat project.faf# Update fields (use Edit tool)# Then verify:faf score
Step 4: Celebrate or Continue
If score >= 100: Celebrate Trophy ✪ If score < 100: Continue with remaining questions
Question Templates for AskUserQuestion
Single-Select Questions (pick one)
project.goal
{"question": "What does this project do? (one clear sentence)","header": "Goal","multiSelect": false,"options": [{"label": "Let me type it", "description": "I'll describe it myself"},{"label": "Help me write it", "description": "Guide me through it"}]}
human_context.why
{"question": "Why does this project exist?","header": "Why","multiSelect": false,"options": [{"label": "Business need", "description": "Solving a business problem"},{"label": "Personal project", "description": "Learning or hobby"},{"label": "Open source", "description": "Community contribution"},{"label": "Let me explain", "description": "Custom reason"}]}
stack.database
{"question": "What database do you use?","header": "Database","multiSelect": false,"options": [{"label": "PostgreSQL", "description": "Relational database"},{"label": "MongoDB", "description": "Document database"},{"label": "SQLite", "description": "File-based database"},{"label": "None", "description": "No database"}]}
stack.hosting
{"question": "Where is this deployed?","header": "Hosting","multiSelect": false,"options": [{"label": "Vercel", "description": "Frontend/serverless"},{"label": "AWS", "description": "Amazon Web Services"},{"label": "Local only", "description": "Not deployed"},{"label": "Other", "description": "Different platform"}]}
Multi-Select Questions (pick multiple, joined with " + ")
stack.testing (informational — not scored)
{"question": "What testing tools/methodologies do you use?","header": "Testing","multiSelect": true,"options": [{"label": "pytest", "description": "Python testing framework"},{"label": "Jest", "description": "JavaScript testing"},{"label": "Vitest", "description": "Vite-native testing"},{"label": "WJTTC", "description": "Championship methodology (Layer 2)"}]}
Result format: pytest + WJTTC (industry first, WJTTC follows)
Ordering: When both selected, industry tests come first:
pytest + WJTTC(notWJTTC + pytest)- WJTTC can also run standalone
stack.cicd
{"question": "What CI/CD tools do you use?","header": "CI/CD","multiSelect": true,"options": [{"label": "GitHub Actions", "description": "GitHub-native CI/CD"},{"label": "Cloud Build", "description": "Google Cloud CI/CD"},{"label": "CircleCI", "description": "CircleCI pipelines"},{"label": "None", "description": "No CI/CD yet"}]}
Result format: GitHub Actions + Cloud Build
stack.frontend
{"question": "What frontend technologies do you use?","header": "Frontend","multiSelect": true,"options": [{"label": "React", "description": "React framework"},{"label": "Next.js", "description": "React meta-framework"},{"label": "Svelte", "description": "Svelte framework"},{"label": "None/API-only", "description": "No frontend"}]}
human_context.who
{"question": "Who uses this project?","header": "Users","multiSelect": true,"options": [{"label": "Developers", "description": "Software developers"},{"label": "End users", "description": "Non-technical users"},{"label": "AI agents", "description": "Claude, Gemini, etc."},{"label": "Internal team", "description": "Your team only"}]}
Result format: Developers + AI agents
Processing Multi-Select Answers
When user selects multiple options, join them with " + ":
# Example: User selects ["pytest", "WJTTC"]selected = ["pytest", "WJTTC"]value = " + ".join(selected) # "pytest + WJTTC"
This creates readable, scannable values in the .faf file:
stack:testing: pytest + WJTTCcicd: GitHub Actions + Cloud Build
Example Session
User: /faf-goClaude: Let me check your current .faf status.[Runs: faf score --verbose]Your score is 45%. Let's get you to Trophy ✪![Uses AskUserQuestion for project.goal]User: [Selects option or types custom]Claude: Great! Now let's capture why this project exists.[Uses AskUserQuestion for human_context.why]... continues until 100% ...Claude: ✪ TROPHY — 100%, AI is optimized to code!Your AI now has complete context for championship performance.
TodoWrite Integration
Track progress with todos:
[{"content": "Answer project.goal question", "status": "completed"},{"content": "Answer human_context.why question", "status": "in_progress"},{"content": "Answer stack.database question", "status": "pending"},{"content": "Verify Trophy ✪ achieved", "status": "pending"}]
CLI Fallback
Outside Claude Code, the same destination is reached with the CLI's own interactive interview:
faf go # interactive terminal interview (--resume continues a session)
This skill is the Claude-native version of that interview — AskUserQuestion instead of terminal prompts. For structured, programmatic data, use faf score --json.
Success Metrics
- User reaches 100% score
- All required fields filled with meaningful content
- No placeholder values (TBD, Unknown, None where inappropriate)
- User understands what each field is for
On Completion
When 100% ✪ is achieved:
✪ 100% Trophy — AI is optimized to codeproject.faf: completeCLAUDE.md: run `faf sync` to update
Optionally run faf sync to emit CLAUDE.md (and faf export --agents for AGENTS.md) from the .faf. Your AI now starts every session with complete project context.
Related Skills
- faf-context — the builder's quickstart: hand the AI what it needs to hit 100%, fast
- faf-wizard — done-for-you, one-click .faf for any project
- faf-expert — master the format: scoring internals, MCP config, sync, the always-33 slot model
.faf is the format. project.faf is the file.100% ✪ AI-Readiness is the result.
MIT · part of the FAF skill family (faf-context · faf-wizard · faf-expert). Native to Claude Code.