---
name: athola/challenge
source: https://app.decimal.ai/s/athola-challenge@1/SKILL.md
source_sha256: 14bfe0793d30
---

# 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)