distill-my-life について
distill-my-lifeは、Luciの活動を日次レポートとエンティティ記録にまとめ、ユーザーの ~/.Life に保存するスキルです。根拠に基づく処理手順、ファイル形式、障害時の対応、プロフィール更新の規則を定めています。
主な機能
- 01日ごとのLuci活動の取得
- 02構造化された日次レポートの作成
- 03人物、組織、プロジェクト、ツールの記録
- 04ユーザー規則と既存ファイル形式の遵守
- 05障害対応とプロフィール更新の確認
活用シーン
- 01未処理日のレポート作成
- 02活動の根拠に現れるエンティティの記録
- 03更新時期に達したプロフィールの更新
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ memories-ai-labs/ luci-skills --skill distill-my-lifeインストール後、Claude Code で/distill-my-lifeを入力して読み込まれたか確認します。
詳細
Distill — 日々の蒸留
Luci の Life ページは、これらのファイルをデータとして読み込みます。YAML と ## 見出しがスキーマです。見出しの下にある文章は、書かれているとおりに表示されます。スキーマで指定されていないフィールドを作らないでください。
Step 0: ライフファイルシステムを準備する
ライフファイルシステムは常にユーザーのホームディレクトリ内にあります。現在のリポジトリ内にはありません。
- macOS / Linux:
~/.Life - Windows:
%USERPROFILE%\.Life
~/.Life が存在しない場合は作成します。その後、次の構成を整えます。
~/.Life/
reflections/daily/ # daily reports (YYYY-MM-DD.md)
entities/
people/ # people
orgs/ # organizations
projects/ # projects
tools/ # software tools
不足しているディレクトリを作成します。事前に確認を求めないでください。すでにあるものを削除したり、移動したりしないでください。現在の作業ディレクトリには書き込まないでください。
次に、~/.Life 内のみを対象にファイルシステムのインデックスを探します。
~/.Life/CLAUDE.mdが存在する場合は、それを使用します。- 存在しない場合は、
~/.Life/AGENTS.mdが存在するか確認します。 - どちらも存在しない場合は、このスキルのデフォルト設定(英語、時間単位のブロック、外部への送信なし)で続行します。インデックスファイルは作成しないでください。Luci が初回起動時に両方を作成します。
インデックスが存在する場合は、その書き込みルール、日次レポートの形式、外部コネクターの設定に従います。キーが不足している場合は、上記のデフォルト設定を適用します。
Step 0.5: ユーザーのルールを読む
~/.Life/RULES.md が存在する場合は読み込みます。これはユーザーが手作業で作成したもので、誰が誰なのか、誰や何を除外するのか、レポートをどのように書くのかが記されています。
- この実行全体を通じて、このファイルに従います。インデックスまたはこのスキルと内容が異なる場合は、ルールファイルを優先します。
- 人物、アプリ、サイト、話題を除外するよう指定されている場合、その対象を日次ファイル、エンティティファイル、最終出力のいずれにも記載しないでください。
- **
RULES.mdには絶対に書き込まないでください。**作成、整理、書式変更、学んだ内容の追記も行わないでください。これはユーザーのドキュメントです。蒸留では読み込みのみ行います。 - ファイルが存在しない場合、または読み込めない場合は、デフォルト設定で続行します。作成しないでください。
Step 1: 処理する日付を決める
- 何かを書き込む前に、
~/.Life/reflections/daily/にYYYY-MM-DD.mdに一致するファイルがあるか確認します。一つもない場合は、そのことを覚えておきます。これは、このマシンで今回が初めての蒸留である可能性を意味し、Step 4 で考慮する必要があります。 - Bash で今日の日付を取得します(記憶から推測しないでください)。
- 範囲:最後に完了した蒸留から昨日まで。日次ファイルは、YAML フロントマターに
dateとobservationの両方がある場合にのみ完了とみなします。いずれかのキーがないファイルは未作成とみなされ、再度書き込みます。 - 完了している日、つまり昨日以前の日だけを対象にします。今日は絶対に処理しないでください。
- 完了したファイルがすでに存在する日付のみをスキップします。
- 未処理の日が 7 日を超える場合は、直近の 7 日のみを処理し、スキップした日付を最後に明記します。
- データがまったくない日にも、YAML と 1 つの
observationを含む完全なファイルを作成します。##の記録ブロックは含めません。捏造は絶対にしないでください。 - 「データなし」とは、その日の Luci コマンドがすべて終了コード 0 で何も返さなかった状態を指します。コマンドが失敗した日は、データなしの日ではありません。Step 2 を参照してください。
Step 2: 各日次ファイルを書き込む
Luci CLI でその日のアクティビティを取得し、~/.Life/reflections/daily/YYYY-MM-DD.md に書き込みます。古い日付から順に処理します。
Luci から 1 日分を取得する
<CLI> は luci スキルの説明どおりに解決します(検出ファイル、次に PATH)。先に status を実行しないでください。status は Luci を起動しませんが、実際のコマンドは Luci をバックグラウンドで起動し、起動を待ちます。以下の最初の usage 呼び出しが事前確認です。
範囲は現地時間でのエポックミリ秒です。<fromMs>:<toMs> の形式で指定します。シェルでその日の午前 0 時を取得し、記憶を頼りにしないでください。
- macOS:
date -j -f '%Y-%m-%d %H:%M:%S' 'YYYY-MM-DD 00:00:00' +%sを実行し、続けて* 1000 - Linux:
date -d 'YYYY-MM-DD 00:00:00' +%sを実行し、続けて* 1000 - Windows:
[DateTimeOffset]::new([datetime]'YYYY-MM-DD').ToUnixTimeMilliseconds()
toMs は翌日の午前 0 時から 1 を引いた値です。
- 画面:
<CLI> usage --tr <fromMs>:<toMs> --limit 500 --json。上限は厳密な最大値で、CLI にページング機能はありません。そのため、ちょうど 500 件返された場合は、1 時間ごとに再実行し(24 個の範囲)、結果を連結します。 - 音声:画面の項目に表示された 2、3 個の対象(会議名、プロジェクト名)について、
<CLI> transcript "<keyword>" --tr <fromMs>:<toMs> --limit 500 --jsonを実行します。「すべての音声」を取得するコマンドはありません。 - 詳細:テキストが薄く、内容を特定できない項目に限り、
frame <ID>を実行します。
各コマンドの終了コードを確認してください。
0で項目あり:その項目を使用します。0で項目なし:実際にデータがないことを示します。その日のすべてのコマンドで項目がなかった場合は、データなしの日として記録します。3:コマンドの形式が誤っています。<CLI> --helpで確認して修正し、再実行します。これはユーザーの責任ではありません。2で stderr に「didn't respond in time」と表示される場合:その範囲だけ、--limitを小さくするか、1 時間ごとの範囲にして再実行します。再度失敗した場合は停止します。2でそれ以外のメッセージが表示された場合、または1の場合:停止します。
停止とは、その日のデイリーファイルを書かず、後の日に進まず、不完全な結果からエンティティを書かず、推測で補わないことを意味します。それ以前の日に書き込み済みのファイルはそのまま残します。問題が発生した日と、CLI の stderr の行をそのまま報告してください(この行はユーザー向けで、パスは含まれていません)。その後、ユーザーが Luci を修正して再実行するまで待ちます。Luci がインストールされていれば、このような失敗は想定されません。再試行を繰り返したり、別のツールを試したりしないでください。
YAML(必須)
各デイリーファイルは、このフロントマターで始めます。observation は 1 文にします。スラッグは .md を除いたエンティティのファイル名に合わせます。リストが空の場合は [] を使います。文中のコロンでファイルが壊れないよう、observation は必ず > で折り返します。
---
date: 2026-08-24
samples: 187
audio_segments: 148
first: "01:21"
last: "23:06"
observation: >
Only 37 minutes of captured screen time before the 21-hour gap, and all
of it went into recording and re-recording the same talk.
projects:
- microsoft-luci-electron
people:
- matt-pocock
orgs: []
---
samples は、その日に usage が返した画面項目の数です。audio_segments は、確認したトランスクリプトの個別セグメント数です。トランスクリプトのクエリを実行していない場合は省略します。first と last は、最も早い画面項目と最も遅い画面項目の現地時間です。キーを省略してよいのは、そのデータ元に対するクエリを実行していない場合のみです。コマンドが失敗したという理由で省略してはいけません(コマンドが失敗した場合はステップ 2 で停止し、このファイルは書き込まれません)。
本文の下に observation を重複して記載しないでください。Life ページは YAML のフィールドを読み取ります。
本文
フロントマターの後に、次の内容を記載します。
- 英語の曜日を使った
# YYYY-MM-DD (Weekday)。 - 画面メモリに関する注意書きを短い段落で 1 つ。
- 時間ごとのブロック。画面のアクティビティとリアルタイムの文字起こしを、タイムスタンプに合わせます。客観的な内容のみを記載します。情報源が不確かな場合は記載しません。
見出しの形式は固定です。時間の間にはエヌダッシュを使います。タイトルまたは空白期間のラベルの前にはエムダッシュを使います。ほかの形式の ## 見出しは使わないでください。
## HH:MM–HH:MM
## HH:MM–HH:MM — title
## HH:MM–HH:MM — no samples ({duration})
空白期間は見出しのみとし、本文は付けません。空白を埋めるために存在しない時間を作り出してはいけません。終了時刻なしの単一タイムスタンプは使わないでください。
ステップ 3:エンティティを記録する
要約する際は、人物、組織、プロジェクト、ソフトウェアツールに注意してください。
まず ~/.Life/entities/ を読み込みます。その日のエビデンスに登場したエンティティをすべて記録してください。確認を求めてはいけません。
- 人物 →
~/.Life/entities/people/<slug>.md - 組織 →
~/.Life/entities/orgs/<slug>.md - プロジェクト →
~/.Life/entities/projects/<slug>.md - ソフトウェアツール →
~/.Life/entities/tools/<slug>.md
スラッグ:小文字の ASCII 文字、数字、ハイフンを使用します。名前のファイルがすでに存在する場合は、既存のファイル名を再利用します(YAML の name または # 見出しと照合してください)。
新規ファイル:
---
name: Microsoft-Luci-Electron
kind: project
---
# Microsoft-Luci-Electron
- 2026-08-24: eight threads still in flight, including Insights unlock
kind は person、org、project、tool のいずれかです。
既存ファイル:
- YAML がない場合は、現在の本文の上に
name/kindのフロントマターを挿入します。本文は削除しないでください。 - 今日の日付が
- YYYY-MM-DD:の箇条書きとしてまだ記載されていない場合は、追加します。 - 既存の箇条書きは編集しないでください。文章を要約に書き換えてはいけません。
ステップ 4:初回通知
~/.Life/reflections/daily/ に、この実行の前(ステップ 1)に YYYY-MM-DD.md ファイルがなく、かつステップ 2 で日次ファイルを少なくとも 1 つ作成した場合に限り、Luci のローカル通知センターにお祝いの行を 1 つ追加します。次にアプリを開いたときに表示されます。この操作は一度だけ実行してください。first-distill という id のエントリがすでにある場合は、完全にスキップします。
-
Luci の設定ファイルを探します。
- macOS:
~/.luciMicrosoft/luci-config.json - Windows:
%USERPROFILE%\.luci\luci-config.json - Linux:
~/.luci/luci-config.json
- macOS:
-
ファイルが存在しない場合は、このステップをスキップします。Luci はここでは実行されたことがありません。
-
ファイル全体を JSON として読み込みます。解析に失敗した場合は、このステップをスキップします。読み取れない設定ファイルを上書きしてはいけません。
-
ファイルには配列を保持する
notificationsキーがあります(キーがない場合は[]として扱います)。配列内に"id": "first-distill"を持つエントリがすでにある場合は、送信済みなのでスキップします。ない場合は、ファイル内の他のキーには触れず、次のオブジェクトを配列の先頭に追加します。{ "id": "first-distill", "kind": "distill", "title": "You just distilled your first day!", "body": "Your first daily report is in ~/.Life. Keep it up and Luci will build a real picture of your work over time.", "at": <current time as epoch milliseconds>, "read": false, "to": "/v2/life" } -
他のすべてのキーを読み込んだとおりに保持して、JSON オブジェクト全体を同じパスに書き戻します。
この操作で行が表示されるのは、次にアプリを開くか再起動したときだけです。Luci はこのファイルの変更をリアルタイムで監視しません。
ステップ 5:プロフィール
すべての日次ファイルとエンティティを書き込んだ後、ユーザーのプロフィール ~/.Life/profile.md を更新する時期かどうかを判断します。
- この実行を開始したプロンプトに
## Then write the profileセクションがある場合、またはプロフィールの更新時期ではないと書かれている場合は、Luci がすでに判断しています。その指示に従い、このステップの残りはスキップします。 - それ以外の場合、次のいずれかに該当すると更新時期です。
~/.Life/profile.mdが存在せず、~/.Life/reflections/daily/に日次ファイルが 3 つ以上ある。~/.Life/profile.mdが存在し、フロントマターのupdated:の日付が今日より 7 日を超えて前である。
更新時期の場合は、luci-profile スキルを使ってプロフィールを作成します。ファイルが存在しない場合は初回プロフィールを作成し、それ以外の場合は週次で書き直します。そのスキルがない場合は、先に https://github.com/Memories-ai-labs/Luci-skills からインストールしてください。更新時期でない場合は、何も書き込みません。
最終出力
- ステップ 0 で作成したフォルダー(あれば)。
- レポートを作成した日(ファイルパスを列挙)。YAML がなかったために書き直した日も含めます。
- スキップした日付とその理由。
- Luci コマンドが失敗した場合:失敗した日付、CLI のメッセージ(原文のまま)、およびそれ以降の日を処理しなかったこと。
- 書き込みまたは追記したエンティティファイル(あれば)。
~/.Life/RULES.mdが見つかり、適用されたかどうか。- ステップ 4 の初回通知を送信したかどうか。
- ステップ 5 でプロフィールを書き込んだか(初回または週次)、または更新時期でなかった理由。
~/.Life/CLAUDE.mdまたは~/.Life/AGENTS.mdに外部コネクターが設定されている場合は、それを通じて要約メッセージを 1 件送信します(実行ごとに必ず 1 件)。設定されていない場合は、何も送信しません。