AIエージェントで作業していると、マウスのプロパティが表示される時の対策

※本ページはプロモーションが含まれています

公開日:

AIエージェント作業中にマウスのプロパティが開く

CursorのComposerエージェントが作業をしているとき、いきなりWindowsの「マウスのプロパティ」画面が開いて困りました。

作業の邪魔になるだけでなく、何度も開くと集中が途切れてしまいます。

僕の場合、エージェントが git diff を実行したあたりで、たまにマウスのプロパティが表示されました。

調べたところ、原因はCursorのバグというより、PowerShellがパス中の (main) をコマンドとして実行してしまうことでした。パスをダブルクォートで囲めば防げます。

この記事では、同じ症状が出たときの原因と対策を紹介します。

パスをクォートする

PowerShellで括弧付きのパスを扱うとき、必ずダブルクォートまたはシングルクォートで囲むようにすればOK。


# NG:(main) がコマンドとして実行される
git diff projects/app/src/routes/(main)/+layout.svelte --stat

# OK:パスをクォートするだけでよい
git diff "projects/app/src/routes/(main)/+layout.svelte" --stat

SvelteKitのルートグループ (main) や、Next.jsの app/(main)/ のように、括弧付きディレクトリ名を使っているプロジェクトでは特に注意が必要です。

なぜマウスのプロパティが開くのか

Windowsでは、ターミナルに main と入力すると main.cpl が実行されます。これがマウスのプロパティ画面です。

PowerShellでは (main)サブ式として解釈され、main というコマンドが実行されます。

PowerShellで下記コマンドを実行すると、マウスのプロパティが開きます。


echo test a/b/(main)/c.svelte

main という関数やコマンドがなければ、Windowsは C:\Windows\system32\main.cpl を探して実行します。PATHEXT 環境変数に .CPL が含まれているためです。(main) だけ実行した場合は GUI が開くだけで、ターミナルには何も表示されないこともあります。

僕が遭遇したとき、エージェントは次のようなコマンドを実行していました。


git diff projects/.../src/routes/(main)/+layout.svelte --stat

パスがクォートされていないので、(main) の部分で main.cpl が起動したんですね。

Cursorのルールに書いておく

エージェントが自動でコマンドを生成する場合、プロジェクトの AGENTS.md.cursor/rules に次のような注意を書いておくと再発しにくくなります。


- PowerShellでは括弧付きパス(`(main)` など)を必ずクォートする
- `git diff`、`Get-Content`、`rg` などパスを渡すコマンドすべてに適用する

うまくいかない場合・別の原因

パスをクォートしてもたまに開く場合、ターミナルのエスケープシーケンス処理の問題が関係している可能性があります。

Windows TerminalのConPTYが、エージェントが送る制御文字を正しく処理できず、シェルに main という文字列が漏れる、という説もあります。こちらは再現が難しく、エージェント側やターミナル側の修正待ちになる部分です。

僕のケースでは、クォートなしの (main) パスが直接のトリガーでした。2つ目のコマンドのようにパスを "..." で囲んでいれば、通常は main.cpl は起動しません。

注意点

  • (main) だけでなく、PowerShellでは括弧 () は常に特別な意味を持ちます。パスに括弧が含まれるときはクォートが必要です。
  • クォートなしのとき、PowerShell は --stat を git への引数ではなく演算子として解釈する場合があります。ただし本件のマウス設定が開く直接原因は (main) の実行です。パスをクォートすれば --stat の位置は git 的にも PowerShell 的にもどちらでも構いません。
  • ターミナルに main と打つとマウスのプロパティが開くのは、Windowsの仕様です。調査中に誤って実行しないよう注意してください。

おわりに

CursorのComposerエージェントで作業中にマウスのプロパティが開く問題について紹介しました。

原因は、PowerShellが (main) をコマンド main として実行し、Windowsが main.cpl(マウスのプロパティ)を起動してしまうことでした。SvelteKitやNext.jsのように括弧付きルートを使うプロジェクトでは、エージェントが生成するコマンドのパスにクォートが抜けやすいので注意が必要です。

僕の場合、パスをクォートするルールをエージェント向けに書いておくことで、再発はかなり減らせそうです。同じ症状で困っている人は、まずエージェントが実行したコマンドに (main) のような括弧付きパスがクォートなしで含まれていないか確認してみてください。