search — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited search (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Search the awesome-ChatGPT-repositories database for the user's query.
Ground rules — they apply whether this skill was invoked explicitly or picked automatically:
##, ###), field labels, and order, and don't restyle them (for example, turning the result list into a table or a prose summary).The query is the text the user passed to this skill (the same skill runs in Claude Code and Codex):
/awesome-chatgpt-search:search, appended at the end as ARGUMENTS: ….$awesome-chatgpt-search:search, minus the $… mention itself.If there is no explicit query text, use the user's latest request.
Supported query modifiers:
category:<name> — filter to one categorylanguage:<lang> — filter by programming languagelist categories or categories — skip to Step 5bThe descriptions are in English, so convert non-English queries to English keywords before searching.
Examples:
| User query | English keywords to search |
|---|---|
| RAGを使ったチャットボット | RAG, retrieval, chatbot, vector |
| 코드 생성 도구 (Korean) | code generation, copilot, autocomplete |
| 中文问答系统 | chinese, QA, question answering |
| outil de résumé (French) | summarization, summary, text |
| LLMを使ったエージェント | agent, autonomous, LLM, tool use |
Keyword tips:
embed → embedding/embeddings, retriev → retrieval/retrieve, classif → classification/classifier, generat → generation/generative, fine-tun → fine-tune/fine-tuning, summari → summarize/summarization, orchestrat → orchestrate/orchestration.| Domain (query hint) | Stem keywords | Tool/library names to add |
|---|---|---|
| RAG / 検索拡張生成 | retriev, rag, embed, vector | langchain, llamaindex, haystack, faiss, chroma, pinecone |
| Agent / エージェント | agent, autonom, orchestrat | autogpt, langchain, langgraph, crewai |
| Fine-tuning / ファインチューニング | fine-tun, lora, peft, finetun | lora, peft, qlora |
| Code generation / コード生成 | code, coding, copilot, autocomplet | copilot, codex, interpreter |
| Chatbot / チャットボット | chat, bot, dialog, convers | discord, telegram, slack |
| Prompt engineering | prompt, few-shot, chain-of-thought, jailbreak | promptflow, dspy |
| Evaluation / 評価 | evaluat, benchmark, metric | evals, lm-eval, deepeval |
| Image / 画像生成 | image, vision, multimodal | dall-e, stable-diffusion, midjourney |
| Voice / 音声 | voice, speech, audio, tts, asr | whisper, eleven |
Data is split into per-category files. Each file is a JSON array with one repo record per line, so you can grep for matches instead of reading whole files — this keeps token use low (a typical query pulls in a few dozen matching lines instead of hundreds of KB). Fields per record:
u: GitHub URL · n: repository name · d: English descriptionc: category · l: language (optional) · t: topics comma-separated (optional)sc: quality score 0–8 · st: star count (optional) · ns: normalized star score 0–10 (optional)File list (all under data/ relative to this plugin; six categories over ~200 entries are split a/b):
| Category | File(s) |
|---|---|
| Awesome-lists | repos-awesome-lists.json |
| Prompts | repos-prompts.json |
| Chatbots | repos-chatbots-a.json, repos-chatbots-b.json |
| Browser-extensions | repos-browser-extensions-a.json, repos-browser-extensions-b.json |
| CLIs | repos-clis-a.json, repos-clis-b.json |
| Reimplementations | repos-reimplementations.json |
| Tutorials | repos-tutorials.json |
| NLP | repos-nlp-a.json, repos-nlp-b.json |
| Langchain | repos-langchain.json |
| Unity | repos-unity.json |
| Openai | repos-openai-a.json, repos-openai-b.json |
| Others | repos-others-a.json, repos-others-b.json |
Which files to search — pick the minimum set that covers the query, then grep them (below):
Rule A — category: specified: grep only that category's file(s), skip routing below. Match the category name case-insensitively and accept common variants: cli/clis/command-line → CLIs · chatbot/bot/chatbots → Chatbots · browser/extension/browser-extension → Browser-extensions · prompt/prompts → Prompts · tutorial/tutorials → Tutorials · reimpl/reimplementation → Reimplementations · awesome/lists → Awesome-lists · open ai/openai → Openai. If the value matches no category, fall back to keyword routing (Rule C).
Rule B — list categories: skip the keyword search, jump to Step 5b.
Rule C — keyword routing for general queries:
Use the English keywords from Step 1 (not the original query text) for routing. For each row below, check if any English keyword contains or matches the listed terms (case-insensitive substring). Use that row's file(s) only if there is a match. If multiple rows match, collect all their files (deduplicated). If no rows match, use the default: repos-chatbots-a.json, repos-nlp-a.json, repos-openai-a.json, repos-others-a.json.
| If query mentions… | Search these files |
|---|---|
| chatbot, bot, chat, dialog, conversation, assistant, discord, slack | repos-chatbots-a.json, repos-chatbots-b.json |
| RAG, retrieval, vector, embed, semantic, FAISS, Chroma, Pinecone, similarity, index | repos-nlp-a.json, repos-nlp-b.json, repos-langchain.json |
| NLP, text, classify, classification, NER, POS, sentiment, translation, extraction, summariz | repos-nlp-a.json, repos-nlp-b.json |
| agent, agentic, workflow, autonomous, orchestrat, tool use, function call, multi-agent | repos-others-a.json, repos-others-b.json, repos-langchain.json |
| OpenAI, GPT-3, GPT-4, gpt4, gpt3, completion, fine-tun, API key, endpoint | repos-openai-a.json, repos-openai-b.json |
| browser, extension, Chrome, Firefox, sidebar, popup, Tampermonkey | repos-browser-extensions-a.json, repos-browser-extensions-b.json |
| CLI, terminal, shell, command-line, command line | repos-clis-a.json, repos-clis-b.json |
| tutorial, learn, course, beginner, guide, example, cookbook, sample | repos-tutorials.json |
| prompt, prompting, few-shot, chain-of-thought, jailbreak, injection | repos-prompts.json |
| Unity, game engine, 3D, game development | repos-unity.json |
| LangChain, LlamaIndex, Haystack, chain, index, LangGraph | repos-langchain.json |
| lora, peft, qlora, finetun, fine-tuning, quantiz | repos-reimplementations.json, repos-nlp-a.json, repos-openai-a.json |
| evaluat, benchmark, metric, assess, leaderboard | repos-nlp-a.json, repos-nlp-b.json, repos-others-a.json |
| reimplement, from scratch, reproduce, train, training, PyTorch | repos-reimplementations.json |
| awesome list, curated, collection, survey, compilation | repos-awesome-lists.json |
| code, coding, IDE, VS Code, copilot, autocomplete, interpreter | repos-others-a.json, repos-others-b.json, repos-clis-a.json |
| image, vision, multimodal, DALL-E, Stable Diffusion, drawing | repos-others-a.json, repos-nlp-a.json |
| voice, speech, audio, TTS, ASR, Whisper | repos-others-a.json, repos-nlp-b.json |
Then grep those files for the keywords — do NOT read whole files into context (no Read tool, `cat`, or full-file dumps). Locate the data directory once — it is the plugin's data/ folder, two levels above this SKILL.md:
${CLAUDE_PLUGIN_ROOT}/data<directory of this SKILL.md>/../../data, built from the absolute path you loaded this SKILL.md from.If that directory does not exist (unusual install), find it — the data directory is the folder that contains the printed file:
find "${CODEX_HOME:-$HOME/.codex}/plugins" "$HOME/.claude/plugins" "$PWD" -type f -name repos-unity.json -path "*awesome-chatgpt-search*" 2>/dev/null | head -1Shell variables may not persist between commands, so write the resolved absolute path in place of $DATA in the commands below.
Then grep the selected files for your Step 1 keywords and cap the output. Use -F (literal substring match — same semantics as the scoring step, and safe for keywords like c++ or .net) with one -e per keyword:
grep -ihF -e keyword1 -e keyword2 -e keyword3 "$DATA"/repos-nlp-a.json "$DATA"/repos-nlp-b.json | head -120Each line of output is one repo record (a JSON object) that matched at least one keyword — score those lines directly in Step 4. This reads only the matching repos, not the whole files. Notes:
head cap, your keywords are good; proceed.grep is unavailable.language:<lang> was given)Append a language filter to the grep pipeline (the l field holds the language, matched case-insensitively):
grep -ihF -e keyword1 -e keyword2 "$DATA"/repos-clis-a.json "$DATA"/repos-clis-b.json | grep -iF '"l":"<lang>"' | head -120Using the English keywords from Step 1, compute a relevance score for each repo record returned by grep:
Text match score (case-insensitive, per keyword):
n) exact keyword match: +20 ptsn) contains keyword: +10 ptsd) contains keyword: +5 ptst) contains keyword: +3 ptsc) contains keyword: +2 ptsPopularity bonus (added once per item):
ns (normalized star score) is present: min(4, ns * 0.4)min(4, sc * 0.5)Quality bonus (always added): min(2, sc * 0.25)
Combined score = text_match + popularity_bonus + quality_bonus
Exclude items with text_match < 5 (catches only accidental partial hits). Collect top 20 candidates by combined score.
Apply semantic judgment to produce the final ordered list of 10 results — fewer only when fewer candidates actually fit the query.
Re-rank by evaluating each candidate on:
sc means a richer, better-documented project.Chatbots, CLIsTutorialsPromptsBrowser-extensionsNLP, LangchainOpenail.list categories / categories)Skip scoring. Count the repositories per category from the data (one cheap command, so the numbers always match the bundled data):
grep -ho '"c":"[^"]*"' "$DATA"/repos-*.json | sort | uniq -cPresent the counts in this order, followed by the total:
## Available categories
| Category | Count |
|----------|-------|
| Awesome-lists | N |
| Prompts | N |
| Chatbots | N |
| Browser-extensions | N |
| CLIs | N |
| Reimplementations | N |
| Tutorials | N |
| NLP | N |
| Langchain | N |
| Unity | N |
| Openai | N |
| Others | N |
| **Total** | **N** |## Search results for "<query>"
*(Searched for: keyword1, keyword2, ...)*
Found N result(s).
### 1. [repository-name](url)
**Category:** category · **Language:** language · ⭐ {st} stars
Description text here.
*Topics: tag1, tag2, tag3*
### 2. ...Fill every field from the record: link text n, URL u, category c, language l, stars st as-is, the description d verbatim (you may drop :emoji: shortcodes), and topics from t (trim long lists to about 8). The results stay in English like the data; only the Step 7 guide follows the query language.
Omit the Language line if l is absent. Omit ⭐ stars if st is absent. Omit the Topics line if t is absent.
If no results found, suggest alternate keywords and link to: https://github.com/taishi-i/awesome-ChatGPT-repositories
After the search results list, append a guide table to help users pick the right repo for their specific situation.
Match the section heading and table language to the query language — if the query was in Japanese, use Japanese for the heading and column headers; otherwise use English.
## Use-case Selection Guide
| Use case | Recommended | Score | Why |
|---|---|---|---|
| ... | [name](url) | sc=N | short reason |Rules:
sc=N using the item's quality score.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.