Agentforce Vibesの「spawn ENAMETOOLONG」の原因と対処【2026年版】
spawn ENAMETOOLONG とは、プログラムが別のプロセスを起動しようとしたときに、起動コマンドが長すぎて OS に拒否されたことを示すエラーです。Windows ではコマンドラインの長さに 32,767 文字の上限があります。
Agentforce Vibes を使っていて、ある日チャットに何を送ってもこのエラーしか返らなくなった。「Hi」の2文字でも失敗し、新しいセッションでも、VS Code や PC の再起動でも直らない。わたしたちは 2026-09-04 にこの状態になりました。
原因は、Agentforce Vibes に入っている「スキル」の件数が自動更新で 180 件に増え、起動コマンドが Windows の上限を超えたことでした。この記事は、原因を突き止めるまでの経過と、5日で3回再発した末にたどり着いた恒久策の記録です。
- Agentforce Vibes で
spawn ENAMETOOLONGが出る仕組み(スキルの件数とユーザー名の長さ) - 自分の環境が該当するかを1分で判定する PowerShell スクリプト
- スキルの自動更新を止める設定と、それでも超えるときの退避手順
- 原因を突き止めた手がかり(ログのサイズ、更新時刻、エラーが返るまでの時間)
目次
用語ミニ辞典
| 用語 | 意味 |
|---|---|
| Agentforce Vibes | Salesforce 公式のAI開発環境。VS Code などに入れる拡張機能版を使った |
| スキル | 「この作業はこの手順で」と AI に指示する手順書(Markdown 文書)。製品領域ごとに大量に配布されている |
| ツール | オブジェクト作成やデプロイを実際に行う機能。Salesforce DX MCP サーバーが提供する |
| 子プロセス | あるプログラムが別のプログラムを起動したときの、起動された側 |
| spawn | 子プロセスを起動する処理。起動コマンドが長すぎると ENAMETOOLONG で失敗する |
全体像:起動コマンドにスキルのパスが全件つながる
Agentforce Vibes は、チャットを送るたびに裏で AI エージェントを子プロセスとして起動します。そのとき、有効なスキルの保存場所(絶対パス)を全件、起動コマンドの引数に文字列としてつなげて渡します。

わたしたちの環境での内訳は次のとおりでした。
| 引数 | 文字数 |
|---|---|
--allowedTools(スキル 180 件のパス) | 31,659 |
--mcp-config | 2,012 |
| その他の固定引数(概算) | 400 |
| 合計 | 34,071 |
| Windows のコマンドライン上限 | 32,767 |
| 超過 | 1,304 |
入力したメッセージ本文は、引数ではなく標準入力で渡されます。だから「Hi」の2文字でも失敗します。入力の長さとは関係なく、起動の時点で落ちているためです。
手順編:判定して、自動更新を止める

