🤖

AI エージェント時代に見直すべきシェル設定【zsh correct 問題など】

に公開

はじめに

Claude Code、GitHub Copilot CLI、Cursor の Composer、aider など、ターミナルでコマンドを自動実行する AI エージェントが急速に普及しています。

これらのツールを使い始めて、こんな経験はありませんか?

「コマンドの実行を許可したのに、なぜかターミナルが止まっている...」

その原因、zsh の correct 機能かもしれません。

この記事では、AI エージェントと相性の悪いシェル設定と、その解決方法を紹介します。

問題: AI エージェントがコマンド実行中に止まる

JetBrains IDE × GitHub Copilot Chat での体験

JetBrains IDE(IntelliJ IDEA、WebStorm など)で GitHub Copilot Chat を Agent モードで使っていたときのことです。

AI が提案したコマンドの実行を許可しました。本来ならそのまま処理が進むはずが、ターミナルを見ると...

zsh: correct 'pnpm' to 'npm' [nyae]?

待ってる。AI じゃなくて、私の入力を待ってる。

correct 機能が pnpm を見慣れない単語だと判断し、「npm の間違いじゃない?」と親切に確認してくれているのです。

もちろん pnpm で正しいのですが、AI エージェントはこの確認プロンプトに応答できません。結果、タイムアウトするか、永遠に待ち続けることになります。

原因: zsh の correct 機能

correct 機能は、タイプミスを検出して修正候補を提示してくれる機能です。

# .zshrc での設定例
setopt correct      # コマンド名の自動修正を有効化
setopt correct_all  # 引数も含めて自動修正を有効化

人間が操作するなら便利な機能です:

$ gti status
zsh: correct 'gti' to 'git' [nyae]?

n で拒否、y で修正を受け入れ、a で中止、e で編集できます。

AI エージェントと相性が悪い理由

  1. 非インタラクティブ実行: AI エージェントはプログラム的にコマンドを実行するため、対話的なプロンプトに応答できない
  2. 新しいコマンドの誤検出: pnpm、bun、deno など比較的新しいツールが「タイポ」扱いされやすい
  3. カスタムコマンド: プロジェクト固有のスクリプトやエイリアスも修正候補の対象になる

解決方法

1. correct 機能を無効化する

.zshrc に以下を追加します:

unsetopt correct
unsetopt correct_all

これで correct 機能が無効になり、AI エージェントがコマンドを実行しても止まらなくなります。

2. 確認プロンプト系のエイリアスを見直す

「安全のため」に設定しがちな確認プロンプト付きエイリアスも見直しましょう:

# こういう設定をしていませんか?
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

AI エージェントがファイル操作をするたびに確認待ちになってしまいます。

代替案: 確認なしにしつつ、ゴミ箱に移動する trash コマンドを使う

# macOS の場合(brew install trash でインストール)
alias rm='trash'

3. TMOUT(タイムアウト)設定の確認

セキュリティ目的で設定されていることがあります:

export TMOUT=300  # 5分で自動ログアウト

長時間実行されるコマンド(ビルド、テストなど)の途中でセッションが切れる可能性があります。

# 無効化する場合
unset TMOUT

4. 履歴設定の強化

AI エージェントが実行したコマンドも履歴に残すと、後から追跡できて便利です:

setopt extended_history       # タイムスタンプを記録
setopt inc_append_history     # 即座に履歴に追加
HISTSIZE=50000
SAVEHIST=50000

AI エージェント向け .zshrc サンプル

まとめると、以下のような設定になります:

# ===========================================
# AI エージェント時代の .zshrc 設定
# ===========================================

# --- correct 機能を無効化 ---
unsetopt correct
unsetopt correct_all

# --- タイムアウトを無効化 ---
unset TMOUT

# --- 履歴設定 ---
HISTFILE=~/.zsh_history
HISTSIZE=50000
SAVEHIST=50000
setopt extended_history
setopt inc_append_history
setopt share_history
setopt hist_ignore_dups

# --- 確認プロンプトなしのファイル操作 ---
# 必要に応じて trash コマンドを使用
# alias rm='trash'

まとめ

シェルの設定は、長らく「人間が快適に操作するため」に最適化されてきました。タイプミスの修正、危険な操作の確認、セッションのタイムアウト—すべて人間のためのセーフティネットです。

しかし AI エージェントがコマンドを実行する時代になった今、これらの「親切な機能」が逆に障害になることがあります。

correct 機能を無効化するだけでも、AI エージェントとの作業がかなりスムーズになるはずです。ぜひ試してみてください。


補足: この記事で紹介した設定は、AI エージェントを使う環境向けです。共有サーバーやセキュリティが重要な環境では、従来の安全設定を維持することをお勧めします。

Discussion