# Agent Skills
> Personal collection of agent skills — both custom-authored and cherry-picked from upstream repos.
Personal collection of agent skills — local custom-authored skills under skills/local/ and 3rd-party skills cherry-picked into skills/vendor/ via the vendor.yaml manifest. Includes project-knowledge-harness (a TODO/backlog/pitfalls memory harness with bundled init/kanban/promote scripts) and quantatitive-factor-researcher (a Python quant-research persona). Installable via `npx skills@latest add daviddwlee84/agent-skills/skills`.
# Guides
# Agent Skills
A personal collection of [agent skills](https://agentskills.io/home) — both custom-authored and cherry-picked from upstream repos — installable as a single package.
## Install
```
# Install all skills bundled in this repo into your project's
# .agents/skills/ directory.
npx skills@latest add daviddwlee84/agent-skills/skills
```
> **Note** The trailing `/skills` matters. Without it, `npx skills` will look in `.agents/skills/` of the upstream repo, which contains a different layout. The `skills/` suffix points the installer at the `skills/local/` and `skills/vendor/` trees.
This is the recommended cross-agent install path. Project installs place the canonical skill content under `.agents/skills/`, which Codex reads directly; Claude Code receives its corresponding `.claude/skills/` links.
> **Heads-up — upstream picker bug.** `npx skills`' interactive multiselect glitches once the skill list is long enough to scroll: options render duplicated and the selection state gets corrupted ([vercel-labs/skills#969](https://github.com/vercel-labs/skills/issues/969)). This repo ships enough skills to trigger it. Until it's fixed upstream, skip the picker:
>
> ```
> # Install everything, non-interactively (no picker)
> npx skills@latest add daviddwlee84/agent-skills/skills --yes
>
> # List names from a disposable directory. In an existing agent-managed
> # project, skills@1.5.23 may reconcile .agents/skills even with --list.
> scratch="$(mktemp -d)"
> (cd "$scratch" && npx skills@latest add daviddwlee84/agent-skills/skills --list)
> rm -rf "$scratch"
>
> # Install one skill by name.
> npx skills@latest add daviddwlee84/agent-skills/skills --skill clash-proxy-api
> ```
### Optional: native Claude Code and Codex marketplaces
A local checkout can expose the same category catalog through either native plugin CLI:
```
git clone https://github.com/daviddwlee84/agent-skills.git
# Claude Code
claude plugin marketplace add ./agent-skills/skills
claude plugin install version-control@daviddwlee84-skills
# Codex (verified with 0.147.0)
codex plugin marketplace add ./agent-skills/skills
codex plugin add version-control@daviddwlee84-skills
```
Both native routes install a whole category plugin (`version-control` in this example), not an arbitrary single skill. Codex reads the existing Claude-format marketplace and generates its `.codex-plugin/plugin.json` adapter inside the plugin cache; this repository does not need to maintain that second manifest. Keep using `npx skills` when you want one skill or a cross-agent installation.
Pass the checkout's `skills/` directory, not the repository root: the catalog intentionally lives under `skills/.claude-plugin/` for the `npx` subpath above, and both native CLIs require a supported manifest at the marketplace source root.
## What's in here
Three categories of skills live under `skills/`:
- **`skills/local/`** — custom-authored skills maintained in this repo. See the [Skills overview](https://daviddwlee84.github.io/agent-skills/skills/index.md) for the index.
- **`skills/owned/`** — first-party skills maintained in other projects, including [go-cli-tui](https://daviddwlee84.github.io/agent-skills/skills/go-cli-tui/index.md); see [owned workflows](https://daviddwlee84.github.io/agent-skills/workflows/adding-owned-skills/index.md).
- **`skills/vendor/`** — third-party skills synced from upstream repos via the [`vendor.yaml`](https://github.com/daviddwlee84/agent-skills/blob/main/vendor.yaml) manifest. See [Adding vendor skills](https://daviddwlee84.github.io/agent-skills/workflows/adding-vendor-skills/index.md).
The repo is also a live example of the [`project-knowledge-harness`](https://daviddwlee84.github.io/agent-skills/skills/project-knowledge-harness/index.md) skill applied to itself: [`TODO.md`](https://github.com/daviddwlee84/agent-skills/blob/main/TODO.md), [`backlog/`](https://github.com/daviddwlee84/agent-skills/tree/main/backlog), and [`pitfalls/`](https://github.com/daviddwlee84/agent-skills/tree/main/pitfalls) sit at repo root, with [`scripts/`](https://daviddwlee84.github.io/agent-skills/reference/scripts/index.md) wrapping the validator/promoter/inbox toolkit.
## Where to go next
| If you want to… | Read |
| ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| Install and try the skills | [Getting Started](https://daviddwlee84.github.io/agent-skills/getting-started/index.md) |
| Understand naming / layout rules | [Conventions](https://daviddwlee84.github.io/agent-skills/conventions/index.md) |
| Add a third-party skill | [Adding vendor skills](https://daviddwlee84.github.io/agent-skills/workflows/adding-vendor-skills/index.md) |
| Author a new local skill | [Creating local skills](https://daviddwlee84.github.io/agent-skills/workflows/creating-local-skills/index.md) |
| Capture a TODO or pitfall in a project | [Project memory workflow](https://daviddwlee84.github.io/agent-skills/workflows/project-memory/index.md) |
| Browse what skills exist | [Skills overview](https://daviddwlee84.github.io/agent-skills/skills/index.md) |
| Browse external skills, MCPs, domain hubs | [Catalog](https://daviddwlee84.github.io/agent-skills/catalog/index.md) |
| Build a docs site for your own project | [Downstream docs stack recipe](https://daviddwlee84.github.io/agent-skills/reference/docs-stack-recipe/index.md) |
## For AI assistants
This site exposes LLM-friendly endpoints (per the [llmstxt.org](https://llmstxt.org/) spec):
- [`llms.txt`](https://daviddwlee84.github.io/agent-skills/llms.txt) — compact index of all default-language pages
- [`llms-full.txt`](https://daviddwlee84.github.io/agent-skills/llms-full.txt) — default-language pages concatenated into one file
- Every page is also available as raw Markdown by appending `/index.md` to its URL (e.g. [`getting-started/index.md`](https://daviddwlee84.github.io/agent-skills/getting-started/index.md)).
If you're an agent reading this, prefer `llms-full.txt` for a single-shot context dump, or fetch individual `*/index.md` paths for the page you need.
# Getting Started
## Install the skills
```
# Install all skills bundled in this repo into your project's
# .agents/skills/ directory.
npx skills@latest add daviddwlee84/agent-skills/skills
```
> **Note** The trailing `/skills` matters. Without it, `npx skills` will look in `.agents/skills/` of the upstream repo, which contains a different layout. The `skills/` suffix points the installer at the `skills/local/` and `skills/vendor/` trees.
This is the recommended cross-agent install path. Project installs place the canonical skill content under `.agents/skills/`, which Codex reads directly; Claude Code receives its corresponding `.claude/skills/` links.
> **Heads-up — upstream picker bug.** `npx skills`' interactive multiselect glitches once the skill list is long enough to scroll: options render duplicated and the selection state gets corrupted ([vercel-labs/skills#969](https://github.com/vercel-labs/skills/issues/969)). This repo ships enough skills to trigger it. Until it's fixed upstream, skip the picker:
>
> ```
> # Install everything, non-interactively (no picker)
> npx skills@latest add daviddwlee84/agent-skills/skills --yes
>
> # List names from a disposable directory. In an existing agent-managed
> # project, skills@1.5.23 may reconcile .agents/skills even with --list.
> scratch="$(mktemp -d)"
> (cd "$scratch" && npx skills@latest add daviddwlee84/agent-skills/skills --list)
> rm -rf "$scratch"
>
> # Install one skill by name.
> npx skills@latest add daviddwlee84/agent-skills/skills --skill clash-proxy-api
> ```
### Optional: native Claude Code and Codex marketplaces
A local checkout can expose the same category catalog through either native plugin CLI:
```
git clone https://github.com/daviddwlee84/agent-skills.git
# Claude Code
claude plugin marketplace add ./agent-skills/skills
claude plugin install version-control@daviddwlee84-skills
# Codex (verified with 0.147.0)
codex plugin marketplace add ./agent-skills/skills
codex plugin add version-control@daviddwlee84-skills
```
Both native routes install a whole category plugin (`version-control` in this example), not an arbitrary single skill. Codex reads the existing Claude-format marketplace and generates its `.codex-plugin/plugin.json` adapter inside the plugin cache; this repository does not need to maintain that second manifest. Keep using `npx skills` when you want one skill or a cross-agent installation.
Pass the checkout's `skills/` directory, not the repository root: the catalog intentionally lives under `skills/.claude-plugin/` for the `npx` subpath above, and both native CLIs require a supported manifest at the marketplace source root.
This populates `.agents/skills/` in your project with everything under `skills/local/` and `skills/vendor/` from this repo.
## Render the repo backlog
If you want to see the kanban view of the repo's own TODO list:
```
git clone https://github.com/daviddwlee84/agent-skills
cd agent-skills
make kanban
```
`make kanban` runs [`scripts/todo-kanban.sh`](https://daviddwlee84.github.io/agent-skills/reference/scripts/#todo-kanbansh), which validates [`TODO.md`](https://github.com/daviddwlee84/agent-skills/blob/main/TODO.md) and prints a Markdown board grouped by lane.
## Build the docs locally
The docs site you're reading is a [MkDocs Material](https://squidfunk.github.io/mkdocs-material/) site. To preview it locally:
```
# From the repo root
uv sync --extra docs
uv run mkdocs serve
```
Then open .
To produce the static site (what GitHub Pages serves):
```
uv run mkdocs build --strict
```
`make docs-serve` and `make docs-build` are convenience wrappers around those two commands.
## Apply the project-knowledge-harness skill to your own project
If you just want the TODO + backlog + pitfalls structure in another repo, the bundled init script does the whole setup in one shot:
```
git clone https://github.com/daviddwlee84/agent-skills /tmp/agent-skills
/tmp/agent-skills/skills/local/project-knowledge-harness/scripts/init.sh \
--target /path/to/your/project \
--project-name "Your Project" \
--deployment chezmoi # or npm | pip | docker | none
```
See the [`project-knowledge-harness` page](https://daviddwlee84.github.io/agent-skills/skills/project-knowledge-harness/index.md) for what the script does and what flags it supports.
# Conventions
These are the rules every local skill in this repo follows. They exist so the package shipped via `npx skills` stays predictable and so adding a new skill is mechanical, not a design exercise.
## Local skill layout
Each `skills/local//` directory should contain:
- **`SKILL.md`** — required, with YAML frontmatter (`name`, `description`) and a body that follows the [agentskills.io best practices](https://agentskills.io/skill-creation/best-practices) (lean SKILL.md under ~500 lines, defaults over menus, procedures over declarations).
- **`assets/`** — templates the skill copies into a target project (e.g. `TODO.md.template`, `pitfall-doc.md.template`).
- **`scripts/`** — executable helpers the agent should invoke instead of re-implementing logic in chat. Bash 3.2 compatible (so they run on stock macOS without homebrew bash).
- **`references/`** — long-form material the agent loads on demand (decision tables, schema cheatsheets, anti-pattern lists). Push detail here rather than swelling `SKILL.md`.
## Mirror scripts to top-level `scripts/`
Where a skill ships scripts that this repo also wants to run directly (currently only [`project-knowledge-harness`](https://daviddwlee84.github.io/agent-skills/skills/project-knowledge-harness/index.md)), copy them into the top-level [`scripts/`](https://daviddwlee84.github.io/agent-skills/reference/scripts/index.md) directory so `make` targets and CI can invoke them. Keep the canonical copy inside the skill so the package shipped via `npx skills` stays self-contained.
The pair must stay byte-identical. The repo doesn't (yet) enforce this in CI; if you edit one, edit the other in the same commit.
## Owned skill layout
`skills/owned//` contains first-party skills maintained in a separate source project. Edit that project's canonical skill, then sync here. The same upstream manifest and machinery serve owned and third-party sources; see [owned workflow](https://daviddwlee84.github.io/agent-skills/workflows/adding-owned-skills/index.md). The distribution directory contains real files, not cross-repository symlinks.
## Vendor skill layout
`skills/vendor//` mirrors the upstream layout exactly. Don't edit vendored skills in place — modifications get overwritten by `make sync`. If you need to customize a vendored skill, fork it into `skills/local/` and update [`vendor.yaml`](https://github.com/daviddwlee84/agent-skills/blob/main/vendor.yaml) to drop the upstream entry.
## Documentation
Every local skill should also have a page under `docs/skills/.md`. The skill's `SKILL.md` is for the agent (concise, machine-aimed); the `docs/skills/.md` page is for humans deciding whether to use it. Both surfaces are valuable — don't try to merge them.
Long-form references that the agent loads on demand (`skills/local//references/*.md`) can be mirrored or summarized under `docs/reference/` when the audience extends to humans browsing the site, but the canonical copy still lives next to `SKILL.md`.
## Personal scratch areas
`Collections.md` and `notes/` at the repo root are personal scratch space for the maintainer and are intentionally not part of the published docs site or the agent-facing surface. Don't link into them from `SKILL.md` or from any docs page.
# Workflows
# Adding catalog entries
How to add or update entries in the [Catalog](https://daviddwlee84.github.io/agent-skills/catalog/index.md) — new external skills, new MCP servers, new domain hubs, or status changes on existing entries.
This workflow couples the catalog to `vendor.yaml` and `TODO.md` (the existing sources of truth) without duplicating them. Catalog pages are the *vendoring decision log*; the actual vendoring happens via existing scripts.
## When to write a catalog entry
| You discovered… | Where it goes | Status to start with |
| -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------- |
| An external skill you might want to vendor | [`skill-collections.md`](https://daviddwlee84.github.io/agent-skills/catalog/skill-collections/index.md) + relevant [domain hub](https://daviddwlee84.github.io/agent-skills/catalog/domains/index.md) | `wishlist` |
| An interesting skill you explicitly do not want in routine discovery | [`curiosities.md`](https://daviddwlee84.github.io/agent-skills/catalog/curiosities/index.md) | `skipped` with the docs-only reason |
| An MCP server you want to remember | New file under [`catalog/mcp/`](https://daviddwlee84.github.io/agent-skills/catalog/mcp/index.md) + relevant domain hub | `wishlist` |
| A whole new professional domain | New file under [`catalog/domains/`](https://daviddwlee84.github.io/agent-skills/catalog/domains/index.md) (copy `_template.md`) | (hub itself, not entry) |
| A skill you looked at and rejected | Add to `skill-collections.md` with reason | `skipped` |
| A skill you looked at but didn't decide on | Add to `skill-collections.md` with 1-line note | `evaluated` |
## Status enum
Status enum (single source of truth across the catalog)
Every external-skill or MCP entry below carries a `status:` value:
| Status | Meaning | Where it links |
| ----------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| `vendored` | Already in [`vendor.yaml`](https://github.com/daviddwlee84/agent-skills/blob/main/vendor.yaml). | Link to the `skills/vendor//` (or series) entry. |
| `deferred` | Open `TODO P?` item — under consideration. | Link to the [`TODO.md`](https://github.com/daviddwlee84/agent-skills/blob/main/TODO.md) anchor. |
| `skipped` | Looked at, chose not to vendor. | Inline reason required (1 sentence). |
| `evaluated` | Read but no decision recorded. Effectively "tracked." | Inline 1-line note describing what was learned. |
| `wishlist` | Surfaced but not yet evaluated. | No link required; default for fresh discoveries. |
Status changes are explicit edits — see the **Adding catalog entries** workflow doc (under `Workflows` in the nav) for the `wishlist → deferred → vendored` recipe.
Manual install for non-vendored skills
When a skill is not in `vendor.yaml`, you can still install it directly from upstream via the [`npx skills`](https://skills.sh) CLI:
```
# Whole-repo install (if SKILL.md sits at repo root or skills/)
npx skills@latest add /
# Subpath install (when the skill is nested)
npx skills@latest add //
# Cherry-pick by name
npx skills@latest add / -s
# Force deep discovery (skill nested >1 level inside skills/)
npx skills@latest add / --full-depth -s
```
For Anthropic-style **plugin marketplaces** (e.g. `anthropics/financial-services`, `anthropics/knowledge-work-plugins`), use the Claude Code plugin commands instead:
```
claude plugin marketplace add /
claude plugin install @
```
For MCP servers, see the per-entry "Auth & install" section in the MCP wiki — install commands vary by transport (HTTP / stdio / SSE) and host (Claude Code / Claude Desktop / Cursor / Managed Agents).
## Status change recipes
### `wishlist` → `deferred`
The entry has crossed into "we should evaluate this" territory.
```
./scripts/add-todo.sh --priority P? --effort \
--title " skill" \
--description "Evaluate for