Deep Dive

9 Claude Code Features
That Changed How I Work

I treated Claude Code like a smarter autocomplete for months. One prompt, wait, read, repeat. Then I discovered the features underneath — and now I run three agents in parallel from my phone. Here's everything I learned, explained from scratch.

Shubham
Shubham Yadav
March 26, 2026
12 min read
9 features covered

Quick Summary

→

Git worktrees let you run multiple Claude instances on separate branches simultaneously — no conflicts.

→

Background subagents launch tasks that run on their own and notify you when done — no polling.

→

Voice input via a local Whisper model lets you talk to Claude anywhere, even on a plane.

→

Context hygiene is the most underrated skill — compact early, start fresh per task.

→

Skills over system prompt cuts your CLAUDE.md in half and keeps Claude sharper.

→

Docker containers sandbox risky or overnight work — filesystem always clean.

→

Write-test cycles make Claude fully autonomous — it runs, checks, and fixes without you.

→

Conversation cloning lets you fork a session and explore two approaches at once.

→

Automation of automation — use Claude to build tools that make Claude faster. This is the endgame.

I used Claude Code as a glorified autocomplete for three months before I realized I had been flying a spaceship in first gear. This post is everything I wish someone had told me on day one.

When Claude Code first dropped, my workflow was embarrassingly simple: type a prompt, wait for output, read it, type another prompt. Repeat until the feature was done. It felt fast compared to doing it manually — but I was still the bottleneck. Everything went through me, one task at a time.

The shift happened when I started reading the actual documentation instead of just vibing with the tool. What I found underneath the surface was genuinely shocking — a full orchestration system for autonomous work. This post breaks down every feature that changed my workflow, explains what it is, why it matters, and how to actually use it. Do your own research after reading this — your mileage will vary, and the best setup is the one that fits how you think.

1. Git Worktrees — True Parallelism

This is the single biggest unlock in the entire list. Most developers use Claude Code on one branch at a time — finish a task, commit, start another. Git worktrees blow that model wide open.

💡
What is a Git Worktree?

A worktree is a separate working directory linked to the same Git repository. You can have branch-a checked out in /project/feature-auth and branch-b checked out in /project/feature-payments — at the same time, with zero conflicts.

The reason this matters for Claude Code is that each Claude instance operates in its own working directory. If you give three Claude instances three separate worktrees, they work on three different branches simultaneously — none of them can step on each other's changes because they're literally in different folders on disk.

terminal
# Create three worktrees for three features
git worktree add ../project-auth    feature/auth-revamp
git worktree add ../project-payment feature/payment-flow
git worktree add ../project-perf   feature/perf-audit

# Now open Claude Code in each directory
# (three separate terminal tabs / windows)
cd ../project-auth    && claude
cd ../project-payment && claude
cd ../project-perf    && claude

# Three Claude instances, three branches, zero conflicts

In practice, I now start my mornings by spinning up worktrees for everything on my plate that day, launching Claude in each one, and then checking back in as each finishes. It's the closest I've come to having a team of developers. You do the architecture thinking, Claude does the execution — all in parallel.

"Three features shipping in parallel. Zero conflicts. You review the PRs at the end of the day instead of babysitting each one."

— My actual workflow now

2. Background Subagents — Fire and Forget

The single most annoying part of early AI-assisted coding was the waiting. You send a prompt, and then you sit there watching tokens stream in, afraid to context-switch because you might miss something or need to steer it.

Background subagents solve this completely. You launch a task, and Claude runs it on its own in the background — writing files, running commands, iterating on errors. When it's done, it notifies you. You get a full summary of what happened without having to babysit the process.

⚡
How to launch a background subagent

Use the /background slash command inside Claude Code, or launch Claude with a headless task description. The agent runs, executes tools, and writes a completion report when done.

The mental model shift here is significant. You stop thinking "let me ask Claude to do this" and start thinking "let me assign this to Claude and come back." It's the difference between being a developer and being an engineering manager. You're not in every PR — you're setting direction and reviewing outcomes.

Before SubagentsWith Subagents
BLOCKING
Watch every token stream
ASYNC
Launch and context-switch freely
One task at a timeMultiple tasks running in parallel
You are the bottleneckReview outcomes, not intermediate steps
Can't leave the terminalGet notified when done, from anywhere

3. Voice Input — Talk to Claude Anywhere

This sounds like a gimmick until you actually start using it. Claude Code supports voice input via a local Whisper model — meaning transcription happens on-device with no latency, no network dependency, and it even works offline.

