Power Tips & Best Practices

The habits that separate frustration from force-multiplier

Intermediate 13 minBuilder
What you'll be able to do
  • Adopt the core habit of giving Claude a verifier first, and reach for plan mode on uncertainty while skipping it for trivial fixes
  • Practice context discipline with /clear, /compact at 60%, subagents, and MCP tool search
  • Keep CLAUDE.md under 200 lines and concrete, and move hard guarantees into hooks and deny rules
  • Steer mid-run with Esc instead of restarting, and extend the system prompt with --append-system-prompt
  • Scope headless runs with --allowedTools, --max-budget-usd, and --max-turns, and scale quality with worktrees and adversarial review
At a glance

A distilled set of the highest-leverage habits from the whole course — give Claude a verifier, keep context clean, keep CLAUDE.md lean, steer instead of restart, automate safely, and review adversarially. The lesson to re-read once a month.

  1. 1The shape of mastery: six habits, one principle
  2. 21. Give Claude a verifier before you ask
  3. 32. Context discipline: keep the window clean
  4. 43. CLAUDE.md hygiene: lean, concrete, and don't over-rely
  5. 54. Interrupt and steer — don't restart
  6. 65. Safe automation: bound the blast radius
  7. 76. Quality at scale: parallel work and adversarial review

The shape of mastery: six habits, one principle

Everything in this course collapses into one principle: make Claude's agentic loop self-correcting, then bound its blast radius. Claude works in three blended phases — gather context, take action, verify results — and a power user spends their effort shaping the inputs to that loop rather than reacting to its outputs.

There are six habits that separate frustration from force-multiplication. Each one targets a specific way the loop goes wrong:

HabitThe failure it prevents
Verify firstClaude stops at 'looks done' and you become the check
Context disciplineQuality decays as the window fills with stale noise
CLAUDE.md hygieneRules get lost in bloat; Claude ignores them
Steer, don't restartYou throw away good work to fix one wrong turn
Safe automationAn unattended run does too much, too expensively
Quality at scaleA single biased session ships its own mistakes

The rest of the lesson is one section per habit, with the exact commands, flags, and shortcuts. Read it fast the first time; re-read it monthly and you'll notice your own anti-patterns sharpening into reflexes.

Key insight

Inputs, not outputs

Beginners react to what Claude produces. Power users shape what goes in — the verifier, the context, the rules, the guardrails — so the output is right the first time. Every habit below is an input you control.

1. Give Claude a verifier before you ask

Claude stops when work "looks done." Without a check it can run, that judgment is a vibe — so you discover the bug, paste it back, and become the verification loop by hand. The fix is to hand Claude something it can check its own work against: a test command, a build, a screenshot, a diff. Then its verify phase has teeth — it runs the check, sees red, and iterates to green before returning to you.

Say the check out loud in the prompt. "Add email validation" guesses; "Add email validation and make npm test -- signup pass, keep going until green" loops.

Plan mode is the verifier's partner for uncertainty. When a task spans multiple files, touches unfamiliar code, or you're not sure of the approach, enter plan mode (Shift+Tab to cycle to it, or --permission-mode plan, or /plan). It's read-only — Claude explores and proposes a plan with no edits, and you press Ctrl+G to edit the plan before approving. This separates research from execution so you catch a wrong approach before code is written.

Skip plan mode for small, clear fixes — typos, a log line, a rename. The overhead isn't worth it when the change is obvious. The 4-phase workflow Explore → Plan → Implement → Commit is the full version of this habit: explore in plan mode, let Claude draft the plan, exit plan mode to implement with a verifier, then commit.

Tip

No test yet? Ask for the test first

If a behavior has no check, have Claude write the failing test (or a tiny repro script) before the fix, confirm it fails, then make it pass. Every later change to that behavior is now verification-driven for free.

Watch out

Shell-mode output is not a verifier

Running a command with the ! prefix adds its output to context but does not trigger Claude's verify phase — there's no interpretation. If you want Claude to react, ask explicitly ("run the tests and fix any failures").

2. Context discipline: keep the window clean

