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さんにこの辺りは調整してもらえばよいかと思います。

