Daemon について
Daemonは、LifeOSのデータから公開プロフィールを作成・公開するスキルです。決定的なルールで内容をフィルタリングし、機密ファイルを除外したうえで、デプロイ前にプレビューと承認を行います。
主な機能
- 01指定されたLifeOSソースを集約
- 02決定的なルールで内容をフィルタリング
- 03集約時に機密ファイルを除外
- 04承認前に変更をプレビュー
- 05静的サイトをデプロイ
活用シーン
- 01LifeOSから公開プロフィールを更新
- 02公開前にプロフィールの変更を確認
- 03現在のプロフィールデータを確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ danielmiessler/ lifeos --skill daemonインストール後、Claude Code で/daemonを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
Docs/SecurityClassification.mdTools/SecurityFilter.tsDaemonAggregator.tsWorkflows/DeployDaemon.mdPreviewDaemon.mdReadDaemon.mdUpdateDaemon.md詳細
カスタマイズ
実行する前に、次の場所にユーザーのカスタマイズがあるか確認してください。
~/.claude/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/Daemon/
このディレクトリが存在する場合は、そこにある SecurityOverrides.md または PREFERENCES.md を読み込み、適用してください。これらの設定は、既定のセキュリティ分類より優先されます。ディレクトリが存在しない場合は、スキルの既定の設定に従ってください。
音声通知
curl -s -X POST http://localhost:31337/notify \
-H "Content-Type: application/json" \
-d '{"message": "Running the WORKFLOWNAME workflow in the Daemon skill to ACTION"}' \
> /dev/null 2>&1 &
Daemon スキル
機能
公開用の Daemon プロフィールを管理します。プロフィールは、現在取り組んでいること、考えていること、読んでいること、作っていることを掲載する、常に更新されるページです。LifeOS システムからデータを取得し、決定論的なセキュリティフィルターにかけて、公開しても安全なコンテンツだけを残し、静的サイトをデプロイします。ワークフローでは、更新、閲覧、プレビュー、デプロイを行います。
課題
毎週プロフィールページを手作業で編集せず、個人情報を漏らすこともなく、常に最新の公開ページを維持したいとします。実際のコンテキストは LifeOS にあります。目標、プロジェクト、アイデア、アイデンティティのほか、連絡先、財務情報、健康情報、名前、パス、認証情報など、決して公開してはならない情報も含まれています。安全な情報を手作業でコピーするのは時間がかかり、ミスをすれば取り消せない情報を公開してしまいます。このスキルは、安全な情報源を集約し、コードレベルで機密情報をブロックして、公開前にプレビューして承認する仕組みを提供します。
仕組み
DaemonAggregator は LifeOS の情報源を読み取り、daemon-data.json に統合します。決定論的な SecurityFilter(LLM ではなくパターンマッチング)が、名前、パス、認証情報、内部参照を除去します。デプロイ時には、完全な静的サイトをビルドします。機密ファイルが DaemonAggregator によって開かれることはありません。
ワークフローの振り分け
| ワークフロー | トリガー | ファイル |
|---|---|---|
| UpdateDaemon | 「daemon を更新」「daemon を再読み込み」 | Workflows/UpdateDaemon.md |
| ReadDaemon | 「daemon を読む」「daemon を確認」「daemon の状態」 | Workflows/ReadDaemon.md |
| PreviewDaemon | 「daemon をプレビュー」「daemon の差分」 | Workflows/PreviewDaemon.md |
| DeployDaemon | 「daemon をデプロイ」「daemon をプッシュ」「daemon を公開」 | Workflows/DeployDaemon.md |
アーキテクチャ
2 つのリポジトリを使うパターンです。公開用フレームワークと非公開コンテンツを分けます。
LifeOS SOURCES (private, read-only)
TELOS/ (missions, goals, books, movies, wisdom)
KNOWLEDGE/Ideas/ (title + thesis only)
PROJECTS.md (public projects only)
MEMORY/WORK/ (abstracted to topic themes)
PRINCIPAL_IDENTITY.md (public bio data)
│
├──[DaemonAggregator.ts]──→ Reads sources, merges with existing data
│
├──[SecurityFilter.ts]──→ Deterministic code-level allowlist filter
│ Strips names, paths, credentials, internal refs
│ NOT an LLM filter — enforced by pattern matching
│
└──→ daemon-data.json → ~/Projects/daemon-dm/ (PRIVATE repo)
│
├──[Tools/DeployGate.ts]──→ Deterministic pre-deploy gate (blocks on
│ expired/ungated ephemera, street-address/ZIP/
│ coordinate/home-area strings, unapproved
│ real-time phrasing, credentials, private feed URLs)
│
└──[deploy.sh]──→ Copies JSON into framework → VitePress build → Cloudflare WORKER
│
~/Projects/daemon/ (PUBLIC repo — forkable framework)
│
src/worker.ts (generic):
• /daemon-data.json — served through the edge with expired
ephemera STRIPPED at request time (status/now/offerings/
requesting items with past `expires`; non-default location
falls back to location_default)
• /feed.json — live-activity items aggregated every 30 min
(cron + lazy refresh) from PUBLIC sources only, configured
in daemon-data.json `feeds` (rss | beehiiv | github | x);
cached in KV FEED_KV
• secrets (CF worker secrets, never in code): X_BEARER_TOKEN,
BEEHIIV_API_KEY
STRUCTURALLY EXCLUDED (never read):
CONTACTS.md, FINANCES/, HEALTH/, TRAUMAS.md,
KNOWLEDGE/People/, KNOWLEDGE/Companies/,
スキルの構成
skills/Daemon/
├── SKILL.md (this file)
├── Tools/
│ ├── DaemonAggregator.ts (reads LifeOS sources → daemon-data.json)
│ └── SecurityFilter.ts (deterministic content sanitizer)
├── Workflows/
│ ├── UpdateDaemon.md (aggregate → preview → approve → deploy)
│ ├── ReadDaemon.md (read current daemon-data.json)
│ ├── PreviewDaemon.md (show diff without deploying)
│ └── DeployDaemon.md (bash deploy.sh from daemon-dm)
└── Docs/
└── SecurityClassification.md (public/private data categories)
重要なパス
| 用途 | パス |
|---|---|
| 非公開データリポジトリ | ~/Projects/daemon-dm/ |
| daemon-data.json | ~/Projects/daemon-dm/daemon-data.json |
| デプロイスクリプト | ~/Projects/daemon-dm/deploy.sh |
| 公開用フレームワークリポジトリ | ~/Projects/daemon/ |
| セキュリティ分類 | ${LIFEOS_SKILL_DIR}/Docs/SecurityClassification.md |
| セキュリティの上書き設定 | ${LIFEOS_USER_DIR}/CUSTOMIZATIONS/SKILLS/Daemon/SecurityOverrides.md |
公開中のエンドポイント
| エンドポイント | 用途 |
|---|---|
daemon.example.com | 公開ウェブサイト(Cloudflare Pages、完全な静的サイト) |
セキュリティの考え方
- 既定では非公開: 明示的に公開に分類されるまで、すべてのデータは非公開です。
- コードレベルで適用: SecurityFilter.ts は決定論的なパターンマッチングであり、LLM による判断ではありません。
- 構造的な除外: 機密ファイル(CONTACTS、FINANCES、HEALTH)が DaemonAggregator によって開かれることはありません。
- 多層防御: Aggregator フィルター + SecurityFilter + pre-commit フック + 手動承認
- 安全側に倒す: 判断に迷う場合は、コンテンツを除外します。
データソース
DaemonAggregator は、以下の LifeOS ソースを読み込みます。各ソースは存在する場合にのみ読み込まれます(existsSync で確認)。統合された単一ファイルの TELOS.md レイアウトを使用するインストールには、以下の個別ファイルの TELOS ソースがないため、アグリゲーターはそれらを正常にスキップします(--sources でソースごとの OK/MISSING 状態を確認できます)。
| ソース | 抽出内容 | セクション |
|---|---|---|
| TELOS/MISSION.md | M1、M2(公開ミッション) | [MISSION] |
| TELOS/GOALS.md | 公開プロジェクトの目標 | [TELOS] |
| TELOS/BOOKS.md | 書籍のタイトル | [FAVORITE_BOOKS] |
| TELOS/MOVIES.md | 映画のタイトル | [FAVORITE_MOVIES] |
| TELOS/WISDOM.md | 上位5件の引用 | [WISDOM] |
| KNOWLEDGE/Ideas/_index.md | 最近のアイデア10件(タイトル+主張) | [RECENT_IDEAS] |
| PROJECTS.md | 公開リポジトリとサイト | プロジェクトの統合 |
| MEMORY/WORK/ | トピックのテーマ(直近14日間) | [CURRENTLY_WORKING_ON] |
| PRINCIPAL_IDENTITY.md | 公開プロフィール、役割、注力分野 | [ABOUT] |
| 既存の daemon.md | 保持されるセクション(予測、ルーティン、ポッドキャスト、好み) | 複数 |
コミュニティによるフォーク
このスキルは汎用的に使えるよう設計されています。
- 公開 Daemon リポジトリをフォークします
daemon-data.jsonを含む独自のプライベートデータリポジトリを作成します- 独自のブロック対象名/パスを指定して を設定します
- アグリゲーターは標準の LifeOS ディレクトリ構造から読み込みます
deploy.shを使用してビルドし、独自の Cloudflare Pages にデプロイします
例
例1:更新サイクル全体
User: "update daemon"
→ Aggregates LifeOS data sources
→ Applies security filter (deterministic)
→ Shows preview diff to user
→ User approves
→ Writes daemon-data.json to daemon-dm → deploys static site
例2:現在の状態を確認
User: "check daemon"
→ Reads daemon-data.json from daemon-dm
→ Shows section-by-section status
例3:コミット前にプレビュー
User: "preview daemon"
→ Runs aggregator in preview mode
→ Shows diff against current daemon-data.json
→ No writes, no deploys
注意点
- リポジトリは2つあります: 公開フレームワーク(
~/Projects/daemon/)と非公開コンテンツ(~/Projects/daemon-dm/)です。フレームワークはフォークできます。コンテンツはご自身のものです。 - deploy.sh は最初に DeployGate を実行し、その後ビルド時にフレームワークへデータをコピーしてから、クリーンアップします。 ゲートに失敗するとデプロイはブロックされます。データを修正し、ゲートを回避しないでください。個人データが公開リポジトリにコミットされることはありません。
- SecurityFilter はコードであり、プロンプトではありません。 新しいブロック対象パターンを追加する場合は、ワークフローの Markdown ではなく SecurityFilter.ts を編集してください。
- 一時データには
expiresが必要です。 status、now(now_meta 経由)、期間限定の提供項目やリクエスト項目、デフォルト以外の場所には、いずれも ISO 形式のexpiresフィールドが必要です。適用レイヤーは3つあります:DeployGate(ブロック)、worker(配信時に除去)、dashboard(クライアント側で非表示)。古くなった status を更新するには、daemon-data.json のexpiresを新しい値に編集して deploy.sh を実行してください。 - 位置情報の原則:原則は大まかに、例外としてリアルタイムにします。 市や地域の粒度にとどめます。通り名、郵便番号、座標、自宅周辺を示す文字列はゲートでブロックされます。「今夜」「今いる場所」といった表現には、その項目に明示的な
realtime_approved: trueが必要です。これは、本人が見つけてもらうことを望むイベントに限って使用します。GPS やカレンダーとの自動連携パイプラインはなく、位置情報は明示的なコマンドでのみ変更されます。 - ライブフィードで利用できるのは、公開済みのコンテンツのみです。 worker はブログの RSS、Beehiiv(公式 API)、YouTube RSS、GitHub の公開イベント、オーナー自身の X の投稿をポーリングします。いずれもすでに公開されたコンテンツであり、設計上プライバシーリスクはありません。LifeOS 内部のソースを
feedsに追加しないでください。 - Beehiiv は RSS スクレイパーをブロックします(403)。 ニュースレターのソースには /feed URL ではなく、公式 Beehiiv API(
type: "beehiiv"と BEEHIIV_API_KEY worker シークレット)を使用します。 - 配信はエッジで動的に行われ、ページシェルは静的です。 /daemon-data.json と /feed.json はリクエストごとに worker(
run_worker_first)が生成し、それ以外は静的アセットです。データを変更した場合は、引き続きdeploy.shが必要です。フィードのコンテンツは自動更新されます。 - 上流のフレームワークリポジトリが公開するのは、生成済みのテンプレートです(マージバックの原則)。 その main ブランチは、スクラブ済みのステージングコピーから公開される、汎用のクリーンなテンプレートです。作業ツリーを直接プッシュすることはありません。このテンプレートには、分析機能、ライセンス対象のフォント、ファビコン、すべての個人コンテンツは含まれず、アイデンティティは daemon-data.json のデータ(owner_name/owner_handle/fork_url)によって設定されます。公開ワークフローはメンテナー側のもので、配布されません。インストール済みのシステムでは、daemon のコンテンツはご自身の非公開リポジトリに保存され、フォークできるのはフレームワークのみです。
実行ログ
ワークフローの完了後、JSONL エントリを1つ追記してください:
echo '{"ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","skill":"Daemon","workflow":"WORKFLOW_USED","input":"8_WORD_SUMMARY","status":"ok|error","duration_s":SECONDS}' >> ~/.claude/LIFEOS/MEMORY/SKILLS/execution.jsonl