The context window is 200K tokens (some models/configurations offer larger windows — run /context to see your actual budget), but performance is about quality, not size — it degrades as the window fills with raw logs, repeated reads, and forgotten history that all compete for attention. Not all of that nominal window is usable in practice either: Claude reserves a working buffer, so the practical ceiling is lower than the headline number — which is exactly why compacting at ~60% (rather than waiting for the limit) is aggressive but safe, not arbitrary. A power user manages context as aggressively as they manage code.

MoveWhenWhy
/clearBetween unrelated tasksEmpties context so the next task starts clean (mixing tasks is the kitchen-sink anti-pattern)
/compact [focus]Manually at ~60% fullSummarizes (code patterns, file states, decisions) while keeping CLAUDE.md/skills/memory — cheaper and sharper than waiting for auto-compaction at 95%
SubagentsLarge explorationRun in isolated context and report only a summary back — heavy reads never bloat the main thread
MCP tool searchMany MCP servers connectedTool definitions are deferred by default (names only at startup; full schemas loaded on demand) so dozens of tools cost almost no context — note this requires Sonnet 4+ or Opus 4+; Haiku doesn't support deferral and loads all definitions upfront

Use /context [all] to see the breakdown (system prompt, tools, CLAUDE.md, skills, MCP, conversation) and /usage for cost plus a per-skill/subagent/plugin/MCP breakdown. The rule of thumb: /clear between tasks, /compact at 60%, subagents for exploration.

One sharp gotcha lives here too: pasted images and screenshots are stored at full resolution in the session transcript, and accumulation can cause permanent 400 errors on resume. /clear or /compact a session that has piled up visual artifacts — we return to this under quality-at-scale.

Tip

Compact at 60%, not 95%

Auto-compaction near the limit is a last resort. A manual /compact at ~60% is cheaper and produces a sharper summary because the model still has room to think while it summarizes. Make it a reflex, not an emergency.

Note

Microcompact vs. auto-compaction

Microcompact clears stale tool results without a model call. Auto-compaction summarizes near the limit. Neither replaces a deliberate /clear when you switch tasks — a summary of the wrong task is still the wrong context.

3. CLAUDE.md hygiene: lean, concrete, and don't over-rely

CLAUDE.md is delivered as context (a user message), not a system prompt — so compliance is advisory, not guaranteed. Specific instructions like "use 2-space indentation" work; vague ones like "format nicely" fail. Two consequences follow directly.

Keep it under 200 lines, concrete, and project-specific. Bloat is actively harmful: Claude ignores rules lost in the noise. The test for every line is "would Claude make a mistake without this?" If Claude already does the right thing by default, delete the rule — it's costing tokens and diluting the rules that matter.

For anything that must be guaranteed, use a hook — not prose. Hooks are shell commands wired to lifecycle points (PreToolUse, PostToolUse, Stop, SessionStart, and more) in .claude/settings.json. They run on the harness, deterministically, regardless of Claude's discretion. "Always lint on save" or "block edits to this path" belong in a hook; only advice belongs in CLAUDE.md.

Belongs in CLAUDE.mdBelongs in a hook
Project conventions, build/test commands, architecture notesGuaranteed actions: lint on save, run tests at Stop, block a pattern
Advisory preferences ("prefer composition")Non-negotiable enforcement
Things Claude sometimes forgetsThings that must happen every time

Use /init to generate a starter CLAUDE.md (it scans the codebase for build/test commands and conventions), /memory to see every loaded instruction file, and split topic rules into .claude/rules/ — with paths frontmatter so a rule loads only when Claude reads matching files, saving context.

Example

Delete the rule Claude already follows

If your CLAUDE.md says "write clear variable names" and Claude already does, that line is pure noise — remove it. Keep "the auth tokens table is named sessions, not tokens" because that prevents a real, repeatable mistake.

Watch out

Advisory means it can be dropped

Because CLAUDE.md is context, a /compact can drop a rule, and Claude can simply not comply. Never put a safety boundary ("never push to main") in CLAUDE.md alone — that's a job for a deny rule or hook, covered next.

4. Interrupt and steer — don't restart

