This commit is contained in:
Shayan Rais
2026-03-02 20:02:59 +05:00
parent db43e42605
commit 13874e6fda
33 changed files with 246 additions and 81 deletions
+17
View File
@@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" width="134" height="20" role="img" aria-label="Boris Cherny + Team">
<title>Boris Cherny + Team</title>
<linearGradient id="s" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<clipPath id="r">
<rect width="134" height="20" rx="3" fill="#fff"/>
</clipPath>
<g clip-path="url(#r)">
<rect width="134" height="20" fill="#3b82f6"/>
<rect width="134" height="20" fill="url(#s)"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="11">
<text x="67" y="14">Boris Cherny + Team</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 740 B

+1 -1
View File
@@ -93,7 +93,7 @@ From experience with this repository:
- Create feature-specific subagents with skills (progressive disclosure) rather than general-purpose agents - Create feature-specific subagents with skills (progressive disclosure) rather than general-purpose agents
- Perform manual `/compact` at ~50% context usage - Perform manual `/compact` at ~50% context usage
- Start with plan mode for complex tasks - Start with plan mode for complex tasks
- Use human-gated todo list workflow for multi-step tasks - Use human-gated task list workflow for multi-step tasks
- Break subtasks small enough to complete in under 50% context - Break subtasks small enough to complete in under 50% context
### Debugging Tips ### Debugging Tips
+9 -9
View File
@@ -1,7 +1,7 @@
# claude-code-best-practice # claude-code-best-practice
practice makes claude perfect practice makes claude perfect
![Last Updated](https://img.shields.io/badge/Last_Updated-Mar_02%2C_2026_07%3A15_PM_PKT-white?style=flat&labelColor=555) <a href="https://github.com/shanraisshan/claude-code-best-practice/stargazers"><img src="https://img.shields.io/github/stars/shanraisshan/claude-code-best-practice?style=flat&label=%E2%98%85&labelColor=555&color=white" alt="GitHub Stars"></a> ![Last Updated](https://img.shields.io/badge/Last_Updated-Mar_02%2C_2026_08%3A02_PM_PKT-white?style=flat&labelColor=555) <a href="https://github.com/shanraisshan/claude-code-best-practice/stargazers"><img src="https://img.shields.io/github/stars/shanraisshan/claude-code-best-practice?style=flat&label=%E2%98%85&labelColor=555&color=white" alt="GitHub Stars"></a>
[![Best Practice](!/tags/best-practice.svg)](best-practice/) *Click on this badge to show the latest best practice*<br> [![Best Practice](!/tags/best-practice.svg)](best-practice/) *Click on this badge to show the latest best practice*<br>
[![Implemented](!/tags/implemented.svg)](implementation/) *Click on this badge to show implementation in this repo*<br> [![Implemented](!/tags/implemented.svg)](implementation/) *Click on this badge to show implementation in this repo*<br>
@@ -23,7 +23,7 @@ practice makes claude perfect
|---------|----------|-------------| |---------|----------|-------------|
| [**Commands**](https://code.claude.com/docs/en/skills) | `.claude/commands/<name>.md` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-commands.md) [![Implemented](!/tags/implemented.svg)](implementation/claude-commands-implementation.md) Entry-point prompts for workflows — invoke with `/command-name` | | [**Commands**](https://code.claude.com/docs/en/skills) | `.claude/commands/<name>.md` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-commands.md) [![Implemented](!/tags/implemented.svg)](implementation/claude-commands-implementation.md) Entry-point prompts for workflows — invoke with `/command-name` |
| [**Sub-Agents**](https://code.claude.com/docs/en/sub-agents) | `.claude/agents/<name>.md` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-subagents.md) [![Implemented](!/tags/implemented.svg)](implementation/claude-subagents-implementation.md) Custom agents with their own name, color, tools, permissions, and model | | [**Sub-Agents**](https://code.claude.com/docs/en/sub-agents) | `.claude/agents/<name>.md` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-subagents.md) [![Implemented](!/tags/implemented.svg)](implementation/claude-subagents-implementation.md) Custom agents with their own name, color, tools, permissions, and model |
| [**Skills**](https://code.claude.com/docs/en/skills) | `.claude/skills/<name>/SKILL.md` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-commands.md#skills-frontmatter-fields) [![Implemented](!/tags/implemented.svg)](implementation/claude-skills-implementation.md) Reusable knowledge, workflows, and slash commands — load on-demand or invoke with `/skill-name` | | [**Skills**](https://code.claude.com/docs/en/skills) | `.claude/skills/<name>/SKILL.md` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-skills.md) [![Implemented](!/tags/implemented.svg)](implementation/claude-skills-implementation.md) Reusable knowledge, workflows, and slash commands — load on-demand or invoke with `/skill-name` |
| [**Workflows**](https://code.claude.com/docs/en/common-workflows) | [`.claude/commands/weather-orchestrator.md`](.claude/commands/weather-orchestrator.md) | [![Orchestration Workflow](!/tags/orchestration-workflow.svg)](orchestration-workflow/orchestration-workflow.md) | | [**Workflows**](https://code.claude.com/docs/en/common-workflows) | [`.claude/commands/weather-orchestrator.md`](.claude/commands/weather-orchestrator.md) | [![Orchestration Workflow](!/tags/orchestration-workflow.svg)](orchestration-workflow/orchestration-workflow.md) |
| [**Hooks**](https://code.claude.com/docs/en/hooks) | `.claude/hooks/` | [![Best Practice](!/tags/best-practice.svg)](https://github.com/shanraisshan/claude-code-voice-hooks) [![Implemented](!/tags/implemented.svg)](.claude/hooks/) Deterministic scripts that run outside the agentic loop on specific events | | [**Hooks**](https://code.claude.com/docs/en/hooks) | `.claude/hooks/` | [![Best Practice](!/tags/best-practice.svg)](https://github.com/shanraisshan/claude-code-voice-hooks) [![Implemented](!/tags/implemented.svg)](.claude/hooks/) Deterministic scripts that run outside the agentic loop on specific events |
| [**MCP Servers**](https://code.claude.com/docs/en/mcp) | `.claude/settings.json`, `.mcp.json` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-mcp.md) [![Implemented](!/tags/implemented.svg)](.mcp.json) Model Context Protocol connections to external tools, databases, and APIs | | [**MCP Servers**](https://code.claude.com/docs/en/mcp) | `.claude/settings.json`, `.mcp.json` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-mcp.md) [![Implemented](!/tags/implemented.svg)](.mcp.json) Model Context Protocol connections to external tools, databases, and APIs |
@@ -49,7 +49,8 @@ practice makes claude perfect
## <a href="orchestration-workflow/orchestration-workflow.md"><img src="!/tags/orchestration-workflow-hd.svg" alt="Orchestration Workflow"></a> ## <a href="orchestration-workflow/orchestration-workflow.md"><img src="!/tags/orchestration-workflow-hd.svg" alt="Orchestration Workflow"></a>
Workflow orchestration using the **Command → Agent → Skill** pattern. See [orchestration-workflow](orchestration-workflow/orchestration-workflow.md) for implementation details of **Command → Agent → Skill** pattern.
<p align="center"> <p align="center">
<img src="!/command-skill-agent-flow.svg" alt="Command Skill Agent Architecture Flow" width="100%"> <img src="!/command-skill-agent-flow.svg" alt="Command Skill Agent Architecture Flow" width="100%">
@@ -61,10 +62,8 @@ Workflow orchestration using the **Command → Agent → Skill** pattern.
| **Agent** | Fetches data with preloaded skill (agent skill) | [`weather-agent`](.claude/agents/weather-agent.md) with [`weather-fetcher`](.claude/skills/weather-fetcher/SKILL.md) | | **Agent** | Fetches data with preloaded skill (agent skill) | [`weather-agent`](.claude/agents/weather-agent.md) with [`weather-fetcher`](.claude/skills/weather-fetcher/SKILL.md) |
| **Skill** | Creates output independently (skill) | [`weather-svg-creator`](.claude/skills/weather-svg-creator/SKILL.md) | | **Skill** | Creates output independently (skill) | [`weather-svg-creator`](.claude/skills/weather-svg-creator/SKILL.md) |
See [orchestration-workflow](orchestration-workflow/orchestration-workflow.md) for implementation details. ## DEVELOPMENT WORKFLOWS
- [RPI](development-workflows/rpi/rpi-workflow.md) [![Implemented](!/tags/implemented.svg)](development-workflows/rpi/rpi-workflow.md)
## DEVELOPMENT WORKFLOW
- [RPI](workflow/rpi/rpi-workflow.md) [![Implemented](!/tags/implemented.svg)](workflow/rpi/rpi-workflow.md)
- [Boris Feb26 workflow](https://x.com/bcherny/status/2017742741636321619) - [Boris Feb26 workflow](https://x.com/bcherny/status/2017742741636321619)
- [Ralph plugin with sandbox](https://www.youtube.com/watch?v=eAtvoGlpeRU) [![Implemented](!/tags/implemented.svg)](https://github.com/shanraisshan/novel-llm-26) - [Ralph plugin with sandbox](https://www.youtube.com/watch?v=eAtvoGlpeRU) [![Implemented](!/tags/implemented.svg)](https://github.com/shanraisshan/novel-llm-26)
- [Human Layer RPI - Research Plan Implement](https://github.com/humanlayer/advanced-context-engineering-for-coding-agents/blob/main/ace-fca.md) - [Human Layer RPI - Research Plan Implement](https://github.com/humanlayer/advanced-context-engineering-for-coding-agents/blob/main/ace-fca.md)
@@ -107,12 +106,13 @@ See [orchestration-workflow](orchestration-workflow/orchestration-workflow.md) f
- use mcp ([Claude in Chrome](https://code.claude.com/docs/en/chrome), [Playwright](https://github.com/microsoft/playwright-mcp), [Chrome DevTools](https://developer.chrome.com/blog/chrome-devtools-mcp)) to let claude see chrome console logs on its own - use mcp ([Claude in Chrome](https://code.claude.com/docs/en/chrome), [Playwright](https://github.com/microsoft/playwright-mcp), [Chrome DevTools](https://developer.chrome.com/blog/chrome-devtools-mcp)) to let claude see chrome console logs on its own
- provide screenshots of the issue - provide screenshots of the issue
![Boris Cherny](!/tags/boris-cherny.svg) ![Boris Cherny + Team](!/tags/boris-team.svg)
- [Boris setup - 5 tips | 03/Jan/26]() ● [Tweet](https://x.com/bcherny/status/2007179832300581177) - [Boris setup - 5 tips | 03/Jan/26]() ● [Tweet](https://x.com/bcherny/status/2007179832300581177)
- [10 tips for using claude code by team itself | 01/Feb/26]() ● [Tweet](https://x.com/bcherny/status/2017742741636321619) - [10 tips for using claude code by team itself | 01/Feb/26]() ● [Tweet](https://x.com/bcherny/status/2017742741636321619)
- [12 ways how people are customizing their claudes | 12/Feb/26](reports/claude-boris-tips-feb-26.md) ● [Tweet](https://x.com/bcherny/status/2021699851499798911) - [12 ways how people are customizing their claudes | 12/Feb/26](tips/claude-boris-tips-feb-26.md) ● [Tweet](https://x.com/bcherny/status/2021699851499798911)
- [Git Worktrees - 5 ways how boris is using | 21 Feb 2026]() ● [Tweet](https://x.com/bcherny/status/2025007393290272904) - [Git Worktrees - 5 ways how boris is using | 21 Feb 2026]() ● [Tweet](https://x.com/bcherny/status/2025007393290272904)
- [Seeing like an Agent - lessons from building Claude Code (Thariq) | 28 Feb 2026]() ● [Article](https://x.com/trq212/status/2027463795355095314)
## REPORTS ## REPORTS
+162
View File
@@ -0,0 +1,162 @@
# Skills Best Practice
![Last Updated](https://img.shields.io/badge/Last_Updated-Mar_2%2C_2026-white?style=flat&labelColor=555)<br>
[![Implemented](https://img.shields.io/badge/Implemented-2ea44f?style=flat)](../implementation/claude-skills-implementation.md)
Complete reference for Claude Code skills — skill definitions, frontmatter fields, and invocation patterns.
<table width="100%">
<tr>
<td><a href="../">← Back to Claude Code Best Practice</a></td>
<td align="right"><img src="../!/claude-jumping.svg" alt="Claude" width="60" /></td>
</tr>
</table>
---
## Frontmatter Fields
Skills are defined in `.claude/skills/<name>/SKILL.md` with optional YAML frontmatter.
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | Recommended | Display name and `/slash-command` identifier. Defaults to the directory name if omitted |
| `description` | string | Recommended | What the skill does. Shown in autocomplete and used by Claude for auto-discovery |
| `argument-hint` | string | No | Hint shown during autocomplete (e.g., `[issue-number]`, `[filename]`) |
| `disable-model-invocation` | boolean | No | Set `true` to prevent Claude from automatically invoking this skill |
| `user-invocable` | boolean | No | Set `false` to hide from the `/` menu — skill becomes background knowledge only, intended for agent preloading |
| `allowed-tools` | string | No | Tools allowed without permission prompts when this skill is active |
| `model` | string | No | Model to use when this skill runs (e.g., `haiku`, `sonnet`, `opus`) |
| `context` | string | No | Set to `fork` to run the skill in an isolated subagent context |
| `agent` | string | No | Subagent type when `context: fork` is set (default: `general-purpose`) |
| `hooks` | object | No | Lifecycle hooks scoped to this skill |
---
## Two Skill Patterns
| Pattern | Loading | Invocation | Use Case |
|---------|---------|-----------|----------|
| **Skill** | On-demand | `/skill-name` or `Skill(skill: "name")` tool | Standalone reusable workflows invoked by commands or Claude |
| **Agent Skill** | Preloaded at agent startup via `skills:` field | Automatic — full content injected into agent context | Domain knowledge or procedures baked into a specific agent |
---
## String Substitutions
Available inside skill markdown for dynamic values:
| Variable | Description |
|----------|-------------|
| `$ARGUMENTS` | All arguments passed when invoking the skill |
| `$ARGUMENTS[N]` | Access a specific argument by 0-based index |
| `$N` | Shorthand for `$ARGUMENTS[N]` (e.g., `$0`, `$1`) |
| `${CLAUDE_SESSION_ID}` | Current session identifier |
| `` !`command` `` | Dynamic context injection — shell command output replaces the placeholder before Claude sees it |
---
## Invocation
| Method | Description |
|--------|-------------|
| `/skill-name` | Invoke directly from the slash command menu |
| `/skill-name [args]` | Pass arguments that map to `$ARGUMENTS` |
| `Skill(skill: "name")` | Programmatic invocation via the Skill tool (used in commands and agents) |
| `skills: [name]` in agent frontmatter | Preload into an agent — full skill content injected at startup, not invoked on-demand |
| Subdirectories | Skills in subdirectories use `/subdir:skill-name` |
---
## Example: Minimal Skill
```yaml
---
description: Summarize staged changes into a concise changelog entry
---
Summarize the git diff in context into a one-paragraph changelog entry,
focusing on what changed and why.
```
## Example: Minimal Agent Skill
A skill preloaded into an agent as background knowledge — hidden from the `/` menu:
```yaml
---
name: deploy-checklist
description: Pre-flight deployment checks for production releases
user-invocable: false
---
# Deploy Checklist
Before any production deployment:
1. Run all tests: `npm test`
2. Check for uncommitted changes: `git status`
3. Verify environment variables are set
4. Confirm database migrations are ready
```
## Example: Full-Featured Skill (All Fields)
```yaml
---
name: code-review
description: Review code for quality, security, and performance issues
argument-hint: [file-path]
allowed-tools: Read, Grep, Glob
model: sonnet
context: fork
agent: general-purpose
hooks:
Stop:
- hooks:
- type: command
command: "./scripts/log-review-complete.sh"
---
Review the code at $0.
## Checklist
- [ ] Security: injection, XSS, hardcoded secrets
- [ ] Performance: N+1 queries, unnecessary loops
- [ ] Quality: naming, complexity, test coverage
- [ ] Error handling: edge cases, failure modes
```
---
## Scope and Priority
When multiple skills share the same name, the higher-priority location wins:
| Location | Scope | Priority |
|----------|-------|----------|
| Project (`.claude/skills/`) | This project only | 1 (highest) |
| Personal (`~/.claude/skills/`) | All your projects | 2 |
| Plugin (`<plugin>/skills/`) | Where plugin is enabled | 3 (lowest) |
---
## Skills in This Repository
Skills defined in `.claude/skills/` for this project:
| Skill | User-Invocable | Preloaded Into | Description |
|-------|----------------|----------------|-------------|
| [`weather-svg-creator`](../.claude/skills/weather-svg-creator/SKILL.md) | Yes | — | Creates SVG weather card and writes output files |
| [`weather-fetcher`](../.claude/skills/weather-fetcher/SKILL.md) | No | `weather-agent` | Fetches current temperature from wttr.in API |
| [`agent-browser`](../.claude/skills/agent-browser/SKILL.md) | Yes | — | Browser automation CLI for AI agents |
| [`presentation/vibe-to-agentic-framework`](../.claude/skills/presentation/vibe-to-agentic-framework/SKILL.md) | Yes | `presentation-curator` | Conceptual framework behind the presentation |
| [`presentation/presentation-structure`](../.claude/skills/presentation/presentation-structure/SKILL.md) | Yes | `presentation-curator` | Slide format, weight system, and section structure |
| [`presentation/presentation-styling`](../.claude/skills/presentation/presentation-styling/SKILL.md) | Yes | `presentation-curator` | CSS classes, component patterns, and syntax highlighting |
---
## Sources
- [Claude Code Skills — Docs](https://code.claude.com/docs/en/skills)
- [Skills Discovery in Monorepos](../reports/claude-skills-for-larger-mono-repos.md)
- [Claude Code CHANGELOG](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md)

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

@@ -23,63 +23,49 @@ This showcases the **Command → Agent → Skill** architecture pattern, where:
## Flow Diagram ## Flow Diagram
``` ```
┌─────────────────────────────────────────────────┐ ╔══════════════════════════════════════════════════════════════════╗
│ User Interaction │ ║ ORCHESTRATION WORKFLOW ║
└─────────────────────────────────────────────────┘ ║ Command → Agent → Skill ║
╚══════════════════════════════════════════════════════════════════╝
───────────────────────────┐ ┌───────────────────┐
│ /weather-orchestrator │ User Interaction
│ Command │ └─────────┬─────────┘
(Entry point)
└───────────────────────────┘
┌─────────────────────────────────────────────────────┐
┌─────────────┤ │ /weather-orchestrator — Command (Entry Point) │
│ │ └─────────────────────────┬───────────────────────────┘
┌──────────────┐ │ Step 1
│ AskUser │
│ C° or F°? │ │
──────────────┘ │ ────────────────────────┐
AskUser — C° or F°?
▼ │ └────────────┬───────────┘
Step 2: Task tool
│ │ Step 2 — Task tool
┌───────────────────────────┐
│ weather-agent │ ┌─────────────────────────────────────────────────────┐
Agent weather-agent — Agent ● skill: weather-fetcher
│ │ └─────────────────────────┬───────────────────────────┘
│ preloaded skill:
│ - weather-fetcher │ Returns: temp + unit
└───────────────────────────┘
Step 3 — Skill tool
│ Returns: temperature + unit
┌─────────────────────────────────────────────────────┐
Step 3: Skill tool │ weather-svg-creator — Skill ● SVG card + output │
└─────────────────────────┬───────────────────────────┘
┌───────────────────────────┐ ┌────────────────┐
│ weather-svg-creator
│ Skill │ ▼ ▼
│ │ ┌────────────┐ ┌────────────┐
│ Creates SVG card │weather.svg │ │ output.md
│ Writes output files │ └────────────┘ └────────────┘
└───────────────────────────┘
┌────────┴────────┐
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ weather.svg │ │ output.md │
└──────────────────┘ └──────────────────┘
┌───────────────────────────┐
│ Display Summary │
│ to User │
└───────────────────────────┘
``` ```
## Component Details ## Component Details
+1 -1
View File
@@ -1644,7 +1644,7 @@ managed-settings.json <span class="comment"># Organization policy (
<h1>Resources</h1> <h1>Resources</h1>
<div class="use-cases"> <div class="use-cases">
<div class="use-case-item"><span class="use-case-icon">&#128214;</span><div class="use-case-text"><strong>Claude Code Docs</strong><span>code.claude.com/docs/en</span></div></div> <div class="use-case-item"><span class="use-case-icon">&#128214;</span><div class="use-case-text"><strong>Claude Code Docs</strong><span>code.claude.com/docs/en</span></div></div>
<div class="use-case-item"><span class="use-case-icon">&#128161;</span><div class="use-case-text"><strong>Boris Cherny's 12 Tips</strong><span>reports/claude-boris-tips-feb-26.md</span></div></div> <div class="use-case-item"><span class="use-case-icon">&#128161;</span><div class="use-case-text"><strong>Boris Cherny's 12 Tips</strong><span>tips/claude-boris-tips-feb-26.md</span></div></div>
<div class="use-case-item"><span class="use-case-icon">&#127959;</span><div class="use-case-text"><strong>This Repository</strong><span>Working examples of skills, agents, hooks, and the Command &rarr; Agent &rarr; Skills pattern</span></div></div> <div class="use-case-item"><span class="use-case-icon">&#127959;</span><div class="use-case-text"><strong>This Repository</strong><span>Working examples of skills, agents, hooks, and the Command &rarr; Agent &rarr; Skills pattern</span></div></div>
<div class="use-case-item"><span class="use-case-icon">&#128295;</span><div class="use-case-text"><strong>Claude Code Voice Hooks</strong><span>github.com/shanraisshan/claude-code-voice-hooks</span></div></div> <div class="use-case-item"><span class="use-case-icon">&#128295;</span><div class="use-case-text"><strong>Claude Code Voice Hooks</strong><span>github.com/shanraisshan/claude-code-voice-hooks</span></div></div>
</div> </div>

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 122 KiB

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 99 KiB

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 77 KiB

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

@@ -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 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.
<img src="assets/boris/0.webp" alt="Boris Cherny intro tweet" width="50%" /> <img src="assets/boris-feb-26/0.webp" alt="Boris Cherny intro tweet" width="50%" />
--- ---
@@ -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 `\`) - **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` - **Vim mode**: Run `/vim`
<img src="assets/boris/1.webp" alt="Configure your terminal" width="50%" /> <img src="assets/boris-feb-26/1.webp" alt="Configure your terminal" width="50%" />
--- ---
@@ -42,7 +42,7 @@ Run `/model` to pick your preferred effort level:
Boris's preference: High for everything. Boris's preference: High for everything.
<img src="assets/boris/2.webp" alt="Adjust effort level" width="50%" /> <img src="assets/boris-feb-26/2.webp" alt="Adjust effort level" width="50%" />
--- ---
@@ -54,7 +54,7 @@ Install from the official Anthropic plugin marketplace, or create your own marke
Run `/plugin` to get started. Run `/plugin` to get started.
<img src="assets/boris/3.webp" alt="Install Plugins, MCPs, and Skills" width="50%" /> <img src="assets/boris-feb-26/3.webp" alt="Install Plugins, MCPs, and Skills" width="50%" />
--- ---
@@ -66,7 +66,7 @@ You can also set the default agent for the main conversation using the `"agent"`
Run `/agents` to get started. Run `/agents` to get started.
<img src="assets/boris/4.webp" alt="Create custom agents" width="50%" /> <img src="assets/boris-feb-26/4.webp" alt="Create custom agents" width="50%" />
--- ---
@@ -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/**)`. Full wildcard syntax is supported — e.g., `Bash(bun run *)` or `Edit(/docs/**)`.
<img src="assets/boris/5.webp" alt="Pre-approve common permissions" width="50%" /> <img src="assets/boris-feb-26/5.webp" alt="Pre-approve common permissions" width="50%" />
--- ---
@@ -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. Run `/sandbox` to enable it. Sandboxing runs on your machine and supports both file and network isolation.
<img src="assets/boris/6.webp" alt="Enable sandboxing" width="50%" /> <img src="assets/boris-feb-26/6.webp" alt="Enable sandboxing" width="50%" />
--- ---
@@ -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`. Every team member can have a different statusline. Use `/statusline` to have Claude generate one based on your `.bashrc`/`.zshrc`.
<img src="assets/boris/7.webp" alt="Add a status line" width="50%" /> <img src="assets/boris-feb-26/7.webp" alt="Add a status line" width="50%" />
--- ---
@@ -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. 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.
<img src="assets/boris/8.webp" alt="Customize your keybindings" width="50%" /> <img src="assets/boris-feb-26/8.webp" alt="Customize your keybindings" width="50%" />
--- ---
@@ -120,7 +120,7 @@ Hooks let you deterministically hook into Claude's lifecycle:
Ask Claude to add a hook to get started. Ask Claude to add a hook to get started.
<img src="assets/boris/9.webp" alt="Set up hooks" width="50%" /> <img src="assets/boris-feb-26/9.webp" alt="Set up hooks" width="50%" />
--- ---
@@ -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 to add or replace the default list with your own verbs. Check the `settings.json` into source control to share verbs with your team.
<img src="assets/boris/10.webp" alt="Customize your spinner verbs" width="50%" /> <img src="assets/boris-feb-26/10.webp" alt="Customize your spinner verbs" width="50%" />
--- ---
@@ -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 - **Learning** — to have Claude coach you through making code changes
- **Custom** — create custom output styles to adjust Claude's voice - **Custom** — create custom output styles to adjust Claude's voice
<img src="assets/boris/11.webp" alt="Use output styles" width="50%" /> <img src="assets/boris-feb-26/11.webp" alt="Use output styles" width="50%" />
--- ---
@@ -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. 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.
<img src="assets/boris/12.webp" alt="Customize all the things" width="50%" /> <img src="assets/boris-feb-26/12.webp" alt="Customize all the things" width="50%" />
--- ---