Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

OpenClawが実行したLinuxコマンドを確認する

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

OpenClawでDiscord経由で依頼してAIが実行したLinuxコマンドは.bash_historyには書かれないようで、セッションのやり取りが記載されているファイルから抽出する必要があるようです。

が、そのままではとても読めたものではないので、

うちのAI(ChatGPT Plus)にうちの環境に合わせた抽出整形シェルスクリプトを作ってもらいました。

まず、AIに実行したコマンドが含まれる.jsonl 形式(改行区切りのJSON)のトランスクリプトファイルを探してもらいます。

その後、以下のようなシェルスクリプトで引数にjsonlを渡せば一覧で表示できるようです。

※defaultで設定されているファイルがありますが、引数で別ファイルを渡せばそちらを読み込みます。

#!/usr/bin/env bash
set -euo pipefail

default_transcript="/path/to/session.jsonl"
transcript="${1:-$default_transcript}"

if ! command -v jq >/dev/null 2>&1; then
  echo "jq is required but was not found." >&2
  exit 1
fi

if [[ ! -f "$transcript" ]]; then
  echo "Transcript not found: $transcript" >&2
  exit 1
fi

jq -r '
  .message? as $message
  | select($message.role=="assistant")
  | $message.content[]?
  | select(.type=="toolCall" and (.name=="bash" or .name=="exec_command"))
  | .arguments.command // .arguments.cmd // .input.command // .input.cmd // empty
' "$transcript"

AIのモデルの違いというか、流儀というか、コマンドの実行履歴の記載方法に違いがある場合はうまくフィルタにひっかからないようです。例えばうちの場合は以下のような違いがありました。

別のサーバのファイルでは、toolCall の名前として bash または exec_command を探すようになっていますが、私が現在実行しているセッションでは toolCall の名前が exec と記録されています。

AIさんにこの辺りは調整してもらえばよいかと思います。

タイトルとURLをコピーしました