Claude Code 2.1.0 release: true permission wildcards, skill hot reload, and better Vim support
Contents
Claude Code 2.1.0 is here. The biggest improvement for me is real wildcard support in Bash permissions. Until now, permissions only supported prefix matching like Bash(npm run:*), so npm install still needed a separate rule. Now Bash(npm *) covers the whole family in one shot.
There is a lot more in this release too: hot reload for skills, major Vim expansions, agent fork support, and security improvements.
Bash permissions finally support true wildcards
Before 2.1.0, Claude Code permission settings only did prefix matching.
{
"permissions": {
"allow": ["Bash(npm run:*)"]
}
}
That allows npm run build, but npm install still needs another rule. As subcommands pile up, settings.local.json keeps growing.
What changed in 2.1.0
{
"permissions": {
"allow": ["Bash(npm *)"]
}
}
Now * works as a true wildcard. Anything starting with npm is allowed: run, install, update, exec, all of it.
A practical example
{
"permissions": {
"allow": [
"Bash(npm *)",
"Bash(pnpm *)",
"Bash(git *)",
"Bash(docker *)"
]
}
}
With a setup like that, most routine commands can run without hitting the Ask dialog. In my earlier article on Claude Code settings, I wrote that wildcards were not quite enough. In 2.1.0, that part improved a lot.
Skill hot reload
Anyone who has built custom Claude Code skills has probably run into this:
Edit a skill under
.claude/skills/-> restart Claude Code -> lose the flow of the conversation
That is fixed in 2.1.0.
How it works
Skills stored under ~/.claude/skills or .claude/skills are now synced in real time. Save the file and the new version is immediately available. No restart required.
Why it matters
| Before | Since 2.1.0 |
|---|---|
| Edit skill -> restart -> conversation reset | Edit skill -> use new version immediately |
| Frequent interruptions during testing | Continuous skill development |
| Slow iteration | Much faster iteration |
If you create and revise skills often, this probably saves hours over time.
Example
# example-skill.md
---
name: "Japanese -> English"
description: "A skill for translating text into English"
language: japanese
---
# Usage
Paste text and run it.
Target text: {text}
Edit .claude/skills/example-skill.md, save it, and the updated version is available immediately.
Note: This works for both global skills in
~/.claude/skillsand project-local skills in.claude/skills.
Agent execution now supports forks
If you set context: fork in a skill frontmatter block, the skill or slash command can run in a forked context.
How this differs from subagents
This is the important part. Compared with conventional subagents via the Task tool:
| Feature | Context behavior | Best use |
|---|---|---|
| Subagent | Does not inherit parent history | Delegate a specialized task to another agent |
context: fork | Copies parent history and branches from it | Do separate work with full awareness of the current context |
In practice, context: fork means:
- It can read the main conversation history
- Intermediate reasoning inside the skill does not clutter the main thread
- Only the result comes back
With subagents, you often had to restate the current situation explicitly in the prompt. A fork can already understand the ongoing context.
Example
---
name: "Code analysis"
context: fork
---
# Code analysis skill
Analyze the files discussed in the current conversation
and summarize possible improvements.
This looks especially useful for long analysis and research workflows.
/plan command and language setting
/plan was added
You can now enter plan mode immediately without typing a whole sentence like “please create a plan.”
/plan
-> enter plan mode immediately
Language can be specified
Skill frontmatter can now declare a language.
---
name: "Skill name"
language: "japanese"
---
That makes it easier to force responses into Japanese or another specific language in multilingual projects.
Other UX improvements
Shift+Enter now works across multiple terminals
It works out of the box in iTerm2, WezTerm, Ghostty, and Kitty. Previously, terminal-specific setup was often required.
Ctrl+O shows thinking in real time
You can view Extended Thinking live. That is useful when you want to understand what the model is doing during debugging.
Ctrl+B sends work to the background
Bash commands and agents can both be sent to the background with Ctrl+B, which makes parallel work easier.
Security improvements
Prevents secret exposure in debug logs
This is not flashy, but it matters. The release fixes a case where OAuth tokens, API keys, passwords, and similar sensitive data could be exposed intentionally in debug logs.
If you use Claude Code around security-sensitive work, this alone is worth taking.
Other bug fixes
- Files and skills not being detected when resuming a session
- Pasted content getting lost during history replay
- Improved Esc key queueing behavior
- Security improvements around IME handling
Expanded Vim support
For people who actually live in Vim, there are several meaningful additions.
New Vim motions
| Key | Behavior |
|---|---|
; / , | Repeat or reverse f/F/t/T |
y / Y | Yank operator |
p / P | Paste |
>> / << | Increase or decrease indent |
J | Join lines |
Text objects
You can now use text objects like iw, aw, i", a", i(, and a( to operate inside quotes and brackets.
Summary
Claude Code 2.1.0 is a collection of small but high-impact improvements. The biggest ones are:
- Wildcard Bash permissions:
Bash(npm *)now covers the whole npm family. - Skill hot reload: skill edits apply immediately without restarting.
- Security fixes: reduced risk of sensitive data exposure in debug logs.
If you have been fighting with permission rules or revising skills often, this is a very welcome release. Vim users also get a solid upgrade.