手順1:該当するかを判定する
- PowerShell を開く(VS Code は開いたままでよい)
- 次のスクリプトを貼り付けて実行する
$S = "$env:APPDATA\Code\User\globalStorage\salesforce.salesforcedx-einstein-gpt\v4\skills\Skills-Salesforce"; if (-not (Test-Path $S)) { "スキルフォルダなし(対象外)" } else { $d = Get-ChildItem $S -Directory; $a = (($d | ForEach-Object { "Skill(" + ($_.FullName -replace '\\','/') + ")" }) -join ',').Length; $t = $a + 2400; "スキル件数 : $($d.Count)"; "推定引数長 : $t / 上限 32767"; if ($t -gt 32767) { "判定 : 該当(対処が必要)" } else { "判定 : 非該当(余裕 $(32767 - $t) 文字)" } }
- 「判定:該当」と出たら手順2へ進む。「非該当」でも、余裕が数千文字しかなければ手順2を先に入れておく
- 推定引数長は、スキルのパスの合計に、
--mcp-configとその他の固定引数の概算(2,400文字)を足した値です - ユーザー名に依存しないよう、パスは
$env:APPDATAから組み立てています
手順2:スキルの自動更新を止める
%APPDATA%\Code\User\settings.jsonを開く- 次の1行を追記して保存する
"salesforce.einsteinForDevelopers.skills.autoUpdate": false
- これは設定画面には出てこない、非公開の設定キーです。拡張機能の同梱コードを確認して見つけました。既定値は
trueです - 保存すると、settings.json に「不明な構成設定」という警告が出ます。設定画面に定義がないためで、拡張機能は読み込みます(→FAQ4)
falseにしてもスキルが無効になるわけではありません。取得元が「最新版の自動ダウンロード」から「拡張機能に同梱された版」に切り替わります
わたしたちは、あとで見返せるようコメントを付けて書きました。
// spawn ENAMETOOLONG 対策。スキルの自動更新を止め、拡張機能の同梱版に固定する。
// 設定画面には出ない非公開キーのため「不明な構成設定」と警告が出るが、拡張機能は参照する。
"salesforce.einsteinForDevelopers.skills.autoUpdate": false
手順3:VS Code を再読み込みする
- コマンドパレット(Ctrl+Shift+P)を開く
Developer: Reload Windowを実行する
手順4:ログで効いていることを確認する
- VS Code の出力パネルか拡張機能のログで、次の行を探す
skills.feature.activateComplete autoUpdateOn=false refreshAttempted=false seedFallback=false
autoUpdateOn=falseになっていれば設定が効いている- 手順1の判定スクリプトをもう一度実行し、「非該当」になったことを確かめる。まだ「該当」なら番外編の退避へ進む
わたしたちの環境では、自動更新を止めたことでスキルが 227 件から 121 件(同梱版)になりました。推定引数長は 42,565 文字から 23,321 文字に下がりました。
番外編:それでも超えるときの退避と復元
自動更新を止めても上限を超える場合は、使わない製品領域のスキルを別のフォルダへ移します。削除はせず、移動にします。判断を誤っても戻せるようにするためです。
拡張機能が管理するフォルダを直接動かします。Salesforce が案内している手順ではありません。実行は自己責任で、まず手順1の判定から始めてください。
退避する分類の決め方
すべてのスキルの SKILL.md にある description(どんなときに使うか)を読み、担当プロジェクトで使わない製品領域を退避しました。
| 残した分類 | 退避した分類 |
|---|---|
platform-*(オブジェクト・項目・権限・Apex・SOQL・デプロイ) | service-*(Service Cloud、メッセージング、音声) |
dx-*(sf CLI、組織管理、Code Analyzer) | experience-ui-bundle-* ほか(Experience Cloud サイト、CMS) |
experience-* のうち LWC 系 | omnistudio-*、commerce-*、mobile-* |
agentforce-*、integration-*、automation-*(Flow 生成) | consumer-goods-*、data360-*、education-*、field-*、life-* |
design-systems-*(SLDS) | — |
分類ごとの件数は、次のスクリプトで確かめられます。
$S = "$env:APPDATA\Code\User\globalStorage\salesforce.salesforcedx-einstein-gpt\v4\skills\Skills-Salesforce"; Get-ChildItem $S -Directory | ForEach-Object { ($_.Name -split '-')[0] } | Group-Object | Sort-Object Count -Descending | Select-Object Count, Name | Format-Table -AutoSize
退避する(何度でも実行できる)
$S = "$env:APPDATA\Code\User\globalStorage\salesforce.salesforcedx-einstein-gpt\v4\skills\Skills-Salesforce"; $B = "$env:LOCALAPPDATA\afv-skills-disabled"; $O = "$env:LOCALAPPDATA\afv-skills-disabled-old"; New-Item -ItemType Directory -Force -Path $B | Out-Null; $pat = '^(service-|experience-(ui-bundle|cms|content-media|lwr-site|portal)|omnistudio-|commerce-|consumer-|mobile-|education-|data360-|field-|life-)'; $keep = @('service-agentforce-channel-configure'); $m = 0; $a = 0; foreach ($f in (Get-ChildItem $S -Directory | Where-Object { $_.Name -match $pat -and $keep -notcontains $_.Name })) { $dest = Join-Path $B $f.Name; if (Test-Path $dest) { New-Item -ItemType Directory -Force -Path $O | Out-Null; if (Test-Path (Join-Path $O $f.Name)) { Remove-Item (Join-Path $O $f.Name) -Recurse -Force }; Move-Item $dest (Join-Path $O $f.Name); $a++ }; Move-Item $f.FullName $dest; $m++ }; "退避した件数 : $m"; "旧版を待避した件数: $a"; "残った件数 : $((Get-ChildItem $S -Directory).Count)"
- 上のスクリプトを実行する
- VS Code を再読み込みする(手順3と同じ)
- 手順1の判定スクリプトで「非該当」になったことを確かめる
- 退避先は
%LOCALAPPDATA%\afv-skills-disabledです - 退避先に同じ名前のフォルダがあるときは、古いほうを
afv-skills-disabled-oldに移してから入れ替えます $patが退避する分類、$keepが例外として残すスキルです。自分のプロジェクトに合わせて書き換えてください
復元する
$S = "$env:APPDATA\Code\User\globalStorage\salesforce.salesforcedx-einstein-gpt\v4\skills\Skills-Salesforce"; $B = "$env:LOCALAPPDATA\afv-skills-disabled"; $n = 0; Get-ChildItem $B -Directory | ForEach-Object { $dest = Join-Path $S $_.Name; if (-not (Test-Path $dest)) { Move-Item $_.FullName $dest; $n++ } }; "戻した件数 : $n"; "戻した後の件数: $((Get-ChildItem $S -Directory).Count)"
- 退避先ごと消してしまった場合も復元できます。
Skills-Salesforceフォルダを削除し、コマンドパレットからAgentforce: Refresh Salesforce Skillsを実行すると再ダウンロードされます。ただし件数が戻るので、再発します
原因を突き止めるまで
エラーの文言だけでは原因がわかりません。わたしたちが何を疑い、何で否定したかを順に書きます。同じ症状で調べている方の近道になればと思います。
環境変数を疑った(否定)
Windows の spawn で ENAMETOOLONG が返るのは、コマンドラインか環境変数ブロックが 32,767 文字を超えたときです。まず環境変数を測りました。
$env_pairs = [System.Environment]::GetEnvironmentVariables(); $total = 0; foreach($k in $env_pairs.Keys){ $total += ($k.Length + $env_pairs[$k].ToString().Length + 2) }; "ENV_BLOCK_CHARS=$total"; "PATH_LEN=" + $env:PATH.Length
結果は環境変数ブロック全体で 4,434 文字、PATH は 1,134 文字でした。上限には遠く、環境変数は原因ではないと判断しました。
エラーが返るまでの時間:22ミリ秒
拡張機能のログでは、エラーが 22 ミリ秒で返っていました。外部の AI と通信していれば、この速さでは返りません。通信の前、手元で落ちていることがわかります。
status=error error="spawn ENAMETOOLONG" durationMs=22 llmCallCount=1 toolCallCount=0
スタックトレースは ChildProcess.spawn から拡張機能内の spawnLocalProcess → initialize へ続いていました。子プロセスの起動そのものが失敗しています。
デバッグログのサイズで、壊れた時刻を絞り込む
拡張機能のデバッグログ(agent-storage\claude-debug-logs\)のサイズが決め手になりました。
| 日時 | サイズ | 判定 |
|---|---|---|
| 2026-09-03 10:13 | 853,247 バイト | 正常 |
| 2026-09-03 10:57 | 1,101,609 バイト | 正常 |
| 2026-09-03 14:39 | 2,556,436 バイト | 正常 |
| 2026-09-03 15:05 以降 | すべて 279 バイト | 異常 |
279 バイトのログは「Turn started」のヘッダーだけで終わっていました。ターンは始まるのに、子プロセスが一度も起動できていません。14:39 と 15:05 の間に何かが変わったことになります。
引数の中身を数える
エージェントの設定ファイル(agent-storage\agents\ 配下)を見ると、スキルは名前ではなく絶対パスの配列で、180 件で 30,761 バイトありました。1 件あたり平均 168 文字で、そのうち約 133 文字は全件に共通する保存先のパスです。冒頭の内訳表のとおり、合計すると上限を 1,304 文字超えていました。
更新時刻を突き合わせて、引き金を特定する
スキルフォルダの version.json には、取り込んだ時刻が入っていました。
{"version":"1.46.0","seedTimestamp":1788414301002}
seedTimestamp を日本時間に直すと 2026-09-03 14:45:01 です。デバッグログの境界(14:39 正常 → 15:05 異常)の間に収まります。スキルパッケージ @salesforce/afv-skills が 1.46.0 に自動更新され、スキルが 180 件に増えたことが引き金でした。
再発の記録
最初はスキルの退避で直しました。ところが、退避は恒久策になりませんでした。スキルが自動更新されると、退避したぶんが全件再ダウンロードされて元に戻るためです。