When Claude heads in the wrong direction, the beginner reflex is to kill the session and start over, throwing away every good step. The power move is conversational steering: press Esc to interrupt immediately (work done so far is preserved), then type a correction. Claude reads it and adjusts after the current action — you keep the context and the progress, and only redirect the part that went wrong.

text
[Claude is editing the wrong module]
Esc
> Stop — that logic belongs in services/auth.ts, not in the route handler. Move it there.

You rarely need to restart. If you've corrected the same thing three times, that's the signal to /clear and re-prompt with one better instruction — repeated corrections are a prompt problem, not a steering problem.

The same "extend, don't replace" instinct applies to the system prompt. When you customize Claude's behavior in headless or SDK runs, use --append-system-prompt, never --system-prompt:

FlagEffect
--append-system-prompt "..."Appends to the default — keeps tool knowledge and safety guardrails (safe)
--append-system-prompt-file ./extra.txtSame, from a file
--system-prompt "..."Replaces the entire default — you lose tool guidance and safety (rarely what you want)
--system-prompt-file ./p.txtReplaces, from a file

Replacing the system prompt strips the guidance that makes Claude good at using its tools. Append your project context on top of that foundation; don't bulldoze it.

Tip

Esc Esc rewinds; Esc steers

A single Esc interrupts so you can redirect. Esc Esc on an empty prompt opens the rewind menu (/rewind) to restore code or conversation to a checkpoint. Steer first; rewind only when a turn went badly enough to undo.

5. Safe automation: bound the blast radius

Headless and unattended runs (claude -p, background agents, CI) trade supervision for scale — which means you must replace your judgment with explicit limits before the run starts. Three flags bound every dimension of risk:

FlagBoundsExample
--allowedToolsWhat Claude may do without prompts--allowedTools "Edit,Bash(npm test*)"
--max-budget-usdHow much it may spend (print mode)--max-budget-usd 5.00
--max-turnsHow long it may run--max-turns 10
bash
claude -p "refactor the validation helper" \
  --allowedTools "Edit,Bash(npm test*)" \
  --max-turns 10 \
  --max-budget-usd 5.00

That run can edit files and run the test command, will stop after ten turns, and halts the moment spend hits five dollars. The blast radius is fully defined in advance.

For hard guarantees, use deny permission rules — not conversation. A boundary you state in chat ("don't push to main") can be dropped by compaction; a deny rule in .claude/settings.json (or via /permissions) is enforced by the harness on every tool call, no matter what the conversation says. This is the single most important safety distinction: conversation is advisory; deny rules and hooks are guaranteed.

json
{
  "permissions": {
    "deny": ["Bash(git push:*)", "Bash(rm -rf:*)"]
  }
}

For CI, pair these with --permission-mode dontAsk (auto-deny anything not in an allow rule) so the run never hangs on a prompt.

Watch out

Hard guarantees go in rules, not chat

Compaction can drop a 'never push' instruction from the conversation, and Claude may not comply with advisory text anyway. If a boundary is non-negotiable, it belongs in a deny rule (or a hook), where the harness enforces it on every call.

Note

bypassPermissions is container-only

--dangerously-skip-permissions (= --permission-mode bypassPermissions) skips all checks and is only safe inside an isolated container or VM. For real automation, prefer scoped --allowedTools plus deny rules over turning safety off.

Note

Know how your automated usage is metered

Headless claude -p and Agent SDK usage may bill differently from interactive sessions — and how subscription plans meter automated/SDK usage (e.g. whether it draws from a separate credit allocation) changes over time. Before relying on --max-budget-usd as your only guardrail, verify your plan's current metering and credit status at claude.com/pricing and via /usage, so a long unattended run doesn't exhaust a pool you didn't know was separate.

6. Quality at scale: parallel work and adversarial review

Once you trust the loop, you scale it — running several streams of work and reviewing them independently. Four patterns carry the load.

Git worktrees for parallel work. claude -w feature-auth opens an isolated git worktree at <repo>/.claude/worktrees/<name> so multiple sessions work on separate branches with no edit collisions. Add --tmux for visual management. Each worktree is its own clean workspace; commits remain visible across them because they share the git repo.

Writer/Reviewer. Session A writes the change; Session B reviews it in a fresh context with no memory of how the code was built — so it judges the code, not the author's intent. The fresh context is the value: bias-free eyes catch what the writing session rationalized away.

