Claude Codeのoutput styleをRemote Controlで選べないときの対処
スマホやWebから自作のoutput styleを選ぶと拒否される件と、local設定を読まないセッションでの拒否を、outputStyleキーの置き場所から見分けて直します。
スマホやWebから/output-styleで自作のスタイルを選ぼうとすると、Claude Codeは次の一文を返します。Remote Control経由では、選べるのは組み込みスタイルだけです。
Custom output styles can't be selected over Remote Control or from a relayed message. Select one in the session itself, or pick a built-in style here.もう1つ似た拒否があり、こちらは/output-styleや/config outputStyle=...が「local settingsを読まないセッション」で実行されたときに出ます。2つは原因も出る場所も別ですが、直し方はどちらも「outputStyleキーをどのファイルに置くか」に行き着きます。この記事では、2つのメッセージの見分け方と、キーの置き場所ごとの使い分けを扱います。
2つのメッセージは「誰が実行したか」と「何を読むか」で分かれる
原文は同じ/output-style系の拒否ですが、止めている理由が違います。
2つの拒否メッセージの違い
Remote Control・中継メッセージ
モバイルアプリやWebから、またはセッションに中継されたメッセージとして届いた/output-styleが対象です。そのターンがアカウント所有者本人のものとは限らないため、一覧と選択は組み込みスタイルに限られます。
local settingsを読まないセッション
/output-style <style>も/config outputStyle=<style>も、選択を.claude/settings.local.jsonへ保存します。そのファイルを読み戻さないセッションでは、効かない設定を書く代わりに拒否されます。
メッセージの全文は次のとおりです。後者は文言に.claude/settings.local.jsonが入るので、見分けは簡単です。
Output styles are saved to local settings (.claude/settings.local.json), which this session doesn't load, so the style can't be changed here.Remote Controlでは、なぜ組み込みスタイルしか選べないのか
Remote Controlのドキュメントは、スマホとWebから使えるコマンドの1つとして/output-styleを挙げています。v2.1.269以降で、スタイル名を引数に渡すか、引数なしで一覧を出せます。ただしモバイルとWebから選べるのは組み込みスタイルだけで、カスタムスタイルはセッション側で選ぶ、という但し書きが付いています。
組み込みスタイルはProactive、Concise、Explanatory、Learningの4つと、スタイルなしを意味するdefaultです。したがって次の操作は通ります。
/output-style concise一方、自作のスタイル名を渡すと、拒否の扱いが少し独特です。カスタムスタイルの名前は、存在しない名前と同じ返答になります。つまり「そのスタイルは無い」とも読めますが、実際にはファイルがあっても選べない状態です。スタイル名のタイプミスと取り違えやすいので、冒頭の一文が出たらRemote Controlの制限だと判断できます。
この通知は、コマンドでスタイルを一覧表示したときと、渡した名前が認識されなかったときの両方で付きます。一覧を出しただけでも出るため、エラーというより案内の側面があります。
対処1: 組み込みスタイルに切り替える
出先で応答の長さや調子を変えたいだけなら、組み込みスタイルで足ります。
| やりたいこと | 選ぶスタイル |
|---|---|
| 前置きや要約なしで結果から返してほしい | 選ぶスタイルconcise(v2.1.237以降) |
| 定型的な判断はいちいち聞かずに進めてほしい | 選ぶスタイルproactive |
変更の理由をInsightブロックで添えてほしい | 選ぶスタイルexplanatory |
| 一部のコードを自分で書きながら進めたい | 選ぶスタイルlearning |
| スタイルの指定をやめたい | 選ぶスタイルdefault |
/output-styleは引数の大文字小文字を区別しません。一方、設定ファイルのoutputStyleの値は大文字小文字を区別します。ファイルにはConciseのように組み込み名の表記どおり書き、conciseと書くとDefaultスタイルになります。
対処2: カスタムスタイルはoutputStyleを設定ファイルに書いておく
カスタムスタイルを使いたいときの方針は、「Remote Controlの外でスタイルを決めておく」ことです。エラーの案内にあるのは次の2通りです。
- プロジェクトの
.claude/settings.local.jsonにoutputStyleを設定する - そのセッションの端末がある場合は、そこで
/output-style <style>を実行する
1つ目は、たとえば次のような形になります。スタイル名は、.claude/output-styles/などに置いたMarkdownファイルの名前(またはnameで付けた名前)です。
{
"outputStyle": "Diagrams first"
}設定はセッション中でも反映されます。キーを書き換えると、次のメッセージからClaudeが新しいスタイルを使います。v2.1.251より前は、/clearか新規セッションが要りました。
出かける前に、PCのターミナルで次のように決めておく流れが現実的です。
出先でカスタムスタイルを使うための準備
- 1
スタイルのファイルを置く
~/.claude/output-styles(ユーザー)か.claude/output-styles(プロジェクト)にMarkdownファイルを置きます。ターミナルのClaude Codeはスタイルファイルを起動時に読むので、作成・編集後は再起動します。 - 2
`outputStyle`を書く
個人用なら
.claude/settings.local.json、全プロジェクト共通の既定にするなら~/.claude/settings.jsonに書きます。 - 3
Remote Controlでつなぐ
セッションはすでに目的のスタイルで動いています。スマホからは組み込みスタイルへの切り替えだけが、必要に応じて使えます。
どのファイルに書くかは、設定の優先順位が決めます。同じキーが複数あるときは、上から順に管理設定、コマンドライン、プロジェクトのローカル設定、共有のプロジェクト設定、ユーザー設定の順で強くなります。~/.claude/settings.jsonに既定を置いても、プロジェクトの.claude/settings.local.jsonにoutputStyleがあればそちらが勝ちます。選んだはずのスタイルが反映されないように見える場合は、まずこの優先順位を確かめます。
優先順位やファイルごとの役割は、settings.local.jsonがgitignoreなしで除外される仕組みでも扱っています。
対処3: local設定を読まないセッションでは、読む場所へ書く
もう一方のメッセージは、設定の読み込み元からlocalが外れたセッションで出ます。ドキュメントが挙げる例は2つです。
- Agent SDKのセッションで、
settingSourcesから"local"を外している - CLIを
--setting-sourcesで起動し、その値にlocalを含めていない
CLIの--setting-sourcesは、user、project、localをカンマ区切りで受け取ります。たとえばuser,projectと指定したセッションは、.claude/settings.local.jsonを読みません。
claude --setting-sources user,projectこの状態で/output-style explanatoryや/config outputStyle=Explanatoryを実行すると、保存先のsettings.local.jsonを二度と読まないため、拒否が返ります。ドキュメントが示す直し方は2つです。
- セッションの設定読み込み元に
localを加えて、切り替えをやり直す - そのセッションが読み込むファイルに
outputStyleを書く。プロジェクトの.claude/settings.jsonか~/.claude/settings.jsonが該当する
--setting-sourcesの挙動そのものはClaude Code --setting-sourcesで読み込み元を指定するにまとめています。
Agent SDKではsettingsオブジェクトに入れる
TypeScript SDKの場合は、outputStyleをquery()に渡すsettingsオブジェクトの中に書く方法が示されています。outputStyleはOptionsのトップレベルのフィールドではありません。
const options = { settings: { outputStyle: "Explanatory" } };Python SDKでは、settingsオプションにJSON文字列か設定ファイルのパスを渡します。
options_settings = '{"outputStyle": "Explanatory"}'注意点が1つあります。SDKでカスタムスタイルのファイルを読み込ませるには、settingSourcesにuserまたはprojectを含める必要があります。settingSourcesを空にしたセッションでは、スタイルのファイルそのものが見つかりません。settingSourcesと設定の読み込みの関係は、Agent SDK settingSourcesで詳しく扱っています。
症状から原因を絞る早見表
| 画面に出る文言 | 原因 | 次の一手 |
|---|---|---|
Custom output styles can't be selected over Remote Control or from a relayed message... | 原因スマホ・Web・中継メッセージから、組み込み以外を選ぼうとした | 次の一手組み込みスタイルを選ぶ。カスタムは設定ファイルかセッション側で |
Output styles are saved to local settings (.claude/settings.local.json), which this session doesn't load... | 原因localを読まないセッションで切り替えようとした | 次の一手localを読み込み元に加えるか、読み込むファイルにoutputStyleを書く |
| 切り替えたのに応答が変わらない | 原因outputStyleの大文字小文字が合っていない、または上位の設定が勝っている | 次の一手値をConciseのように合わせ、優先順位を確認する |
3行目はエラーではありませんが、設定ファイルでoutputStyleを扱うときの代表的な混乱です。値が組み込み名と完全に一致しないとDefaultスタイルになるため、画面にも警告は出ません。スタイルのファイル側では、frontmatterのキー名を間違えても無視され、エラーは出ません。気づきにくい点はClaude Code output styleを/output-styleか/configで切り替えるの「つまずき」にもあります。
outputStyleの置き場所をどう決めるか
ここまでの内容を、置き場所の側から見直します。outputStyleはスコープがAny fileのキーで、どの設定ファイルにも書けます。
| 置き場所 | 向いているケース | 注意 |
|---|---|---|
.claude/settings.local.json | 向いているケース個人の好みをそのプロジェクトで使う。/output-styleと/configの保存先もここ | 注意localを読まないセッションでは効かない |
.claude/settings.json | 向いているケースチームで同じスタイルに揃える | 注意チェックインされ、全員に及ぶ |
~/.claude/settings.json | 向いているケース全プロジェクト共通の既定にする | 注意プロジェクト側の設定が優先される |
SDKのsettingsオブジェクト | 向いているケースAgent SDKからスタイルを固定する | 注意settingSourcesの指定と両立させる |
Remote Controlから使う前提なら、settings.local.jsonよりも、セッションが確実に読み込むファイルに置く方が崩れにくい構成です。ターミナル側で--setting-sourcesを絞っている人は、localが入っているかを最初に見ます。
自作スタイルを作る側の補足
ここまでは「選べない」話でしたが、そもそも選べるカスタムスタイルが無ければ始まりません。frontmatterのkeep-coding-instructionsをtrueにすると、コーディング用の指示を残したまま話し方だけを変えられます。作り方の具体例はClaude Codeでoutput styleを自作する実践パターン集にあります。
補足: Remote Controlを使うこと自体の前提
この記事のメッセージは、Remote Controlが動いている前提のものです。つながらない側の症状(ログインの更新失敗、アカウントの切り替わりなど)は、別の原因で別のメッセージが出ます。たとえばRemote Control「couldn't refresh your login」で止まる原因と対処のように、メッセージごとに原因が分かれます。output styleの拒否はつながったあとの機能制限なので、接続の不具合と混同しないようにします。
まとめ
2つの拒否は、どちらも「スタイルの選択が効く場所で行われていない」ことを示しています。Remote Controlでは組み込みスタイルだけが選べて、カスタムは設定ファイルに先に書いておくのが筋です。--setting-sourcesやSDKのsettingSourcesでlocalを外したセッションでは、settings.local.jsonを保存先にする操作が使えないため、読まれるファイルにoutputStyleを置きます。出先から自作スタイルを使う予定があるなら、出かける前にPC側でoutputStyleを書いて再起動しておくのが、いちばん手戻りの少ない準備です。