I use this most on commutes and when my hands are occupied. The killer use case: whispering into my earphones on a flight. I've shipped meaningful architectural decisions at 35,000 feet while everyone else was watching movies. The local model means I'm not worried about sending work conversations to an external API.

🎙️
Setting up voice input

Install the Whisper model locally via the Claude Code settings. Enable the voice input toggle. On mobile, tap the mic icon. Works with any Bluetooth headset or earphones — even works whispering in a quiet airplane cabin.

There's also a cognitive benefit that surprised me: spoken instructions tend to be more natural and context-rich than typed ones. When I'm typing I tend to be terse. When I'm speaking I naturally give more background, more nuance, more "and the reason I want it this way is…" — which makes Claude's output noticeably better.

4. Context Hygiene — The Milk Principle

Context is milk. It has a freshness window, and once it goes bad, everything it touches gets worse. This is the least glamorous item on this list and the one that has probably helped my output quality the most.

⚠️
Stale context kills output quality

As a conversation gets longer, Claude starts anchoring on earlier decisions, earlier assumptions, and earlier code — even when you've moved on. A fresh session with a clear task description almost always outperforms a stale long thread.

The two habits that made the biggest difference:

1

Compact before auto-compact kicks in

Use /compact manually when a session starts getting long but you're not done yet. Claude summarizes the conversation into a dense context block, discarding the verbatim history but preserving the key decisions. This is better than letting auto-compact trigger unexpectedly mid-task.

2

New session per new task

Don't carry context from Task A into Task B. Start fresh, reference the relevant files or outputs explicitly. A clean session with precise instructions beats a long session with ambient context every time.

claude code slash commands
# Compact the current context before it bloats
/compact

# Start a totally fresh session
/clear

# Check how much context you've used
/status

5. Skills Over System Prompt

Most people who use Claude Code with a custom setup have a single giant CLAUDE.md file — a system prompt that contains everything Claude needs to know about the project, the stack, the conventions, the team preferences. This works, but it has a serious cost: that entire file burns context tokens on every single request, even when most of it is irrelevant.

The better pattern is on-demand skills. Instead of one monolithic file, you create a /skills directory with individual Markdown files for specific domains — one for the design system, one for the API conventions, one for the testing setup. Claude reads the relevant skill file only when working in that area.

project structure
.
├── CLAUDE.md              # Thin: project overview + skill index only
├── skills/
│   ├── design-system.md   # Loaded when touching UI components
│   ├── api-conventions.md # Loaded when working on endpoints
│   ├── testing-setup.md   # Loaded when writing tests
│   └── deploy-process.md  # Loaded when shipping
└── src/

Your main CLAUDE.md becomes a lightweight index: project overview, tech stack, and a list of which skill files exist and when to use them. Claude reads the right skill file at the start of the relevant task and ignores the rest. The result: roughly half the baseline context usage, with more focused and accurate output on specialized tasks.

6. Docker Containers — Sandbox Everything Risky

Claude Code can execute commands. It can install packages, modify config files, run scripts, and delete things. In a development environment, that's mostly fine — version control protects you. But for overnight tasks, scripts that touch production artifacts, or anything involving destructive operations, you want a container boundary between Claude and your actual filesystem.

🐳
Running Claude Code inside Docker

Mount your project directory into a container and run Claude there. Any file system changes happen inside the container. Your host machine stays completely clean, no matter what Claude does.

Dockerfile.claude
FROM node:20-slim

# Install Claude Code globally
RUN npm install -g @anthropic-ai/claude-code

# Set working directory
WORKDIR /workspace

# Mount your project here at runtime:
# docker run -v $(pwd):/workspace -it claude-sandbox claude

I use this for two types of tasks: anything that runs overnight (migrations, large refactors, batch processing scripts), and anything that involves commands I haven't fully vetted. The container is the cage — Claude can run wild inside it, and my actual machine is untouched. If something goes catastrophically wrong, I just delete the container.

7. Write-Test Cycle — Full Autonomy Loop

The write-test cycle is the closest thing to a truly autonomous coding loop that currently exists. The idea is simple: instead of asking Claude to just write the code, you give it both the target code file and the test file at the same time. Claude writes the implementation, runs the tests, reads the failures, fixes the code, re-runs — and keeps iterating until the tests pass.

No human in the loop. No "does this look right?" back-and-forth. Just: here's the spec (the test), here's where the code should go — make them agree.

1

Write your tests first (or alongside)

TDD naturally pairs with this workflow. Write tests that describe the behavior you want. Don't worry about the implementation — that's Claude's job.

2

Give Claude both files explicitly

Reference both the test file and the source file in your prompt. "The tests are in auth.test.ts. The implementation goes in auth.ts. Make all tests pass."

