diff --git a/README.md b/README.md index d4e4f0c..2d80e59 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # claude-code-best-practice practice makes claude perfect -![Last Updated](https://img.shields.io/badge/Last_Updated-Mar%2012%2C%202026%2006%3A29%20PM%20PKT-white?style=flat&labelColor=555) GitHub Stars +![Last Updated](https://img.shields.io/badge/Last_Updated-Mar%2013%2C%202026%2001%3A27%20PM%20PKT-white?style=flat&labelColor=555) GitHub Stars [![Best Practice](!/tags/best-practice.svg)](best-practice/) *Click on this badge to show the latest best practice*
[![Implemented](!/tags/implemented.svg)](implementation/) *Click on this badge to show implementation in this repo*
@@ -138,7 +138,7 @@ claude - use a [cross-model](development-workflows/cross-model-workflow/cross-model-workflow.md) for QA — e.g. [Codex](https://github.com/shanraisshan/codex-cli-best-practice) for plan and implementation review ■ **Utilities (5)** -- [iTerm](https://iterm2.com/)/[Ghostty](https://ghostty.org/)/[tmux](https://github.com/tmux/tmux) terminals instead of IDE ([VS Code](https://code.visualstudio.com/)/[Cursor](https://www.cursor.com/)) +- [iTerm](https://iterm2.com/)/[Ghostty](https://ghostty.org/) ([Boris tweet](https://x.com/bcherny/status/2017742753971769626))/[tmux](https://github.com/tmux/tmux) terminals instead of IDE ([VS Code](https://code.visualstudio.com/)/[Cursor](https://www.cursor.com/)) - [Wispr Flow](https://wisprflow.ai) for voice prompting (10x productivity) - [claude-code-voice-hooks](https://github.com/shanraisshan/claude-code-voice-hooks) for claude feedback - [status line](https://github.com/shanraisshan/claude-code-status-line) for context awareness and fast compacting diff --git a/reports/claude-agent-command-skill.md b/reports/claude-agent-command-skill.md index a8ef19a..3ce58f0 100644 --- a/reports/claude-agent-command-skill.md +++ b/reports/claude-agent-command-skill.md @@ -50,17 +50,15 @@ A comparison of the three extension mechanisms in Claude Code: subagents, comman - You need a **user-initiated entry point** — a workflow the user explicitly triggers - The workflow involves **orchestrating** other agents or skills -- You want **dynamic context injection** (`` !`git diff` ``, `` !`gh issue view $0` ``) to pull live data into the prompt -- The task should run **inline** in the main conversation so the user sees everything +- You want to **keep context lean** — command content is not injected into the session context until the user triggers it **Example**: `weather-orchestrator` — the user triggers it, it asks for C/F preference, invokes the agent, then invokes the SVG skill. ### Use a Skill when: -- You want **Claude to auto-invoke** based on user intent (semantic matching via `description`) +- You want **Claude to auto-invoke** based on user intent — skill descriptions are injected into the session context for semantic matching - The task is a **reusable procedure** that can be invoked from multiple places (commands, agents, or Claude itself) - You need **agent preloading** — baking domain knowledge into a specific agent at startup -- The task is **lightweight** and doesn't need a separate context window **Example**: `weather-svg-creator` — Claude auto-invokes it when the user asks for a weather card; also callable from commands. diff --git a/tips/assets/boris-feb-26/0.webp b/tips/assets/boris-12-feb-26/0.webp similarity index 100% rename from tips/assets/boris-feb-26/0.webp rename to tips/assets/boris-12-feb-26/0.webp diff --git a/tips/assets/boris-feb-26/1.webp b/tips/assets/boris-12-feb-26/1.webp similarity index 100% rename from tips/assets/boris-feb-26/1.webp rename to tips/assets/boris-12-feb-26/1.webp diff --git a/tips/assets/boris-feb-26/10.webp b/tips/assets/boris-12-feb-26/10.webp similarity index 100% rename from tips/assets/boris-feb-26/10.webp rename to tips/assets/boris-12-feb-26/10.webp diff --git a/tips/assets/boris-feb-26/11.webp b/tips/assets/boris-12-feb-26/11.webp similarity index 100% rename from tips/assets/boris-feb-26/11.webp rename to tips/assets/boris-12-feb-26/11.webp diff --git a/tips/assets/boris-feb-26/12.webp b/tips/assets/boris-12-feb-26/12.webp similarity index 100% rename from tips/assets/boris-feb-26/12.webp rename to tips/assets/boris-12-feb-26/12.webp diff --git a/tips/assets/boris-feb-26/2.webp b/tips/assets/boris-12-feb-26/2.webp similarity index 100% rename from tips/assets/boris-feb-26/2.webp rename to tips/assets/boris-12-feb-26/2.webp diff --git a/tips/assets/boris-feb-26/3.webp b/tips/assets/boris-12-feb-26/3.webp similarity index 100% rename from tips/assets/boris-feb-26/3.webp rename to tips/assets/boris-12-feb-26/3.webp diff --git a/tips/assets/boris-feb-26/4.webp b/tips/assets/boris-12-feb-26/4.webp similarity index 100% rename from tips/assets/boris-feb-26/4.webp rename to tips/assets/boris-12-feb-26/4.webp diff --git a/tips/assets/boris-feb-26/5.webp b/tips/assets/boris-12-feb-26/5.webp similarity index 100% rename from tips/assets/boris-feb-26/5.webp rename to tips/assets/boris-12-feb-26/5.webp diff --git a/tips/assets/boris-feb-26/6.webp b/tips/assets/boris-12-feb-26/6.webp similarity index 100% rename from tips/assets/boris-feb-26/6.webp rename to tips/assets/boris-12-feb-26/6.webp diff --git a/tips/assets/boris-feb-26/7.webp b/tips/assets/boris-12-feb-26/7.webp similarity index 100% rename from tips/assets/boris-feb-26/7.webp rename to tips/assets/boris-12-feb-26/7.webp diff --git a/tips/assets/boris-feb-26/8.webp b/tips/assets/boris-12-feb-26/8.webp similarity index 100% rename from tips/assets/boris-feb-26/8.webp rename to tips/assets/boris-12-feb-26/8.webp diff --git a/tips/assets/boris-feb-26/9.webp b/tips/assets/boris-12-feb-26/9.webp similarity index 100% rename from tips/assets/boris-feb-26/9.webp rename to tips/assets/boris-12-feb-26/9.webp diff --git a/tips/assets/boris-3-jan-26/11.png b/tips/assets/boris-3-jan-26/11.png index aba83f3..b3a3e29 100644 Binary files a/tips/assets/boris-3-jan-26/11.png and b/tips/assets/boris-3-jan-26/11.png differ diff --git a/tips/assets/boris-3-jan-26/12.png b/tips/assets/boris-3-jan-26/12.png index eb86000..52f544f 100644 Binary files a/tips/assets/boris-3-jan-26/12.png and b/tips/assets/boris-3-jan-26/12.png differ diff --git a/tips/assets/boris-3-jan-26/13.png b/tips/assets/boris-3-jan-26/13.png index 723a07f..651b2e6 100644 Binary files a/tips/assets/boris-3-jan-26/13.png and b/tips/assets/boris-3-jan-26/13.png differ diff --git a/tips/assets/boris-3-jan-26/2.png b/tips/assets/boris-3-jan-26/2.png index 60b01c2..948399a 100644 Binary files a/tips/assets/boris-3-jan-26/2.png and b/tips/assets/boris-3-jan-26/2.png differ diff --git a/tips/assets/boris-3-jan-26/4.png b/tips/assets/boris-3-jan-26/4.png index c030638..77b5557 100644 Binary files a/tips/assets/boris-3-jan-26/4.png and b/tips/assets/boris-3-jan-26/4.png differ diff --git a/tips/assets/boris-3-jan-26/6.png b/tips/assets/boris-3-jan-26/6.png index 75fa242..02762a9 100644 Binary files a/tips/assets/boris-3-jan-26/6.png and b/tips/assets/boris-3-jan-26/6.png differ diff --git a/tips/assets/boris-3-jan-26/7.png b/tips/assets/boris-3-jan-26/7.png index b266c65..ac76330 100644 Binary files a/tips/assets/boris-3-jan-26/7.png and b/tips/assets/boris-3-jan-26/7.png differ diff --git a/tips/assets/boris-3-jan-26/8.png b/tips/assets/boris-3-jan-26/8.png index 1f91479..0465a88 100644 Binary files a/tips/assets/boris-3-jan-26/8.png and b/tips/assets/boris-3-jan-26/8.png differ diff --git a/tips/claude-boris-12-tips-12-feb-26.md b/tips/claude-boris-12-tips-12-feb-26.md index 89a4f7f..563eb3f 100644 --- a/tips/claude-boris-12-tips-12-feb-26.md +++ b/tips/claude-boris-12-tips-12-feb-26.md @@ -15,7 +15,7 @@ A summary of customization tips shared by Boris Cherny ([@bcherny](https://x.com Boris Cherny highlighted that customizability is one of the things engineers love most about Claude Code — hooks, plugins, LSPs, MCPs, skills, effort, custom agents, status lines, output styles, and more. He shared 12 practical ways developers and teams are customizing their setups. -Boris Cherny intro tweet +Boris Cherny intro tweet --- @@ -28,7 +28,7 @@ Set up your terminal for the best Claude Code experience: - **Newlines**: If using 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` -Configure your terminal +Configure your terminal --- @@ -42,7 +42,7 @@ Run `/model` to pick your preferred effort level: Boris's preference: High for everything. -Adjust effort level +Adjust effort level --- @@ -54,7 +54,7 @@ Install from the official Anthropic plugin marketplace, or create your own marke Run `/plugin` to get started. -Install Plugins, MCPs, and Skills +Install Plugins, MCPs, and Skills --- @@ -66,7 +66,7 @@ You can also set the default agent for the main conversation using the `"agent"` Run `/agents` to get started. -Create custom agents +Create custom agents --- @@ -78,7 +78,7 @@ Out of the box, a small set of safe commands are pre-approved. To pre-approve mo Full wildcard syntax is supported — e.g., `Bash(bun run *)` or `Edit(/docs/**)`. -Pre-approve common permissions +Pre-approve common permissions --- @@ -88,7 +88,7 @@ Opt into Claude Code's open source sandbox runtime to improve safety while reduc Run `/sandbox` to enable it. Sandboxing runs on your machine and supports both file and network isolation. -Enable sandboxing +Enable sandboxing --- @@ -98,7 +98,7 @@ Custom status lines show up right below the composer, displaying model, director Every team member can have a different statusline. Use `/statusline` to have Claude generate one based on your `.bashrc`/`.zshrc`. -Add a status line +Add a status line --- @@ -106,7 +106,7 @@ Every team member can have a different statusline. Use `/statusline` to have Cla 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. -Customize your keybindings +Customize your keybindings --- @@ -120,7 +120,7 @@ Hooks let you deterministically hook into Claude's lifecycle: Ask Claude to add a hook to get started. -Set up hooks +Set up hooks --- @@ -128,7 +128,7 @@ Ask Claude to add a hook to get started. 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. -Customize your spinner verbs +Customize your spinner verbs --- @@ -140,7 +140,7 @@ Run `/config` and set an output style to have Claude respond using a different t - **Learning** — to have Claude coach you through making code changes - **Custom** — create custom output styles to adjust Claude's voice -Use output styles +Use output styles --- @@ -155,7 +155,7 @@ Claude Code works great out of the box, but when you do customize, check your `s With 37 settings and 84 environment variables (use the `"env"` field in your `settings.json` to avoid wrapper scripts), there's a good chance any behavior you want is configurable. -Customize all the things +Customize all the things --- diff --git a/tips/claude-boris-13-tips-03-jan-26.md b/tips/claude-boris-13-tips-03-jan-26.md index 6d013dd..2202065 100644 --- a/tips/claude-boris-13-tips-03-jan-26.md +++ b/tips/claude-boris-13-tips-03-jan-26.md @@ -15,7 +15,7 @@ A summary of setup tips shared by Boris Cherny ([@bcherny](https://x.com/bcherny Boris shared his personal Claude Code setup, noting it's "surprisingly vanilla" — Claude Code works great out of the box, so he doesn't customize it much. There's no one correct way to use it: the team intentionally builds it so you can use, customize, and hack it however you like. Each person on the Claude Code team uses it very differently. -Boris Cherny intro tweet +Boris Cherny intro tweet --- @@ -25,7 +25,7 @@ Run 5 Claudes in parallel in your terminal. Number your tabs 1–5, and use syst See: [Terminal Setup Docs](https://code.claude.com/docs/en/terminal) -Run 5 Claudes in parallel +Run 5 Claudes in parallel --- @@ -33,7 +33,7 @@ See: [Terminal Setup Docs](https://code.claude.com/docs/en/terminal) Run 5–10 Claudes on claude.ai/code in parallel with your local Claudes. Hand off local sessions to web sessions using `claude.ai/code`, manually kick off sessions in Chrome, and teleport back and forth. -claude.ai/code parallelism +claude.ai/code parallelism --- @@ -41,7 +41,7 @@ Run 5–10 Claudes on claude.ai/code in parallel with your local Claudes. Hand o Use Opus 4.5 with thinking for everything. It's the best coding model Boris has ever used — even though it's bigger and 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. -Opus with thinking +Opus with thinking --- @@ -49,7 +49,7 @@ Use Opus 4.5 with thinking for everything. It's the best coding model Boris has Share a single `CLAUDE.md` for the repo. Check it into git, and have the whole team contribute multiple times a week. Anytime Claude does something incorrectly, add it to the `CLAUDE.md` so Claude knows not to do it next time. -Shared CLAUDE.md +Shared CLAUDE.md --- @@ -57,7 +57,7 @@ Share a single `CLAUDE.md` for the repo. Check it into git, and have the whole t During code review, tag `@claude` on your coworkers' PRs to add something to the `CLAUDE.md` as part of the PR. Use the Claude Code GitHub action ([install-@hub-action](https://github.com/apps/claude)) for this — it's Boris's version of Compounding Engineering. -Tag @claude on PRs +Tag @claude on PRs --- @@ -65,7 +65,7 @@ During code review, tag `@claude` on your coworkers' PRs to add something to the Start most sessions in Plan mode (shift+tab twice). If the goal is to write a Pull Request, use Plan mode and go back and forth with Claude until you like its plan. From there, switch into auto-accept edits mode and Claude can usually 1-shot it. A good plan is really important. -Plan mode +Plan mode --- @@ -75,7 +75,7 @@ Use slash commands for every "inner loop" workflow that you do many times a day. Example: `/commit-push-pr` — Commit, push, and open a PR. -Slash commands +Slash commands --- @@ -85,7 +85,7 @@ Use a few subagents regularly: `code-simplifier` simplifies the code after Claud Subagents live in `.claude/agents/`. -Subagents +Subagents --- @@ -107,7 +107,7 @@ Use a `PostToolUse` hook to format Claude's code. Claude usually generates well- ] ``` -PostToolUse hook for formatting +PostToolUse hook for formatting --- @@ -115,7 +115,7 @@ Use a `PostToolUse` hook to format Claude's code. Claude usually generates well- Don't use `--dangerously-skip-permissions`. Instead, use `/permissions` to pre-allow common bash commands that you know are safe in your environment, to avoid unnecessary permission prompts. Most of these are checked into `.claude/settings.json` and shared with the team. -Pre-allow permissions +Pre-allow permissions --- @@ -123,7 +123,7 @@ Don't use `--dangerously-skip-permissions`. Instead, use `/permissions` to pre-a Claude Code uses all your tools. It often searches and posts to Slack (via the MCP server), runs BigQuery queries to answer analytics questions (using `bq` CLI), grabs error logs from Sentry, etc. The Slack MCP configuration is checked into `.mcp.json` and shared with the team. -MCP tools +MCP tools --- @@ -131,7 +131,7 @@ Claude Code uses all your tools. It often searches and posts to Slack (via the M For very long-running tasks, either (a) prompt Claude to verify its work with a background agent when it's done, (b) use an agent Stop hook to do that more deterministically, or (c) use the ralph-wiggum plugin (originally dreamt up by @GeoffreyHuntley). -Long-running tasks verification +Long-running tasks verification --- @@ -141,7 +141,7 @@ Probably the most important thing to get great results out of Claude Code — gi Claude tests every single change Boris lands. -Give Claude a way to verify +Give Claude a way to verify ---