claude-cli — How Boris Uses Claude Code

How Boris Cherny Uses Claude Code

Boris created Claude Code at Anthropic. When asked how he uses it, he shared 13 practical tips from his daily workflow. His setup is "surprisingly vanilla" — proof that CC works great out of the box.

@bcherny's January 2, 2026 thread
Click the tabs above to explore each tip
or use ← → arrow keys
1
Run 5 Claudes in Parallel

Boris runs 5 instances of Claude Code simultaneously in his terminal using 5 separate git checkouts of the same repo. He numbers his tabs 1-5 for easy reference and uses system notifications to know when any Claude needs input.

Key detail
Each tab runs in its own git checkout, so Claude can make changes in parallel without conflicts. Configure iTerm2 notifications to know when any Claude needs attention.
~/repo-1 $ # Tab 1: Working on feature ~/repo-2 $ # Tab 2: Running tests ~/repo-3 $ # Tab 3: Code review ~/repo-4 $ # Tab 4: Debugging ~/repo-5 $ # Tab 5: Documentation
View original post
2
Parallel Web and Mobile Sessions

Beyond the terminal, Boris runs 5-10 additional sessions on claude.ai/code. He fluidly hands off between local and web using the & command or --teleport flag.

He also kicks off sessions from his phone via the Claude iOS app in the morning, then picks them up on his computer later.

Key commands
& — Background a session
--teleport — Switch contexts between local and web
View original post
3
Opus 4.5 with Thinking for Everything

Boris uses Opus 4.5 with thinking mode for every task. His reasoning:

Why Opus over Sonnet
"It's the best coding model I've ever used, and even though it's bigger & slower than Sonnet, since you have to steer it less and it's better at tool use, it is almost always faster than using a smaller model in the end."

The takeaway: less steering + better tool use = faster overall results, even with a larger model.

View original post
4
Shared CLAUDE.md Documentation

The team shares a single CLAUDE.md file for the Claude Code repo, checked into git. The whole team contributes multiple times a week.

Key practice
"Anytime we see Claude do something incorrectly we add it to the CLAUDE.md, so Claude knows not to do it next time."
claude-cli $ cat CLAUDE.md # Development Workflow **Always use `bun`, not `npm`.** # 1. Make changes # 2. Typecheck (fast) bun run typecheck # 3. Run tests bun run test -- -t "test name" # Single suite bun run test:file -- "glob" # Specific files # 4. Lint before committing bun run lint:file -- "file1.ts" # Specific files bun run lint # All files # 5. Before creating PR bun run lint:claude && bun run test
View original post
5
@.claude in Code Reviews

During code review, Boris tags @.claude on PRs to add learnings to the CLAUDE.md as part of the PR itself.

They use the Claude Code GitHub Action (/install-github-action) for this. Boris calls it their version of "Compounding Engineering" — inspired by Dan Shipper's concept.

// Example PR comment: nit: use a string literal, not ts enum @claude add to CLAUDE.md to never use enums, always prefer literal unions
Result
Claude automatically updates the CLAUDE.md and commits: "Prefer `type` over `interface`; **never use `enum`** (use string literal unions instead)"
View original post
6
Start in Plan Mode

Most sessions start in Plan mode (shift+tab twice). Boris iterates on the plan with Claude until it's solid, then switches to auto-accept mode.

The workflow
Plan mode → Refine plan → Auto-accept edits → Claude 1-shots it
> i want to improve progress notification rendering for skills. can you make it look and feel a bit more like subagent progress? ▮▮ plan mode on (shift+tab to cycle)

"A good plan is really important to avoid issues down the line."

View original post
7
Slash Commands for Inner Loops

Boris uses slash commands for workflows he does many times a day. This saves repeated prompting, and Claude can use them too.

Commands are checked into git under .claude/commands/ and shared with the team.

> /commit-push-pr /commit-push-pr Commit, push, and open a PR
Power feature
Slash commands can include inline Bash to pre-compute info (like git status) for quick execution without extra model calls.
View original post
8
Subagents for Common Workflows

