Skip to content

Boris Cherny Claude Code

Boris Cherny Claude Code

If you want to master Claude Code, one developer you should listen to is Boris Cherny, the actual creator of Claude Code.

Recently, Boris shared the setup he uses daily and the tips that power his workflow. I took time to review everything and tested most of these myself to compile them into this single reference article.

You can use it to check if your setup covers these basics or pick what fits your use case.

As Boris himself puts it, there’s no single “right way” to use Claude Code — the team intentionally built it so you can customize and hack it however you like.

Boris created Claude Code as a side project back in September 2024.

What started as an experiment has grown into a core dev tool for thousands of engineers.

His recent numbers: in just 30 days, he landed 259 PRs — that’s 497 commits, 40k lines added, and 38k lines removed. Every single line was written by Claude Code paired with Opus 4.5.

These aren’t theoretical tips. They come from someone shipping production code at this scale daily.

Let’s break down the 22 tricks he recommends.

Tip 1: Run 5 Claudes in Parallel with System Notifications

Section titled “Tip 1: Run 5 Claudes in Parallel with System Notifications”

Boris doesn’t run a single Claude session. He runs five simultaneously in his terminal, with tabs numbered 1–5.

To keep track of which session needs attention, he enables system notifications. This way he knows when a Claude is waiting for input without checking each tab.

