リモートサーバーでAI CLIツールを記録
リモートのLinuxサーバーでClaude Code、Cursor CLIなどのAIコマンドラインツールを使っている場合、手元のパソコンのデスクトップアプリからはそのセッションが見えません。サーバーにヘッドレスエージェントをインストールしてください。デスクトップアプリと同じコマンドラインツール(Claude Code、Cursor CLI、Codex CLI、Gemini CLI、OpenCode、Aider、Ollama)を、実行中のセッションごとに、プロジェクト名と作業中か入力待ちかの状態とともに記録します。
インストール
curl -fsSL https://app.timeuno.io/install-agent.sh | bash
このスクリプトは次の処理を行います。
- お使いのCPU(x86_64またはarm64)用のバイナリを
~/.local/share/timeuno/bin/にダウンロードし、チェックサムを検証します。minisignがインストールされていれば、リリースの署名も検証します。 /usr/local/binにtimeuno-agentとしてリンクを作成します(書き込めない場合は~/.local/bin)。- bash、zsh、fish用のシェルフックを追加します。実行した各コマンドの名前を記録するものです(詳しくは後述)。
- systemdのユーザーサービスを設定し、lingeringを有効にします。これにより、ログアウト後もエージェントが動き続けます。
systemdサービスを設定しない場合はTIMEUNO_NO_SERVICE=1を、シェルフックを追加しない場合はTIMEUNO_NO_SHELL_HOOK=1を設定します。特定のバージョンをインストールするには、TIMEUNO_REFにリリースタグ(agent-v0.2.0など)を設定します。
接続する
timeuno-agent pair
リンクが表示されます。サーバーではなく手元のパソコンのブラウザで開き、接続を承認してください。詳しくはデバイスを接続するをご覧ください。承認したら、次を実行します。
systemctl --user start timeuno-agent
デバイスの外に送信される情報
エージェントが送信するデータはデスクトップアプリと同じです。各AIセッションの開始と終了、AIが作業中か待機中か、モデル、トークン数とコスト、プロジェクトフォルダです。プロンプトがデバイス(ここではサーバー)の外に出ることはありません。AIの回答、コマンドの出力、コードも同様です。
タイムシートの各行に作業内容を表示するため、次のタスクの詳細も送信します。
- AIツール自身がセッションに付けたタイトル
- AIが作成したコミットの件名
- AIが編集したファイルのパス(プロジェクトフォルダからの相対パス)
- タスクの種類(修正、開発、テスト、ドキュメントなど)と対象の領域(請求、ログインなど)。デバイス上で決まった一覧から選ばれ、あなたの言葉は使われません
- シェルフックが記録した、実行した各コマンドの名前(git、npm、make、dockerなど一部のツールでは最初の単語も含む。
git push、docker composeなど)と実行したフォルダ。行の残りは送信しません。ホームフォルダは~と表示されます
タイトルやコミットの件名のうち、キーやトークンのように見える部分は、送信前に[redacted]に置き換えられます。詳しくはAIツールをご覧ください。
タスクの詳細の送信をやめるには、設定 → あなたのデータ → タスクの詳細を共有するをオフにします。保存済みの詳細は削除されます。エージェントは次回の接続時から送信をやめ、まだ送信していないコマンドが入ったシェルフックのファイルを空にします。時間の記録は続きます。
シェルフック
インストーラーは、サーバーにあるシェル(bash、zsh、fish)ごとにフックを追加します。bashとzshでは~/.bashrcまたは~/.zshrcの末尾に# timeuno-shell-hookで終わる1行を追加し、fishでは~/.config/fish/conf.d/にファイルを作成します。フックはコマンドを実行する直前に、その名前とフォルダをファイルに書き込み、エージェントがそれを送信します。残るのはコマンド名だけで、git、npm、make、dockerなど一部のツールでは最初の単語も残ります。行の残りは記録しません。たとえばgit commit -m "ログインを修正"はgit commit、vim notes.txtはvimとして記録されます。実在するコマンドに解決できる名前だけを記録するため、打ち間違えた行や貼り付けた秘密情報は残りません。エージェントが接続されていないときや、アカウントでタスクの詳細を共有していないときは、フックは何も書き込みません。
- インストール時に追加しない場合は、
TIMEUNO_NO_SHELL_HOOK=1を設定します。 - あとから追加するには、
timeuno-agent shell-hook installを実行します。 - 削除するには、
timeuno-agent shell-hook removeを実行します。まだ送信していないコマンドも削除されます。 timeuno-agent statusでは、bash、zsh、fishそれぞれについて、フックがインストールされているか、最後にコマンドを記録した日時、ファイルのサイズを確認できます。
コマンド
| コマンド | 内容 |
|---|---|
timeuno-agent pair | エージェントをアカウントに接続します。 |
timeuno-agent status | バージョン、自動アップデートの有無、検出したAIツール、シェルごとのシェルフックの状態を表示します。 |
timeuno-agent shell-hook install | シェルフックを追加します(通常はインストーラーが追加します)。 |
timeuno-agent shell-hook remove | シェルフックを削除します。 |
timeuno-agent update | 最新バージョンを今すぐインストールします。 |
timeuno-agent run | エージェントをフォアグラウンドで実行します(通常はサービスが実行します)。 |
timeuno-agent version | バージョンを表示します。 |
アップデート
systemdサービスとして実行している場合、エージェントは起動の数分後に新しいバージョンを確認し、その後は6時間ごとに確認します。署名を検証してから自身を置き換え、再起動します。
timeuno-agent updateを実行した後は、systemctl --user restart timeuno-agentを実行してください。- 自動アップデートをオフにするには、
~/.config/timeuno/config.jsonで"auto_update": falseを設定するか、サービスの環境変数にTIMEUNO_NO_AUTO_UPDATE=1を設定します。
バージョン0.1.0でインストールしたエージェントは自動でアップデートできません。インストールコマンドを一度だけ再実行してください。
systemctlが失敗する場合
systemctl --userでFailed to connect to bus: Permission deniedと表示される場合は、そのシェルでXDG_RUNTIME_DIR=/run/user/$(id -u)を設定してから再試行してください。