Boris thinks of subagents as automations for the most common PR workflows:

▼ .claude ▼ agents ↓ build-validator.md ↓ code-architect.md ↓ code-simplifier.md ↓ oncall-guide.md ↓ verify-app.md
Examples
code-simplifier — Cleans up code after Claude finishes
verify-app — Detailed instructions for end-to-end testing
View original post
9
PostToolUse Hooks for Formatting

The team uses a PostToolUse hook to auto-format Claude's code. While Claude generates well-formatted code 90% of the time, the hook catches edge cases to prevent CI failures.

"PostToolUse": [ { "matcher": "Write|Edit", "hooks": [ { "type": "command", "command": "bun run format || true" } ] } ]
View original post
10
Pre-Allow Safe Permissions

Instead of --dangerously-skip-permissions, Boris uses /permissions to pre-allow common safe commands. Most are shared in .claude/settings.json.

> /permissions Permissions: Allow Ask Deny Workspace Claude Code won't ask before using allowed tools. ↑ 12. Bash(bq query:*) 13. Bash(bun run build:*) 14. Bash(bun run lint:file:*) 15. Bash(bun run test:*) 16. Bash(bun run test:file:*) 17. Bash(bun run typecheck:*) 18. Bash(bun test:*) 19. Bash(cc:*) 20. Bash(comm:*) > 21. Bash(find:*)
View original post
11
Tool Integrations

Claude Code uses all of Boris's tools autonomously:

  • Searches and posts to Slack (via MCP server)
  • Runs BigQuery queries with bq CLI
  • Grabs error logs from Sentry
claude-cli-2 $ cat .mcp.json { "mcpServers": { "slack": { "type": "http", "url": "https://slack.mcp.anthropic.com/mcp" } } }
View original post
12
Handle Long-Running Tasks

For very long-running tasks, Boris ensures Claude can work uninterrupted:

Options
(a) Prompt Claude to verify with a background agent when done
(b) Use an agent Stop hook for deterministic checks
(c) Use the "ralph-wiggum" plugin (community idea by @GeoffreyHuntley)

For sandboxed environments, he'll use --permission-mode=dontAsk or --dangerously-skip-permissions to avoid blocks.

* Reticulating... (1d 2h 47m · ↓ 2.4m tokens · thinking) >
View original post
13
The Most Important Tip: Verification

This is Boris's #1 tip:

Key insight
"Probably the most important thing to get great results out of Claude Code — give Claude a way to verify its work. If Claude has that feedback loop, it will 2-3x the quality of the final result."

For his own changes to claude.ai/code, Claude uses the Claude Chrome extension to open a browser, test UI changes, and iterate until it works perfectly.

Verification varies by domain: Bash commands, test suites, simulators, browser testing, etc. The key is giving Claude a way to close the feedback loop.

Takeaway
Invest in domain-specific verification for optimal performance. Claude tests every single change Boris lands to claude.ai/code.
View original post

More Tips from Boris Cherny

Boris shared 10 more tips on January 31, 2026. These are sourced directly from the Claude Code team — remember, everyone's setup is different. Experiment to see what works for you!

@bcherny's January 31, 2026 thread
Click the tabs above to explore each tip
or use ← → arrow keys
1
Do More in Parallel

Spin up 3-5 git worktrees at once, each running its own Claude session in parallel. It's the single biggest productivity unlock, and the top tip from the team.

Why worktrees over checkouts
Most of the Claude Code team prefers worktrees — it's the reason @amorriscode built native support for them into the Claude Desktop app!

Some people also name their worktrees and set up shell aliases (za, zb, zc) so they can hop between them in one keystroke. Others have a dedicated "analysis" worktree that's only for reading logs and running BigQuery.

$ git worktree add .claude/worktrees/my-worktree origin/main $ cd .claude/worktrees/my-worktree && claude # Claude Code v2.1.29 # Opus 4.5 · Claude Enterprise # .claude/worktrees/my-worktree
View original post
2
Start Every Complex Task in Plan Mode

