mcpField
T
tee

tee

github.com/petr-korobeinikovエージェントワークフロー153 回インストール14 週間前に更新
リポジトリ

tee について

表示する出力を `tail` または `head` の一部に絞る場合も、全出力を保存するエージェント向けスキルです。エラーを含むログを一意な一時ディレクトリに記録し、この方法を避ける状況も示します。

主な機能

  1. 01`tee` で標準出力とエラーを記録
  2. 02一意な `mktemp -d` ディレクトリを使用
  3. 03表示する `tail` または `head` の範囲を維持
  4. 04保存したログのパスを表示
  5. 05記録を避けるケースを明示

活用シーン

  1. 01テスト出力の末尾より前にあるエラーの確認
  2. 02ビルド冒頭を表示しながらログを保存
  3. 03実行後に保存済みログを検索

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/petr-korobeinikov/skills --skill tee

インストール後、Claude Code で/teeを入力して読み込まれたか確認します。

詳細

tee

エージェントがコマンドを実行するとき、出力をそのまま tail -n N にパイプすると、 チャットは読みやすく保てますが、 末尾より前の行はすべて黙って破棄されます。 その中には、連鎖的な障害の最初のエラー、 要約の原因となった警告、 それより前に出力された手がかりも含まれます。

解決策は、トークンを1つ挿入するだけです。 tail/head の段階の前に tee "$log" を追加すると、 すべての出力が mktemp -d ディレクトリ内のファイルに保存されます。 画面に表示される範囲はそのままです。 保存したファイルは、後から Read、grep、tail、head で確認できます。

ルール

log=$(mktemp -d)/out.log
cmd 2>&1 | tee "$log" | tail -n 100
echo "full log: $log"
  • ディレクトリは、ハードコードした /tmp/... パスではなく mktemp -d で作成します。 mktemp -d は呼び出すたびに、一意でプライベートなディレクトリを標準出力に返します。 ハードコードしたパスは、並行実行や以前の実行で残ったデータと衝突します。
  • tee の前に標準エラーを標準出力へリダイレクトします(2>&1)。 こうすることで、エラーや警告もファイルに保存されます。
  • 画面に表示する範囲は tail -n N(または head -n N)を通して指定します。 失敗時の末尾や要約には tail、重要な情報が先頭にある場合は head を選びます。
  • ファイルを Read、grep、tail、head で再度開けるように、 最後の行にログのフルパスを出力します。

使用しない場合

  • 短く、出力範囲が限られている場合。 そもそも | tail -n N を付ける必要はありません。 パイプを完全に省きます (git status、git rev-parse、command -v foo、 1行の jq クエリなど)。
  • 出力が非常に長くなると予想される場合 — たとえば find /、巨大なツリーに対する grep -r、 数十 MB を出力する詳細なパッケージのインストールなどです。 出力全体を一時ファイルに保存すると、実質的な利点がないままディスクを消費します。 元の書き方どおりにコマンドを記述し (| tail -n N として損失を受け入れる)、 または先に出力元を絞り込みます (--quiet、--summary、-q、ツールごとのフィルターなど)。
  • 対話型コマンド(vim、less、REPL) — パイプによって UI が壊れます。
  • 人がリアルタイムで追っている出力 — たとえば、ユーザーが読んでいるサーバーログに対する tail -f などです。

例

悪い例 — tail への直接のパイプでは、それより前の出力が破棄されます。

npm test 2>&1 | tail -n 100

良い例 — tee を挿入して一時ファイルに保存します。

log=$(mktemp -d)/out.log
npm test 2>&1 | tee "$log" | tail -n 100
echo "full log: $log"

重要な情報が先頭にある場合の head を使った同様の書き方:

log=$(mktemp -d)/out.log
make build 2>&1 | tee "$log" | head -n 50
echo "full log: $log"

コマンドの実行後、出力されたパスをそのまま読み取れます — たとえば、同じ範囲を広げる(より大きな N を指定して tail/head を使う)、 キーワードで検索する(grep)、 指定した行範囲を読む(Read)といった操作ができます。

tail -n 500 "$log"
head -n 200 "$log"
grep -nE 'error|fail|warning' "$log"

適用範囲

エージェントが実行するコマンドに適用されます — 主に Bash ツールの呼び出しと、 エージェント自身が実行する scripts/ 内のシェルスニペットが対象です。 人間の読者向けに示すスニペット (インストール手順、コピー&ペースト用の例)には、 人間が出力の保存も求めていない限り、このパターンを適用しません。

コメント