3

Let Claude run the test suite

Claude will execute npm test (or your equivalent), parse the failure output, adjust the implementation, and re-run. It loops until green or until it hits a genuine blocker it needs human input on.

example prompt
Implement the AuthService class in src/auth.ts so that all
tests in src/auth.test.ts pass. Run the test suite after
each change and iterate until everything is green.
Do not modify the test file.

The key constraint is the last line: do not modify the test file. Without that guardrail, Claude will sometimes take the path of least resistance and change the tests to match the code. With it, the tests become an immutable specification that Claude must satisfy — which is exactly what you want.

8. Conversation Cloning — Fork Your Sessions

This one is subtle but wildly useful in specific situations. Conversation cloning lets you fork an existing Claude session at any point and explore two different approaches simultaneously, keeping both branches alive. You pick the winner, or learn something from both.

The most common use case: you've spent 20 messages establishing deep context about a complex system, and now you want to try two fundamentally different architectural approaches. Without cloning, you have to pick one and commit. With cloning, you fork the session, try Approach A in one branch and Approach B in the other, then compare the results.

🍴
When to clone vs when to start fresh

Clone when you have expensive established context (long system explanations, complex debugging sessions, detailed architectural discussions) and want to explore divergent paths. Start fresh when the tasks are genuinely independent — don't carry context you don't need.

I also use this for code review. Fork the session, ask one branch to critique the implementation harshly, ask the other to suggest a completely different approach. Reading both responses together gives you a much richer picture than a single linear conversation.

9. Automation of Automation — The Endgame

Everything above is a feature. This is a philosophy — and it's where the compounding really starts.

The idea is to use Claude Code to build the scripts, templates, and tooling that make future Claude Code sessions faster and more capable. You're not just automating tasks — you're automating the automation infrastructure itself.

🛠️
Example 01

Generate your own skills

Ask Claude to analyze your codebase and write the skill files for the /skills directory itself. It reads your patterns, your conventions, your architecture — and produces documentation that makes future Claude sessions more accurate out of the box.

⚙️
Example 02

Build your own worktree launcher

Write a script (with Claude's help) that reads your project's open GitHub issues, spins up a worktree for each one, and launches a Claude instance in each — all in one command. What used to take 10 minutes of setup becomes a single keystroke.

📊
Example 03

Auto-generate test scaffolding

Use Claude to write a script that analyzes any new source file and generates the skeleton test file alongside it automatically. Every new function you add already has a failing test waiting to be filled in.

"Most people treat Claude Code like a smart autocomplete. The people winning with it are treating it like an operating system for their work — and using it to build extensions for itself."

— The realization that changed how I use this tool

The compounding effect here is real. Every automation you build with Claude makes the next automation faster to build. Every skill file you generate makes Claude more accurate in that domain. Every workflow script you write reduces the friction for future parallel work. The ceiling keeps rising the more you invest in the infrastructure layer.

How to Start: A Practical Ramp

If you're reading this and feeling overwhelmed, here's the honest progression I'd recommend. Don't try to implement all nine things at once — that's how you end up with a complex setup you don't understand and abandoned after a week.

1

Week 1: Context hygiene only

Just focus on starting fresh sessions per task and using /compact before your contexts get bloated. Notice the quality difference. No new tools, no new setup — just a discipline change.

2

Week 2: Add the write-test cycle

Pick one upcoming feature and try the full write-test loop. Write your tests first, give Claude both files, let it iterate. Review only the final output. Feel the difference between reviewing a PR and babysitting a conversation.

3

Week 3: Set up git worktrees

Add your first worktree. Try running two Claude instances in parallel on two real tasks. The setup is 5 minutes of git commands — the payoff starts immediately.

4

Month 2: Skills + Docker + Subagents

Refactor your CLAUDE.md into a skills directory. Set up a Docker environment for overnight tasks. Try your first background subagent on a task that takes more than 10 minutes. You're now operating at a meaningfully different tier.

5

Ongoing: Automate the automation

Once the above is habitual, start building tooling on top of it. This is the open-ended phase — the workflows you build here will be unique to you, your stack, and how your brain works.

📌
Do your own research

Everything in this post is based on my personal workflow and testing. Claude Code is evolving fast — features get updated, new things ship, some of this may be outdated by the time you read it. Check the official Claude Code documentation and the Anthropic blog for the current state of things. The best setup is the one that fits how you think, not a copy of mine.

Found this useful?

I post deep dives on Claude Code, AI-assisted development, and developer workflow every week.
Follow along on Instagram for the visual breakdown of every concept.

Follow @theshubhamyadav.comm