Hook Development for Claude Code Plugins
anthropics/claude-plugins-official
Explains how to write Claude Code plugin hooks, both prompt-based checks and bash commands, for events such as PreToolUse, Stop and SessionStart.
Write up a coding session for a non-technical stakeholder — the context, what was built, and the engineering reasoning behind it — the way a senior engineer briefs a product manager who does not…
$ npx skills add ccplugins/awesome-claude-code-plugins --skill dev-report -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ccplugins/awesome-claude-code-plugins dev-report --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/ccplugins/awesome-claude-code-plugins.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/dev-report .claude/skills/dev-report && 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 "dev-report" agent skill from https://github.com/ccplugins/awesome-claude-code-plugins/tree/main/plugins/dev-report into .claude/skills/dev-report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-report", 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/ccplugins/awesome-claude-code-plugins/tree/main/plugins/dev-reportType 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 ccplugins/awesome-claude-code-plugins --skill dev-report -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ccplugins/awesome-claude-code-plugins dev-report --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ccplugins/awesome-claude-code-plugins.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/dev-report .agents/skills/dev-report && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "dev-report" agent skill from https://github.com/ccplugins/awesome-claude-code-plugins/tree/main/plugins/dev-report into .agents/skills/dev-report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-report", 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 ccplugins/awesome-claude-code-plugins --skill dev-report -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ccplugins/awesome-claude-code-plugins dev-report --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ccplugins/awesome-claude-code-plugins.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/dev-report .cursor/skills/dev-report && 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 "dev-report" agent skill from https://github.com/ccplugins/awesome-claude-code-plugins/tree/main/plugins/dev-report into .cursor/skills/dev-report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-report", 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/ccplugins/awesome-claude-code-plugins.git --path plugins/dev-report--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 ccplugins/awesome-claude-code-plugins --skill dev-report -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ccplugins/awesome-claude-code-plugins dev-report --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ccplugins/awesome-claude-code-plugins.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/dev-report .gemini/skills/dev-report && 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 "dev-report" agent skill from https://github.com/ccplugins/awesome-claude-code-plugins/tree/main/plugins/dev-report into .gemini/skills/dev-report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-report", 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 ccplugins/awesome-claude-code-plugins dev-reportInstalls 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 ccplugins/awesome-claude-code-plugins --skill dev-report -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ccplugins/awesome-claude-code-plugins.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/dev-report .github/skills/dev-report && 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 "dev-report" agent skill from https://github.com/ccplugins/awesome-claude-code-plugins/tree/main/plugins/dev-report into .github/skills/dev-report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-report", 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 ccplugins/awesome-claude-code-plugins --skill dev-report -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ccplugins/awesome-claude-code-plugins dev-report --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ccplugins/awesome-claude-code-plugins.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/dev-report .opencode/skills/dev-report && 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 "dev-report" agent skill from https://github.com/ccplugins/awesome-claude-code-plugins/tree/main/plugins/dev-report into .opencode/skills/dev-report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dev-report", 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.
dev-reportWrite up a coding session for a non-technical stakeholder — the context, what was built, and the engineering reasoning behind it — the way a senior engineer briefs a product manager who does not…
Dev Report is an agent skill from ccplugins/awesome-claude-code-plugins. Write up a coding session for a non-technical stakeholder — the context, what was built, and the engineering reasoning behind it — the way a senior engineer briefs a product manager who does not read code. Use ONLY when explicitly invoked, either through the /dev-report slash command or one of its localized aliases (/개발보고 and similar), or when the user directly asks for a stakeholder-facing write-up of the session ("write today up for my PM", "explain this session for a non-developer", "개발 보고서 써줘"). Do NOT…
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 13 other files, including reference files (for example `.claude-plugin/plugin.json`, `README.md` and `commands/dev-report.md`).
It sits in Agent Workflows, covering Hooks and plugins. The repository describes itself as: Awesome Claude Code plugins — a curated list of slash commands, subagents, MCP servers, and hooks for Claude Code. The licence is MIT.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 5bd4f16. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitFrom 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.
Dev Report loads about 3.1k tokens when it runs, and up to ~9.1k if it reads all its reference files. Until then it costs about 155 tokens; SKILL.md has 1,933 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 ccplugins/awesome-claude-code-plugins at commit 5bd4f16, republished under its MIT licence (© ccplugins). 1,933 words, ~3,095 tokens.
.claude/skills/dev-report/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.Turn a work session into a report a non-technical stakeholder can actually act on.
This skill is explicit-only. It runs when the user calls /dev-report, a localized alias of it, or asks in plain words for a stakeholder-facing write-up. A casual "what did you just do?" is not an invocation — answer that normally.
Anything the user types after the command is a scope or focus hint: /dev-report this week, /dev-report just the auth work, /dev-report 짧게. With no hint, report on the current conversation session. Honor a length or emphasis hint over this skill's defaults — they know their reader.
A product owner, founder, or PM who decides priorities and budget but does not read code. Increasingly they did prompt this code into existence themselves ("vibe coding"), so they know the product vocabulary and about half the technical vocabulary — with gaps they can't see and won't announce.
The failure mode to avoid is not "too technical." It is technical words with no referent. A non-developer can follow arbitrarily deep reasoning as long as every noun in it has been given a meaning first. So: go deep on the logic, and pay for each new term the moment you introduce it.
Two things they need that a peer-to-peer standup would skip:
Write the report in the language of the message that invoked the skill. /dev-report 이번 주 작업 정리해줘 → Korean. /dev-report with no text → the language the conversation has been in.
Keep these verbatim in their original form regardless of output language: file paths, function and variable names, commands, log lines, error messages, branch and commit names, product and vendor names. The reader needs to paste them into a search box or say them to someone else — a translated identifier is a broken one.
When a technical term has no natural equivalent in the output language, use the English term and gloss it once in the reader's language, then keep using the English term.
The conversation is the primary source. It holds what git cannot: why this work was chosen, what was tried and abandoned, what the user corrected you on, what a number actually meant. Reconstruct from it first.
Then corroborate the facts a report will be judged on:
git log --oneline -15
git diff --stat HEAD~1 # or the session's base commit
git status --shortCheck specifically how far each change actually got, because these are four different states and stakeholders routinely hear the last one when you said the first:
| State | How to say it |
|---|---|
| Edited on disk, not committed | "changed locally, not saved to the repo yet" |
| Committed | "in the repo, not on the server" |
| Pushed / merged | "in the shared repo" |
| Deployed and observed working in the real environment | "live, and I saw it work" |
If tests ran, quote the real result line. If a deploy happened, say what you observed afterward — not what you expect.
Do not invent a section's content. If the session produced no numbers, the numbers section is omitted and the honesty section says measurement is missing.
Use these sections in this order. Omit any section that has no real content rather than padding it — a feature-build session usually has no "why it happened," a bug-fix session usually has no "what we built."
Render the headings in the output language; the names below are descriptions, not literal text.
Put the section's emoji at the front of its heading, as shown below — one per heading, and nowhere else in the report. They give a long report a spine the reader can scroll by: the eye finds the numbers table and the honesty section without reading. Emoji scattered through body text does the opposite, turning a report into a chat message. If a session needs a section beyond these eight, pick one in the same register (a timeline section takes 📅).
1. 📌 One-line summary. What this session actually turned out to be. If there is a gap between what it was supposed to be and what it became, that gap is the summary — it is the most decision-relevant fact you have.
"This was supposed to be a cleanup day for stale checklist items. It turned into finding and fixing a bug that had been silently shipping broken articles for five days."
2. 🎯 Why we started here. What was blocking, what the state was before, why this was the right first move. Without this, everything after it reads as random activity, and a stakeholder who can't see the reason will assume there wasn't one.
3. 🔍 What we found / what we built. Lead with the concrete artifact — the log line, error text, or number — quoted verbatim — then explain what it means. Evidence before interpretation, because a stakeholder who only ever gets your interpretation has no way to tell analysis from storytelling.
Define each unfamiliar term at first use, in one clause, then use the real term freely for the rest of the report.
"
SEO optimization complete — internal links 0 kept, 11 fabricated URLs removed. Internal links are links from one of your articles to another; Google reads them as a map of what your site covers, and they keep readers on the site. Eleven were planned. Zero survived."
4. 🧩 Why it happened / how it works. The causal chain, told as a sequence rather than a list. Each step should make the next one feel inevitable.
Name the component that behaved correctly, not just the broken one. Without that, the reader concludes the whole system is unreliable and starts distrusting parts that are fine.
"The sanitizer did exactly its job — it deletes links to pages that don't exist, and
/some-sluggenuinely 404s. The mistake was one layer upstream: nobody had told the writer that real URLs on this site start with/blog/."
5. 🔧 How we solved it, and why this way. ← the centerpiece
This is the section the reader values most and the one most reports skip. Give it the most words. Cover:
"Two changes, doing different jobs. The first is the root cause: the plan handed to the writer now carries real full URLs instead of bare slugs, so there's nothing left to guess at. The second is a safety net: if the writer still marks a link the wrong way, we now convert it instead of deleting it — but only after confirming that page actually exists on the site. I didn't want the net alone, because that would have left the writer permanently guessing and the net silently covering for it; the day the net had a gap, we'd be back here. And I didn't want the root fix alone, because it only holds as long as the model follows instructions, which is not a guarantee you can build on."
6. 📊 Numbers.
A compact table, before/after, with the sample size next to every rate. 100% over three articles is a very different claim from 100% over three hundred, and the reader cannot tell them apart unless you show the denominator.
7. 🧪 What is verified, what is assumed, what is untested. Three explicit buckets, said out loud. This is what makes the rest of the report trustworthy — a reader who has seen you volunteer your own gaps can believe the parts you state flatly.
"Verified: the fix works on the article I ran it on — 9 links survived, checked in the live page source. Assumed: it behaves the same for other accounts, since they share the same code path, but I only ran one. Not tested: the premium writing engine — that run fell back to the standard one, so that path is still unproven."
8. 🚀 What's next, and what I need from you. Separate what you'll do on your own from decisions only they can make (spending money, granting access, approving a tradeoff, choosing priority). Make the asks specific enough to answer in one sentence.
These are the moves that make the difference between a report that gets read and one that gets skimmed.
Attach analogies, don't substitute them. "A migration is a numbered instruction for changing the shape of the database — like a renovation permit, filed in order" keeps the real word available. "Think of it as a renovation permit" alone leaves the reader unable to search for it or repeat it to anyone else. They will need to do both.
Every quantity needs a denominator and a unit. "Faster" → "45 seconds instead of 5 minutes." "Most articles" → "7 of 9."
Say what you don't know, in the same voice as what you do. No hedging garnish on facts, no false confidence on guesses. "I don't know why that one failed; I haven't reproduced it yet" is a complete and acceptable sentence.
Explain a failure without assigning blame to a person or a model. Describe the missing piece of information, not the actor's shortcoming. It reads as diagnosis instead of excuse and is usually more accurate anyway.
Time-box the reading. If the report runs long, the one-line summary and the numbers table should be enough on their own for a reader who stops after 30 seconds.
| Anti-pattern | Why it fails |
|---|---|
| Pasting diffs, file trees, or long code blocks as the body | The reader can't read them; it signals you didn't do the translation work. Quote a single line only when it is the evidence. |
| "Refactored X for better maintainability" | No observable consequence. If nothing changed for the product, say what it buys and when. |
| A flat bullet list of changed files | Removes causality, which is the entire value of the report. |
| Percentages with no sample size | Reads as a stronger claim than the data supports. |
| "Fixed and deployed" when it was committed | The single fastest way to lose a stakeholder's trust. See the states table in Step 1. |
| Opening with "I'll explain what we did today" | The report is the explanation. Start with the summary. |
| Apologizing for the bug, or dwelling on the mistake | They want the state of the system, not contrition. One clause on cause, then move to the fix. |
Proportional to the session. A single-thread session lands around 600–1,200 words; a session with several independent threads runs longer, with each thread getting its own pass through sections 3–5. Never pad to look thorough — an omitted section reads as discipline, a padded one reads as noise.
references/craft.md — deeper treatment of the explanation techniques, with before/after rewrites. Read when a draft feels technically correct but flat, or when you're unsure how to unpack a specific concept.references/examples.md — two full worked reports (Korean and English). Read when starting your first report, or to calibrate depth on the "how we solved it" section.© ccplugins, 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 9 other files (references) in plugins/dev-report of ccplugins/awesome-claude-code-plugins.
Open the folder on GitHubat commit 5bd4f16
Dev Report 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 |
|---|---|---|---|---|---|---|
| Dev Report this skillccplugins/awesome-claude-code-plugins | 967 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Hook Development for Claude Code Pluginsanthropics/claude-plugins-official | 37k | 11 repos | ~4.1k | Automated safety check: Notes | Apache-2.0 | |
| Claude Code Agent Developmentanthropics/claude-plugins-official | 37k | 8 repos | ~2.8k | Automated safety check: Pass | Apache-2.0 | |
| Claude Code Skill Developer Guidediet103/claude-code-infrastructure-showcase | 10k | 10 repos | ~3.5k | Automated safety check: Pass | MIT | |
| Plugin Settings Patternanthropics/claude-plugins-official | 37k | 7 repos | ~3k | Automated safety check: Pass | Apache-2.0 | |
| MCP Integration for Pluginsanthropics/claude-plugins-official | 37k | 11 repos | ~3.1k | Automated safety check: Pass | Apache-2.0 |
anthropics/claude-plugins-official
Explains how to write Claude Code plugin hooks, both prompt-based checks and bash commands, for events such as PreToolUse, Stop and SessionStart.
anthropics/claude-plugins-official
Explains how to write agents for Claude Code plugins: the markdown file with YAML frontmatter, trigger descriptions, model and color settings, and system prompt design.
diet103/claude-code-infrastructure-showcase
A guide to creating and managing Claude Code skills with auto-activation: skill-rules.json triggers, hooks, enforcement levels, YAML frontmatter and progressive disclosure.
anthropics/claude-plugins-official
Shows how Claude Code plugins keep per-project settings and state in .claude/plugin-name.local.md files with YAML frontmatter and a markdown body.
anthropics/claude-plugins-official
Explains how to bundle Model Context Protocol servers in a Claude Code plugin, covering config files, stdio, SSE, HTTP and WebSocket server types, and authentication.
anthropics/claude-plugins-official
Explains how to write Claude Code slash commands: Markdown files with YAML frontmatter, arguments, file references, bash context and interactive prompts.
ccplugins/awesome-claude-code-plugins
Run structured AI meetings for plans, product ideas, technical designs, business decisions, feature proposals, and strategy choices.
ccplugins/awesome-claude-code-plugins
Bootstrap a new FastAPI backend with async SQLAlchemy 2.0, asyncpg, Alembic, Pydantic v2, and no deprecated APIs.
ccplugins/awesome-claude-code-plugins
Bootstrap a new Flutter mobile app with clean architecture, Riverpod, FVM-pinned SDK, current packages, and no deprecated APIs.
ccplugins/awesome-claude-code-plugins
Bootstrap a new Next.js (App Router, TypeScript) web app with current packages and no deprecated APIs.
ccplugins/awesome-claude-code-plugins
Aggiunge a un sito/app un agente di difesa che rileva e blocca richieste malevole (SQL injection, XSS, path traversal, brute force, bot) con rate limiting, blocklist IP e modalità lockdown che…
ccplugins/awesome-claude-code-plugins
A skill your agent uses when the user asks for a code review, "review this change", "review my PR", "review the diff", or wants quality/spec/security/perf feedback on recent changes.
Categories
Write up a coding session for a non-technical stakeholder — the context, what was built, and the engineering reasoning behind it — the way a senior engineer briefs a product manager who does not…. Dev Report is an agent skill from ccplugins/awesome-claude-code-plugins. Write up a coding session for a non-technical stakeholder — the context, what was built, and the engineering reasoning behind it — the way a senior engineer briefs a product manager who does not read code.
Dev Report fits situations like: directly asks for a stakeholder-facing write-up of the session (write today up for my PM; explain this session for a non-developer; an ordinary what did you just do? — that wants a short plain answer.
Run `npx skills add ccplugins/awesome-claude-code-plugins --skill dev-report -a claude-code`. Or copy the skill folder (plugins/dev-report in ccplugins/awesome-claude-code-plugins) into .claude/skills/dev-report in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ccplugins/awesome-claude-code-plugins --skill dev-report -a codex`. Or copy the skill folder (plugins/dev-report in ccplugins/awesome-claude-code-plugins) into .agents/skills/dev-report 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 ccplugins/awesome-claude-code-plugins --skill dev-report -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dev-report, .gemini/skills/dev-report, .github/skills/dev-report and .opencode/skills/dev-report in your project.
Going by SKILL.md and its folder, Dev Report needs the command-line tools its instructions call (git).
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.
Dev Report is published under the MIT licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k tokens (SKILL.md is roughly 12k 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 6k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Dev Report: Hook Development for Claude Code Plugins (anthropics/claude-plugins-official, 37k stars), Claude Code Agent Development (anthropics/claude-plugins-official, 37k stars), Claude Code Skill Developer Guide (diet103/claude-code-infrastructure-showcase, 10k stars) and Plugin Settings Pattern (anthropics/claude-plugins-official, 37k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ccplugins (a GitHub organization) maintains it in ccplugins/awesome-claude-code-plugins, which has 967 GitHub stars. The repository holds 68 skills in this directory. The repository was last updated on August 12, 2026.
Source: ccplugins/awesome-claude-code-plugins on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.