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.
from gauntlet.providers.in_loop import (
register_in_loop_provider_if_inside_claude_code,
)
register_in_loop_provider_if_inside_claude_code()
Steps
Load state: read
.gauntlet/knowledge.jsonand developer progressCheck for pending challenge: if
.gauntlet/state/pending_challenge.jsonexists, evaluate the developer's most recent message as an answer before generating a new oneGenerate challenge: use adaptive weighting to select a knowledge entry and challenge type
Present challenge: show the question with context
Evaluate answer: score the response (pass/partial/fail)
Record result: update developer progress and streak
On pass: write pass token if from pre-commit gate. Show next challenge if in session.
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.jsonexists and is readable before a challenge is generated; if missing, the skill surfaces the error and suggests runninggauntlet: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.jsonis 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)