Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

ctf-writeup — Claude Code skill: generate CTF solution reports

Generates a standardized markdown report for a solved CTF challenge, ready for organizer review and team handoff. Structures solution steps, tools, and the exploit code into a single submission-ready file.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add ljagiello/ctf-skills --skill ctf-writeup -a claude-code
Open on GitHub

What ctf-writeup does

The skill collects challenge metadata (event name, category, difficulty, points), solution artifacts (exploit scripts, command outputs), and solution timeline, then builds them into a submission-format writeup. The report includes a brief summary, 1–3 clear steps with one complete working script from raw challenge data to the final flag, and the flag itself.

Requires a filesystem and bash with Python 3. Automatically scans for exploit scripts and flags, picks one clean solution path instead of multiple alternatives, skips dead ends, and keeps the writeup concise so a teammate or judge can verify the solve quickly.

What it helps with

  • generate a standardized report for a solved CTF challenge
  • document the solution path from raw data to flag in a single script
  • collect challenge metadata and solution artifacts into markdown
  • prepare a submission-ready writeup for organizer review

Example prompts for the agent

  • Generate a writeup for the web-auth challenge
  • Create a submission-style report for our crypto solve
  • Build a ctf-writeup from the artifacts in this directory

How to install ctf-writeup

1Skills CLI (Vercel)

npx skills add ljagiello/ctf-skills --skill ctf-writeup -a claude-code

2Manually: put the files in place

~/.claude/skills/ctf-writeup/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/ctf-writeup/

From the same set11

The whole set →
ctf-reverse ljagiello A reverse engineering reference for CTF challenges: guides coding agents through binary inspection, anti-debug bypass, and virtual machine analysis. Claude Code CX Codex Cursor +1 10,100installs ctf-web ljagiello Routes and guides agents through web CTF challenges, covering everything from SQL injection and SSTI to auth bypasses and SSRF. Claude Code CX Codex Cursor +1 9,700installs ctf-pwn ljagiello Binary exploitation guide for CTF challenges. Helps turn memory corruption bugs into code execution and shell access. Claude Code CX Codex Cursor +1 9,400installs ctf-crypto ljagiello A skill for solving crypto CTF challenges, covering RSA, AES, hashes, signatures, PRNG, ZKP, and mathematical attacks. Claude Code CX Codex Cursor +1 9,200installs ctf-osint ljagiello A field guide to public-source research for CTF challenges, from username and DNS checks to image searches and geolocation. Useful when clues point beyond the challenge files. Claude Code CX Codex Cursor +1 9,100installs ctf-forensics ljagiello Digital forensics and signal analysis techniques for CTF challenges: disk images, memory dumps, PCAP files, steganography, Windows artifacts, and side-channel attacks. Claude Code CX Codex Cursor +1 9,000installs solve-challenge ljagiello Runs first-pass CTF triage, identifies the likely challenge category, and routes work to a specialized ctf-* skill. Use it when you have files, a remote service, or only a short prompt. Claude Code CX Codex Cursor +1 8,900installs ctf-misc ljagiello Provides reference techniques and payloads for miscellaneous CTF challenges like sandbox escapes, exotic encodings, and signal analysis. Claude Code CX Codex Cursor +1 8,800installs

Similar

audit-website squirrelscan Runs squirrel CLI audits against a website, pinpoints SEO, performance, and security issues, and applies fixes directly to source code. Claude Code CX Codex Cursor +1 73,900installs google-cloud-filestore-log-troubleshooting official google Diagnoses Google Cloud Filestore mount failures, access errors, and network timeouts. Use it when an NFS share stops mounting from a VM, GKE pod, or another supported workload. Claude Code Gemini CLI CX Codex 1,600installs security-reviewer https://github.com/Jeffallan Finds code and infrastructure vulnerabilities, assigns severity ratings, and suggests fixes. Use it for audits, secret scanning, and dependency checks. Claude Code CX Codex Cursor +1 6,000installs setup-api-key calesthio A skill that checks whether an ElevenLabs API key is configured and working, then walks the user through obtaining and saving a new key if needed. Claude Code CX Codex Cursor +1 1,000installs cso garrytan Audits code and infrastructure for security findings, with reproduction and repair candidates in comprehensive mode. Use it when reviewing a project. Claude Code CX Codex Cursor +1 405installs git-guardrails-claude-code Matt Pocock This skill adds a Claude Code hook that stops risky Git commands before they run. Use it when an agent must not push or discard working-tree changes. Claude Code 499,069installs ponytail-review DietrichGebert ponytail-review reviews a change beyond the diff, checking connected code, bugs, risks, load, tests, speed, and unnecessary code. Use it for PRs and commits. Claude Code CX Codex Cursor +1 56,300installs ponytail-audit DietrichGebert It audits a repository and ranks bugs, risks, and redundant code in a one-shot report. Use it when you need a review without code changes. Claude Code CX Codex Cursor +1 44,800installs

Questions about ctf-writeup

How do I install ctf-writeup in Claude Code?

