mcpField
D
Daemon

Daemon

github.com/danielmiessler生产力19.6k64 次安装1 天前更新
代码仓库

关于 Daemon

Daemon 是一款将 LifeOS 数据整理并发布为公开个人主页的技能。它使用确定性规则过滤内容、排除敏感文件,并在部署前提供预览和审批步骤。

主要功能

  1. 01汇总指定的 LifeOS 来源
  2. 02通过确定性规则过滤内容
  3. 03汇总时排除敏感文件
  4. 04审批前预览变更
  5. 05部署静态网站

适用场景

  1. 01根据 LifeOS 更新公开主页
  2. 02发布前审阅主页变更
  3. 03检查当前主页数据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/danielmiessler/lifeos --skill daemon

安装后在 Claude Code 中输入/daemon确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

Docs/
SecurityClassification.md
Tools/
SecurityFilter.ts
DaemonAggregator.ts
Workflows/
DeployDaemon.md
PreviewDaemon.md
ReadDaemon.md
UpdateDaemon.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,完全静态)

安全理念

  1. 默认私密: 除非明确标记为公开,否则所有数据均为私密
  2. 代码层面强制执行: SecurityFilter.ts 使用确定性模式匹配,而非大模型判断
  3. 结构性排除: 聚合器绝不会打开敏感文件(CONTACTS、FINANCES、HEALTH)
  4. 深度防御: 聚合器筛选器 + SecurityFilter + 提交前钩子 + 手动审批
  5. 默认拒绝: 如有疑问,则排除相关内容

数据源

DaemonAggregator 会从以下 LifeOS 数据源读取内容。只有在数据源存在时才会读取(由 existsSync 守卫)——使用统一单文件 TELOS.md 布局的安装不会包含以下各文件 TELOS 数据源,聚合器会正常跳过它们(--sources 会显示各数据源的 OK/MISSING 状态):

数据源提取内容章节
TELOS/MISSION.mdM1、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保留的章节(预测、日常安排、播客、偏好)各处

面向社区分支

此技能旨在保持通用性:

  1. Fork 公开的 Daemon 仓库
  2. 创建自己的私有数据仓库,并添加 daemon-data.json
  3. 使用自己的屏蔽名称/路径配置
  4. 聚合器会从标准 LifeOS 目录结构读取内容
  5. 使用 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

评论

支持 Markdown