Stop forgetting those API gotchas. A Claude Code skill that quizzes you on the real documentation for your project's tech stack.
You've read the React docs. You've used useEffect a thousand times. But do you remember what happens when you return a cleanup function that captures stale state? Or that Object.is comparison means {} !== {}?
Documentation Demon finds the technologies in your project and generates trivia from their actual documentation - gotchas, edge cases, and lesser-known features you'll actually encounter.
Fork or clone this repo to get your own copy, then work from inside the directory:
# Fork on GitHub first, then:
git clone https://github.com/YOUR_USERNAME/documentation-demon.git
cd documentation-demon
# Or clone directly:
git clone https://github.com/cducote/documentation-demon.git
cd documentation-demonThe skill is already configured in .claude/ — just start using the commands.
Prerequisites: The repo must be public on GitHub.
# Add as a marketplace source
/plugin marketplace add cducote/documentation-demon
# Then install
/plugin install documentation-demonCopy the .claude/ folder into your project:
cp -r path/to/documentation-demon/.claude your-project/.claudeFirst, restart Claude with permissions to avoid prompt fatigue:
claude --dangerously-skip-permissionsThen run:
# Scan your project and generate challenges
/scan
# Answer a challenge
/demon smash react-001 "bails out"
# Set up Discord (enables passive firing)
/demon discord
# Manually fire a challenge to Discord
/demon fireScan your project and generate a bank of 20-40 challenges. Run once for finished projects, or periodically as your project evolves.
/scan # Generate challenge bank
/scan --fresh # Rescan and regenerate all
/scan --theme security # Focus on security gotchas
/scan --depth 6 # Deeper scan for monoreposManage challenges, Discord, and settings.
Answer a challenge and mark it as "smashed" - it won't appear in Discord notifications anymore.
/demon smash # Interactive mode - pick from list
/demon smash react-001 "bails out" # Direct answer
/demon smash aws-lambda-003 "3 seconds" # Partial answers work if correctClaude uses reasoning to check your answer - it's not strict exact matching. Show you understand the concept and you're good.
Manually fire a random challenge to Discord.
/demon fireOne command, one random unanswered challenge sent to your Discord channel.
Set up Discord integration.
/demon discordYou'll be prompted for your webhook URL. Once configured, challenges fire automatically:
- 50% chance on session start
- 50% chance on each prompt
- Manual:
/demon fire
Control how many challenges are generated per technology:
/demon triple # 3x challenges per tech (next /scan)
/demon double # 2x challenges per tech (next /scan)
/demon reset # Back to 1x (default)Set before running /scan to generate larger challenge banks.
Documentation Demon looks at multiple sources to understand your stack:
| Source | What it finds |
|---|---|
CLAUDE.md |
Explicit tech mentions |
README.md |
Stack descriptions |
package.json |
npm dependencies |
*.yaml, *.tf |
AWS services (Lambda, DynamoDB, S3, IAM, etc.) |
.env.example |
Service hints (Stripe, Redis, etc.) |
.env.*.example |
Environment-specific services |
It prioritizes technologies with interesting APIs and common gotchas - frameworks, popular libraries, and cloud services. Major technologies get 3-5 challenges each.
Note: The skill NEVER reads .env files - only .env.example and .env.*.example.
Want challenges without asking? Set up Discord and receive them passively as you work.
Setup:
- Run
/demon discord - Paste your webhook URL (Channel Settings → Integrations → Webhooks)
- Choose whether to include answers (spoiler tags)
That's it. Random challenges appear in your Discord channel while you work. Smashed challenges won't repeat.
# Documentation Demon Challenge Bank
Generated: 2026-01-24
Total challenges: 35
Smashed: 5
Stack: React, Next.js, AWS Lambda, DynamoDB, Zod, TanStack Query...
---
## react-001
**Tech:** React
**Q:** What happens when you call `useState` setter with the same value?
<details>
<summary>Reveal Answer</summary>
React bails out - no re-render. Uses `Object.is` comparison.
**Why this matters:** Explains why mutating objects doesn't trigger updates.
</details>
[Source](https://react.dev/reference/react/useState)
**Status:** smashed ✓
---
## aws-lambda-001
**Tech:** AWS Lambda
**Q:** What's the default timeout and what's the maximum?
<details>
<summary>Reveal Answer</summary>
Default: 3 seconds. Maximum: 15 minutes (900 seconds).
**Why this matters:** Many developers hit the default without realizing it.
</details>
[Source](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html)
**Status:** unanswered
---Optional config at .claude/skills/documentation-demon/config.json:
{
"scanDepth": 4,
"lastScan": "2026-01-24",
"totalChallenges": 35,
"answeredChallenges": ["react-001", "zod-002"],
"discord": {
"webhookUrl": "https://discord.com/api/webhooks/...",
"includeAnswer": false
}
}| Option | Default | Description |
|---|---|---|
scanDepth |
4 | How deep to scan for package.json |
discord.webhookUrl |
- | Your Discord webhook (set via /demon discord) |
discord.includeAnswer |
false | Include answers in Discord (spoiler tags) |
Every link in the output was fetched and verified. No hallucinated documentation URLs - if a URL doesn't load, that technology is skipped.
Works with any stack. Create a CLAUDE.md listing your technologies:
# Stack
- Python 3.11
- FastAPI
- SQLAlchemy
- Redis
- AWS Lambda
- DynamoDBOr just have infrastructure files - the skill reads CloudFormation, Terraform, and Serverless configs to detect AWS services.
Found a bug? Have an idea? Open an issue or PR.
MIT