ctf-writeup — скилл для Claude Code: документирование решений CTF
Генерирует стандартизированный отчёт о решении CTF-задачи для проверки организаторами и передачи между участниками. Структурирует шаги решения, использованные инструменты и выводы в единый markdown-файл.
npx skills add ljagiello/ctf-skills --skill ctf-writeup -a claude-codeЧто делает ctf-writeup
Скилл собирает информацию о решённой задаче — метаданные (название события, категория, сложность, баллы), артефакты решения (скрипты, выхода команд) и временную шкалу — и выстраивает их в формат submission. Результат содержит краткую сводку, 1–3 ясных шага с полным рабочим кодом от исходных данных задачи до флага, и сам флаг.
Скилл требует файловой системы и bash с Python 3. Автоматически сканирует директорию на скрипты и флаги, предпочитает один чистый путь решения вместо множества вариантов, избегает мёртвых концов и держит отчёт кратким — чтобы товарищ или судья мог быстро проверить решение.
Какие задачи решает
- создать стандартизированный отчёт о решённой CTF-задаче
- задокументировать шаги от исходных данных до флага одним скриптом
- собрать метаданные задачи и артефакты решения в markdown
- подготовить writeup для проверки организаторами или командой
Примеры запросов агенту
- Создай writeup для задачи под названием web-auth
- Сгенерируй submission-style отчёт по решению crypto-challenge
- Соберёшь ctf-writeup из артефактов в текущей папке?
Как установить ctf-writeup
1Через Skills CLI (Vercel)
npx skills add ljagiello/ctf-skills --skill ctf-writeup -a claude-code2Вручную: положить файлы
~/.claude/skills/ctf-writeup/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/ctf-writeup/
1Через Skills CLI (Vercel)
npx skills add ljagiello/ctf-skills --skill ctf-writeup -a codex2Вручную: положить файлы
.agents/skills/ctf-writeup/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add ljagiello/ctf-skills --skill ctf-writeup -a cursor2Вручную: положить файлы
.cursor/skills/ctf-writeup/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install ljagiello/ctf-skills ctf-writeup2Вручную: положить файлы
.github/skills/ctf-writeup/SKILL.md1Через Skills CLI (Vercel)
npx skills add ljagiello/ctf-skills --skill ctf-writeup -a gemini-cli2Командой платформы
gemini skills install https://github.com/ljagiello/ctf-skills --path ctf-writeupВручную: положить файлы
.devin/skills/ctf-writeup/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add ljagiello/ctf-skills --skill ctf-writeup -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
Из того же набора11
Весь набор →Похожие
Вопросы о ctf-writeup
Как установить ctf-writeup в Claude Code?
Выполни npx skills add ljagiello/ctf-skills --skill ctf-writeup -a claude-code, а потом найди скилл в ~/.claude/skills/ctf-writeup/SKILL.md.
Что делает ctf-writeup?
Генерирует стандартный markdown-отчёт о решении CTF. Собирает метаданные задачи, шаги решения с полным кодом и флаг, оформляет в единый файл для проверки.
Какие требования для работы скилла?
Нужна файловая система, bash и Python 3. Скилл сканирует директорию на скрипты и выход команд, поэтому работает в Claude Code, Cursor, Codex и других редакторах с доступом к файлам.
Исходный текст
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