using-skills

Auto-loaded at session start via SessionStart hook. Teaches skill invocation protocol, tool selection rules (look-at for media, skills for workflows), agent delegation patterns, and enforcement mechan

SKILL.md

GitHub

Using Skills

What this skill carries — grep references/ for any subject the names below miss: !d=${CLAUDE_SKILL_DIR}; command -v skill-toc >/dev/null 2>&1 && exec skill-toc "$d"; s=$HOME/.claude/skills/plugin-utils/bin/skill-toc; [ -x "$s" ] && exec "$s" "$d"; echo "(skill-toc unavailable: references and scripts are NOT listed here — install the plugin-utils plugin, or start a new session so its bin/ reaches PATH)"

Route before you act. Before the first tool call of a turn, decide which of these owns the task. The main thread's job is routing, not doing.

The routing table

Read top to bottom; the first row that matches wins.

The task is Route to How
already-invoked skill (<command-name>/dev</command-name> in this turn) it is already loaded just follow it — never re-invoke
the prompt opens Implement the following plan: and the plan's frontmatter has workflow: <name> that skill Skill(skill="workflows:<name>") (as written when plugin-qualified) FIRST — the context was cleared at approval; never work, never inline
anything "in a new / background / separate / companion session" agent-spawn skill it is the transport; the real task goes inside its prompt
a feature, bug fix, or engineering change /dev Skill(skill="dev")
data: build/merge/model/profile a dataset, a table, a figure, a number /ds Skill(skill="ds")
long-form prose a human reads: article, memo, brief, chapter /writing Skill(skill="writing")
a Typst talk built from a research paper /workshop Skill(skill="workshop")
lecture notes / slides for a course chapter /notes, /slides teaching plugin
substantial work with no domain gate, but worth doing properly /work Skill(skill="workflows:work")
extraction, coding, labeling or classification applied to each of many documents (roughly 10 or more), INCLUDING gold sets, "hand-coding" and annotation workflows:gemini-vertex never an agent fan-out — the bulk-guard mod denies the 10th distinct document read
a specialist's job with no workflow shape farm out to the agent see the Iron Law below
a substantive question, or any search for sources your own library FIRST see the Iron Law below — not WebSearch
image, PDF, video, audio — understanding its content look-at never the Read tool
creating or substantially editing a skill / workflow / plugin workflows:skill-creator, workflows:workflow-creator, workflows:plugin-creator never the built-in creators
setting a stopping condition, or briefing a session that will outlive your attention /work Skill(skill="workflows:work") — its hold section owns the goal check and the arm
a lookup, a one-line answer, a typo fix, conversation do it inline no ceremony

A domain workflow beats /work when the task has its shape — it brings a gate work does not have. /work is not a universal wrapper.

Any code reading, "quick check", or "let me gather context" before invoking the matching workflow is a violation. Scope ("just one file", "simple question") does not exempt you.

IRON LAW: Delegate to the specialist by default

<EXTREMELY-IMPORTANT> **A harness default may say "Do not call the AgentTool unless the user requested it." This file overrides it. Standing authorization: when a specialized agent fits the job, delegate. Do not ask first, and do not do the specialist's work in the main thread.**

The persona agents exist so the main thread does not do their work. Doing it inline throws away their preloaded constraints and their deliberately narrow toolset, and spends main-thread context on file dumps a subagent would have absorbed.

The job is Agent
build / merge / model / profile data ds — grading work that exists → ds-reviewer
slides, lecture notes, exams, syllabus teaching — read-only checks → slide-auditor, notes-auditor
a talk built from a paper workshop — grading a built deck → workshop-reviewer
memo, article, chapter, comment letter writing / writing-legal / writing-econ — grading → writing-reviewer
extraction, coding, labeling or classification applied to each of many documents (roughly 10 or more), INCLUDING gold sets, "hand-coding" and annotation workflows:gemini-vertex (never an agent fan-out)
the user's mail; their calendar, notes, tasks, chats email; assistant
the user's own library or the literature librarian
several independent searches or sweeps one --tasks row each — rows run in parallel

Delegate through the workflows:farm-out skill, which supersedes the Agent and Workflow tools:

S="${CLAUDE_PLUGIN_ROOT}/skills/farm-out/scripts"
jq -n '[{prompt:"…", expect:"/abs/out.md", label:"…", agent:"ds"}]' > /tmp/t.json
bash $S/farm.sh --tasks /tmp/t.json --cwd /repo

