--- name: challenge description: Presents adaptive codebase challenge questions with multiple-choice and trace exercises. Use when testing contributor knowledge of the codebase. model_hint: standard --- # Run Gauntlet Challenge Present challenges from the knowledge base and evaluate answers. ## When NOT To Use - The knowledge base does not exist yet (use `gauntlet:extract`) - A staged path for a new contributor (use `gauntlet:onboard`) ## In-Loop Provider Setup Before generating a challenge, register the in-loop variation provider so we do not call out to the Anthropic API just to spawn a sibling Claude (issue #464). Outside Claude Code this is a no-op and the default Anthropic provider remains active. ```python from gauntlet.providers.in_loop import ( register_in_loop_provider_if_inside_claude_code, ) register_in_loop_provider_if_inside_claude_code() ``` ## Steps 1. **Load state**: read `.gauntlet/knowledge.json` and developer progress 2. **Check for pending challenge**: if `.gauntlet/state/pending_challenge.json` exists, evaluate the developer's most recent message as an answer before generating a new one 3. **Generate challenge**: use adaptive weighting to select a knowledge entry and challenge type 4. **Present challenge**: show the question with context 5. **Evaluate answer**: score the response (pass/partial/fail) 6. **Record result**: update developer progress and streak 7. **On pass**: write pass token if from pre-commit gate. Show next challenge if in session. 8. **On fail**: show correct answer with explanation. Present a new challenge. ## Scoring | Result | Score | Streak | |--------|-------|--------| | Pass | 1.0 | +1 | | Partial | 0.5 | reset | | Fail | 0.0 | reset | ## Exit Criteria - [ ] `.gauntlet/knowledge.json` exists and is readable before a challenge is generated; if missing, the skill surfaces the error and suggests running `gauntlet:extract` - [ ] Each challenge attempt results in a score (1.0/0.5/0.0) written to the developer's progress store and a streak update applied - [ ] `.gauntlet/state/pending_challenge.json` is evaluated before generating a new challenge when it exists; the file is removed or updated after evaluation - [ ] On fail, the correct answer and explanation are shown before the next challenge is presented (not skipped silently)