拓冰建站拓冰建站
首页 / 资讯中心 / 正文

LifeOS LocalIntelligence:面向任意美国城市的公民情报聚合技能全解析

LifeOS LocalIntelligence面向任意美国城市的公民情报聚合技能全解析【免费下载链接】LifeOS⛰️ The Life Operating System — an intent engineering platform that moves you from your current state to your ideal state, in life and work.项目地址: https://gitcode.com/GitHub_Trending/pe/LifeOS导读LocalIntelligence 是 LifeOS 中的一项通用公民情报聚合技能skill它不针对任何单一城市做硬编码而是从主理人principal的身份文件运行时解析出家乡城市Hometown并行抓取建筑许可、犯罪、新开业商家、公职人员、立法、选举、逮捕与本地新闻八类数据汇成一份每日 JSON 摘要供 Pulse 的 LOCAL 标签页消费。读完本文你将掌握该技能的整体架构、Fetcher 契约、Refresh.ts编排流程、用户自定义源sources.json的完整 Schema以及--fillAI 补全、无覆盖保护no-clobber guard等关键工程细节并能直接在 LifeOS 中配置和运行它。一、它解决什么问题你居住地真正发生的事情分散在十几个几乎没人查看的网站上城市的许可门户、市议会议程系统、治安官日志、本地报纸、选举办公室。没有任何单一信息流会告诉你一条新法令正在表决、街对面正在盖楼、或一场选举即将到来。大多数本地新闻工具要么只覆盖单一城市要么硬编码端点导致频繁失效要么把好内容放在付费墙后面。LocalIntelligence 的设计目标正是解决这三类痛点跨全部美国城市保持通用运行时解析目标城市无每城市专属配置、无硬编码端点、优雅降级某个源无数据时返回空态而不是让整个摘要白屏、数据可追溯每条 item 都携带真实来源链接。技能定义位于 LifeOS/install/skills/LocalIntelligence/SKILL.md其元信息声明适用于本地新闻、家乡新闻、市议会会议、建筑许可、市长动态、选票提案、法令、近期逮捕、公民情报、本地摘要等场景不用于全国新闻或任意城市犯罪查询。二、核心设计Hometown 永不硬编码技能的每条工作流和每个工具都在运行时通过Tools/Hometown.ts解析家乡城市import { readHometown } from ./Tools/Hometown.ts const { city, state, zip, county } await readHometown()从源码 Tools/Hometown.ts 可以看到完整的解析逻辑身份文件路径可用环境变量LIFEOS_PRINCIPAL_IDENTITY覆盖默认值为~/.claude/LIFEOS/USER/PRINCIPAL/PRINCIPAL_IDENTITY.md使用严格正则HOMETOWN_RE匹配 Quick Reference 中的- **Hometown:** City, ST (ZIP zip, County County)行ST可以是两位 USPS 州代码或完整州名括号部分可选但推荐内置了完整的 50 州 DC 的州名→州代码映射表STATE_NAME_TO_CODE两字母州代码直接通过STATE_CODES集合校验括号内容解析出zip支持12345或12345-6789格式与county派生citySlug/stateSlugkebab-case 化用于 Patch RSS 这类模板化 URL未找到Hometown:行时抛出NoHometownErrorCLI 运行会打印明确引导信息并以退出码 2 结束——没有备选城市。这正是技能保持城市无关、具体城市只存在于用户身份文件的关键机制。三、工作流路由SKILL.md 定义了 9 条工作流及其触发短语位于 LifeOS/install/skills/LocalIntelligence/Workflows/工作流触发示例对应文件DailyBriefdaily local digest、whats happening in my city、refresh local intelWorkflows/DailyBrief.mdConstructionnew construction、building permits、whats being builtWorkflows/Construction.mdCrimecrime stats、is my city safer、crime trendWorkflows/Crime.mdBusinessnew businesses、business openings、business closuresWorkflows/Business.mdOfficialscity council、mayor、school board、public officialsWorkflows/Officials.mdLegislationpending laws、council agenda、ordinance vote、new laws in effectWorkflows/Legislation.mdElectionsupcoming election、ballot measures、whos running、polling locationWorkflows/Elections.mdArrestsrecent arrests、police blotter、sheriff blotterWorkflows/Arrests.mdNewslocal news、hometown news、headlines from my cityWorkflows/News.md四、Fetcher 契约所有抓取器的统一接口所有内置抓取器遵循同一函数签名定义于 Tools/Types.tstype Item { title: string; source: string; url: string; date: string; summary?: string } type FetchResult { items: Item[]; source_status: ok | unavailable | empty; errors?: string[] } export async function fetch(home: Hometown): PromiseFetchResult关键约定不抛异常返回空态抓取器遇到无数据情况返回unavailable或empty而非抛出Refresh.ts通过Promise.allSettled并行运行全部八个抓取器单个源失效绝不会让整份摘要白屏source_status: empty与unavailable语义不同empty表示源返回 200 但零条匹配小城镇常见unavailable表示 4xx/5xx 或 DNS 失败Pulse 仪表盘对两种状态渲染不同的空态错误信息落入meta.errors带失败的源标签。五、Refresh 编排器与双路径持久化Tools/Refresh.ts 是整套流水线的核心编排器运行流程如下readHometown()解析城市refresh(home)通过Promise.allSettled并行执行八个 fetcherFetchConstruction、FetchCrime、FetchBusiness、FetchOfficials、FetchLegislation、FetchElections、FetchArrests、FetchNews构建含meta城市、州、县、邮编、生成时间、sources_used、sources_failed、errors与八个分区的 DigestapplyUserSources(digest)合并用户确定性源若带--fill参数执行claudeFill(digest, home)补全仍为空的分区persist(digest)写盘。每次刷新的抓取顺序内置 fetcher →UserSources.ts确定性、用户配置→ClaudeFill.ts仅补空分区。确定性数据永远优先于模型调研结果——用户源已填充的分区绝不会再被 AI 补全覆盖。输出路径与 no-clobber 保护每次 persist 会写带日期历史文件~/.claude/LIFEOS/MEMORY/DATA/LocalIntelligence/YYYY-MM-DD_city_state_digest.json周/月/年视图聚合这些历史文件latest.json同时写入两处LIFEOS/USER/CUSTOMIZATIONS/SKILLS/LocalIntelligence/Pulse 模块主读路径与MEMORY/DATA/LocalIntelligence/遗留回退路径。SKILL.md 的 Gotchas 记录了一个真实事故2026-05-03 至 2026-07-16 期间Refresh.ts只写遗留路径导致标签页静默展示了 2.5 个月前的摘要而每天 6 点的任务却成功运行。修复后persist()双写两条路径都不允许删除。no-clobber 保护是承重墙若一次全空运行fetcher 全挂、fill 失败生成了带日期的文件但绝不会覆盖已填充的latest.json否则一次故障的 6 点运行就会清空整个仪表盘。实现见 Tools/Refresh.ts当totalItems(digest) 0且已存在非空 latest 时latestSkipped置真仅落盘 dated 文件用于历史/调试。六、用户自定义源sources.json 完整 Schema城市专属 URL 属于用户配置永不进入公开技能。配置文件位于~/.claude/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/LocalIntelligence/sources.json由 Tools/UserSources.ts 在每次刷新时读取Schema 详见 Tools/UserSources.help.md{ sources: [ { section: news, name: Local Paper, type: rss, url: https://example.com/feed, max_items: 7 }, { section: crime, name: City Crime API, type: json, url: https://example.org/api/crimes?days2, items_path: items, map: { title: {offense_type} — {location}, date: {reported_date} }, link: https://example.org, title_case: true } ] }支持的字段取自 Tools/UserSources.ts 的类型定义字段说明section归属分区必须是八类之一construction/crime/business/officials/legislation/elections/arrests/newsname源名称出现在 item 的source字段typerssRSS 2.0 / Atom或json任意 JSON GET 端点url源地址items_pathJSON 模式下数组的 dot-path默认响应根mapJSON 模式的{field}模板title/date/summarylink每条 item 的链接固定 URL 或{field}模板backfill_url可选的更深时间窗 URL供 Tools/Backfill.ts 使用max_items每源最大条数默认 7title_case标题首字母大写原始 API 枚举值读起来生硬strip_title_suffix按最后一个 - 拆分聚合源标题并把后缀提升为 source针对 Google News 的Headline - Publication模式filter_title标题必须包含的不区分大小写子串区域源过滤max_age_days丢弃早于 N 天的条目聚合搜索源按相关性排序可能返回十年前旧闻这是确定性兜底——仅靠when:操作符仍会漏进旧条目enabled置false可禁用某源实现细节RSS 解析正则切出item/entry块逐个提取 title、link含 Atom 的link href单独处理、pubDate/published/updated/dc:date摘要若只是标题回声加刊物名聚合源常见噪音会被丢弃JSON 解析通过 dot-path 取数组map.*模板用{field}占位符替换支持嵌套字段link支持固定值或逐条模板合并语义用户条目前插进分区并按标题去重分区置为ok因此 ClaudeFill 会跳过该分区失败源落入meta.errors绝不导致整份摘要失败容错配置文件缺失静默无用户源非错误JSON 损坏只打日志并返回空列表不让整个刷新失败单源 20 秒超时FETCH_TIMEOUT_MSUser-Agent 为LifeOS-LocalIntelligence/1.0 (personal civic digest)配置位于LIFEOS/USER/**受管控删除区城市专属 URL 永不进入公开技能。七、--fill 模式AI 补全与确定性校验bun run Tools/Refresh.ts --fill在跑完 fetcher 与用户源后由 Tools/ClaudeFill.ts 启动单个启用 WebSearch/WebFetch 的claude --print子进程一次性调研所有空/不可用分区并返回严格 JSON。每日 Pulse cron 与仪表盘 Refresh 按钮都使用--fill裸调用保持纯确定性。各分区的调研窗口SECTION_ASKSconstruction 最近 14 天、crime 最近 7 天、business 最近 30 天、officials 最近 14 天、legislation 最近 30 天、elections 即将到来、arrests 最近 7 天、news 最近 7 天。关键工程约束模型输出绝不未经校验进入摘要validateSection()做字段检查title/source 非空、URL 必须匹配^https?://...形态、URL 形状校验与上限截断每分区最多 10 条无效条目被丢弃并在meta.errors记录数量fill 只能增不能减fill 失败时退化为 fetcher 的摘要ok分区永不覆盖计费与嵌套会话安全子进程不传ANTHROPIC_API_KEY/ANTHROPIC_AUTH_TOKEN走订阅 OAuth并 unsetCLAUDECODE防止嵌套会话检测拒绝启动镜像LIFEOS/TOOLS/Inference.ts的做法LIFEOS_NOTIFICATION_CHANNEL置为headless杜绝桌面语音通道泄漏8 分钟默认超时DEFAULT_TIMEOUT_MS 480_000。八、八类数据源通用源目录References/DataSources.md 是全部通用公民数据源的目录所有源都基于{city, state}偶尔含 county推导无每城市配置Construction美国人口普查局建筑许可调查月度、MSAplace 级、最统一的来源、城市开放数据许可门户许多城市用 Accelaapo/...端点、规划委员会议程Granicus/Legistar 发现Crime委托给专门的犯罪统计技能本技能不直接抓取Business城市开放数据营业执照数据集、县书记官 DBA 备案、商会会员公告OfficialsBallotpedia API按城市州、Google News 官员话题搜索、城市新闻稿 feedLegislationOpenStates APIhttps://v3.openstates.org/州级待决已通过法案、Granicus/Legistar市议会议程通过知名 URL 模式、市议会日历iCal/RSS条目携带metadata.status pending | enactedElectionsBallotpedia API选举、候选人、选票提案、Vote.gov州注册投票信息链接、县选民登记处投票站 URL 尽力发现Arrests县治安官登记日志、市警局每日 blotter、Patch crime 标签软回退仅公开数据无付费人肉搜索聚合器、无绕过 CAPTCHANewsPatch RSShttps://patch.com/state-slug/city-slug/feed、Google News 话题搜索city, state、可选区域媒体经PREFERENCES.md。九、Pulse 集成JSON 写与读的耦合点技能写 JSONPulse 读 JSON耦合只存在于两处SKILL.md 明确说明Pulse 模块~/.claude/LIFEOS/PULSE/modules/local-intelligence.ts只读MEMORY/DATA/LocalIntelligence/latest.json暴露GET /api/local-intelligence与POST /api/local-intelligence/refreshPulse 仪表盘标签页~/.claude/LIFEOS/PULSE/Observability/src/app/local/page.tsx拉取 JSON 渲染九个分区卡片导航入口位于AppHeader.tsx的lifeNav中、LIFE与WORK之间。每日刷新由PULSE.toml中的[[job]]以 cron 表达式0 6 * * *驱动运行bun run skills/LocalIntelligence/Tools/Refresh.ts。三个典型使用示例示例 1运行每日摘要User: Whats happening in my city today? → 调用 DailyBrief 工作流 → 从 PRINCIPAL_IDENTITY.md 读取家乡城市 → 运行 Tools/Refresh.ts 编排器 → 写入 latest.json → 在对话中按类别汇总每类 Top-3 条目示例 2检查议会日程User: Anything on the council agenda this week? → 调用 Legislation 工作流 → 为家乡城市调用 Tools/FetchLegislation.ts → 返回带来源链接的待决议会条目示例 3从仪表盘刷新User 点击 LOCAL 标签页的 Refresh now → Pulse POST /api/local-intelligence/refresh → Pulse 模块派生 Tools/Refresh.ts 子进程 → 重新生成 latest.json标签页重渲染十、真实世界的坑Gotchas 精读SKILL.md 用一整节记录了实战中踩过的坑这些是使用本技能最值得注意的约束没有 Hometown 行 不抓取PRINCIPAL_IDENTITY.md缺少Hometown:行时每条工作流返回清晰的引导消息并以零码退出不得凭空捏造城市各城市 API 质量差异巨大有的城市有丰富的 Granicus/OpenStates 覆盖有的只发布 PDF每个 fetcher 必须在通用源无数据时返回unavailable而非失败人口普查建筑许可调查是月度而非每日建设信号天然是中延迟的不要承诺今天的许可OpenStates 覆盖州议会而非市议会市议会待决/已通过法案靠 Granicus/Legistar 的知名 URL 模式尽力发现覆盖是 best-effortPatch RSS 路径因州而异https://patch.com/state-slug/city-slug/feed对大多数城市有效少数使用遗留 slugNews fetcher 先试规范路径失败则回退到以city, state为关键词的 Google News 话题搜索治安官日志抓取因司法辖区而异可发现则抓县治安官 blotter 页否则返回unavailablev1 不绕过 CAPTCHA、不用付费抓取服务犯罪数据绝不与专门犯罪统计技能重复FetchCrime.ts调用该技能并把结果塑形进摘要禁止在本技能内直接调用 CitizenRIMS、FBI UCR 或 AreaVibes见设计 ISA 的 ISC-12每日 JSON 文件会累积旧摘要保留在MEMORY/DATA/LocalIntelligence/供趋势检索只有latest.json是 Pulse 的读取目标定期清理由用户决定本地报纸把好故事放在付费墙后RSS 通常只露出标题摘要仪表盘链接到原文技能从不绕过付费墙两个 latest.json 路径都必须写见第五节聚合搜索源按相关性而非日期排序Google News RSS 查询可能返回十年前旧闻sources.json中每个聚合源同时需要查询里的when:Nd操作符与max_age_days确定性兜底仅when:仍会漏旧条目Google News item 链接是 news.google.com 重定向、标题以 Headline - Publication 结尾设置strip_title_suffix: true把刊物名提升进 source 字段重定向 URL 在浏览器中可正常解析不要改写市政 CivicPlus/城市网站常硬屏蔽爬虫即使带浏览器头也返回 Akamai 403不要直接接入其内容通过 Google News 查询获取2026-07-16 已对某城市站点验证本地报纸头版/聚焦故事与摘要的取舍、以及无 Hometown 的提示共同构成优雅降级的完整闭环。十一、自定义层与公开发布检查自定义覆盖执行前检查~/.claude/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/LocalIntelligence/目录若存在加载并应用其中的PREFERENCES.md、可选源列表覆盖、按源 API 密钥如 OpenStates、Google News topic ID这些覆盖默认值目录不存在则使用技能默认值仅通用源。sources.json是同一目录下的确定性每城市源列表Schema 见前文。发布前自检技能主体是通用设计发布前用 grep 预检rg -i your-city|your-zip|your-county|/Users/[a-z]/ ~/.claude/skills/LocalIntelligence/要求零匹配才算可发布主理人的真实家乡只存在于PRINCIPAL_IDENTITY.md永不写入技能本体。十二、执行日志完成任何工作流后向执行日志追加一条 JSONL 记录便于 LifeOS 追踪每次运行echo {ts:$(date -u %Y-%m-%dT%H:%M:%SZ),skill:LocalIntelligence,workflow:WORKFLOW_USED,input:8_WORD_SUMMARY,status:ok|error,duration_s:SECONDS} ~/.claude/LIFEOS/MEMORY/SKILLS/execution.jsonl结语LocalIntelligence 的价值不在于它抓了多少个源而在于它的工程结构Hometown 单一解析点、统一的 Fetcher 契约、确定性优先的抓取顺序、双路径持久化 no-clobber 保护、以及AI 只能补充不能覆盖的补全边界。这套设计让一个技能可以服务于任意美国城市且单点故障永远不会清空用户的每日本地摘要。想要深入源码可从 SKILL.md 出发依次阅读 Tools/Hometown.ts、Tools/Refresh.ts、Tools/UserSources.ts 与 Tools/ClaudeFill.ts即可完整复现整条流水线。【免费下载链接】LifeOS⛰️ The Life Operating System — an intent engineering platform that moves you from your current state to your ideal state, in life and work.项目地址: https://gitcode.com/GitHub_Trending/pe/LifeOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门