Adversarial subagent review. Spawn a subagent whose job is to attack the change — find the failure modes, the missing edge cases, the security holes. Because subagents run in isolated context and report a summary back, you get a hostile second opinion without polluting the main thread. Run /code-review or /security-review over the diff for the same effect on demand.

Manage screenshots to avoid 400 errors. This is the trap that bites long-running visual sessions: images are stored at full resolution in the session transcript, accumulation can cause permanent 400 errors on resume, and Chrome MCP screenshots cause extreme token drain. /clear or /compact a session once visual artifacts pile up — don't try to resume a session that's already broken.

Finally, /fewer-permission-prompts scans your transcripts and adds a safe, read-only allowlist to project settings — so the prompts you keep approving stop interrupting you, without weakening the rules that matter.

Key insight

Fresh context is the reviewer's superpower

A reviewer in the same session shares the writer's blind spots. A reviewer in a fresh session (Writer/Reviewer, or an adversarial subagent) carries no bias from how the code was built — which is precisely why it catches the mistakes the author can't see.

Tip

/fewer-permission-prompts pays for itself

Instead of hand-editing allow rules, run /fewer-permission-prompts. It reads your actual transcripts, finds the safe read-only calls you keep approving, and allowlists them — reducing interruptions without touching the deny rules that enforce real boundaries.

Try it: Run the six habits on one real change

Pick a small project with a test command. 1 — Verify first: ask Claude for a feature with a vague prompt, watch it stop at 'looks done', then re-prompt naming a check ("make npm test -- <area> pass; keep going until green") and watch it iterate. 2 — Plan on uncertainty: for a multi-file part, enter plan mode with Shift+Tab, review the plan (Ctrl+G to edit it), then exit and implement. 3 — Context discipline: check /context, run /compact around 60%, and push a big exploration into a subagent; note how the main thread stays clean. 4 — CLAUDE.md hygiene: open CLAUDE.md, delete one rule Claude already follows, and move one must-happen-every-time rule into a Stop or PostToolUse hook in .claude/settings.json. 5 — Steer: mid-run, press Esc and type a one-line correction instead of restarting. 6 — Safe automation + scale: add a deny rule (e.g. "Bash(git push:*)") to settings, then run claude -p "<task>" --allowedTools "Edit,Bash(npm test*)" --max-turns 8 --max-budget-usd 3.00 and confirm the boundaries hold. Finally, do a Writer/Reviewer pass: review the diff in a fresh session (or /code-review). Write five sentences on which habit changed your workflow most.

Key takeaways

  1. 1Give Claude a verifier (test/build/screenshot/diff) before asking; use plan mode for uncertain or multi-file work and skip it for trivial fixes.
  2. 2Practice context discipline: /clear between tasks, /compact manually at ~60%, subagents for isolated exploration, and rely on deferred MCP tool search.
  3. 3Keep CLAUDE.md under 200 lines and concrete; delete rules Claude already follows, and move anything that must be guaranteed into a hook.
  4. 4Interrupt with Esc and steer mid-run instead of restarting; customize behavior with --append-system-prompt, never --system-prompt.
  5. 5Bound headless runs with --allowedTools + --max-budget-usd + --max-turns, and put hard guarantees in deny rules — not in advisory conversation.
  6. 6Scale quality with git worktrees, Writer/Reviewer, and adversarial subagents; manage screenshots to avoid 400 errors and use /fewer-permission-prompts.

Quiz

Lock in what you learned

Check your understanding

0 / 4 answered

1.You're about to make a clear one-line fix (renaming a misspelled variable) and also, separately, a large refactor across several unfamiliar modules. How should you apply plan mode?

2.Your CLAUDE.md has grown to 350 lines and Claude has started ignoring a specific build instruction buried in it. What is the best fix?

3.Claude takes a wrong turn three sentences into a long, otherwise-good editing run. What's the power-user response?

4.You need an unattended CI run that may edit files and run tests but must never push to main, must stop after 10 turns, and must not exceed $5. Which approach gives a real guarantee for the no-push rule?

Go deeper

Hand-picked sources to keep learning