返回

文章详情

展示 HN:AI Pulse,一个伪 LED 灯条,位于 macOS Dock 旁边,显示代理状态

Hacker News2026年8月10日 22:07

一个用于 AI 编码代理的环境光 macOS 灯条,灵感来自 SidePulse 硬件设备——但作为应用程序。一个由八个虚拟 LED 组成的细长条形浮现在 Dock 旁边的未使用空间中,显示一个单一的聚合信号,而没有每个模型的区分,表明是否有任何程序正在运行、等待您、已完成或已损坏:减少运动用静态效果替代每个动画。原始的每个代理图标药丸可通过设置 → 外观 → 指示器样式访问。AI Pulse 不嵌入 Dock——macOS 没有公开 API 供 Dock 配件使用。它是一个与 Dock 邻接的、无边框、非激活的 NSPanel,从公共屏幕几何体定位(NSScreen.frame 与 visibleFrame 对比)。没有私有 API,没有辅助功能/屏幕录制权限,没有注入。从最新版本安装 Grab AI-Pulse-<version>.zip,解压缩,将 AI Pulse.app 移动到 /Applications,启动。版本尚未公证,因此在首次启动时右键单击该应用程序 → 打开(在 macOS 15+ 上,还需在系统设置 → 隐私与安全 → 始终允许下允许它)。aipulse CLI 航空在包中,位置为 AI Pulse.app/Contents/Helpers/aipulse。发布在 PR 合并时自动剪切:默认情况下为补丁,当 PR 带有 release:minor / release:major 标签时为次要或主要版本。要求(从源构建)macOS 14+ Xcode 16+ / Swift 6 工具链 构建、测试、运行 swift build # 构建所有(应用程序、CLI、工具包) swift test # 单元+集成测试(AIPulseKit) swift run AIPulseApp # 启动药丸(配件应用:没有 Dock 图标) swift run AIPulseApp --snapshot DIR # 无头模式渲染药丸 + 悬停卡 PNG,并退出 swift run aipulse health # CLI:检查本地事件服务 ./Scripts/make-app.sh # 组装 + 签署 dist/AI Pulse.app ./Scripts/make-gifs.sh # 从无头帧重新生成 docs/ GIF(需要 ffmpeg) docs/pulse-social.gif 是同一状态循环的更大、带标题的剪辑,旨在共享。日常使用时,运行捆绑应用程序而不是裸二进制:该脚本使用您的 Apple 开发身份签署它,提供稳定的代码签名,以便钥匙串信任该应用程序跨重建(裸 swift run 二进制文件是临时签名的,并在每次重建后触发钥匙串同意提示——这也是为什么 AIPULSE_DEV_EPHEMERAL_TOKEN=1 存在用于开发循环)。CLI 嵌入在 AI Pulse.app/Contents/Helpers/aipulse 中。(应用程序产品是 AIPulseApp,因为 AIPulse 和 aipulse CLI 在区分大小写的文件系统中会冲突。)发布代理状态 AI Pulse 监听 127.0.0.1:7455(可在设置中配置)。启动时,它在钥匙串中存储一个持有者令牌,并写入 ~/Library/Application Support/AIPulse/cli.json(模式 0600),因此 aipulse CLI 进行身份验证时令牌从未出现在 shell 命令中: aipulse agent upsert --id " claude-code: $PWD : $SESSION_ID " --name " Claude Code " --provider anthropic --instance " $( basename " $PWD " ) " --state working --message " 实现 Dock 放置 " aipulse agent update --id " claude-code: $PWD : $SESSION_ID " --state waitingForInput --message " 等待权限 " --sequence 2 aipulse agent remove --id " claude-code: $PWD : $SESSION_ID " aipulse agents # 列出药丸知道的一切 端点:POST /v1/agents/upsert,POST /v1/agents/{id}/event,DELETE /v1/agents/{id},GET /v1/agents,GET /v1/health(健康是唯一未经身份验证的路由)。服务器仅绑定到环回接口,限制请求大小,验证每个有效负载(AgentReducer + RequestValidator),拒绝不安全的 URL 方案,永远不执行在事件中接收到的任何内容。开发说明:重建应用程序更改其临时代码签名,因此每次构建时钥匙串读取会重新提示;在开发期间通过 AIPULSE_DEV_EPHEMERAL_TOKEN=1 启动,以跳过钥匙串并使用每次运行的令牌。通过药丸的右键菜单 → 退出 AI Pulse(或杀死进程)。 结构 Sources/AIPulseKit — 无AppKit,完全经过单元测试的核心:Domain/ — Agent,AgentState,AgentAction(类型安全的操作 + URL 方案白名单),AgentEventPayload(线框模型),AgentIntegrationLevel,StatusPriority(紧急排序)。Store/AgentStore — 唯一的真实来源;所有表面画都来自于此。Placement/ — ScreenSnapshot,尽力而为的 DockGeometry 推断,纯 PlacementPolicy(边角 → 相邻 → 备用,夹紧)。Sources/AIPulse — 应用程序:Presentation/Pill/ — 非激活的 AIPulsePanel,SwiftUI 胶囊,每状态图标(符号 + 徽章 + 圆环,永远不是单一颜色),悬停卡。Presentation/AgentList/,Presentation/Settings/ — 常规键盘可访问窗口。Placement/DockPlacementController — 去抖动屏幕变化观察;不轮询。状态里程碑 1–3 已完成:M1 — 非激活面板、药丸 UI、模拟代理、悬浮卡、上下文菜单。M2 — 底部/左侧/右侧 Dock 放置,多显示器选择带设置显示器选择器,去抖动屏幕/空间变化观察,屏幕外夹紧,选择性自动隐藏 Dock

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