You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+66Lines changed: 66 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -71,6 +71,7 @@ With tweakcc, you can
71
71
72
72
- Customize all of Claude Code's **system prompts** (**NEW:** also see all of [**Claude Code's system prompts**](https://github.com/Piebald-AI/claude-code-system-prompts))
73
73
- Create custom **toolsets** that can be used in Claude Code with the new **`/toolset`** command
74
+
- Create custom **shell-command tools** that Claude Code can call
74
75
-**Highlight** custom patterns while you type in the CC input box with custom colors and styling, like how `ultrathink` used to be rainbow-highlighted.
75
76
- Manually name **sessions** in Claude Code with `/title my chat name` or `/rename` (see [**our blog post**](https://piebald.ai/blog/messages-as-commits-claude-codes-git-like-dag-of-conversations) for implementation details)
76
77
- Create **custom themes** with a graphical HSL/RGB color picker
@@ -113,6 +114,7 @@ $ pnpm dlx tweakcc
113
114
-[API](#api)
114
115
-[System prompts](#system-prompts)
115
116
-[Toolsets](#toolsets)
117
+
-[Custom tools](#custom-tools)
116
118
-[**Features**](#features)
117
119
-[System prompts](#system-prompts)
118
120
- Themes
@@ -135,6 +137,7 @@ $ pnpm dlx tweakcc
135
137
- Session memory
136
138
-`/remember` skill
137
139
-[Toolsets](#toolsets)
140
+
-[Custom tools](#custom-tools)
138
141
- User message display customization
139
142
- Token indicator display
140
143
-[Add support for dangerously bypassing permissions in sudo](#feature-bypass-permissions-check-in-sudo)
@@ -663,6 +666,69 @@ Toolsets can be helpful both for using Claude in different modes, e.g. a researc
663
666
664
667
To create a toolset, run `npx tweakcc`, go to `Toolsets`, and hit `n` to create a new toolset. Set a name and enable/disable some tools, run `tweakcc --apply` to apply your customizations, and then run `claude`. If you marked a toolset as the default in tweakcc, it will be automatically selected.
665
668
669
+
## Custom tools
670
+
671
+
Custom tools let you register your own shell-command tools alongside Claude Code's built-in tools. Each custom tool declares a name, description, parameter schema, and command template. When Claude calls the tool, tweakcc substitutes `{{parameterName}}` placeholders into the command, executes it in a shell, and returns stdout, stderr, and exit code back to Claude.
672
+
673
+
You can create them in the tweakcc UI by going to `Custom tools`, or by editing `settings.customTools` in [`config.json`](#configuration-directory) directly. After changing them, run `tweakcc --apply`.
674
+
675
+
> **Shell safety (accepted trade-off):**`{{parameter}}` placeholders are inserted verbatim into the command string — tweakcc does not shell-quote them. A string parameter containing `;`, `&`, `|`, or `$(...)` will be executed as-is by the shell. This is intentional: quoting every parameter would break tools that deliberately pass flags or expressions through a parameter. As the tool author, you are responsible for quoting parameters that need it (e.g. write `"{{path}}"` in the command template, not `{{path}}`). Each invocation goes through Claude Code's normal Bash permissions check, so the full interpolated command is shown to the user before execution.
676
+
677
+
Example:
678
+
679
+
```json
680
+
"customTools": [
681
+
{
682
+
"name": "RipgrepTodo",
683
+
"description": "Search for TODO comments under a path",
684
+
"parameters": {
685
+
"path": {
686
+
"type": "string",
687
+
"description": "Path to search",
688
+
"required": true
689
+
}
690
+
},
691
+
"command": "rg -n TODO \"{{path}}\"",
692
+
"shell": "bash",
693
+
"timeout": 5000,
694
+
"workingDir": "/home/user/project",
695
+
"env": {
696
+
"RG_COLORS": "match:fg:yellow"
697
+
}
698
+
}
699
+
]
700
+
```
701
+
702
+
Schema:
703
+
704
+
```typescript
705
+
typeCustomTool= {
706
+
name:string;
707
+
description:string;
708
+
parameters:Record<
709
+
string,
710
+
{
711
+
type:'string'|'number'|'boolean';
712
+
description:string;
713
+
required?:boolean;
714
+
}
715
+
>;
716
+
command:string;
717
+
shell?:string;
718
+
timeout?:number;
719
+
workingDir?:string;
720
+
env?:Record<string, string>;
721
+
prompt?:string;
722
+
};
723
+
```
724
+
725
+
Notes:
726
+
727
+
-`prompt` is optional. If omitted, tweakcc generates a prompt from the description, parameters, and command template.
728
+
- Custom tool names must be unique and must not collide with built-in Claude Code tool names such as `Bash`, `Read`, or `Write`.
729
+
- Invalid custom tool entries are dropped when tweakcc loads the config.
730
+
- Custom tools are currently appended after built-in toolset filtering, so they remain available even when a toolset is active.
731
+
666
732
## Feature: Thinking verbs customization
667
733
668
734
Customize the thinking verbs that appear while Claude is generating responses, along with the format string. You can change from the default `"Thinking… "` format to something more fun like `"Claude is {verb}ing..."` or anything else you prefer.
0 commit comments