SkillAgentSearch skills...

ctf-similar-search

Searches for similar CTF challenge writeups using Tavily API for search and content extraction

Install / Use

npx skills add ljagiello/ctf-skills --skill ctf-similar-search

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

90/100

Supported Platforms

Claude Code

Our assessment of ctf-similar-search

ctf-similar-search scores 90/100 on our quality scale, 1324th of 4,583 Development & Engineering skills we index (top 29%).

Its SKILL.md is 6.2 KB long, well organised into 25 sections with 7 code examples: a thorough specification that gives an agent plenty to work with.

With 3,341 GitHub stars, it is one of the more widely adopted skills in the catalogue.

Substance
29/30
Structure
20/20
Description
12/15
Adoption
15/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated 39 days ago, so ctf-similar-search is actively maintained.
  • It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

Safety scan

No issues found

Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful.

AI review by kimi-k2.7-code on 2026-10-23. Automated pattern scan on 2026-10-23. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.

ctf-similar-search compared with similar skills

All 4 of these similar skills score higher than ctf-similar-search; compare them before choosing.

SkillScoreStarsUpdatedFormat
ctf-similar-search (this skill)by ljagiello903.3k39d agoSKILL.md
taste-skillby Leonxlnx100101.2k2d agoCLAUDE.md
Agent-Reachby Panniantong100101.1k2d agoCLAUDE.md
headroomby headroomlabs-ai10077.6ktodayCLAUDE.md
ai-job-searchby ai-job-search-dev10063.7k2d agoCLAUDE.md

Frequently asked questions

How do I install ctf-similar-search?
Run npx skills add ljagiello/ctf-skills --skill ctf-similar-search. The install tabs above show the steps for each supported agent.
Which AI agents does ctf-similar-search work with?
It is written for Claude Code, as a SKILL.md file. Other agents that read the same format can often use it too.
Is ctf-similar-search safe to use?
Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful. It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is ctf-similar-search still maintained?
The repository was last updated 39 days ago, so ctf-similar-search is actively maintained.

name: ctf-similar-search description: Searches for similar CTF challenge writeups using Tavily API for search and content extraction. Use when the user requests finding related challenges, when solve-challenge has failed multiple times and needs reference solutions, or when first identifying a challenge type and seeking examples. license: MIT compatibility: Requires filesystem-based agent (Claude Code or similar) with bash and Python 3 with requests and tavily packages. allowed-tools: Bash Read Write Glob Grep Skill metadata: user-invocable: "true" argument-hint: "<challenge-name-or-clues>"

CTF Similar Challenge Search

Search for similar CTF challenge writeups using Tavily API.

Prerequisites

pip install requests tavily

