Challenges are grouped by category (e.g., xss.adoc, injection.adoc). Each page follows this structure:
Category Introduction: General description of the vulnerability type.
Challenges Overview Table: A table at the beginning of the chapter listing:
Name, Description, Difficulty (represented by star emojis ⭐).
Challenge Sections: Each challenge has its own == level heading.
Heading text is usually the challenge description or a closely related title.
The heading includes an anchor (e.g., [[_anchor_name]]) for direct linking from the main table.
Content includes a brief explanation of the challenge context.
Hints Handling: Hints are included from external files located in docs/modules/ROOT/partials/hints/ using the include:: directive.
y - CRITICAL: Hint partials are created and updated exclusively by the partialize_hints.yml pipeline. AI agents MUST NEVER create or modify these files.
The 'Score Board' challenge (scoreBoardChallenge) does not have hints and must NEVER have a hint partial file.
New Challenge Preparation Rules:
The hint include (include::partial$hints/*.adoc[]) should only be added if a matching partial already exists in docs/modules/ROOT/partials/hints/.
If the partial does not exist, the expected partial include should be commented out (e.g., // include::partial$hints/newChallenge.adoc[]) and a 🚧 Work in progress... note should be added below it.
3. Hints Handling
Hints are stored as small AsciiDoc snippets in docs/modules/ROOT/partials/hints/.
Note: These snippets are managed exclusively by the partialize_hints.yml pipeline. AI agents MUST NOT modify them.
This modular approach allows hints to be updated independently and potentially reused.
Challenges in category pages typically end with an include of their corresponding hint file.
Exception: The 'Score Board' challenge has no hints and no hint partial.
All solutions are centralized in docs/modules/ROOT/pages/appendix/solutions.adoc.
Solutions are grouped by difficulty levels (e.g., == ⭐ Challenges, == ⭐⭐ Challenges, etc.).
Each solution has a === level heading matching the challenge name.
Format:
Usually a numbered list of steps.
Often includes images (from appendix/ directory) to illustrate the process.
URLs in solutions are typically based on http://localhost:3000.
Links to other parts of the book (e.g., xref:part1/challenges.adoc#_success_notifications) are used when relevant.
New Challenge Preparation Rules:
When preparing a new challenge, the step-by-step solution should get its heading followed by 🚧 Work in progress... unless the specific steps are already provided in the prompt triggering this skill.
1---2name: challenge-documentation3description: Challenge Documentation and Structure Skill4---5### Challenge Documentation and Structure Skill67This skill summarizes the documentation and structure of challenges in the OWASP Juice Shop companion guide (`pwning-juice-shop`).89#### 1. Centralized Challenge Tables (`README.adoc`)10All challenges are listed in `docs/modules/ROOT/pages/part2/README.adoc`. The tables are split based on the `{is_ctf}` attribute:1112- **CTF Mode (`is_ctf == 1`)**:13 - Columns: `Name`, `Description`, `Hints`.14 - `Hints` column contains a link (bulb emoji 💡) to the specific challenge section in its category page.15- **Normal Mode (`is_ctf == 0`)**:16 - Columns: `Name`, `Description`, `Hints`, `Solution`.17 - `Hints` column: same as CTF mode.18 - `Solution` column contains a link (book emoji 📕) to the specific step-by-step solution in the `appendix/solutions.adoc` page.1920#### 2. Category Pages (`docs/modules/ROOT/pages/part2/*.adoc`)21Challenges are grouped by category (e.g., `xss.adoc`, `injection.adoc`). Each page follows this structure:2223- **Category Introduction**: General description of the vulnerability type.24- **Challenges Overview Table**: A table at the beginning of the chapter listing:25 - `Name`, `Description`, `Difficulty` (represented by star emojis ⭐).26- **Challenge Sections**: Each challenge has its own `==` level heading.27 - Heading text is usually the challenge description or a closely related title.28 - The heading includes an anchor (e.g., `[[_anchor_name]]`) for direct linking from the main table.29 - Content includes a brief explanation of the challenge context.30 - **Hints Handling**: Hints are included from external files located in `docs/modules/ROOT/partials/hints/` using the `include::` directive.31y - **CRITICAL**: Hint partials are created and updated exclusively by the `partialize_hints.yml` pipeline. AI agents MUST NEVER create or modify these files.32 - The 'Score Board' challenge (`scoreBoardChallenge`) does not have hints and must NEVER have a hint partial file.33 - **New Challenge Preparation Rules**:34 - The hint include (`include::partial$hints/*.adoc[]`) should only be added if a matching partial already exists in `docs/modules/ROOT/partials/hints/`.35 - If the partial does not exist, the expected partial include should be commented out (e.g., `// include::partial$hints/newChallenge.adoc[]`) and a `🚧 Work in progress...` note should be added below it.3637#### 3. Hints Handling38- Hints are stored as small AsciiDoc snippets in `docs/modules/ROOT/partials/hints/`.39- **Note**: These snippets are managed exclusively by the `partialize_hints.yml` pipeline. AI agents MUST NOT modify them.40- This modular approach allows hints to be updated independently and potentially reused.41- Challenges in category pages typically end with an `include` of their corresponding hint file.42- **Exception**: The 'Score Board' challenge has no hints and no hint partial.4344#### 4. Step-by-Step Solutions (`appendix/solutions.adoc`)45- All solutions are centralized in `docs/modules/ROOT/pages/appendix/solutions.adoc`.46- Solutions are grouped by difficulty levels (e.g., `== ⭐ Challenges`, `== ⭐⭐ Challenges`, etc.).47- Each solution has a `===` level heading matching the challenge name.48- **Format**:49 - Usually a numbered list of steps.50 - Often includes images (from `appendix/` directory) to illustrate the process.51 - URLs in solutions are typically based on `http://localhost:3000`.52 - Links to other parts of the book (e.g., `xref:part1/challenges.adoc#_success_notifications`) are used when relevant.53- **New Challenge Preparation Rules**:54 - When preparing a new challenge, the step-by-step solution should get its heading followed by `🚧 Work in progress...` unless the specific steps are already provided in the prompt triggering this skill.
Run npx skillmds@latest add juice-shop/challenge-documentation in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Challenge Documentation and Structure Skill It is listed under Docs & Writing on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
juice-shop (@juice-shop) published this skill. Their other Agent Skills are listed on their SkillMD profile.