Pour your energy into the plan so Claude can 1-shot the implementation. Don't keep pushing when things go sideways — switch back to plan mode and re-plan.

Team patterns
One person has one Claude write the plan, then they spin up a second Claude to review it as a staff engineer. Another says the moment something goes sideways, they switch back to plan mode and re-plan.

They also explicitly tell Claude to enter plan mode for verification steps, not just for the build.

> Try "refactor cli.tsx" ▮▮ plan mode on (shift+Tab to cycle)
View original post
3
Invest in Your CLAUDE.md

After every correction, end with: "Update your CLAUDE.md so you don't make that mistake again." Claude is eerily good at writing rules for itself.

Key practice
Ruthlessly edit your CLAUDE.md over time. Keep iterating until Claude's mistake rate measurably drops.

One engineer tells Claude to maintain a notes directory for every task/project, updated after every PR. They then point CLAUDE.md at it.

Memory files · /memory └ ~/.claude/CLAUDE.md: 76 tokens └ CLAUDE.md: 4k tokens
View original post
4
Create Your Own Skills

Create your own skills and commit them to git. Reuse across every project.

Tips from the team
  • If you do something more than once a day, turn it into a skill or command
  • Build a /techdebt slash command and run it at the end of every session to find and kill duplicated code
  • Set up a slash command that syncs 7 days of Slack, GDrive, Asana, and GitHub into one context dump
  • Build analytics-engineer-style agents that write dbt models, review code, and test changes in dev
View original post
5
Claude Fixes Most Bugs by Itself

Enable the Slack MCP, then paste a Slack bug thread into Claude and just say "fix." Zero context switching required.

Or, just say "Go fix the failing CI tests." Don't micromanage how.

Pro tip
Point Claude at docker logs to troubleshoot distributed systems — it's surprisingly capable at this.
> fix this https://ant.slack.com/archives/... ● slack - search_public (MCP)(query: "in:C07VBS...") Searches for messages in public Slack ch... 'slack_search_public' does NOT generally for user consent to use 'slack_search_p...
View original post
6
Level Up Your Prompting

a. Challenge Claude. Say "Grill me on these changes and don't make a PR until I pass your test." Make Claude be your reviewer. Or, say "Prove to me this works" and have Claude diff behavior between main and your feature branch.

b. After a mediocre fix, say: "Knowing everything you know now, scrap this and implement the elegant solution."

c. Write detailed specs and reduce ambiguity before handing work off. The more specific you are, the better the output.

Key insight
Don't accept the first solution. Push Claude to do better — it usually can.
View original post
7
Terminal & Environment Setup

The team loves Ghostty! Multiple people like its synchronized rendering, 24-bit color, and proper unicode support.

For easier Claude-juggling, use /statusline to customize your status bar to always show context usage and current git branch. Many of us also color-code and name our terminal tabs, sometimes using tmux — one tab per task/worktree.

Voice dictation
Use voice dictation. You speak 3x faster than you type, and your prompts get way more detailed as a result. (Hit fn x2 on macOS)
┌──────────────────────────────────────────┐ │ ● ● ● │ 1 ⌘1 │ 2 ● ⌘2 │ 3 ⌘3 │ 4 │ ├──────────────────────────────────────────┤ │ × * Claude Code (node) │ │ │ │ Claude Code v2.1.29 │ │ Opus 4.5 · Claude Enterprise │ │ /code/claude │ └──────────────────────────────────────────┘
View original post
8
Use Subagents

a. Append "use subagents" to any request where you want Claude to throw more compute at the problem.

b. Offload individual tasks to subagents to keep your main agent's context window clean and focused.

c. Route permission requests to Opus 4.5 via a hook — let it scan for attacks and auto-approve the safe ones.