Set your Tavily API key (from https://tavily.com) before running:

export TAVILY_API_KEY='tvly-...'

API Overview

This skill provides two interfaces:

| Interface | Purpose | Command | |-----------|---------|---------| | Tavily Search | Search for writeups and articles | ./search.sh search <keyword> | | Tavily Extract | Extract content from URLs | ./search.sh extract <url1> [url2] ... |

Search Workflow

Step 1: Search with Keywords

Choose keywords based on available information:

Scenario 1: Known Competition + Challenge Name

# Format: [Competition Name] [Challenge Name] — max 3 words
./search.sh search "DASCTF URL Storage"
./search.sh search "HGAME baby web"
./search.sh search "BUUCTF pwn1"

Scenario 2: Challenge Name Only (no competition info)

# Use challenge name directly — max 3 words
./search.sh search "URL Storage"
./search.sh search "baby overflow"
./search.sh search "crypto-rsa"

Scenario 3: Unique Identifiers (code snippets, strings)

# Use unique, non-trivial strings from the challenge — NO word limit
./search.sh search "def encrypt_flag(key): return base64"
./search.sh search "CUSTOM_MAGIC_BYTES"
./search.sh search "ERROR: invalid padding in AES block"

⚠️ Critical: 3-Word Limit for Non-Code Queries

All keyword searches that are NOT code snippets or unique identifier strings MUST NOT exceed 3 words. This constraint ensures precise, focused queries that return relevant CTF writeup results instead of broad, diluted searches.

| Search Type | Word Limit | Examples | |-------------|-----------|----------| | Competition + Challenge name | ≤ 3 words | "DASCTF URL Storage", "HGAME baby web" | | Challenge name only | ≤ 3 words | "URL Storage", "baby overflow" | | Code snippets / strings | No limit | "def encrypt_flag(key): return base64" | | Error messages / identifiers | No limit | "CUSTOM_MAGIC_BYTES", "ERROR: invalid padding in AES block" |

For competition + challenge name searches, drop filler words (year numbers, "CTF", "competition", "writeup", "solution") and keep only the 3 most distinctive words:

  • ❌ "HGAME 2024 baby web challenge" (5 words)
  • ✅ "HGAME baby web" (3 words)
  • ❌ "DASCTF 2023 URL Storage writeup" (5 words)
  • ✅ "DASCTF URL Storage" (3 words)
  • ❌ "PlaidCTF 2025 zero day exploit solution" (6 words)
  • ✅ "PlaidCTF zero day" (3 words)

For code/string searches, use the entire unique snippet — these are exempt from the word limit:

  • ✅ "def xor_encrypt(data, key):" (code — exempt)
  • ✅ "ERROR: invalid padding in AES block" (error string — exempt)
  • ✅ "CUSTOM_MAGIC_BYTES" (identifier — exempt)

Keyword Rules

| ✅ Good Keywords | ❌ Bad Keywords | |------------------|-----------------| | Competition + Challenge name (≤3 words) | Single vulnerability type (SSRF, XSS) | | Challenge name (≤3 words) | Generic terms (web, pwn, crypto) | | Unique code snippets (no word limit) | Full sentences | | Specific error messages (no word limit) | Articles (a, the, in) | | Library/framework names | Generic strings (flag{}, etc.) | | Custom function names | Tool names alone |

Why avoid these?

  • "SSRF" → returns generic vulnerability explanations, not CTF writeups
  • "flag{" → returns millions of unrelated results
  • "URL Storage DASCTF" → returns specific CTF challenges

Why the 3-word limit?

  • Forces precision: only the most distinctive keywords survive
  • Filters noise: filler words like "challenge", "writeup", "solution" dilute results
  • Improves API efficiency: shorter, focused queries consume fewer credits

Key principle: Use keywords that uniquely identify THIS challenge, not the general technique or common patterns. Keep non-code queries to 3 words or fewer.

Step 2: Review Search Results

The search returns:

  • Answer: AI-generated summary if available
  • Results: List of URLs with titles and content previews
  • Credits: API usage information

Step 3: Extract Content (Optional)

If a search result looks promising, extract its full content:

# Single URL
./search.sh extract "https://example.com/writeup"

# Multiple URLs
./search.sh extract "https://url1.com" "https://url2.com"

Step 4: Analyze and Pivot

Based on extracted content:

  • Identify common techniques used in similar challenges
  • Determine if the approach is applicable
  • Pivot to category-specific skill if needed

When to Pivot

  • If the challenge is already well-categorized, use the specific ctf-* skill
  • If you need OSINT techniques, use ctf-osint
  • If you need to generate a writeup after solving, use ctf-writeup

Quick Start

# Scenario 1: Competition + Challenge name (≤3 words)
./search.sh search "DASCTF URL Storage"

# Scenario 2: Challenge name only (≤3 words)
./search.sh search "URL Storage"

# Scenario 3: Unique identifier from challenge (no word limit)
./search.sh search "def xor_encrypt(data, key):"
./search.sh search "ERROR: invalid padding"

# Extract content from promising results
./search.sh extract "https://ctftime.org/writeup/12345"

Tips

  1. Be specific: Use competition name + challenge name when available
  2. Use unique strings: Code snippets, error messages, unique identifiers
  3. Avoid generic terms: Don't search "SSRF CTF writeup" - too broad
  4. Review first: Check search results before extracting
  5. Extract selectively: Only extract URLs that look relevant
  6. Respect the 3-word limit: For non-code queries, strip filler words and keep only the 3 most distinctive keywords

$ARGUMENTS

Related Skills

View on GitHub
GitHub Stars3.3k
CategoryDevelopment
Updated1mo ago
Forks389

Languages

Python

Trust signals

100/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

No cautions
ctf-similar-search — Claude Code Skill: Install & Safety Check | SkillAgent