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.
A skill your agent uses when /better-harness reviews the outer coding-agent Harness for lifecycle controls, repeated work, project feedback, agent assets, session outcomes, repair planning, durable…
$ npx skills add QoderAI/better-harness --skill better-harness -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install QoderAI/better-harness better-harness --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/QoderAI/better-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/better-harness .claude/skills/better-harness && 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 "better-harness" agent skill from https://github.com/QoderAI/better-harness/tree/main/skills/better-harness into .claude/skills/better-harness/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-harness", 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/QoderAI/better-harness/tree/main/skills/better-harnessType 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 QoderAI/better-harness --skill better-harness -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install QoderAI/better-harness better-harness --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QoderAI/better-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/better-harness .agents/skills/better-harness && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "better-harness" agent skill from https://github.com/QoderAI/better-harness/tree/main/skills/better-harness into .agents/skills/better-harness/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-harness", 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 QoderAI/better-harness --skill better-harness -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install QoderAI/better-harness better-harness --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QoderAI/better-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/better-harness .cursor/skills/better-harness && 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 "better-harness" agent skill from https://github.com/QoderAI/better-harness/tree/main/skills/better-harness into .cursor/skills/better-harness/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-harness", 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/QoderAI/better-harness.git --path skills/better-harness--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 QoderAI/better-harness --skill better-harness -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install QoderAI/better-harness better-harness --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QoderAI/better-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/better-harness .gemini/skills/better-harness && 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 "better-harness" agent skill from https://github.com/QoderAI/better-harness/tree/main/skills/better-harness into .gemini/skills/better-harness/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-harness", 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 QoderAI/better-harness better-harnessInstalls 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 QoderAI/better-harness --skill better-harness -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/QoderAI/better-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/better-harness .github/skills/better-harness && 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 "better-harness" agent skill from https://github.com/QoderAI/better-harness/tree/main/skills/better-harness into .github/skills/better-harness/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-harness", 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 QoderAI/better-harness --skill better-harness -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install QoderAI/better-harness better-harness --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QoderAI/better-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/better-harness .opencode/skills/better-harness && 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 "better-harness" agent skill from https://github.com/QoderAI/better-harness/tree/main/skills/better-harness into .opencode/skills/better-harness/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-harness", 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.
better-harnessA skill your agent uses when /better-harness reviews the outer coding-agent Harness for lifecycle controls, repeated work, project feedback, agent assets, session outcomes, repair planning, durable…
Better Harness is an agent skill from QoderAI/better-harness. Use when /better-harness reviews the outer coding-agent Harness for lifecycle controls, repeated work, project feedback, agent assets, session outcomes, repair planning, durable reports, finding-bound fixes, or manual direct fixes. Invoke only via slash command.
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 13 other files, including reference files (for example `references/agent-customize.md`, `references/asset-demand-reconciliation.md` and `references/finding-bound-fix.md`).
It sits in Agent Workflows, covering Hooks and plugins. The repository describes itself as: An open-source Harness Engineering platform for coding agents—define harnesses as code, run controlled experiments, inspect evidence, and compare outcomes. Turn task evidence… The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 34899f3. 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.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
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.
Better Harness loads about 3k tokens when it runs, and up to ~16k if it reads all its reference files. Until then it costs about 69 tokens; SKILL.md has 1,373 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 QoderAI/better-harness at commit 34899f3, republished under its MIT licence (© QoderAI). 1,373 words, ~2,999 tokens.
.claude/skills/better-harness/SKILL.md (or your agent's skills folder). This skill also uses 12 other files; get the full folder from GitHub.Review the coding-agent system: context, execution, control, feedback, and learning; keep Sessions, project, and Agent assets independent.
Route:
<better-harness-fix-output>: Finding-bound Fix.fix, repair, or \u4fee\u590d: Manual Direct Fix.Resolve the Skill path, <better-harness-root> as ../.., a supported <node>,
and <cli> as <node> <better-harness-root>/scripts/better-harness.mjs. Stop if
any owner is missing; never select another cache or runtime by search order.
Resolve absolute target, decision, acceptance boundary, risks, locale (request language by default), output mode, provider, and depth. Quick uses three items and 7 days; normal uses five and 30 days. Default Qoder/Cursor to durable Canvas and other rendering hosts to HTML. Providers without REPORT_RENDERING proceed only inline or no-files and must not create HTML, Markdown, or Canvas output. Keep providers separate. Use the current one unless project-wide review explicitly authorizes multiple supported providers. Qoder project Memory title metadata is part of the selected workspace baseline. Memory bodies, Codex Memory, Qoder global Memory, user-home, raw Session, installed-plugin, marketplace, and historical-insight access require explicit scope.
Before delegation, collect one versioned evidence bundle per authorized provider:
<cli> harness evidence-bundle --platform <provider> --workspace <target> --cwd <effective-cwd> --language <locale> --depth <quick|normal> --since <window-start> --until <window-end> --format json [--include-memories] [--include-user-home] [--canvas-out <run-dir>/canvas.json]Use --canvas-out only for Qoder/Cursor durable reports. For Qoder, keep the
default project Memory-title scan; --include-user-home
widens it to authorized global Memory/config and other user assets. For Codex,
Memory metadata requires --include-memories; user/global or installed-Plugin
metadata requires --include-user-home. Apply both when both scopes are
authorized. Neither flag authorizes Memory bodies.
It freezes topology, provider, window, depth, limit, and authority. Before
delegation, read bundle.context.topology.target; report kind, route, and packageRoute
(memberRoute or null). Providers must agree. It returns
sessionEvidence, projectHarness, agentCustomize, and the lead envelope.
Agent Customize holds bounded lint, inventory, and integrity envelopes
from one shared asset snapshot. Keep lane/stage status and providers distinct.
Use the individual session-analysis facts, core-change-watch evidence-pack, coding-agent-practices asset-baseline, or harness analyze
command only to diagnose a named unavailable or evidence-loss stage; do not
substitute diagnostic output into the bundle or rerun all owners. Counts for
Rules, Skills, MCP, Memory, Agents, Hooks, Commands, Workflows, and Plugins only
route inspection. Zero or high counts never create findings or scores. A
normal Qoder report with project Memories blocks when the integrity stage is
unavailable; do not replace the missing review with an unobserved
disposition.
If the provider discovers or the user supplies a historical insight source, the lead may inspect only a few authorized architecture/history notes. Never assume or search a conventional path; notes cannot prove current behavior, configured capability, or effectiveness.
Launch exactly three fresh, read-only agents in parallel. In Codex use
spawn_agent with fork_turns: "none"; otherwise run the same briefs locally
and independently. No evidence agent may delegate.
The lead takes the provider-labelled facts envelopes from
bundle.lanes.sessionEvidence.data, whose production collector is routed by
Sessions Diagnostics,
using only the production facts route. Do not pass the complete bundle,
collection reference, debug output, or raw sessions to Agent 1.
Give Agent 1 only the provider-labelled facts envelopes, the compact Step 1 asset counts needed to notice zero Skills, and the resolved scope. Require it to read Session Evidence and conditionally read Repeated Workflow Discovery when repeated procedure demand is in scope. It must not inspect the project, configured assets, raw sessions, or another brief.
Give Agent 2 only the target, scoped history/current-change boundary,
bundle.lanes.projectHarness.data, decision, risks, and owner limit. Require it to read
Project Harness Evidence. It must not receive
Session or Agent Customize conclusions.
Give Agent 3 only bundle.lanes.agentCustomize.data with its provider-labelled
lint, inventory, and integrity envelopes; asset authority; decision; risks;
and owner limit. Require it to read
Agent Customize Evidence. It consumes
the deterministic envelopes and must not rerun their commands or receive
Session/Project conclusions.
Each agent follows its reference-local free-form return contract: normally three to five candidates, up to three in quick mode, and fewer when evidence is sparse. Specialists never assign final severity or scores.
While they run, use only bundle.lead.data as the lead analyzer result. The
bundle maps --include-user-home to the analyzer's global-capability boundary;
this preserves authorized MCP, Plugin, Skill, Hook, and Memory counts without
authorizing content reads or proving use.
Stop if the bundle is failed, the lead lane is unavailable, or its data omits
evidence or summaryFacts. In quick mode a partial bundle lowers confidence
and every unavailable specialist remains explicit; in normal mode any
unavailable or partial specialist lane blocks the report. This evidence pass
has a hard cap of three delegated agents.
Read Harness Findings Input for field roles and Agent Work Loop for the five dimensions, checks, evidence states, scoring, and Learning Capture rules. Replace all example content. Never derive the contract from prior reports, Memory, recommend files, or validators.
Perform one reconciliation. Start by retaining every specialist candidate. Merge only candidates with the same target, observed consequence, owner, and repair route; preserve independent consequences even when they share a broader theme. Keep a working reason for every unsupported or deferred candidate. Never drop an eligible finding to reach five rows, shorten the report, simplify a score, or match the three priority moves. Then the lead alone:
Before drafting, read Findings Quality Gates and apply its eligibility, consistency, privacy, asset, candidate-promotion, and repair-prompt checks directly. For repeated procedure or knowledge demand, also read Asset Demand Reconciliation.
Do not author summary.suggestions in a new report. Promote a suggestion
candidate to an ordinary Low finding only when it passes the same consequence,
owner, evidence, output, verifier, and repair-prompt gates as every finding;
otherwise keep it deferred in the working reconciliation.
After findings and dimension scores are frozen, select exactly one support track from the evidence and requested outcome. The parenthetical ranges are user-journey labels, never score thresholds:
Read only the selected track: Bootstrap Support, Operationalize Support, or Optimize Support. A track may shape at most three priority moves, repair prompts, and reader copy for already-supported findings. It must not add a finding, change severity, rescore a dimension, add a report field, or expand evidence and mutation authority.
For a durable report, draft findings.json only after the three evidence agents
finish. Do not launch a fourth review agent. The lead applies the quality gates
once, preserves all eligible findings, and fixes any machine-validation failure
before rendering.
Inline analysis writes nothing. After lead checks pass, treat the draft as the one
final findings.json, then render and validate it once:
Qoder/Cursor: <mode>=<provider>-canvas; <host-root>=<target>/.<provider>/better-harness
Other providers: <mode>=html; <host-root>=<target>/.<provider>/better-harness
<cli> harness render --findings <run-dir>/findings.json --mode <mode> --out <host-root> --run-dir <run-dir> --target <target> --validate --jsonQoder/Cursor analysis owns adjacent canvas.json; do not copy its summaryFacts
into findings. HTML keeps analyzer summaryFacts verbatim. Succeed only on
status: pass and return the exact paths reported by render. Never hand-write
Canvas, Markdown, or HTML.
Finish with one compact sentence: <count> findings. [Open the report](<renderer-path>).
Link the renderer-reported primary report; never return inline-code paths, a
bare directory, or an output-file inventory.
session-analysis usage-summary once.The durable route authorizes only renderer-owned artifacts in its host root. Other creation, activation, mutation, cleanup, scheduling, external writes, and high-risk access require task-local authority. If an owner or value is unresolved, stop with the condition to resume; do not invent a substitute artifact or inspect internal validators.
© QoderAI, 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 12 other files (references) in skills/better-harness of QoderAI/better-harness.
Open the folder on GitHubat commit 34899f3
Better Harness 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 |
|---|---|---|---|---|---|---|
| Better Harness this skillQoderAI/better-harness | 2.4k | — | ~3k | 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.
QoderAI/better-harness
Analyze a bounded IntentCorrelationPacketV1 and propose reviewable links among user inputs, execution slices, change units, commits, artifacts, and validation outcomes.
QoderAI/better-harness
Generate, revise, or review complete Harness as Code .harness files when a coding-agent workflow, agent role, skill, tool contract, MCP connection, runtime, or deployment must be compiler-valid and…
QoderAI/better-harness
A skill your agent uses when bootstrapping or tightening the smallest harness-oriented skill from an existing repository, workflow, evaluation corpus, or harness-analysis chain.
QoderAI/better-harness
A skill your agent uses when reviewing Codex, Qoder, or repo-local skills and their prompt chains for trigger quality, workflow clarity, progressive disclosure, duplicated instructions, template…
QoderAI/better-harness
Diagnose a bounded backend or multi-service failure from GitHub Issues, Jira, Aone, user-provided exports, logs, traces, responses, stack traces, or job records.
QoderAI/better-harness
Build a bounded, replayable browser or UI bug reproduction from GitHub Issues, Jira, Aone, user-provided exports, screenshots, videos, comments, or attachments.
Categories
A skill your agent uses when /better-harness reviews the outer coding-agent Harness for lifecycle controls, repeated work, project feedback, agent assets, session outcomes, repair planning, durable…. Better Harness is an agent skill from QoderAI/better-harness. Use when /better-harness reviews the outer coding-agent Harness for lifecycle controls, repeated work, project feedback, agent assets, session outcomes, repair planning, durable reports, finding-bound fixes, or manual direct fixes.
Better Harness fits situations like: /better-harness reviews the outer coding-agent Harness for lifecycle controls; project feedback; session outcomes; repair planning.
Run `npx skills add QoderAI/better-harness --skill better-harness -a claude-code`. Or copy the skill folder (skills/better-harness in QoderAI/better-harness) into .claude/skills/better-harness in your project. Claude Code loads it when a task matches its description.
Run `npx skills add QoderAI/better-harness --skill better-harness -a codex`. Or copy the skill folder (skills/better-harness in QoderAI/better-harness) into .agents/skills/better-harness 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 QoderAI/better-harness --skill better-harness -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/better-harness, .gemini/skills/better-harness, .github/skills/better-harness and .opencode/skills/better-harness in your project.
SKILL.md names no scripts, command-line tools or credentials: Better Harness is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Better Harness is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k 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 13k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Better Harness: 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.
QoderAI (a GitHub organization) maintains it in QoderAI/better-harness, which has 2,363 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on September 28, 2026.
Source: QoderAI/better-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.