Skip to content

feat(hpi): 端末のコマンド履歴 (atuin) を取り込む - #398

Merged
gapul merged 1 commit into
mainfrom
feat/hpi-atuin
Aug 21, 2026
Merged

feat(hpi): 端末のコマンド履歴 (atuin) を取り込む#398
gapul merged 1 commit into
mainfrom
feat/hpi-atuin

Conversation

@gapul

@gapul gapul commented Aug 21, 2026

Copy link
Copy Markdown
Owner

「ターミナルでやってたことも記録できるか」という話ですが、既に記録されていました。 atuin が入っていて、ローカルの SQLite に 3,915 コマンド(2026-06-18 以降)溜まっています。

atuin は既定で同期オフ・ローカル書き込みのみなので、記録そのものは最初から自前です。足りていなかったのは HPI から引く口だけでした。#397activitywatch.py と同じく上流にモジュールが無いので自作します。

なお ~/.zsh_history は存在しませんでした。atuin が唯一の履歴です。

何が取れるか

timestamp / duration / exit / command / cwd / session / hostname。作業ディレクトリと終了コードまで入っているのが効きます。

$ hpi doctor my.atuin
✅ OK  : my.atuin
   commands: 3915  (2026-06-18 → 2026-08-21)
   failed:   1126

よく打っているもの: claude 1012 / yazi 467 / brew 393 / cd 279 / ssh 206 / ls 149。

ActivityWatch との補完関係

両者は見ている層が違います。ActivityWatch は「Ghostty が前面にあった」までしか分からず、atuin は端末の中しか見ません。両方あって初めて時刻から作業が復元できます。

横断が実際に動くことを確認しました。

最後のコマンド: 2026-08-21T01:24:31 | ssh seebeck@raspberrypi.local
  その前後3分に前面だったアプリ: [('Ghostty', 80), ('System Settings', 2)]

これが HPI を入れた本来の目的です。ソースごとにバラバラだったものが1つの Python の面から引ける。

実装メモ

exit が -1 の行は「打った時点で行ができて、終わりを見ていない」ものです。実データで 3,915 中 1,313 と3分の1を占めていて、多くは claudessh のような長い対話セッションを閉じたケースでした。finished プロパティで判別し、failed() からは除いています。単純に exit != 0 で数えると1300件が偽の失敗になります。

hostnameMacBook-Mini:gapul の形で user がくっついているので分割しました。

稼働中の WAL を取りこぼさないよう sqlite_copy_and_open を使うのは activitywatch.py と同じです。

記録の層について

参考までに、この環境の記録は今こうなっています。

道具 HPI から
打鍵そのもの keystats まだ
端末のコマンド atuin この PR
前面のアプリ・ウィンドウ ActivityWatch #397
ブラウザのタブ ActivityWatch #397
位置 Dawarich まだ
音楽 ListenBrainz まだ

端末の出力まで残したいなら asciinema のような別の道具になりますが、それは記録というより録画なので、必要になってからでいいと思います。

端末で何を打ったかは、既に atuin がローカルの SQLite に記録していた。
既定では同期オフでローカルに書くだけなので、記録そのものは最初から自前。
足りていなかったのは HPI から引く口だけだった。

activitywatch.py と同じで上流にモジュールが無いので自作する。両者は補完関係で、
ActivityWatch は「Ghostty が前面にあった」までしか見えず、atuin は端末の中しか
見ない。両方あって初めて時刻から作業が復元できる。

exit が -1 の行は「打った時点で行ができて、終わりを見ていない」もの。実データで
3915 中 1313 がこれで、多くは claude や ssh のような長い対話セッションを閉じた
ケース。failed() では除いている。

hostname は MacBook-Mini:gapul の形で user がくっついているので分割する。

実機で確認済み:
- hpi doctor my.atuin が通る
- commands 3,915 / failed 1,126、期間は 2026-06-18 以降
- activitywatch と横断して、あるコマンドの前後3分に前面だったアプリを引ける
@gapul
gapul merged commit 994dcbb into main Aug 21, 2026
5 checks passed
@gapul
gapul deleted the feat/hpi-atuin branch August 21, 2026 04:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant