| name | aiko-resume |
| description | アイコ起動時に session-state/current.md を読み、未完了タスクがあれば再開を提案する。`.claude/CLAUDE.md` 起動シーケンス Step 7 から参照される(capability/skills/ 配下として両モードで自動読込)。 |
aiko-resume — セッション再開支援
ターミナルが落ちる・別ウィンドウで再起動する等で会話履歴が失われても、直前の作業を即座に再開できるようにするためのスキルです。
/aiko 起動時に CLAUDE.md の起動シーケンスから自動ロードされます(capability/skills/ 配下は両モードで自動読み込み)。
参照ファイル
| ファイル | 役割 |
|---|
.claude/session-state/current.md | 整理ステート(手動更新の本命) |
.claude/session-state/auto.jsonl | 自動ログ(hook で追記、補助情報) |
動作フロー
/aiko 起動直後の追加処理
通常の人格読み込みが終わったあと、起動メッセージを返す前に以下を実行します。
ステップ 1:current.md(手動ステート)の確認
current.md が存在するか確認します。
current.md の YAML frontmatter から status を読みます。
status: in_progress → 採用。次の「ステップ 3:提示」に進む。
status: completed または ファイルなし / 不正 → ステップ 2(auto.jsonl 推定)に進む。
ステップ 2:auto.jsonl(自動ログ)からの推定
current.md が再開ソースとして使えない場合、auto.jsonl の末尾 30 行を読んで前回の作業を推定します。
.claude/session-state/auto.jsonl の末尾 30 行を取得(ファイル無し / 空なら通常起動メッセージのみで終了)。
- 末尾エントリの
ts から「前回作業 = X 時間 / 日 前」を計算します。
- その 30 行の中で、
file フィールドの出現回数トップ 5 を集計します(同じパスの出現回数を合算してカウント、表示は重複除いたユニークパスのみ)。Bash エントリは desc を別カラムで保持。
- 提示できる材料が揃ったら「ステップ 3:提示」に進みます。
行数固定(30 行)の理由:
- 毎日連続で仕事するとは限らないため、「24h 以内」のような時間条件で切ると数日空いた途端に拾えなくなる。
- 行数なら「最後にアイコと働いた時の作業」を時間に関係なく拾える。
ステップ 3:提示
採用したソース(current.md / auto.jsonl)に応じて、起動メッセージに続けて以下のサマリを提示します。
A. current.md 採用時
### 前回の続き
**タスク**:<current_task>
**更新時刻**:<updated>
<## いまやってること を 1〜2 行に要約>
<## 次の一手 を 1〜2 行に要約>
続きから再開しますか?(または「別件」とお伝えください)
B. auto.jsonl 採用時
### 前回の続き(自動ログより推定)
**最終アクティビティ**:<ts から計算した相対時間>
**直近に触ってたファイル**:
- <path1>(N 回)
- <path2>(N 回)
- ...
このあたりの作業の続きから入りますか?(または「別件」とお伝えください)
C. 両方ある場合
current.md が status: in_progress なら A を優先。auto.jsonl は提示しない(current.md が新しいなら手動の整理が信頼できる)。ただし current.md の updated よりも auto.jsonl の末尾 ts が大幅に新しい場合(例:1 時間以上)、A の下に小さく「最終ファイル操作:<相対時間>」を 1 行添えるのは可。
ステップ 4:応答受け
ユーザーの返答を待ちます。
- 「続き」「やる」「再開」等 → 採用ソースの内容を踏まえてタスクに着手。current.md 採用時は中身全文を読み返してから動く。auto.jsonl 採用時は触ってたファイルを Read してコンテキスト復元してから動く。
- 「別件」「新規」「いや」等 → current.md のステータスは触らず、新しい依頼を待つ。auto.jsonl も触らない。
文体・口調はそのときの人格モード(origin / override)の話し方に従います。提示・確認の中身(ソース選択・要約方法・採用ロジック)はモードに依存しません。
current.md の更新方針(重要)
このスキルは current.md を 読む のみで、書きません。
current.md は手動の整理ステートとして運用します。更新は aiko-save スキルが、以下のタイミングでユーザー起点で行います。
- ユーザーが
/aiko-save を入力したとき
- ユーザーが「セーブして」「ステート保存」「スナップショット」等で明示要求したとき
- ユーザーが「終わり」「以上」「お疲れ」等で終了宣言したとき(
status: completed への遷移)
aiko-resume / aiko-save がユーザーの明示要求や終了宣言なしに current.md を書き換えることはありません。区切りや進捗の自動記録は auto.jsonl(PostToolUse hook で自動追記される自動ログ)が担います。
current.md フォーマット
---
updated: 2026-05-06T12:00:00+09:00
status: in_progress # in_progress | completed
current_task: 短く具体的に(例:エクスポート機能のリファクタ R3)
---
## いまやってること
- 1〜3 行で「今この瞬間」何をしているか
## 完了した分
- 箇条書き。チェック (✅) 付きで時系列に積む
## 次の一手
- 再起動後、最初に何をするべきか 1〜3 行
## 関連ファイル
- パスを箇条書き
## メモ(任意)
- 補足が必要なら
INVARIANTS との関係
- 保護ファイル(
aiko-origin.md / INVARIANTS.md / aiko-override.md)は触りません。
current.md も auto.jsonl も書きません(読むのみ)。書き込みは aiko-save スキルおよび PostToolUse hook が担当。
- 「再開しますか?」の提示と応答受けは I-5 と整合(曖昧な内容で勝手に動かない)。
エッジケース
| ケース | 挙動 |
|---|
current.md が壊れている / YAML 不正 | auto.jsonl 推定にフォールバック。current.md は触らず「ステートファイルが壊れているようです」と一言添える |
updated が 7 日以上前 | 「前回ステートが古いですが、まだ続けますか?」と確認 |
status: in_progress のままセッション終了 | session-end hook では何もしない(人格側で終了宣言時に completed 化) |
| auto.jsonl が空 / 30 行未満 | あるだけ読む。0 行なら推定スキップして通常起動メッセージのみ |
| auto.jsonl のエントリが全部「自分自身(aiko-resume / session-state ファイル)」だった | システムファイル操作だけだったとして「前回は仕組み調整だけだったようです」と提示し、続きの有無を確認 |
別プロジェクトで /aiko 起動 | current.md も auto.jsonl も無いので通常起動 |