Run npx skills add ljagiello/ctf-skills --skill ctf-writeup -a claude-code, then find the skill at ~/.claude/skills/ctf-writeup/SKILL.md.

What does ctf-writeup do?

It generates a standard markdown report for your solved CTF. Collects challenge metadata, solution steps with full working code, and the flag, and formats everything into a single file for review.

What are the system requirements?

Requires filesystem access, bash, and Python 3. The skill scans your directory for exploit scripts and command output, so it works in Claude Code, Cursor, Codex, and other editors with file access.

Source text

SKILL.md · MIT
---
name: ctf-writeup
description: Generates a single standardized submission-style CTF writeup for competition handoff and organizer review. Use after solving a CTF challenge to document the solution steps, tools used, and lessons learned in a structured format.
license: MIT
compatibility: Requires filesystem-based agent (Claude Code or similar) with bash and Python 3.
allowed-tools: Bash Read Write Edit Glob Grep Task WebFetch WebSearch
metadata:
  user-invocable: "true"
  argument-hint: "[challenge-name]"
---

# CTF Write-up Generator

Generate a standardized submission-style CTF writeup for a solved challenge.

Default behavior:

- During an active competition, optimize for speed, clarity, and reproducibility
- Keep writeups short enough that a teammate or organizer can validate the solve quickly
- Always produce a `submission`-style writeup
- Prefer one complete solve script from challenge data to final flag

## Workflow

### Step 1: Gather Information

Collect the following from the current session, challenge files, and user input:

1. **Challenge metadata** — name, CTF event, category, difficulty, points, flag format
2. **Solution artifacts** — exploit scripts, payloads, screenshots, command output
3. **Timeline** — key steps taken, dead ends, pivots

```bash
# Scan for exploit scripts and artifacts
find . -name '*.py' -o -name '*.sh' -o -name 'exploit*' -o -name 'solve*' | head -20
# Check for flags in output files
grep -rniE '(flag|ctf|eno|htb|pico)\{' . 2>/dev/null
```

### Step 2: Generate Write-up

Write the writeup file as `writeup.md` (or `writeup-<challenge-name>.md`) using the submission template below.

---

## Templates

### Submission Format

```markdown
---
title: "<Challenge Name>"
ctf: "<CTF Event Name>"
date: YYYY-MM-DD
category: web|pwn|crypto|reverse|forensics|osint|malware|misc|ai-ml
difficulty: easy|medium|hard
points: <number>
flag_format: "flag{...}"
author: "<your name or team>"
---

# <Challenge Name>

## Summary

<1-2 sentences: what the challenge was and the core technique. Keep it direct.>

## Solution

### Step 1: <Action>

<Explain the key observation in 3-8 short lines. Keep it direct.>

\`\`\`python
<one complete solving script from provided challenge data to printing the final flag>
\`\`\`

### Step 2: <Action> (optional)

<Only add this when a second short step genuinely helps readability, such as separating the core observation from final verification.>

### Step 3: <Action> (optional)

<Use only if the challenge really needs it. Keep the total number of steps small.>

## Flag

\`\`\`
flag{example_flag_here}
\`\`\`
```

Guidance:

- Prefer 1-3 short steps total
- Keep code to the smallest complete solving script
- Do not split "recover secret", "derive key", and "decrypt flag" into separate partial snippets
- The script should start from the challenge data and end by printing the flag
- Avoid long background sections
- Avoid dead ends unless they explain a key pivot
- Avoid multiple alternative solves; pick one clean path
- Redact the flag only if the user explicitly asks for redaction

---

## Best Practices Checklist

Before finalizing the writeup, verify:

- [ ] **Metadata complete** — title, CTF, date, category, difficulty, points, author all filled
- [ ] **Flag handling matches request** — keep the real flag unless the user asked for redaction
- [ ] **Reproducible steps** — a reader can follow your writeup and reproduce the solution
- [ ] **Code is runnable** — exploit scripts include all imports, correct variable names, and comments
- [ ] **No sensitive data** — no real credentials, API keys, or private infrastructure details
- [ ] **Length stays concise** — the writeup is short enough for fast review
- [ ] **Tools and versions noted** — mention specific tool versions if behavior depends on them
- [ ] **Proper attribution** — credit teammates, referenced writeups, or tools that were essential
- [ ] **Grammar and formatting** — consistent heading levels, code blocks have language tags

## Quality Guidelines

**DO:**
- Explain just enough for fast verification
- Include one complete solving path, not multiple alternative routes
- Include one complete script that goes all the way to the final flag
- Show actual output (truncated if very long) to prove the approach worked
- Tag code blocks with language (`python`, `bash`, `sql`, etc.)
- Keep the main path front-loaded so a reader can validate it quickly

**DON'T:**
- Copy-paste raw terminal dumps without explanation
- Paste several partial snippets that force the reader to reconstruct the final solve
- Leave placeholder text in the final writeup
- Include irrelevant tangents that don't contribute to the solution
- Assume the reader knows the specific challenge setup

## Challenge

$ARGUMENTS

© ljagiello · MIT · ljagiello/ctf-skills

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor