关于 Daemon
Daemon 是一款将 LifeOS 数据整理并发布为公开个人主页的技能。它使用确定性规则过滤内容、排除敏感文件,并在部署前提供预览和审批步骤。
主要功能
- 01汇总指定的 LifeOS 来源
- 02通过确定性规则过滤内容
- 03汇总时排除敏感文件
- 04审批前预览变更
- 05部署静态网站
适用场景
- 01根据 LifeOS 更新公开主页
- 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(基于模式匹配,而非大模型)会移除姓名、路径、凭据和内部引用;部署步骤会构建完全静态的网站。聚合器绝不会打开敏感文件。
工作流路由
| 工作流 | 触发词 | 文件 |
|---|---|---|
| UpdateDaemon | “update daemon”、“refresh daemon” | Workflows/UpdateDaemon.md |
| ReadDaemon | “read daemon”、“check daemon”、“daemon status” | Workflows/ReadDaemon.md |
| PreviewDaemon | “preview daemon”、“daemon diff” | Workflows/PreviewDaemon.md |
| DeployDaemon | “deploy daemon”、“push daemon”、“ship daemon” | Workflows/DeployDaemon.md |
架构
双仓库模式:公开框架 + 私有内容。
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 使用确定性模式匹配,而非大模型判断
- 结构性排除: 聚合器绝不会打开敏感文件(CONTACTS、FINANCES、HEALTH)
- 深度防御: 聚合器筛选器 + SecurityFilter + 提交前钩子 + 手动审批
- 默认拒绝: 如有疑问,则排除相关内容
数据源
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 条 Ideas(标题 + 论点) | [RECENT_IDEAS] |
| PROJECTS.md | 公开仓库和网站 | 项目集成 |
| MEMORY/WORK/ | 主题(最近 14 天) | [CURRENTLY_WORKING_ON] |
| PRINCIPAL_IDENTITY.md | 公开简介、角色、关注领域 | [ABOUT] |
| 现有 daemon.md | 保留的章节(预测、日常安排、播客、偏好) | 各处 |
面向社区分支
此技能旨在保持通用性:
- Fork 公开的 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
注意事项
- **两个代码仓库:**公开框架(
~/Projects/daemon/)和私有内容(~/Projects/daemon-dm/)。框架可供分叉。内容属于你。 - **deploy.sh 会先运行 DeployGate,再在构建时将数据复制到框架中,最后进行清理。**门禁失败会阻止部署——请修复数据,绝不要绕过门禁。个人数据永远不会提交到公共代码仓库。
- **SecurityFilter 是代码,不是提示词。**如果需要添加新的拦截模式,请编辑 SecurityFilter.ts,而不是工作流 Markdown。
- **临时信息需要设置
expires。**status、now(通过 now_meta)、有时效的 offerings/requesting 项目,以及任何非默认位置,都必须包含 ISO 格式的expires字段。共有三层强制机制:DeployGate(阻止部署)、worker(提供内容时移除过期信息)、仪表板(在客户端隐藏)。要刷新过期的 status,请编辑 daemon-data.json,设置新的expires,然后运行 deploy.sh。 - **位置准则:默认使用粗略位置,实时位置仅作例外。**仅限城市/地区粒度;街道/ZIP/坐标/居住区域字符串会被门禁拦截。“今晚/我在……”之类的表述必须在对应项目上明确设置
realtime_approved: true——仅用于主体希望他人找到自己的活动。不使用自动 GPS/日历管道;只有收到明确指令才会更改位置。 - **实时动态仅限公开内容。**worker 会轮询博客 RSS、Beehiiv(官方 API)、YouTube RSS、GitHub 公开事件,以及所有者自己的 X 帖子——这些都是已发布的内容,从设计上就没有隐私风险。绝不要将 LifeOS 内部来源添加到
feeds。 - **Beehiiv 会拦截 RSS 抓取工具(403)。**新闻邮件来源使用 Beehiiv 官方 API(
type: "beehiiv"+ BEEHIIV_API_KEY worker 密钥),而非 /feed URL。 - 服务端响应在边缘动态生成,页面外壳则是静态的。
/daemon-data.json和/feed.json由 worker 按请求计算(run_worker_first);其余内容均为静态资源。数据变更仍需运行deploy.sh;动态内容会自行刷新。 - **上游框架代码仓库发布的是一个已生成的模板(回合并准则)。**其 main 分支是从经过清理的暂存副本发布的通用模板,绝不会直接推送工作树:该模板不包含分析数据、授权字体、favicon 和任何个人内容,并通过 daemon-data.json 中的数据字段(owner_name/owner_handle/fork_url)确定身份。发布工作流由维护者运行,不会随系统一起交付;安装后的系统中,你的 daemon 内容位于自己的私有代码仓库中,只有框架可供分叉。
执行日志
完成任何工作流后,追加一条 JSONL 记录:
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