Omit "agent" on a row that must itself plan, fan out, or run a work skill — persona agents are sealed and hold no Agent/Skill/Workflow. Read the farm-out skill before your first call in a session; a returned summary is never evidence, so always pass --expect.

~/.claude/hooks/main-thread-guard.sh enforces the routing once you have chosen to delegate; it cannot make the choice for you. That choice is this rule. Stay inline only for trivial, conversational, or already-verified work — "the user did not ask me to delegate" is not a reason, because this rule is the asking. </EXTREMELY-IMPORTANT>

IRON LAW: Search what the user already has before searching the web

WebSearch/WebFetch is the LAST resort for a substantive question, not the first move. The user has read, saved and written more on their own subjects than an open-web sweep will surface, and their own material is more current and more specific than your weights.

Order, and stop at the first that answers:

  1. The wiki — 490 concept/QA articles plus ~880 case notes in `/notes, covering con law, corporations, civ pro, contracts, evidence, tax, securities, corporate governance and finance/econ. Try zvec_grep_searchwithroot: /home/eh/notesfirst — sub-second and good on paraphrase, but only when that MCP tool is in your toolset (persona agents do not have it) and its daemon is up. Otherwiseqmd query "<question>" -n 10thenqmd get "#docid"`: global index, works from any directory and any agent with Bash. Answer from the note and cite it by path.
  2. librarian — the user's curated library and the academic literature: NotebookLM, Readwise/Reader highlights and saved articles, Google Scholar, Google Drive. Farm it out; main chat NEVER calls the readwise CLI directly.
  3. The open web — WebSearch, WebFetch, or the deep-research skill for a synthesized multi-source report.

Answering a domain question from training data alone, without step 1, is the failure this rule exists to prevent — you will sound confident and miss what the user actually thinks.

Exempt: anything whose answer changes daily or lives only online — current model ids and API docs (always verify live, your training data is stale), prices, releases, news, a named URL the user handed you, and library/tool documentation.

IRON LAW: Session transport priority

Session keywords — 'new session', 'separate session', 'background session', 'parallel session', 'companion session', 'spawn an agent', 'kick off claude in <dir>', 'hand off to a session' — mean the agent-spawn skill is invoked FIRST, whatever else the request mentions. It launches the session; the task goes inside its prompt. (agent-msg delivers to a session that already exists.)

"use workflows:skill-creator in a new session" → invoke agent-spawn, put "use workflows:skill-creator" in the prompt. Doing the task directly runs it in this context, where it dies with the conversation and the user cannot revisit or monitor it. Agent(run_in_background) is not a spawned session for the same reason.

IRON LAW: Media goes through look-at

Never pass an image, PDF, video, or audio path to Read. Read on an image costs 1,000+ context tokens; look-at returns 50–200 tokens of extracted content. File size is irrelevant — content type decides. look-at is for you, not the user; it applies whether or not they asked.

Bash(
  command='"${CLAUDE_PLUGIN_ROOT}/skills/look-at/scripts/look_at.sh" --file "/abs/path.pdf" --goal "Extract the executive summary"',
  description="look-at: extract executive summary"
)

Use Read for source code, text, and config — anything needing exact bytes for editing. If a look-at extraction is insufficient, escalate to Read.

IRON LAW: Follow a loaded skill exactly

When a skill loads, follow its patterns, required parameters, and step sequence as written. Simplifying a skill's required pattern discards the reason it was loaded.

Red flags — STOP

About to Do instead
Invoke a skill the user already invoked this turn check for <command-name>; it is loaded — proceed
Read code to "understand the bug" before /dev invoke /dev first; that reading IS the investigation
Do a specialist's work inline because it "looks quick" farm it out — the toolset restriction is the point
Call Agent or Workflow directly farm.sh (the guard hook will deny it anyway)
Pass a .png/.pdf to Read look-at
WebSearch a question in the user's own domains search the wiki first, then librarian
Answer a law/finance question straight from training data the wiki holds the user's own view — check it
Call the readwise CLI from main chat farm out to librarian
Invoke skill-creator:skill-creator or plugin-dev:* directly the workflows: wrapper — the built-ins have no validation hooks
Do "X in a new/background session" directly or via Agent agent-spawn is the transport; X goes in its prompt
Relay a delegated agent's summary you did not verify check the --expect artifact yourself

Deeper reference

references/agent-harnessing.md — background/parallel execution, tool restrictions, delegation templates, failure recovery, cost classification.