Using Agent Skills
addyosmani/agent-skills
Meta-skill for choosing which workflow skill fits the task at hand, plus always-on habits: surface assumptions, stop on confusion, push back, keep it simple and stay in scope.
Discovers the core attributes of the current code repository and its projects — languages, frameworks, tooling, and where things live — and writes a concise reference section directly into the…
$ npx skills add testdouble/han --skill project-discovery -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install testdouble/han project-discovery --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .claude/skills && cp -r skills-src/han-core/skills/project-discovery .claude/skills/project-discovery && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "project-discovery" agent skill from https://github.com/testdouble/han/tree/main/han-core/skills/project-discovery into .claude/skills/project-discovery/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-discovery", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/testdouble/han/tree/main/han-core/skills/project-discoveryType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add testdouble/han --skill project-discovery -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install testdouble/han project-discovery --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .agents/skills && cp -r skills-src/han-core/skills/project-discovery .agents/skills/project-discovery && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "project-discovery" agent skill from https://github.com/testdouble/han/tree/main/han-core/skills/project-discovery into .agents/skills/project-discovery/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-discovery", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add testdouble/han --skill project-discovery -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install testdouble/han project-discovery --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/han-core/skills/project-discovery .cursor/skills/project-discovery && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "project-discovery" agent skill from https://github.com/testdouble/han/tree/main/han-core/skills/project-discovery into .cursor/skills/project-discovery/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-discovery", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/testdouble/han.git --path han-core/skills/project-discovery--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add testdouble/han --skill project-discovery -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install testdouble/han project-discovery --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/han-core/skills/project-discovery .gemini/skills/project-discovery && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "project-discovery" agent skill from https://github.com/testdouble/han/tree/main/han-core/skills/project-discovery into .gemini/skills/project-discovery/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-discovery", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install testdouble/han project-discoveryInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add testdouble/han --skill project-discovery -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .github/skills && cp -r skills-src/han-core/skills/project-discovery .github/skills/project-discovery && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "project-discovery" agent skill from https://github.com/testdouble/han/tree/main/han-core/skills/project-discovery into .github/skills/project-discovery/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-discovery", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add testdouble/han --skill project-discovery -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install testdouble/han project-discovery --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/han-core/skills/project-discovery .opencode/skills/project-discovery && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "project-discovery" agent skill from https://github.com/testdouble/han/tree/main/han-core/skills/project-discovery into .opencode/skills/project-discovery/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-discovery", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
project-discoveryDiscovers the core attributes of the current code repository and its projects — languages, frameworks, tooling, and where things live — and writes a concise reference section directly into the…
Project Discovery is an agent skill from testdouble/han. Discovers the core attributes of the current code repository and its projects — languages, frameworks, tooling, and where things live — and writes a concise reference section directly into the project's AGENTS.md or CLAUDE.md for other skills, agents, and hooks to consume. Use when scanning, analyzing, or detecting the project's technology stack, build tools, or repository structure. Does not create or update project documentation — use project-documentation for writing feature or system docs.
Its SKILL.md is about 2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/template.md`).
It sits in Agent Workflows, covering Agent instruction files. The repository describes itself as: Han: AI skills and agents for "Solo" product engineers and small teams. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit abba73a. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadWriteEditGlobGrepAgentBash(git symbolic-ref *)Bash(find *)Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh")From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitbashmakeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Project Discovery loads about 2k tokens when it runs, and up to ~2.4k if it reads all its reference files. Until then it costs about 129 tokens; SKILL.md has 1,044 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from testdouble/han at commit abba73a, republished under its MIT licence (© testdouble). 1,044 words, ~2,004 tokens.
.claude/skills/project-discovery/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.git symbolic-ref --short refs/remotes/origin/HEAD 2>/dev/null || echo unknownfind . -maxdepth 1 -name "AGENTS.md" -type ffind . -maxdepth 1 -name "CLAUDE.md" -type ffind . -maxdepth 1 -name "README*" -type fbash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh" 2>/dev/null || echo "$HOME/.claude"cat .han/config.md 2>/dev/null || echo ""As your first action, use the Read tool on .han/config.md inside the personal config directory path above. A read
that returns no file is no personal configuration: continue silently. When that file or the project .han/config.md
probe supplies content, apply it per config-rule.md, which governs precedence
between the two files, relative-path resolution, and what to do with a file that reads but cannot be used.
This skill discovers the project's core attributes and writes them as a concise ## Project Discovery section
directly into the project's AGENTS.md or CLAUDE.md — not a separate file. The output is small by design: a few notes
on where things live, the languages and frameworks, and the commands to run, so an AI agent working in the repo can find
its way around. It is not an exhaustive inventory.
Pick the single file this discovery is written into, by priority:
If the target file already exists, read it in full and build the deduplication baseline: a list of everything the
file already documents that this skill would otherwise write — directory and folder locations, languages, frameworks,
package manager, build/test/lint/dev commands, and the docs, ADR, and coding-standards directories. Note whether the
file already has a ## Project Discovery section.
If the target is a new CLAUDE.md, there is nothing to deduplicate against.
Launch a han-core:project-scanner agent to determine whether the repository contains one project or many, and what
each project's boundaries are. Wait for the agent to complete.
From the agent's results, build a project list. Each entry has a project name (directory name, or repository name for a root-level project), root path, and dependency manifest path.
Launch 3 han-core:project-scanner agents in parallel, each with a different focus area. Include the project list from
Step 2 in each agent's prompt so they know which roots to explore. Keep each agent on the core facts an AI agent needs
to navigate and run the project — not an exhaustive catalog of every config file.
Agent 1 — Languages and Frameworks: For each project, read the dependency manifest to identify languages and version constraints. Determine the package manager from the lock file type. From dependencies, identify the structural/architectural frameworks that define how the project is built (web, frontend, test, ORM/database). Ignore utility packages. Note runtime version requirements.
Agent 2 — Commands: For each project, find the task runner or build definition and extract the actual commands for installing dependencies, running tests, linting, building, and the dev server. Only record commands that actually exist — no guesses.
Agent 3 — Layout: Map where the important things live: the main source directory or directories, the test location, and the documentation, ADR, and coding-standards directories — do not assume names like "docs". Capture only the handful of directories someone needs to know to find their way around the repo; skip incidental files.
After all 3 agents complete, merge their findings, deduplicate across agents, and organize by project. Separate repository-level items (default branch, docs, ADRs, coding standards, layout) from project-level items (language, frameworks, package manager, commands).
Build a concise ## Project Discovery section using the template at template.md as the
structural guide.
Apply two filters before writing anything:
{placeholder} behind, and never invent a
command or path that was not discovered.If a discovered fact contradicts what the file already states (for example, the file says make test but no
Makefile was discovered), use AskUserQuestion to surface the contradiction and ask which is correct — the existing
file or the filesystem discovery. Update the content based on the answer.
Then write the result into the target file:
## Project Discovery section: append the section at the end of the file (or another sensible
location).## Project Discovery section: replace that section's body with the new,
deduplicated content. Do not leave the old content alongside the new.If, after deduplication, nothing meaningful remains to add, do not write an empty section. Tell the user the target file already covers the project's core attributes, and stop.
.han/config.md pointer honestHan skills read project-local overrides from the project's .han/config.md when a project carries one (see
../../references/config-rule.md). This step keeps the target file's pointer to that
config accurate, using the same consent gate and deduplication discipline as Step 4. The Project Context probe above
shows whether the file exists.
.han/config.md exists and the target file contains no reference to it: use AskUserQuestion to offer adding a
one-line pointer beside the ## Project Discovery section, for example:
Han skills in this project read overrides from [.han/config.md](./.han/config.md). Never add a pointer when any
reference to the file is already present, even phrased differently..han/config.md does not exist but the target file still references it: use AskUserQuestion to offer removing
the stale pointer.Write or remove the pointer only with the user's consent.
Read back the target file's ## Project Discovery section. Confirm: no {placeholder} text remains, every bullet has a
real discovered value, and nothing duplicates content stated elsewhere in the file. Spot-check 2-3 discovered paths or
directories with Glob to confirm they exist.
Report to the user: the target file written (and whether it was created or updated), the number of projects discovered, and the languages and frameworks found.
© testdouble, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in han-core/skills/project-discovery of testdouble/han.
Open the folder on GitHubat commit abba73a
Project Discovery next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Project Discovery this skilltestdouble/han | 279 | — | ~2k | Automated safety check: Pass | MIT | |
| Using Agent Skillsaddyosmani/agent-skills | 102k | 4 repos | ~2.4k | Automated safety check: Pass | MIT | |
| Claude ReflectBayramAnnakov/claude-reflect | 1.7k | 2 repos | ~627 | Automated safety check: Pass | MIT | |
| Neat-Freak Knowledge CloseoutKKKKhazix/khazix-skills | 21k | — | ~1.9k | Automated safety check: Pass | MIT | |
| Task Observerrebelytics/one-skill-to-rule-them-all | 3.2k | 1 repos | ~12k | Automated safety check: Pass | CC-BY-4.0 | |
| Writing For Agentsbestofjs/bestofjs | 3.1k | 17 repos | ~2.7k | Automated safety check: Pass | MIT |
addyosmani/agent-skills
Meta-skill for choosing which workflow skill fits the task at hand, plus always-on habits: surface assumptions, stop on confusion, push back, keep it simple and stay in scope.
BayramAnnakov/claude-reflect
Self-learning system that captures corrections during sessions and reminds users to run /reflect to update CLAUDE.md.
KKKKhazix/khazix-skills
Brings project docs, agent rule files, authorized memory and leftover workspace files back in line with what the code and runtime actually do at the end of a work session.
rebelytics/one-skill-to-rule-them-all
Monitors task execution for skill improvement opportunities.
bestofjs/bestofjs
Writing documents for agents. An agent skill from bestofjs/bestofjs.
microsoft/SkillOpt
Runs an on-demand or nightly sleep cycle that reviews past Claude Code sessions and proposes validated updates to CLAUDE.md and skills.
testdouble/han
Convert a stakeholder summary markdown file into a single self-contained HTML executive report — bottom line and decision asks up front, supporting detail later — styled with a Test Double-derived…
testdouble/han
Update Han plugin documentation so every skill, agent, guidance doc, index, and cross-reference is current and accurate.
testdouble/han
Authoritative guidance for building Claude Code skills, agents, and plugins, plus init and update steps that install and refresh the plugin-building skills in the current repository.
testdouble/han
Cut a Han release: update CHANGELOG.md with the changes since the last release, bump and tag every plugin that changed as {plugin-name}--v{version} so a version-constrained dependency can resolve…
testdouble/han
Builds a feature implementation plan from an existing feature specification (or equivalent context) through a facilitated team conversation.
testdouble/han
Restructure existing code without changing its behavior, through a test-gated refactoring loop: a named target, a green suite over that target before any edit, a planned sequence of small named…
Categories
Discovers the core attributes of the current code repository and its projects — languages, frameworks, tooling, and where things live — and writes a concise reference section directly into the…. Project Discovery is an agent skill from testdouble/han.md for other skills, agents, and hooks to consume.
Project Discovery fits situations like: detecting the projects technology stack; repository structure.
Run `npx skills add testdouble/han --skill project-discovery -a claude-code`. Or copy the skill folder (han-core/skills/project-discovery in testdouble/han) into .claude/skills/project-discovery in your project. Claude Code loads it when a task matches its description.
Run `npx skills add testdouble/han --skill project-discovery -a codex`. Or copy the skill folder (han-core/skills/project-discovery in testdouble/han) into .agents/skills/project-discovery in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add testdouble/han --skill project-discovery -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/project-discovery, .gemini/skills/project-discovery, .github/skills/project-discovery and .opencode/skills/project-discovery in your project.
Going by SKILL.md and its folder, Project Discovery needs the command-line tools its instructions call (git, bash and make). Its frontmatter pre-approves these tools: Read, Write, Edit, Glob, Grep, Agent, Bash(git symbolic-ref *), Bash(find *), Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh").
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Project Discovery is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2k tokens (SKILL.md is roughly 8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 393 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Project Discovery: Using Agent Skills (addyosmani/agent-skills, 102k stars), Claude Reflect (BayramAnnakov/claude-reflect, 1.7k stars), Neat-Freak Knowledge Closeout (KKKKhazix/khazix-skills, 21k stars) and Task Observer (rebelytics/one-skill-to-rule-them-all, 3.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
testdouble (a GitHub organization) maintains it in testdouble/han, which has 279 GitHub stars. The repository holds 54 skills in this directory. The repository was last updated on October 1, 2026.
Source: testdouble/han on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.