You can set this up in iTerm2 by following the official guide: ==[https://code.claude.com/docs/en/terminal-config#iterm-2-system-notifications](https://code.claude.com/docs/en/terminal-config#iterm-2-system-notifications)==

Tip 2: Run Additional Sessions on claude.ai/code + Use — teleport

Section titled “Tip 2: Run Additional Sessions on claude.ai/code + Use — teleport”

It doesn’t stop at the terminal.

He also runs 5–10 additional sessions **claude.ai/code** in parallel with his local Claudes. He hands off sessions between the terminal and the web using the **&** command, and uses **--teleport** to move back and forth between them.

He even starts sessions from his phone using the Claude iOS app — kicking off tasks in the morning and checking in on them later.

This parallel approach means he’s never blocked waiting for one task to finish before starting another.

Boris uses Opus 4.5 with thinking enabled for everything.

His reasoning: even though it’s bigger and slower than Sonnet, you steer it less, and it’s better at tool use. The result is faster because you spend less time correcting mistakes.

In his words, it’s the best coding model he’s ever used.

The CLAUDE.md file acts like Claude’s memory for your project.

It’s where you document rules, patterns, and preferences so Claude doesn’t repeat the same mistakes.

Tip 4: Maintain a Shared CLAUDE.md Checked into Git

Section titled “Tip 4: Maintain a Shared CLAUDE.md Checked into Git”

Boris and his team maintain a single shared CLAUDE.md for the Claude Code repo. It’s checked into git, and the whole team contributes to it multiple times a week.

Tip 5: Update It Whenever Claude Does Something Wrong

Section titled “Tip 5: Update It Whenever Claude Does Something Wrong”

The rule is simple: anytime Claude does something wrong, they add it to CLAUDE.md so it knows not to do it next time.

Tip 6: Tag @claude on PRs to Add Learnings

Section titled “Tip 6: Tag @claude on PRs to Add Learnings”

Here’s a workflow he uses that compounds knowledge over time.

During code review, he tags **@claude** on his coworkers’ PRs to add learnings to **CLAUDE.md** as part of the PR itself. This uses the Claude Code GitHub action.

To set this up, run:

/install-github-action

Every merged PR makes the repo’s memory smarter. Whatever nit happened on that pull request won’t need to happen again.

Tip 7: Keep CLAUDE.md Concise (~2.5k Tokens)

Section titled “Tip 7: Keep CLAUDE.md Concise (~2.5k Tokens)”

Boris keeps his CLAUDE.md around 2.5k tokens. It covers:

Common bash commands

Code style conventions

UI and content design guidelines

State management patterns

Logging and error handling

Gating and debugging approaches

Pull request template

You don’t need to dump everything in there. Focus on the patterns and mistakes specific to your codebase.

Most of his sessions start in Plan mode. To enter it, press shift+tab twice.

In Plan mode, Claude can only read your codebase — it can’t write anything. You have a back-and-forth conversation until both you and Claude agree on the approach.

Tip 9: Refine the Plan Before Switching to Auto-Accept

Section titled “Tip 9: Refine the Plan Before Switching to Auto-Accept”

Once he likes the plan, he switches into auto-accept edits mode. From there, Claude can usually one-shot the entire implementation.

His key insight: a good plan is really important. Spend time getting it right before letting Claude execute.

Tip 10: Use Slash Commands for Repeated Workflows

Section titled “Tip 10: Use Slash Commands for Repeated Workflows”

Boris uses slash commands for every “inner loop” workflow he does many times a day.

This saves repeated prompting and lets Claude use these workflows too. Commands live in **.claude/commands/** and are checked into git.

For example, he and Claude use a /commit-push-pr slash command dozens of times every day.

Tip 11: Use Inline Bash in Commands to Pre-Compute Info

Section titled “Tip 11: Use Inline Bash in Commands to Pre-Compute Info”

Here’s a trick to make slash commands run faster.

You can embed bash commands directly in your slash command using backticks. Instead of Claude asking for git status, it already knows — no wasted tokens on back-and-forth.

Example structure for a commit command:

Here's the current git status:
\`git status\`
Here are the recent commits:
\`git log --oneline -5\`
Create a commit based on these staged changes.

The bash output gets injected before Claude processes the command.

Boris uses a few subagents often:

  • code-simplifier — simplifies code after Claude is done working
  • verify-app — has detailed instructions for testing Claude Code end-to-end

Think of subagents as automating the most common workflows you do for most PRs.

Tip 13: Store Commands in.claude/commands/ and Check into Git

Section titled “Tip 13: Store Commands in.claude/commands/ and Check into Git”

Both slash commands and subagents live in the .claude/commands/ directory.

Check them into git so your whole team shares the same workflows.

When someone improves a command, everyone benefits.

Tip 14: Use /permissions instead of — dangerously-skip-permissions

Section titled “Tip 14: Use /permissions instead of — dangerously-skip-permissions”

Boris doesn’t use --dangerously-skip-permissions.

Instead, he uses **/permissions** to pre-allow common bash commands that he knows are safe in his environment. This avoids unnecessary permission prompts without giving Claude unlimited access.

Run /permissions to add specific commands you trust.

Tip 15: Share Allowed Permissions via.claude/settings.json

Section titled “Tip 15: Share Allowed Permissions via.claude/settings.json”

Most of Boris’s allowed permissions are checked into .claude/settings.json and shared with the team.

This means everyone has the same safe commands pre-approved, and new team members get a sensible default setup immediately.

Tip 16: Use PostToolUse Hooks to Auto-Format Code

Section titled “Tip 16: Use PostToolUse Hooks to Auto-Format Code”

Claude usually generates well-formatted code out of the box. But Boris uses a PostToolUse hook to handle the last 10%.

This catches formatting issues before they fail CI later.

To set up a formatting hook, run /hooks and configure a PostToolUse hook that runs your formatter (like Prettier or Black) after Claude edits files.

Tip 17: Connect Claude to Your Tools via MCP

Section titled “Tip 17: Connect Claude to Your Tools via MCP”

Claude Code uses all the tools: It searches and posts to Slack, runs BigQuery queries for analytics questions, and grabs error logs from Sentry.

This is done through MCP (Model Context Protocol) servers that connect Claude to external services.

Tip 18: Check MCP Config into.mcp.json for Team Sharing

Section titled “Tip 18: Check MCP Config into.mcp.json for Team Sharing”

The Slack MCP configuration is checked into .mcp.json and shared with the team.

This way, everyone has access to the same integrations without manual setup.

Tip 19: Use Stop Hooks for Long-Running Tasks

Section titled “Tip 19: Use Stop Hooks for Long-Running Tasks”

For very long-running tasks, he uses Stop hooks to verify Claude’s work automatically.

He’ll either prompt Claude to verify its work with a background agent when it’s done, or use an agent Stop hook to do it more deterministically.

Tip 20: Use the Ralph-Wiggum Plugin for Autonomous Loops

Section titled “Tip 20: Use the Ralph-Wiggum Plugin for Autonomous Loops”

For tasks that need to run for hours, Boris uses the ralph-wiggum plugin (created by Geoffrey Huntley).

This keeps Claude working in loops until it succeeds, rather than stopping after one attempt.

I covered this in my recent tutorial — Ralph Wiggum: Claude Code New Way to Run Autonomously (For Hours Without Drama)

For autonomous sessions, he’ll also use --permission-mode=dontAsk or --dangerously-skip-permissions in a sandbox so Claude can work without being blocked on permission prompts.

Tip 21: Give Claude a Way to Verify Its Work

Section titled “Tip 21: Give Claude a Way to Verify Its Work”

This is his most important tip for getting great results.

If Claude has a feedback loop to verify its work, it will 2–3x the quality of the final result.

Verification looks different for each domain:

  • Running a bash command
  • Running a test suite
  • Testing the app in a browser or phone simulator

Invest in making this work!

Tip 22: Use Chrome Extension for UI Testing

Section titled “Tip 22: Use Chrome Extension for UI Testing”

Claude tests every single change Boris lands using the Claude Chrome extension.

It opens a browser, tests the UI, and iterates until the code works and the UX feels good.

I covered this in my recent tutorial here — I Tested (New) Claude Code Browser Feature (Claude Code Can Now Control Your Browser)

This closes the loop between writing code and validating that it works as intended.

These 22 tips come from Boris Cherny’s workflow — the same setup he uses to ship hundreds of PRs monthly.

You don’t need to adopt all of them at once. Start with one or two that fit your current workflow, like Plan mode or setting up a shared CLAUDE.md.

The core principle running through all these tips: give Claude structure, feedback loops, and the tools it needs.

That’s what separates a good Claude Code setup from a great one.

Which of these tips were you missing in your workflow?

Every day, I’m working hard to build the ultimate Claude Code course, which demonstrates how to create workflows that coordinate multiple agents for complex development tasks. It’s due for release soon.

It will take what you have learned from this article to the next level of complete automation.

New features are added to Claude Code daily, and keeping up is tough.

The course explores Agents, Hooks, advanced workflows, and productivity techniques that many developers may not be aware of.

Once you join, you’ll receive all the updates as new features are rolled out.

This course will cover:

  • Advanced subagent patterns and workflows
  • Production-ready hook configurations
  • MCP server integrations for external tools
  • Team collaboration strategies
  • Enterprise deployment patterns
  • Real-world case studies from my consulting work

If you’re interested in getting notified when the Claude Code courselaunches**,** click here to join the early access list →

( Currently, I have 3000+ already signed-up developers)

I’ll share exclusive previews, early access pricing, and bonus materials with people on the list.

If you are new to my content, my name is Joe Njenga

Join thousands of other software engineers, AI engineers, and solopreneurs who read my content daily on Mediu m and on YouTube where I review the latest AI engineering tools and trends. If you are more curious about my projects and want to receive detailed guides and tutorials, join thousands of other AI enthusiasts in my weekly AI Software engineer newsletter

If you would like to connect directly, you can reach out here:## AI Integration Software Engineer (10+ Years Experience )

Software Engineer specializing in AI integration and automation. Expert in building AI agents, MCP servers, RAG…

njengah.com

View original

Follow me on Medium | YouTube Channel | X | LinkedIn

Software & AI Automation Engineer, Tech Writer & Educator. Vision: Enlighten, Educate, Entertain. One story at a time. Work with me: mail.njengah@gmail.com

Talbot Stevens

What are your thoughts?

What a goldmine! 🎉 I loved how Joe broke down Boris Cherny’s 22 tip‑sheet into bite‑size nuggets you can actually start using today. The part about “thinking in primitives” totally changed how I structure my prompts, and the little reminder to…

1

Helloo, very nice article. I just have one question. Here i don’t understand the difference between subagent and command.

[

See more recommendations

](https://medium.com/?source=post_page---read_next_recirc—1b570aedefbe---------------------------------------)