| 日付 | 何が起きたか | スキル件数 | 推定引数長 |
|---|---|---|---|
| 2026-09-04 | 最初の対処。84 件を退避 | 180 → 96 | 34,071 → 18,945 |
| 2026-09-07 | 1.51.0 に自動更新。退避分が戻り、新しい分類(field-*、life-*)も増えた | 96 → 228 | 42,565(超過) |
| 2026-09-09 | 1.53.0 に自動更新。再び戻る | 100 → 227 | 42,565(超過) |
| 2026-09-09 | 自動更新を止める。同梱版に固定 | 227 → 121 | 23,321 |
| 2026-09-15 以降 | 拡張機能本体が 4.33.0 以降に更新され、同梱スキルが増えた | 121 → 164 | 31,076(余裕 1,691) |
5日で3回の再発を受け、手作業の退避では回らないと判断して自動更新を止めました。それでも、拡張機能本体の更新で同梱スキルは増えます。2026-10-06 時点の余裕は 1,691 文字で、スキル約10件ぶんしかありません。拡張機能を更新したら、手順1の判定を実行する運用にしています。
つまずき&FAQ
Q1. 「Error (UNKNOWN): spawn ENAMETOOLONG」が出て、Agentforce Vibes のチャットが何を送っても動かない
Windows で Agentforce Vibes のスキルが増えすぎ、子プロセスの起動コマンドが 32,767 文字の上限を超えている可能性が高いです。手順1の判定スクリプトで確かめ、該当していれば自動更新を止めてください。わたしたちの環境では 180 件で発生しました。
Q2. VS Code を再起動しても、PC を再起動しても直らない
再起動では直りません。原因は起動のたびに組み立てられる引数の長さで、スキルの件数が変わらない限り毎回同じ長さになるためです。新しいセッションを作っても同じです。
Q3. スキルを減らすと、Agentforce Vibes でできることが減りますか
減りません。上限に当たっているのはスキル(AI への手順書)だけです。オブジェクトや項目の作成、デプロイ、SOQL の実行などを実際に行うのはツール(Salesforce DX MCP サーバーの74個)です。ツールは起動後に標準入出力でやりとりするため、長さの問題を起こしません。退避するのは、担当プロジェクトで使わない製品領域の手順書だけです。
Q4. settings.json に「不明な構成設定」と警告が出る
正常です。salesforce.einsteinForDevelopers.skills.autoUpdate は設定画面に定義されていない非公開のキーなので、VS Code が警告を出します。拡張機能は読み込みます。効いているかは、ログに autoUpdateOn=false が出ているかで確かめてください。
Q5. 同じチームでも、発生する人としない人がいる
ユーザー名の長さの違いです。スキルのパスには C:\Users\<ユーザー名>\AppData\Roaming\Code\... が含まれ、それがスキルの件数ぶん繰り返されます。ユーザー名が長い人ほど早く上限に届き、短い人は同じ件数でも発生しません。
Q6. 退避したはずのスキルが元に戻っている
スキルの自動更新で再ダウンロードされています。手順2で自動更新を止めてください。なお、自動更新を止めたあとに手動で退避しても、拡張機能が同梱版を再コピーして、次回の起動時に同梱版の構成へ戻ることがあります。
Q7. スキルがあるのに「見つかりません」と言われる
スキルは、検索でヒットしてから読み込まれます。スキル名(フォルダ名)を直接指定すると、検索の語彙と噛み合わずに外れることがあります。「カスタム項目を作って」のように用途で頼むほうが確実です。拡張機能の更新後に VS Code を再読み込みしていない場合は、古いスキル一覧のままになっていることもあります。
Q8. 同時に出ていた別のエラーも、同じ原因ですか
わたしたちの調査中には、モデルを切り替えたときのエラーと、Toolkit タブの MCP サーバーの赤表示も同時に出ていました。3つとも別々の原因でした。まとめて1つの原因を探すと遠回りになるので、1つずつ切り分けてください。MCP サーバーの有効化についてはAgentforce Vibesでフローを作るためのMCPサーバー設定手順にまとめています。
まとめ
- Agentforce Vibes の
spawn ENAMETOOLONGは、スキルのパスが全件つながった起動コマンドが Windows の上限 32,767 文字を超えたことで起きます。メッセージの長さとは関係ありません - スキルの件数とユーザー名の長さの組み合わせで決まるため、同じチームでも発生する人としない人がいます
- 恒久策は、settings.json でスキルの自動更新を止めることです。退避だけでは更新のたびに元に戻ります
- スキルを減らしても、実際の操作を行うツールは減りません
- 自動更新を止めても拡張機能本体の更新で同梱スキルは増えます。更新後は判定スクリプトを実行します
調べる順番としては、エラーが返るまでの時間(22ミリ秒)とログのサイズ(279バイト)が最も早い手がかりでした。入力に関係なく失敗するエラーは、起動時の構成を疑うのが近道です。
Salesforce の開発と AI 活用のご相談を承っています
FROM CENTER は、Salesforce の設定・開発と、AI を使った開発の進め方を支援しています。次のようなお悩みがあれば、お気軽にご相談ください。
- Agentforce Vibes を導入したいが、トラブル時の調べ方がわからない
- AI 開発ツールをチームで使うときの設定や運用を決めたい
- Salesforce の開発や保守に時間がかかっている
Agentforce Vibes の初期設定はAgentforce Vibes セットアップ手順【日本語版】、実案件で使った所感はAgentforce Vibesを使ってみたにまとめています。


