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
- Perform manual `/compact` at ~50% context usage
- 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
### Debugging Tips
+9 -9
View File
@@ -1,7 +1,7 @@
# claude-code-best-practice
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>
[![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` |
| [**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) |
| [**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 |
@@ -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>
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">
<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) |
| **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 WORKFLOW
- [RPI](workflow/rpi/rpi-workflow.md) [![Implemented](!/tags/implemented.svg)](workflow/rpi/rpi-workflow.md)
## DEVELOPMENT WORKFLOWS
- [RPI](development-workflows/rpi/rpi-workflow.md) [![Implemented](!/tags/implemented.svg)](development-workflows/rpi/rpi-workflow.md)
- [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)
- [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
- 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)
- [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)
- [Seeing like an Agent - lessons from building Claude Code (Thariq) | 28 Feb 2026]() ● [Article](https://x.com/trq212/status/2027463795355095314)
## 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
```
┌─────────────────────────────────────────────────┐
│ User Interaction │
└─────────────────────────────────────────────────┘
───────────────────────────┐
│ /weather-orchestrator
│ Command │
(Entry point)
└───────────────────────────┘
┌─────────────┤
│ │
┌──────────────┐ │
│ AskUser │
│ C° or F°? │ │
──────────────┘ │
▼ │
Step 2: Task tool
│ │
┌───────────────────────────┐
│ weather-agent │
Agent
│ │
│ preloaded skill:
│ - weather-fetcher │
└───────────────────────────┘
│ Returns: temperature + unit
Step 3: Skill tool
┌───────────────────────────┐
│ weather-svg-creator
│ Skill │
│ │
│ Creates SVG card
│ Writes output files │
└───────────────────────────┘
┌────────┴────────┐
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ weather.svg │ │ output.md │
└──────────────────┘ └──────────────────┘
┌───────────────────────────┐
│ Display Summary │
│ to User │
└───────────────────────────┘
╔══════════════════════════════════════════════════════════════════╗
║ ORCHESTRATION WORKFLOW ║
║ Command → Agent → Skill ║
╚══════════════════════════════════════════════════════════════════╝
┌───────────────────┐
│ User Interaction
└─────────┬─────────┘
┌─────────────────────────────────────────────────────┐
│ /weather-orchestrator — Command (Entry Point) │
└─────────────────────────┬───────────────────────────┘
Step 1
────────────────────────┐
AskUser — C° or F°?
└────────────┬───────────┘
Step 2 — Task tool
┌─────────────────────────────────────────────────────┐
weather-agent — Agent ● skill: weather-fetcher
└─────────────────────────┬───────────────────────────┘
Returns: temp + unit
Step 3 — Skill tool
┌─────────────────────────────────────────────────────┐
│ weather-svg-creator — Skill ● SVG card + output │
└─────────────────────────┬───────────────────────────┘
┌────────────────┐
▼ ▼
┌────────────┐ ┌────────────┐
│weather.svg │ │ output.md
└────────────┘ └────────────┘
```
## Component Details
+1 -1
View File
@@ -1644,7 +1644,7 @@ managed-settings.json <span class="comment"># Organization policy (
<h1>Resources</h1>
<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">&#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">&#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>

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.
<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 `\`)
- **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.
<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.
<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.
<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/**)`.
<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.
<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`.
<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.
<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.
<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.
<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
- **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.
<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%" />
---