Claude CodeのeffortSliderで/effortスライダーのキーを変える
v2.1.284で加わったeffortSliderコンテキストの3アクションを使い、/effortスライダーの左右キーとUltracodeトグルをkeybindings.jsonで再割り当てします。
effortSliderで変えられるキーは3つ
/effortを引数なしで実行すると開くスライダーの操作キーは、keybindings.jsonで再割り当てできます。対象はEffortSliderコンテキストの3アクションで、いずれもv2.1.284以降が必要です。
| アクション | 既定のキー | 動作 |
|---|---|---|
effortSlider:decreaseEffort | 既定のキーLeft | 動作スライダーを一段低いeffortレベルへ動かす |
effortSlider:increaseEffort | 既定のキーRight | 動作スライダーを一段高いeffortレベルへ動かす |
effortSlider:toggleUltracode | 既定のキーTab | 動作このセッションのUltracodeをオン・オフする |
同じコンテキストにはeffortSlider:thisSessionOnly(既定はs、v2.1.257以降)もあります。フォーカス中のレベルを、保存せずこのセッションだけに適用する操作です。EnterとEscapeは再割り当てできません。
toggleUltracodeは、スライダーがUltracodeを提示している場合にだけ働きます。ワークフローがオフのとき、またはモデルがxhigh effortに対応しないときは、そもそもトグルが出ません。
最小の設定例
~/.claude/keybindings.jsonにEffortSliderコンテキストのブロックを足します。Vim風に左右をh/lへ寄せる例です。
{
"bindings": [
{
"context": "EffortSlider",
"bindings": {
"h": "effortSlider:decreaseEffort",
"l": "effortSlider:increaseEffort",
"u": "effortSlider:toggleUltracode"
}
}
]
}キーの選び方は一例です。ファイルを保存すると変更は自動で検知され、再起動は要りません。動作は、Claude Codeで/effortを開いてhとlを押して確かめます。
/effort/keybindingsを実行すると、keybindings.jsonが無ければ作成され、あれば開きます。ファイル全体の書式と既定のショートカットはClaude Codeショートカット一覧にあります。
既定のキーを外して置き換えるとどうなるか
上の例は、Left / Rightの既定割り当てを消していません。公式ドキュメントは、既定を外すには対象のキーにnullを指定すると説明しています。矢印キーを完全に無効にして、h / lだけで操作したい場合は次の形です。
{
"bindings": [
{
"context": "EffortSlider",
"bindings": {
"left": null,
"right": null,
"h": "effortSlider:decreaseEffort",
"l": "effortSlider:increaseEffort"
}
}
]
}既定を外さず追加だけにする選択肢もあります。
Ultracodeのトグルを動かすキー
Tabの既定割り当ては、スライダー上のUltracodeトグルです。Tabを押してUltracodeを切り替え、Enterで適用する流れがドキュメントに書かれています。toggleUltracodeを別のキーに割り当てるのは、Tabを他の用途に取りたいときや、誤って押す事故を避けたいときに向きます。
UltracodeはeffortレベルではなくClaude Codeの設定です。オンにすると、Claudeは中身のあるタスクごとにワークフローを組みます。トークン消費は増え、サブスクリプションでは使用上限に早く届きます。オンオフはeffortレベルを動かしません。
v2.1.284より前は、Ultracodeをオンにするとxhighに固定され、別のレベルを選ぶとオフになっていました。今はレベルを動かしてもUltracodeはそのままです。そのため「左右キーでレベルを調整し、Tabのトグルで別に切り替える」という2軸の操作になり、キー割り当ての設計も2軸で考える形になります。変更の経緯はv2.1.284のリリースノートにあります。
キーワード起動側を止めたい場合は、スライダーではなく設定の話です。workflowKeywordTriggerEnabledでultracode起動を止めるで扱っています。
ModelPickerの左右キーは別コンテキスト
/modelのピッカーにもeffortを動かす操作があります。こちらはModelPickerコンテキストで、アクション名はmodelPicker:decreaseEffortとmodelPicker:increaseEffort、既定はLeftとRightです。effortSlider:*と名前が似ていますが、別のアクションです。
EffortSliderのブロックに書いた割り当ては、ModelPickerには及びません。両方で同じ手の動きに揃えたいなら、2つのブロックを並べて書きます。
{
"bindings": [
{
"context": "EffortSlider",
"bindings": {
"h": "effortSlider:decreaseEffort",
"l": "effortSlider:increaseEffort"
}
},
{
"context": "ModelPicker",
"bindings": {
"h": "modelPicker:decreaseEffort",
"l": "modelPicker:increaseEffort"
}
}
]
}/modelのピッカーでは、モデルを選びながらこの左右キーでeffortも合わせられます。スライダーに集中して調整するなら/effort、モデルの切り替えと同時に済ませるなら/modelと、入口によって効くコンテキストが変わります。
左右キーで動くレベルの並びを知っておく
左右キーが動かすのはlow、medium、high、xhigh、maxの各effortレベルです。どのレベルが初期位置になるかはモデルで違い、Opus 5.5とSonnet 5.5はmedium、Opus 4.7はxhigh、それ以外のモデルはhighです。
レベルの名前は同じでも、内部の値はモデルごとに調整されています。Opus 5からOpus 5.5へ移るときは、前のレベルを持ち越さずmediumから試す、という説明がドキュメントにあります。キーを動かす回数が増える人ほど、この初期位置を先に知っておくと迷いません。
maxは最も深く推論するレベルです。CLAUDE_CODE_EFFORT_LEVEL環境変数で指定した場合を除き、現在のセッションだけに適用されます。過剰に考え込みやすいため、広く採用する前に試すよう書かれています。
スライダーを開かずに指定する方法
キーの再割り当ては、スライダーを開く前提の操作です。開かずに済ませる入口もあります。
/effortにレベル名を続けると、スライダーなしで直接設定できます。設定はEnterで確定したときと同じく既定値として保存されます/effort autoは、有効なモデルに保存したレベルを消します/effort ultracodeと/effort ultracode offで、Ultracodeをスライダー無しで切り替えられます(v2.1.284以降)- 起動時は
claude --effort ultracodeで、xhighのままUltracodeをオンにして始められます
-pで動かす非対話実行では、/effortで決めたレベルはそのセッションだけに適用され、既定値としては保存されません。Remote Controlでつないだスマートフォンやブラウザーから選んだレベルも同様です。スライダー用のキー設定が効くのは、手元のターミナルで対話的に開いた場合に限られます。
キー名の書き方
bindingsのキーは+で修飾キーをつなぎます。ctrl、shift、alt(opt、option、metaも同じ)などがあり、大文字小文字は区別されません。Kとkは同じ割り当てで、Shiftと文字を組み合わせたいときはshift+kと書きます。
矢印はup、down、left、right、確定はenter、移動はtabとspaceなど、特殊キーにも名前があります。スペース区切りでctrl+k ctrl+sのように書くと、2打鍵の連続入力(コード)になります。次の打鍵は3秒以内に押す決まりです。
スライダーは左右と決定だけで足りるため、連続入力にするほどの理由は多くありません。1打鍵で済む文字キーか、ctrlと組み合わせた形が扱いやすいでしょう。
日本語配列以外のキーボードで使うとき
Ctrl系の割り当ては、キー名を常にラテン文字で書きます。キリル文字のような非ラテン配列に切り替えていても、ctrl+wはctrl+wと書きます。
Kitty keyboard protocolに対応するターミナル(Ghostty、Kitty、WezTerm、iTerm2など)では、押した物理キーのUS配列上の位置で照合されます。位置を報告しないターミナルでは、送られてきた文字がそのまま照合されます。ASCIIの制御コードなら通り、キリル文字のまま届いたキー入力はどの割り当てにも当たりません。AZERTYのようにラテン文字を並べ替えた配列では、キーに刻印された文字で照合されます。
hとlのような素の文字キーを割り当てる場合は、この差を気にする場面はほとんどありません。ctrl付きの割り当てを選ぶときに効いてきます。
つまずきやすい点
- v2.1.284未満では効かない。3つの
effortSliderアクションはv2.1.284以降の機能です。claude --versionで確かめます - コンテキスト名の綴り。ブロックの
contextはEffortSlider、アクション名の接頭辞はeffortSlider:と、先頭の大文字小文字が違います - EnterとEscape。スライダーのこの2キーは再割り当てできません。確定とキャンセルは動かせない前提で設計します
- 予約済みのキー。Ctrl+C、Ctrl+D、Ctrl+M、Ctrl+[、Ctrl+I、Ctrl+H、Caps Lockは再割り当てできません。Ctrl+Iは常にTabとして受け取られます
- ターミナル側の衝突。Ctrl+Bはtmuxのプレフィックス、Ctrl+AはGNU screenのプレフィックス、Ctrl+ZはSIGTSTPに使われます。これらの近くのキーに割り当てるときは注意が要ります
- cmd系の修飾キー。
cmdやsuperは、Super修飾キーを報告できるターミナルでしか検出されません。どこでも動かしたいならctrlかmetaを使います
スライダー操作を変えるときの考え方
Enterで確定したレベルは既定値として保存され、以後のセッションにも適用されます。sで確定すると、このセッションだけに適用されます。レベルの意味と使い分けはClaude Code effortレベルの使い方と設定に、モデルごとの保存先はmodelSettingsのeffortをモデル別に直接編集するにあります。
キーを変える価値が出るのは、/effortを作業中に頻繁に開くときです。公式ドキュメントは、Claudeが作業している最中でも/effortを実行できると説明しています。新しいレベルはプロンプトキャッシュの警告を確認したあと、ターンの途中でも次のリクエストから適用されます。頻繁に上げ下げするなら、押しやすい位置に寄せる意味があります。
一方、たまにしか開かないなら既定のままで足ります。Left / Rightは矢印キーとして直感的で、再割り当てで得られるのは手の位置の調整だけです。