> use 5 subagents to explore the codebase ● I'll launch 5 explore agents in parallel to... ● Running 5 Explore agents... (ctrl+o to expand) ├─ Explore entry points and startup · 10 t... │ └ Bash: Find CLI or main entry files ├─ Explore React components structure · 14... │ └ Bash: ls -la /Users/boris/code/clau... ├─ Explore tools implementation · 14 tool... │ └ Bash: Find tool implementation files ├─ Explore state management · 13 tool uses │ └ Search: **/screens/REPL.tsx └─ Explore testing infrastructure · 13 to... └ Search: test/mocks/**/*.ts
View original post
9
Use Claude for Data & Analytics

Ask Claude Code to use the "bq" CLI to pull and analyze metrics on the fly. We have a BigQuery skill checked into the codebase, and everyone on the team uses it for analytics queries directly in Claude Code.

Boris's take
"Personally, I haven't written a line of SQL in 6+ months."

This works for any database that has a CLI, MCP, or API.

View original post
10
Learning with Claude

A few tips from the team to use Claude Code for learning:

a. Enable the "Explanatory" or "Learning" output style in /config to have Claude explain the why behind its changes.

b. Have Claude generate a visual HTML presentation explaining unfamiliar code. It makes surprisingly good slides!

c. Ask Claude to draw ASCII diagrams of new protocols and codebases to help you understand them.

d. Build a spaced-repetition learning skill: you explain your understanding, Claude asks follow-ups to fill gaps, stores the result.

Key takeaway
Claude Code isn't just for writing code — it's a powerful learning tool when you configure it to explain and teach.
View original post

Customize Your Claude

Boris shared 12 more tips on February 11, 2026. This time the theme is customization — hooks, plugins, agents, permissions, and all the ways to make Claude Code your own.

@bcherny's February 11, 2026 thread
Click the tabs above to explore each tip
or use ← → arrow keys
1
Configure Your Terminal

A few quick settings to make Claude Code feel right in your terminal:

Key settings
  • Theme: Run /config to set light/dark mode
  • Notifications: Enable notifications for iTerm2, or use a custom notifs hook
  • Newlines: If you use Claude Code in an IDE terminal, Apple Terminal, Warp, or Alacritty, run /terminal-setup to enable shift+enter for newlines (so you don't need to type \)
  • Vim mode: Run /vim
View original post
2
Adjust Effort Level

Run /model to pick your preferred effort level:

Effort levels
  • Low — less tokens & faster responses
  • Medium — balanced behavior
  • High — more tokens & more intelligence

Personally, I use High for everything.

||| High effort (default) ← → to adjust Fast mode is ON and available with Opus 4.6
View original post
3
Install Plugins, MCPs, and Skills

Plugins let you install LSPs (now available for every major language), MCPs, skills, agents, and custom hooks.

Install a plugin from the official Anthropic plugin marketplace, or create your own marketplace for your company. Then, check the settings.json into your codebase to auto-add the marketplaces for your team.

Getting started
Run /plugin to browse and install plugins.
View original post
4
Create Custom Agents

To create custom agents, drop .md files in .claude/agents. Each agent can have a custom name, color, tool set, pre-allowed and pre-disallowed tools, permission mode, and model.

Pro tip
There's a little-known feature that lets you set the default agent used for the main conversation. Just set the "agent" field in your settings.json or use the --agent flag.
> use the sentry errors agent sentry-errors(Fetch Sentry error logs) Search(pattern: "sentry", path: "src") +10 more tool uses (ctrl+o to expand)

Run /agents to get started.

View original post
5
Pre-Approve Common Permissions

Claude Code uses a sophisticated permission system with a combo of prompt injection detection, static analysis, sandboxing, and human oversight.

Out of the box, we pre-approve a small set of safe commands. To pre-approve more, run /permissions and add to the allow and block lists. Check these into your team's settings.json.

Wildcard syntax
We support full wildcard syntax. Try "Bash(bun run *)" or "Edit(/docs/**)"
> /permissions Permissions: [Allow] Ask Deny 52. Bash(gh issue view:*) 53. Bash(gh pr checks:*) 54. Bash(gh pr comment:*) 55. Bash(gh pr diff:*) 56. Bash(gh pr list:*)
View original post
6
Enable Sandboxing

Opt into Claude Code's open source sandbox runtime to improve safety while reducing permission prompts.

Run /sandbox to enable it. Sandboxing runs on your machine, and supports both file and network isolation. Windows support coming soon.

Sandbox modes
  • Sandbox BashTool, with auto-allow — commands run in sandbox, auto-approved
  • Sandbox BashTool, with regular permissions — sandbox + normal permission prompts
  • No Sandbox — default behavior
View original post
7
Add a Status Line

Custom status lines show up right below the composer, and let you show model, directory, remaining context, cost, and pretty much anything else you want to see while you work.

Everyone on the Claude Code team has a different statusline. Use /statusline to get started, to have Claude generate a statusline for you based on your .bashrc/.zshrc.

> _ [Opus] 📁 my-app | 🌿 feature/auth █████████░░░░░░░░░ 42% | $0.08 | 🕐 7m 3s
View original post
8
Customize Your Keybindings

Did you know every key binding in Claude Code is customizable?

Run /keybindings to re-map any key. Settings live reload so you can see how it feels immediately.

How it works
Keybindings are stored in ~/.claude/keybindings.json. Claude can generate the config for you — just describe what you want.
View original post
9
Set Up Hooks

Hooks are a way to deterministically hook into Claude's lifecycle. Use them to:

Use cases
  • Automatically route permission requests to Slack or Opus
  • Nudge Claude to keep going when it reaches the end of a turn (you can even kick off an agent or use a prompt to decide whether Claude should keep going)
  • Pre-process or post-process tool calls, e.g. to add your own logging

Ask Claude to add a hook to get started.

View original post
10
Customize Your Spinner Verbs

It's the little things that make CC feel personal. Ask Claude to customize your spinner verbs to add or replace the default list with your own verbs.

Check the settings.json into source control to share verbs with your team.

> in my settings, make my spinner verbs star trek themed.Update(~/.claude/settings.json) ✱ Beaming up… (esc to interrupt)
View original post
11
Use Output Styles

Run /config and set an output style to have Claude respond using a different tone or format.

Recommended styles
  • Explanatory — great when getting familiar with a new codebase, to have Claude explain frameworks and code patterns as it works
  • Learning — have Claude coach you through making code changes
  • Custom — create your own output styles to adjust Claude's voice the way you like
View original post
12
Customize All the Things!

Claude Code is built to work great out of the box. When you do customize, check your settings.json into git so your team can benefit, too.

We support configuring for your codebase, for a sub-folder, for just yourself, or via enterprise-wide policies.

By the numbers
Pick a behavior, and it is likely that you can configure it. We support 37 settings and 84 env vars (use the "env" field in your settings.json to avoid wrapper scripts).
View original post

Built-in Worktree Support

Boris announced built-in git worktree support for Claude Code on February 20, 2026. Agents can now run in parallel without interfering with each other — in CLI, Desktop app, IDE extensions, web, and mobile.

@bcherny's February 20, 2026 thread
Click the tabs above to explore each tip
or use ← → arrow keys
1
Use claude --worktree for Isolation

To run Claude Code in its own git worktree, just start it with the --worktree option. You can name your worktree, or have Claude name it for you.

Use this to run multiple parallel Claude Code sessions in the same git repo, without the code edits clobbering each other.

$ claude --worktree my_worktree # You can also pass --tmux to launch in its own Tmux session $ claude --worktree my_worktree --tmux
What changed
The Claude Code Desktop app has had built-in support for worktrees for a while — now it's in the CLI too.
View original post
2
Use Worktree Mode in the Desktop App

If you prefer not to use the terminal, head to the Code tab in the Claude Desktop app and check the worktree checkbox.

How to enable
Open the Claude Desktop app → Code tab → check the "worktree" checkbox. That's it.
View original post
3
Subagents Now Support Worktrees

Subagents can also use worktree isolation to do more work in parallel. This is especially powerful for large batched changes and code migrations.

To use it, ask Claude to use worktrees for its agents. Available in CLI, Desktop app, IDE extensions, web, and Claude Code mobile app.

> Migrate all sync io to async. Batch up the changes, and launch 10 parallel agents with worktree isolation. Make sure each agent tests its changes end to end, then have it put up a PR.
View original post
4
Custom Agents Support Git Worktrees

You can also make subagents always run in their own worktree. To do that, just add isolation: worktree to your agent frontmatter.

# .claude/agents/worktree-worker.md --- name: worktree-worker model: haiku isolation: worktree ---
View original post
5
Also Available for Non-Git Source Control

If you're a Mercurial, Perforce, or SVN user, define worktree hooks to benefit from isolation without having to use Git.

$ cat .claude/settings.json { ... "hooks": { "WorktreeCreate": [ { "command": "jj workspace add \"$(cat /dev/stdin | jq -r '.name')\"" } ], "WorktreeRemove": [ { "command": "jj workspace forget \"$(cat /dev/stdin | jq -r '.worktree_path')\"" } ] }, ... }
View original post

Install as a Claude Code Skill

Get all 40 tips available directly in Claude Code. Type /boris anytime to surface these workflow patterns.

A skill is a knowledge file that lives on your machine. Once installed, Claude references it automatically when you ask about workflows — or on demand with /boris.

Requires Claude Code. Install it first if you haven't: npm install -g @anthropic-ai/claude-code
1
One-Line Install

Run this command in your terminal to install globally:

$ mkdir -p ~/.claude/skills/boris && curl -L -o ~/.claude/skills/boris/SKILL.md https://howborisusesclaudecode.com/api/install

This installs globally to ~/.claude/skills/. For project-specific install, use .claude/skills/ instead.

2
Use the Skill

Start a new Claude Code session and type:

> /boris # Or just ask about workflows - Claude will use it automatically: > How should I set up parallel Claude sessions?

You'll see the full tips document appear in your conversation. If you get "skill not found", verify the file exists: ls ~/.claude/skills/boris/SKILL.md

3
What's Included
40 Tips Organized by Topic
  • Parallel Execution - Worktrees, multiple sessions, web/mobile
  • Model Selection - Why Opus 4.5 with thinking
  • Plan Mode - Start complex tasks right
  • CLAUDE.md - Best practices, @.claude in PRs
  • Skills & Commands - Create and share workflows
  • Subagents - Common PR automations
  • Hooks - PostToolUse formatting, Stop hooks
  • Permissions - Pre-allow safe commands
  • MCP Integrations - Slack, BigQuery, Sentry
  • Prompting - Challenge Claude, write specs
  • Terminal Setup - Ghostty, voice dictation
  • Bug Fixing - Slack MCP, CI tests, docker logs
  • Long-Running Tasks - Stop hooks, background agents
  • Verification - The #1 tip for quality
  • Learning - Use Claude to understand code
  • Customization - Terminal, themes, keybindings, spinners
  • Plugins & Agents - LSPs, MCPs, custom agents
  • Safety - Sandboxing, permissions, wildcard syntax
  • Output Styles - Explanatory, learning, custom
  • Built-in Worktrees - CLI, Desktop, subagent isolation, non-git VCS
Try After Installing
> How do I run parallel Claude sessions with worktrees?
> What should I put in my CLAUDE.md?
> Set up a PostToolUse hook to auto-format my code
> What's the best way to verify Claude's work?
?
Manual Download

Prefer to download manually? Download SKILL.md and place it in:

~/.claude/skills/boris/SKILL.md

Create the ~/.claude/skills/boris/ directory if it doesn't exist.

?
Keeping It Updated

The skill automatically checks for updates when you type /boris. If a newer version is available, Claude will show you the update command.

Or re-run the install command anytime to manually update. To uninstall: rm -rf ~/.claude/skills/boris/

How Skills Work

Skills are markdown files with YAML frontmatter that Claude Code loads automatically. When you type /boris or ask about related topics, Claude surfaces this knowledge to help you. Skills can be user-invocable (slash commands) or auto-surfaced based on semantic matching.

claude-cli connected
opus-4.6 · thinking
visitor count
HowBorisUsesClaudeCode.com