by kishormorol
An Agent Skill that turns the asks you keep typing into short commands, mined from your own Claude Code and Codex history. Works in Claude Code, Codex and Cursor.
# Add to your Claude Code skills
git clone https://github.com/kishormorol/cli-faq-shortcutsGuides for using ai agents skills like cli-faq-shortcuts.
See how cli-faq-shortcuts compares with popular alternatives.
cli-faq-shortcuts is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by kishormorol. An Agent Skill that turns the asks you keep typing into short commands, mined from your own Claude Code and Codex history. Works in Claude Code, Codex and Cursor. It has 53 GitHub stars.
cli-faq-shortcuts's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/kishormorol/cli-faq-shortcuts" and add it to your Claude Code skills directory (see the Installation section above). cli-faq-shortcuts ships a SKILL.md manifest, so compatible agents can discover and load it automatically.
cli-faq-shortcuts is primarily written in Python. It is open-source under kishormorol on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh cli-faq-shortcuts against similar tools.
No comments yet. Be the first to share your thoughts!
Unlocks once the catalog security scan passes (runs nightly).
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
See comparison
People working with an agent on one project type the same asks over and over: "how many
signed up", "did it go out?", "send a reminder to those who haven't…". Each time the agent
starts cold and has to relearn the traps. This skill mines what was actually asked and
turns the most repeated asks into short project skills (/joined, /sent, /remind…).
Each one records the right tool and the mistakes already made on that path.
Build from evidence, not from guesses about what might be useful.
python3 scripts/extract_asks.py <project_dir> [--source all|claude|codex] [--since YYYY-MM-DD] > asks.tsv
On Windows, run it with python instead of python3. This prints every prompt typed in
that project's sessions, oldest first, as
date<TAB>source<TAB>prompt. It reads Claude Code (~/.claude/projects/, plus
~/.claude/history.jsonl for sessions older than the 30 days Claude Code keeps
transcripts) and Codex (~/.codex/sessions/, or $CODEX_HOME) by default, and skips
subagent turns and scripted runs such as codex exec, because nobody typed those. An ask
repeated across both tools counts as one cluster. Cursor history is not read yet: it lives
in an undocumented SQLite store.
Write the output to a scratch location, not into the repo, because prompts can contain names, emails and tokens.
Also read the commit subjects (git log --format='%ad %s' --date=short). Commits show which
operations recur, like repeated send-*, sync-* and import-* scripts. Prompts show how
the user phrases them.
Read the whole list. Group prompts that want the same outcome whatever their wording ("how many joined", "how many confirmed", "how many members now" → one head-count ask). Count each cluster and keep 2–3 verbatim phrasings, which become the description's triggers.
A cluster earns a shortcut when:
Drop one-offs and anything a single command already answers.
List .claude/skills/, .claude/commands/, .agents/skills/ and the project's CLAUDE.md
and AGENTS.md. Extend an existing skill instead of adding a near-duplicate. Then find the
project's existing tools for each cluster, such as scripts, CLI commands and API routes.
A shortcut should point to the tool that exists. Don't write a new one.
Read those tools' headers and the commits that fixed them. The traps you find there are the most valuable part of each skill.
Show the user a short table with shortcut name, the ask it replaces, and how often it appeared. Let them pick. Short names beat descriptive ones here, because the point is less typing. Use one lowercase word, and never shadow a built-in command.
.claude/skills/<name>/SKILL.md, committed with the project so it travels. Claude Code
and Cursor load skills from .claude/skills/. Codex loads them from .agents/skills/, so
link each one there as well:
mkdir -p .agents/skills && ln -s ../../.claude/skills/<name> .agents/skills/<name>
Link each skill folder, not .agents/skills itself: Codex follows a symlinked skill folder
but does not scan a symlinked .agents/skills.
The skill file itself:
---
name: <short>
description: <what it does>. Use for "<verbatim phrasing 1>", "<phrasing 2>", "<phrasing 3>".
argument-hint: "[optional arg]"
---
# <What it answers>
Report only / Dry run first — **never <write/send> from this skill without a yes.**
## Query / tool ← the existing script or query, with its real flags
## Traps ← only ones that actually happened, each with the consequence
## Report ← exactly what to print, then ask
Rules:
description if it contains : or #, or YAML will truncate it.Add a table to the project's CLAUDE.md (and AGENTS.md, if the project has one) that maps each shortcut to the sentence it replaces. It serves as both documentation and a reminder to use it.
The shortcuts added, the ask each replaces with its count, and any frequent cluster you deliberately left out and why.
Stop typing the same long request to your coding agent every day. This
Agent Skill reads your own history, finds the asks you keep
repeating, and turns each one into a short command, like /sent or /project billing.
It works in Claude Code, Codex and Cursor.
1. Install (macOS / Linux, needs git and Python 3.9+; on Windows see Windows):
git clone https://github.com/kishormorol/cli-faq-shortcuts ~/.agents/skills/faq-shortcuts
mkdir -p ~/.claude/skills && ln -sfn ~/.agents/skills/faq-shortcuts ~/.claude/skills/faq-shortcuts
2. Open your project in Claude Code, Codex or Cursor, in a new session.
3. Ask "what do I keep asking in this project?", or type /faq-shortcuts in Claude Code.
You'll get a table of your most repeated asks with how often you typed each. Pick the ones you want and they become shortcuts in that project.
The repo is
cli-faq-shortcuts; the skill it installs is calledfaq-shortcuts.
If it saves you typing, please ⭐ star the repo. Stars are how other people find it.
# inside your project, in Claude Code
/faq-shortcuts # find your repeated asks and propose shortcuts
/faq-shortcuts --since 2026-06-01 # only look at recent history
/faq-shortcuts --source codex # only what you asked Codex
# the extractor on its own: no agent, nothing leaves your machine
E=~/.agents/skills/faq-shortcuts/scripts/extract_asks.py
python3 $E . # every prompt you typed here, oldest first
python3 $E . --since 2026-09-01 | wc -l # how many since September
python3 $E . | awk -F'\t' 'split($3,w," ")>=4 {print tolower($3)}' \
| sort | uniq -c | sort -rn | head # your most repeated exact requests
The last one counts exact repeats only, and it undercounts. On one real project, the most
repeated exact request appeared 4 times. Grouped by intent, however it was worded, the top
ask had been typed 127 times. That grouping is the agent's job in /faq-shortcuts.
| You kept typing | You type now |
|---|---|
| "how many people signed up this week, not counting test accounts?" | /signups |
| "did the newsletter actually go out? did it reach everyone?" | /sent |
| "any update on the billing migration? what's blocked?" | /project billing |
| "add this CSV of new customers, skip the ones we already have" | /import new.csv |
Each shortcut is a small file in your project, .claude/skills/<name>/SKILL.md, for example:
---
name: sent
description: Check whether a batch email actually reached people. Use for "did the
newsletter go out?", "did it reach everyone?", "did X get the email?".
---
# Did it go out
Report only. Never re-send from this shortcut.
## Query
scripts/email-status.js --batch <name> ← the script your project already has
## Traps
- A "delivered" status to a shared inbox proves nobody read it (happened 3 May).
## Report
Sent / delivered / bounced counts, then the bounced addresses. Then ask.
The shortcuts point at the scripts and queries your project already uses, and they record the mistakes already made on that path. So a shortcut is shorter to type and safer to run. Anything that writes or sends does a dry run first and waits for your yes, so a typo stops at the preview.
scripts/extract_asks.py prints every prompt you typed in the project,
from Claude Code and Codex history. It skips subagent turns and scripted runs, because
you didn't type those.SKILL.md in .claude/skills/, linked into
.agents/skills/ so all three agents load it, committed so your team gets it too.CLAUDE.md / AGENTS.md maps each shortcut to the sentence it replaces.The quick start above is the whole install. It puts the skill where each agent looks:
| Agent | Reads skills from |
|---|---|
| Codex | ~/.agents/skills/ |
| Claude Code | ~/.claude/skills/ (the link) |
| Cursor | both |
Update: git -C ~/.agents/skills/faq-shortcuts pull
Uninstall: rm ~/.claude/skills/faq-shortcuts && rm -rf ~/.agents/skills/faq-shortcuts
In PowerShell, with git and Python 3.9+ installed. A directory junction links the skill
into ~/.claude/skills and, unlike a symlink, needs no admin rights or Developer Mode:
git clone https://github.com/kishormorol/cli-faq-shortcuts "$env:USERPROFILE\.agents\skills\faq-shortcuts"
New-Item -ItemType Directory -Force "$env:USERPROFILE\.claude\skills" | Out-Null
New-Item -ItemType Junction -Path "$env:USERPROFILE\.claude\skills\faq-shortcuts" -Target "$env:USERPROFILE\.agents\skills\faq-shortcuts"
Run the extractor with python (or py), not python3:
python "$env:USERPROFILE\.agents\skills\faq-shortcuts\scripts\extract_asks.py" . | Select-Object -First 10
Update: git -C "$env:USERPROFILE\.agents\skills\faq-shortcuts" pull
Uninstall: remove the junction with rmdir, which leaves its target alone, then the clone:
cmd /c rmdir "$env:USERPROFILE\.claude\skills\faq-shortcuts"
Remove-Item -Recurse -Force "$env:USERPROFILE\.agents\skills\faq-shortcuts"
| Agent | History | Read? |
|---|---|---|
| Claude Code | ~/.claude/projects/<project>/*.jsonl (the last 30 days) and ~/.claude/history.jsonl (older prompts) |
yes |
| Codex | ~/.codex/sessions/ (or $CODEX_HOME), matched by the folder each session ran in |
yes |
| Cursor | an undocumented SQLite store | not yet, but Cursor still loads the shortcuts |
To see what it finds without the agent:
python3 ~/.agents/skills/faq-shortcuts/scripts/extract_asks.py ~/my-project | head
This prints date<TAB>source<TAB>prompt. Add --source claude or --source codex to read
one tool only, and --since 2026-01-01 to skip older prompts.
| You see | Do this |
|---|---|
The agent doesn't know /faq-shortcuts |
Start a new session. Skills load when a session starts. Check that ls ~/.claude/skills/faq-shortcuts/SKILL.md finds the file. |
no session history at … |
Run it from the project folder you actually worked in. History is stored per folder, so a subfolder counts as a different project. |
| Very few prompts found | Only Claude Code and Codex history is read. Cursor chats aren't read yet. |
fatal: destination path … already exists |
It's already installed. Run the update command instead. |
Issues and pull requests are welcome. Good first contributions:
Everyone whose pull request is merged appears here:
Built with help from Claude Code.
The extractor only reads local files and makes no network calls. Your prompts can contain names, emails and tokens, so the skill writes the list to a scratch folder, never into your repo. Your agent then reads that list the same way it reads any file you show it.