What Claude Code Can Do That You Haven't Tried
Claude Code’s command reference has 114 entries for commands and bundled skills (checked 2026-09-26, removed commands included). The features on this page each remove one daily annoyance: CLAUDE.md imports, Read deny rules for secrets, editing the plan with Ctrl+G, /rewind, /btw, /goal, hooks, and the bundled /verify and /simplify skills.
This page is for developers who already use Claude Code every day. You stopped exploring after the first week, and the tool now ships a release almost every day. You re-prompt a plan that is 90% right, you patch forward over an approach you abandoned, and a teammate’s session reads .env while chasing a connection string.
The selection started from Gui Ferreira’s NDC AI 2026 talk, What Claude Code Can Do That You Haven’t Tried. Every command and key binding on this page was re-checked against Claude Code 2.1.283 and the official docs on 2026-09-26.
What you’ll walk away with from these Claude Code features
Section titled “What you’ll walk away with from these Claude Code features”- A lookup table from “the thing I keep doing” to the feature that removes it
- A
CLAUDE.mdsplit into shared, personal, global, and path-scoped layers - A
.claude/settings.jsonthat keeps.envout of context, and how that rule is bypassed - A
PostToolUsehook, a/goalcondition, and/verify, so the agent proves its own work - Four copy-paste prompts and a failure-and-recovery table
Which underused Claude Code feature fixes your problem?
Section titled “Which underused Claude Code feature fixes your problem?”Start from the symptom. Each row links to its section below.
| You keep doing this | Use this instead | Section |
|---|---|---|
Pasting the same rules into CLAUDE.md, the README, and a docs file | @path imports | Imports |
Watching Claude open .env while it debugs | permissions.deny with Read(...) rules | Secrets |
| Re-prompting a plan that has two wrong lines | Ctrl+G on the plan | Plans |
| Patching forward over an approach you no longer want | Esc Esc or /rewind | Rewind |
| Waiting for a long turn to finish before asking a quick question | /btw | Side questions |
| Typing “keep going, the tests still fail” every few minutes | /goal with a test condition | Goals |
Writing “always run the tests” in CLAUDE.md and hoping | A PostToolUse hook | Hooks |
| Reading every line to know whether the change works | /verify, /simplify, /code-review | Verification |
Set up Claude Code once
Section titled “Set up Claude Code once”These settings take minutes and apply to every later session.
Import files into CLAUDE.md instead of copying them
Section titled “Import files into CLAUDE.md instead of copying them”The same rules end up in the README, a conventions file, and CLAUDE.md, and drift apart. Replace the copies with @ imports. Claude Code expands each imported file into context at launch, next to the CLAUDE.md that references it:
See @README.md for how to run the pipeline.Coding rules live in @docs/conventions.md.API shape: @openapi.yamlRelative paths resolve from the file that contains the import, imports can nest up to four hops, and non-Markdown files work. Two details the docs mention but readers miss:
- An import removes duplication, not tokens. The imported file still loads at every launch, so importing a 900-line OpenAPI file costs the same as pasting it.
- An
@pathinside backticks stays literal text. Write`@README`when you only want to mention the file.
Prune CLAUDE.md with three questions
Section titled “Prune CLAUDE.md with three questions”The official guidance is to keep each CLAUDE.md under 200 lines, because longer files consume more context and reduce adherence. Before a line earns its place, ask:
- Do I need this in almost every conversation? If not, move it out.
- Does it apply only to certain files or certain tasks? Put file-specific rules in
.claude/rules/with apaths:glob, so they load only when Claude works with matching files. Put task recipes in an Agent Skill. - Can the agent find it by itself? A hand-written file tree goes stale and Claude can list directories. Delete it.
A path-scoped rule looks like this:
---paths: - "src/api/**/*.ts"---
Every handler validates its input with the zod schema in src/api/schemas/.Return errors as { error: { code, message } }, never as plain strings.Separate personal, shared, and global instructions
Section titled “Separate personal, shared, and global instructions”The project CLAUDE.md is committed and shared. Some rules are yours alone:
- Personal, per project: a
CLAUDE.local.mdat the project root loads afterCLAUDE.md. Add it to.gitignore. It exists only in the worktree where you created it, so if you use worktrees, import a file from your home directory instead. - Global, every project:
~/.claude/CLAUDE.mdand~/.claude/rules/apply to every session on your machine. Put durable preferences there, such as “answer in short bullet points”.
For the full loading order and auto memory, see the Claude Code memory system.
Keep secrets out of the context window
Section titled “Keep secrets out of the context window”When Claude debugs a database error, it can read .env and settings files while it looks for the connection string. Everything it reads enters the context window and is sent to the model. Deny those reads in .claude/settings.json and commit the file, so the whole team gets the rule:
{ "permissions": { "deny": [ "Read(.env)", "Read(.env.*)", "Read(!.env.example)", "Read(./**/appsettings*.json)", "Bash(dotnet user-secrets *)" ] }}A bare file name such as .env matches at any depth under the working directory, so the rule also covers services/api/.env. Read(.env.*) would also block .env.example, the template Claude needs to learn the variable names, so the ! line carves it back out; a ! rule only reopens paths blocked by rules listed before it in the same file. Put the same rules in ~/.claude/settings.json to cover projects that have none, but do not anchor them with a single leading slash there: in user settings, Read(/secrets/**) resolves to ~/.claude/secrets/**, not to your project.
Sharpen your daily Claude Code loop
Section titled “Sharpen your daily Claude Code loop”These moves happen dozens of times a day.
Edit the plan with Ctrl+G instead of re-prompting it
Section titled “Edit the plan with Ctrl+G instead of re-prompting it”Enter plan mode with Shift+Tab or /plan. When the proposed plan is right except for two lines, press Ctrl+G to open it in your default editor. Fix the lines, save, and approve. Claude does not re-plan the parts that were already right.
For spec work, the bigger risk is that Claude fills gaps with assumptions you discover only after it builds the wrong thing. Make Claude interview you first:
The last sentence matters: the acceptance criteria become the evidence you check instead of the diff.
Rewind instead of patching forward
Section titled “Rewind instead of patching forward”You saw the result of one approach and want a different one. A new prompt keeps the abandoned attempt in context, where it costs tokens and pulls the next attempt toward the old design. Press Esc Esc on an empty prompt, or run /rewind, to restore the conversation, the code, or both to an earlier checkpoint.
Checkpoints track file edits made by Claude’s edit tools. They do not track files changed by Bash commands (rm, mv, a code generator) or by you outside the session. Commit before a risky step, so git covers what checkpoints cannot.
Match effort and model to the task
Section titled “Match effort and model to the task”Claude Code’s default model on the latest release channel is Claude Opus 5.5 at medium effort (see the models hub for other channels and plans). Tune effort before you switch models:
/effort highor/effort xhighfor a hard stretch;/effort statusprints the current level.- Write
ultrathinkanywhere in one prompt to request deeper reasoning for that turn only. Claude Code adds an in-context instruction and leaves the API effort level unchanged. /modelswitches model and saves it as your default for new sessions. To switch for this session only, open the picker with/modeland pressson the model’s row.
“Plan on a strong model, execute on a cheaper one” is built in as the opusplan alias: Opus in plan mode, Sonnet for execution. Keep the default unless your own results show the split works.
Ask a side question with /btw
Section titled “Ask a side question with /btw”A normal prompt queues behind the current turn. /btw why did you pick a queue over a cron job? answers at once in an overlay, from what is already in context, without interrupting the turn or entering the conversation history. Side questions have no tool access, so Claude cannot read a new file to answer one.
Watch context before it degrades the session
Section titled “Watch context before it degrades the session”- Run
/contextin a fresh session before you type anything. If the grid already shows a large share used, an MCP server or skill you installed months ago loads on every run. Remove it or scope it to the project that needs it. - Run
/compactwith focus instructions before quality drops, not after:/compact keep the failing test names and the migration plan. - Run
/clearfor a genuinely new task. Pass a name, such as/clear invoice-spike, to label the old conversation in the/resumepicker. - Run
/usageto see session cost, plan limits, and activity. - Start a line with
!to run a shell command without a reasoning step:! npm test. The output still enters the context, so do not run a command that prints secrets.
For budgets and team-level controls, see cost control for Claude Code.
Audit memory with /memory
Section titled “Audit memory with /memory”Auto memory keeps notes from your corrections in a memory directory, and the first 200 lines or 25 KB of its MEMORY.md index load into every session. Those notes do not expire. Run /memory every few weeks to open the files, delete notes that no longer hold, and turn auto memory off for a project where it misleads.
Pick up, paste, and leave your desk
Section titled “Pick up, paste, and leave your desk”claude --continue(-c) reopens the most recent conversation in this directory.claude --resume(-r) or/resumeopens a picker.- Paste a screenshot with Ctrl+V (Cmd+V in iTerm2, Alt+V on Windows and WSL).
/remote-control(/rc) makes the session available at claude.ai/code and in the Claude mobile app. It still runs on your machine, so the computer must stay on. See channels and Remote Control.
Run several sessions without losing track
Section titled “Run several sessions without losing track”- Worktrees:
claude --worktree fix-invoice-rounding(-w) starts a session in its own git worktree, so a feature, a bug fix, and a review do not share one working tree. - Names and colors:
/rename invoice-bugand/color redlabel the prompt bar, so you recognize a terminal at a glance. - Background sessions:
/background(/bg) detaches the current session andclaude agentsopens agent view, a dashboard of background sessions that is in research preview./taskslists background work inside one session. See agent view. - Permission modes: from v2.1.283 on the
latestchannel, auto mode is the starting mode for interactive terminal and VS Code sessions. A classifier reviews each action.claude -p, the Agent SDK, and models that auto mode does not support still start in Manual, as does any session where a settings file setsdisableAutoMode. Shift+Tab from auto goes to Manual, then cycles Manual,acceptEdits, and plan.
Give the session a finish line with /goal
Section titled “Give the session a finish line with /goal”/goal sets a completion condition. After each turn, a separate small model checks the condition, and Claude starts another turn until it holds.
A goal only works as well as its condition. The evaluator does not run commands or read files; it judges what Claude has shown in the conversation. “The feature works” leaves it to opinion. A condition that names a command’s exit code and a test gives Claude something to run and the evaluator something to check.
Extend Claude Code with hooks, skills, and project MCP
Section titled “Extend Claude Code with hooks, skills, and project MCP”This section covers four extension points.
Make checks deterministic with hooks
Section titled “Make checks deterministic with hooks”A hook runs a command on an event, outside the model. If CLAUDE.md says “always run the linter after editing”, the model follows it most of the time. A hook follows it every time:
{ "hooks": { "PostToolUse": [ { "matcher": "Edit|Write", "hooks": [ { "type": "command", "command": "f=$(jq -r '.tool_input.file_path'); case \"$f\" in *.ts|*.tsx|*.js) npx eslint --max-warnings=0 \"$f\" 1>&2 || exit 2;; esac" } ] } ] }}The hook reads the event JSON on stdin, takes the edited file’s path with jq, and lints only that file, so pre-existing warnings elsewhere in the repo do not block every edit. A PostToolUse hook runs after the edit has happened, so it cannot undo it. ESLint exits 1 on a finding, which Claude would never see, so the command sends the report to stderr and exits 2 instead. On exit code 2, Claude reads the stderr and fixes the problem in the next step. A hook that exits 0 stays silent. To stop an action before it runs, use a PreToolUse hook instead.
Package scripts in a skill instead of standing up an MCP server
Section titled “Package scripts in a skill instead of standing up an MCP server”An Agent Skill is a folder at .claude/skills/<name>/SKILL.md. Claude sees each skill’s description and loads the skill when it is relevant, or you call it with /<name>. A skill can bundle scripts, not only instructions. To call an internal API with three odd endpoints, put your existing Python script in the skill folder, explain in SKILL.md how to run it, and add a “when this fails, try this” note. No MCP server needed.
Use the skills Claude Code already bundles
Section titled “Use the skills Claude Code already bundles”Claude Code ships bundled skills that need no install:
/batch <instruction>researches a large change, splits it into 5 to 30 independent units, shows you the plan, and then runs one background subagent per unit./simplifyruns four review agents in parallel over your changed code (reuse, simplification, efficiency, and level of abstraction) and applies the fixes./loop 5m check the CI run for this branch and tell me when it is greenrepeats a prompt while the session stays open./verifybuilds and runs your app and observes the result, instead of trusting tests alone./run-skill-generatorrecords how to launch your app, so/runand/verifystop rediscovering it./code-reviewreviews the current diff for correctness bugs, and/security-reviewchecks the branch for vulnerabilities.
Browse more with /plugin. A plugin bundles skills, hooks, and MCP servers, and installs at user scope unless you pass another scope. See installing and managing skills.
Scope MCP servers to the project that needs them
Section titled “Scope MCP servers to the project that needs them”claude mcp add writes to local scope by default: the current project, for you only. A server your team needs belongs in project scope, which writes .mcp.json at the repository root for you to commit:
claude mcp add --transport http --scope project notion https://mcp.notion.com/mcpA server that exists only in one project’s .mcp.json does not load its tool definitions into every other project. Each teammate approves project servers the first time they run claude in the trusted repository; a cloned repository cannot approve its own servers. See MCP setup for Claude Code.
Use Claude Code beyond code
Section titled “Use Claude Code beyond code”Anything on your disk is in scope: a folder of Markdown notes, a junk-drawer directory (plan first, because checkpoints do not cover moves made through Bash), or your brag document. Wrap the prompt below in a personal skill, so the next review season takes one command.
How do you check what these features produce?
Section titled “How do you check what these features produce?”Faster sessions help only when the output is correct. Make the agent prove its work, and read evidence instead of every line:
- Write the check first. Put acceptance criteria in the plan (the interview prompt above) and turn them into tests before implementation.
- Enforce the gates with hooks. A
PostToolUsehook runs the linter or type checker after each edit, and aStophook can run the test suite before Claude hands back control. - Make “done” objective. Use
/goalwith an exit code and named tests, not with “it works”. - Observe the running app. Run
/verifyfor behavior that tests do not cover, such as a UI flow or a CLI’s output. - Review with agents, sign off as a human. Run
/simplifyand/code-reviewon the diff. Then read the test results, the/verifyobservation, andgit diff --stat, and sign off on the acceptance criteria. Read individual lines only where those disagree. - Keep a way back. Commit before a risky step, and use
/rewindfor anything that checkpoints track.
For the full testing workflow, see testing with Claude Code and automated review.
What goes wrong with these Claude Code features, and how to recover
Section titled “What goes wrong with these Claude Code features, and how to recover”| Symptom | Cause | Recovery |
|---|---|---|
| Every new session starts on a different model than your teammates use | /model saved your choice as the default in user settings | Run /model, select the default, or press s next time to switch for one session only |
/rewind restored the conversation, but a deleted file is still gone | Checkpoints do not track Bash file changes | Restore from git; commit before risky steps |
Claude still printed a value from .env | The read went through grep -r or a script, which Read deny rules do not cover | Turn on sandboxing, and rotate the exposed secret |
A fresh session already shows high context use in /context | User-scoped MCP servers, plugins, or a long CLAUDE.md load everywhere | Move servers to project scope, uninstall unused plugins, prune CLAUDE.md |
/goal never finishes, or finishes too early | The condition is vague, cannot be satisfied, or asks for something Claude never prints, so the evaluator cannot see it | Run /goal clear and restate it as a command exit code plus named tests; add or stop after 20 turns to bound it |
| The hook runs but Claude ignores failures | The script exits 1 or 0 on failure, so Claude never sees stderr | Exit with code 2 on failure |
| The hook blocks every edit, and Claude starts fixing unrelated files | The hook lints the whole tree, which already has warnings | Scope the hook to the edited file, as in the example above |
| Claude repeats an outdated preference | A stale auto memory note | Run /memory and delete the note |
/btw says it cannot check a file | Side questions have no tool access | Ask a normal prompt, which queues behind the current turn |
End the week with /insights
Section titled “End the week with /insights”Run /insights on Friday. It builds an HTML report from your recent sessions on this machine: how you use Claude Code, where things go wrong, and features to try. Pick one suggestion for next week. It is not available in cloud sessions.
Where to go next with Claude Code features
Section titled “Where to go next with Claude Code features”- Go deeper on the commands you adopted in slash commands mastery and Claude Code efficiency hacks.
- Turn the hook example into a full gate with hooks automation.
- Compare the equivalent tricks in the other tools on the power-user tips hub, in Codex efficiency hacks, and in Cursor time-savers.
- New to Claude Code? Start with installation.