Steering Reference Card

Summary — what this page covers A printable one-pager attendees keep. It answers "where does this instruction belong?" with the seven-methods decision table, the three decisions, a quick flowchart, and .NET copy-paste starters. Paste the finished content from the workshop's Steering Reference Card here; this stub gives the skeleton.

The one page worth keeping.

The question behind every instruction

Decide by four properties: when it loads · survives compaction · context cost · authority.

The seven methods

Method When it loads Survives compaction Context cost Use it for
CLAUDE.md (root) Session start; re-read after compaction Yes (memoized) Always in context — keep < 200 lines Facts & soft conventions Claude needs all the time
CLAUDE.md (subdir) On-demand, when working in that folder Partial (reloads when relevant) Low — only when you're in that area Folder-specific facts
Rules Always (unscoped) or on file-match (path-scoped) Yes Low–medium Path-scoped coding conventions
Skills On /name, or auto-match by description n/a (invoked on demand) Low until triggered A multi-step procedure (~30+ lines)
Subagents When spawned Isolated context; only the summary returns Cheap to the parent — runs in its own window Out-of-sight heavy work; a cost lever via model:
Hooks On events (deterministic) n/a (runs as code) None — executes outside the model "Every time X, do Y"; real guardrails (PreToolUse exit 2 blocks)
Output styles Session config n/a Minimal Changing how Claude formats responses
Append-system-prompt Session start (flag) Yes Adds to every turn One-off system-prompt additions

Three decisions you'll actually use

  1. "Every time X, always do Y" → hook.
  2. "Never do X" → not a CLAUDE.md line (hooks · permissions · managed settings).
  3. A 30-line procedure → skill.

"Where does this go?" — quick flow

Walk it top to bottom; take the first match:

  1. "Every time / never X" (deterministic)?HOOK (PreToolUse exit 2 to block).
  2. A multi-step procedure (~30+ lines)?SKILL (a folder, triggered by its description).
  3. A coding convention for a file area?RULE (path-scoped glob).
  4. An always-needed project fact?CLAUDE.md (root = map; subdir = local facts).
  5. Heavy / noisy work you want out of context?SUBAGENT (isolated; summary returns).

.NET copy-paste starters

Path-scoped C# rule.claude/rules/data-access.md

---
paths:
  - "BookTracker.Data/**/*.cs"
---
# Data-access conventions
- Parameterized queries only — never string-concatenated SQL.
- Async EF methods; thread the CancellationToken.
- Migrations live in BookTracker.Data.

Skill folder layout.claude/skills/<name>/

.claude/skills/add-api-endpoint/
  SKILL.md          # name + model-facing description (the trigger) + procedure + Gotchas
  references/       # supporting docs the skill points Claude to
  scripts/          # helper scripts the skill can run

Subagent (.md + frontmatter).claude/agents/test-writer.md

---
name: test-writer
description: Generate xUnit tests for a class, matching the patterns in BookTracker.Tests.
model: claude-haiku-4-5
---
You write focused xUnit tests. Read the target class and existing tests first,
mirror the house style, and cover happy path + edge cases.

Guardrail hook registration.claude/settings.json

{
  "hooks": {
    "PreToolUse": [
      { "matcher": "Bash", "hooks": [
        { "type": "command", "command": ".claude/hooks/block-destructive.sh" }
      ]}
    ],
    "PostToolUse": [
      { "matcher": "Edit|Write", "hooks": [
        { "type": "command", "command": "dotnet build" }
      ]}
    ]
  }
}

Gotchas worth remembering

  • Skills are folders, not files. Subagents are .md, not .yaml.
  • Path-scoped rules load on read, not create — make creation-time rules unscoped.
  • User-level ~/.claude/rules/ paths: is currently unreliable — use project-level.
  • A skill's description is a trigger written for the model; its Gotchas section is the high-value part.