警惕“认知外包”:当AI接管思考,人类是否正在丧失自主性?
随着ChatGPT、Claude和Gemini等大语言模型的普及,人类越来越倾向于将认知任务“外包”...
随着ChatGPT、Claude和Gemini等大语言模型的普及,人类越来越倾向于将认知任务“外包”...
一款名为 Sabun 的代码审查工具正式发布,旨在解决开发者在使用 AI 进行辅助编程时难以管理和追...
据央视新闻及IT之家报道,中国自主研发的“妈祖”大模型作为城市多灾种早期预警智能体,目前已在包括巴基...
Anthropic 正式宣布推出“Claude for K-12 Teachers”计划,将其大模型...
这份名为“不用露脸,4小时学会AI不露脸YouTube賺钱玩法”的资源包,实际上是一套详尽的基于AI...
近日,一位开发者在 V2EX 社区分享了其利用 AI 工具构建的 3D 数字佛堂项目——“净心道场”...
随着人工智能技术的飞速发展,AI 编程助手正逐渐成为开发者工作流中不可或缺的一环。当前,海外以 An...
由知名音频框架JUCE的创始人Julian Storer开发的Juggler是一款开源的GUI编码代...
OpenAI 近日宣布了一项重要的安全策略更新,针对其“可信访问”计划的参与成员强制推行基于硬件的通...
近日,技术社区 Linux.do 上出现了一条关于“如何聚合各大模型能力”的高热度讨论。发帖者提出了...
7 月 14 日,针对“艺润北疆 · 光影青城”2025 年呼和浩特全民摄影双月赛获奖作品的争议,呼...
英国科技政策专家Heather Burns通过一起发生在苏格兰火车上的公共安全事件,深刻剖析了当前英...
独立开发者 pphboy 在 V2EX 分享了新项目 Pi-Work,一个基于 MicroVM 的 AI 工作环境,目前 MVP 已完成并开放 Demo。项目的出发点在于:当前多数 AI Agent 依赖宿主机运行环境,更换设备后需重新安装依赖、配置工具,环境迁移成本高。Pi-Work 通过 MicroVM 为 AI 提供可执行命令、操作文件和使用工具的独立运行环境,用户以自然语言提出需求,由 AI 在隔离环境中完成任务。项目支持将整个工作环境导出为 .work 文件,在其他机器上导入后继续使用,实现环境的打包、迁移与复用。技术层面,底层采用 QEMU MicroVM,围绕 KVM/WHPX 等虚拟化能力构建,在环境隔离、运行效率和可迁移性之间寻求平衡,当前面向 x86-64 平台,后续计划支持 macOS 与 Apple Silicon。产品提供 GUI 和一键安装流程,目标是让用户无需掌握 Docker、Linux 等知识也能使用 AI 完成实际工作。开发者表示将采取公开构建的方式,依据真实用户反馈迭代产品,并希望了解用户在 Agent 环境配置、迁移、复用方面的痛点及潜在使用场景,长期目标是让 AI 不仅回答问题,还能借助可复用、可分享的工作环境真正完成工作。
核心观点:AI Agent 的竞争正从模型能力下沉到运行环境层,谁把'工作现场'标准化成可迁移资产,谁就占据 Agent 基础设施入口。
原文链接:V2EX 分享发现
一位用户在Linux.do论坛分享了自己维护两个Claude Pro付费账号长期存活的实践经验。据其介绍,两个账号分别已存活一个多月和一周左右,核心策略可总结为’少做少错’四个字。在网络层面,该用户采取了网络隔离与固定IP出口的措施,两个账号分别通过美国伪家宽IP和新加坡机房IP接入,且这是其唯一采取的主动防护手段。在设备与使用习惯上,该用户坚持最小化登录原则:一个账号固定在Mac电脑上使用,另一个部署在NAS设备上;Mac端账号通过iOS手机登录后从未更换设备;工作时通过SSH远程连接公司电脑操作,避免多设备频繁登录。此外,该用户还总结了多项规避行为:从不点击Claude官方邮件、除授权登录外不使用网页端、不在Windows设备上使用。其特别强调Windows端的风险,称几个月前观察到大量账号在Windows端使用后随即被封禁。其他方面,该用户表示并未采取特殊措施:充值通过淘宝代充完成,日常使用中文与Claude沟通,Claude甚至知晓其所在地址,但账号至今未触发KYC实名验证,也无封号迹象。该用户同时保持谨慎态度,坦言不排除存活属于侥幸,或Pro账号风控相对宽松,认为最重要的因素是使用设备的稳定性,并表示将持续观察未来几个月的账号状态再做结论。
核心观点:账号存活经验本质是用户与平台风控的持续博弈,折射出AI服务全球化供给与地域限制政策之间的结构性矛盾。
原文链接:Linux.do
同一件事——让模型在故障诊断里给出一个能用的结论——一位算法研究者和我团队写出了两份气质完全不同的 Skill。把它们的差异摊开看,会发现分歧不在严谨程度,而在「验证」这个词各自指什么。
本文基于两份诊断 Skill 的规格文档、规则集、门禁脚本与一次沙盒执行记录做对比。已隐去参与者、项目名与业务标识,保留可复核的方法与数字;涉及准确率的数字均为原实验口径,未做二次加工。
一份 483 行、两万六千字,把「什么结论可以从证据中合法推出」写成了一套类型系统;另一份 130 行,解决的是「什么东西可以交付、并且能持续运行」。这两份东西放在一起看,第一反应往往是「严谨程度差太多」,全篇九十几条禁令对二十几条,几乎是两个物种。
但继续往下读,会发现问题不是严谨不严谨。两边都把验证当成瓶颈,只是验证的对象不同:一边验证的是推理的合法性,一边验证的是系统的可用性。前者关心「这个结论有没有资格被说出来」,后者关心「这条链路明天早上还能不能跑起来」。
这个分野一旦确立,后面所有具体选择都变得可以预测。删功能用什么标准、要不要给「不知道」开一个正式出口、预算拿来干什么、降级算不算作弊——两个阵营给出的答案截然不同,而且各自在自己的目标函数下都是对的。
要点:差的不是严谨程度,是那套推理本身的类型系统。补严谨可以靠加规则,补类型系统只能靠换视角。
工程里删代码的依据通常是「没有调用方」,或者「线上没人报错」。算法里删规则的依据是「它在拟合噪声」。这两句话听起来相似,实际指向完全不同的动作:前者只需要一次调用关系扫描,后者需要先设计一个能让规则自己认输的实验。
那次实验的规模小到不像实验:30 个人工金标样本,两类容易混淆的故障(打滑与过流),要求判断每一条属于哪一类。三种做法各跑一遍。

三条柱子并不在同一场比赛里:交叉验证的那条低于基线,说明单特征在拟合噪声;训练集内的 80% 没有留出样本,不能与另外两条并列比较。
关键的一步在后面:最优单特征的留一交叉验证只有 43%,低于「全判同一类」的 60% 基线。于是整条规则被删掉,脚本改成「只呈现测量,不下机理标签」。
工程师的本能是「再加个特征试试」。43% 不理想,那就找第二个特征,80% 看着不错。但 80% 是训练集内的数字,样本 30 条、特征 2 个,这个数的方差比它本身还大;把它当成绩写进规格,等于给自己埋了一个永远不会被触发的失败。
更值得学的是他往下追问的那一层:标注里带着日志之外的现场信息——人当时在现场看见了什么。这意味着任何只看日志的模型都有一个天花板,而且这个天花板不是模型能力决定的,是数据里根本没有那个信息。想清楚这点之后,问题被改派给采集侧:先让日志能采到区分两类故障所需的量,再谈模型。
先算天花板,再决定要不要做。这一条在工程文档里几乎不会出现,因为工程文档默认「做不出来是排期问题」。但天花板一旦算出来,最省力的方案其实是承认它,并且把缺口派给唯一能补的地方。
要点:一个规则的删除依据,如果是「交叉验证不如多数类基线」,那么这条规则从一开始就不该被写进生产路径。它带来的不是准确率,是准确率的幻觉。
在一张因果图里,causes 和 enables 都要求源证据与目标落在同一个 attempt 内,并且源证据在时间上严格早于目标;protective_response 是被触发的响应,不能当作 trigger 使用;reports 这条边是反向存储的——终局结果指向被它报告的那个响应。
工程日志只记录「A 之后 B」。这套类型系统问的是另一个问题:「B 有没有可能只是 A 的报告动作,而不是 A 的后果?」这个问题一旦问出来,很多看起来确定的因果链会当场松动。
| 边的类型 | 语义要求 | 日志不做区分时会被读成 |
|---|---|---|
| causes | 同一 attempt 内,源证据严格早于目标 | A 之后 B,所以 A 导致 B |
| enables | 同一 attempt 内,提供的是条件而非原因 | 直接并进上一条因果 |
| protective_response | 被触发的响应,不能当 trigger | 被当成故障原因 |
| reports | 反向存储:终局结果指向被它报告的响应 | 被当成事件发生的顺序 |
左边是类型系统要求的语义,右边是工程日志不做区分时的默认读法。差别不在数据,在是否允许自己把顺序当因果。
责任强度只有三档:single、one_of、unknown。机理强度也只有三档:confirmed、partial、unknown。置信度拆成五个维度分别打分,并且有一条硬约束——校准没开就禁止写成百分比,只能写「未校准因果支持分 N/100」。
配置文件里老老实实写着 n=1、enabled=false。评测说明里写的是:这套东西只能称「内部合同回放」,不能称盲测准确率。也就是说,作者宁可对外承认自己没测过,也不肯把一个漂亮的数字放到会被人引用的地方。
工程交付很少这么做。遇到说不清的样本,通常的处置是兜底:用最可能的那一类填上,让下游拿到一个确定值。填完之后流程通了,错误也被抹平了——没有人知道这一单其实没有结论。
裁决分两轮。第一轮要求 Agent 盲写假设,规则候选封存在压缩包里禁止读取;第二轮才披露,而且披露时明确写着「规则候选只表示必须比较,不拥有选因优先级」。
这是在防锚定效应。工程把 LLM 当一个有接口的组件,给输入、取输出;他把 LLM 当一个会被诱导的陪审员,所以连「什么时候给它看什么」都要设计。门禁脚本里还有一条扣分项叫「疑似照抄规则原文」——这条规则不是技术约束,是人性洞察。
两条规则:连续两次无信息增益就熔断;同一错误指纹累计不超过 6 次。
工程里的超时和重试次数只看资源——花了多少时间、烧了多少 token、够不够本。这两条规则看的是另一件事:这一轮还值不值得继续。把检索当成采样过程看,信息增益为零就意味着后面每一轮都在重复同一个分布,继续跑只是把钱换成更长的日志。
这个视角切换很便宜,但很少有人做。原因是它需要一个前提:你得知道「这一轮有没有带来新信息」,而这件事工程上几乎没有度量。多数重试循环连「上一次和这一次的输入有没有差别」都不记录。
注意:重试次数是成本参数,熔断条件是信息参数。两者混用的时候,系统会在最没有价值的地方花最多的钱。
原版规格两万六千字,近百条禁令。每一条禁令背后大概都是一次被模型坑过的经历,这和我文档里的「铁律」本质相同,都是疤。区别在于承载方式:我把约束放进 hook 和验证脚本,文档里只留一句带根因的提醒;他在门禁代码里已经强制了同样的东西,却又在文档里重复了一遍。
| 情态动词 | 原版(483 行) | 瘦身后(130 行) |
|---|---|---|
| 禁止 | 18 | 5 |
| 不得 | 16 | 5 |
| 必须 | 42 | 7 |
| 不能 | 21 | 4 |
行数从 483 压到 130,情态动词的密度下降得更快。约束并没有变少,只是从文档搬进了脚本。
重复的代价是可测的:沙盒实测里,一个小尺寸模型连续吃了 16 次 invalid_final_diagnosis,把轮次直接耗尽。规范写得越全,单次调用的有效注意力越少,模型越容易在格式上摔跤——而格式恰恰是最该由代码保证、最不该由文档保证的部分。
有个输入补充环节硬性要求下载工具可用,而执行环境永远不出网。两个都正确的前提凑在一起,结果是整单死锁——不是报错,是卡住,而且看不出卡在哪。
工程侧的修法是加一层输入降级。但平台侧后来追加的要求才是真正的补刀:降级可以,但必须计数——跳过了哪些数据包、兜底了多少行,都要上报。因为静默降级会改变错误分布,让下游的指标看起来一切正常,而实际上样本已经悄悄换了一批。
这条追加要求暴露了一个更普遍的问题:把人工兜底伪装成系统能力。兜底跑通了,成功率好看,但那份成功率里混着手工填的值。不计数,就永远分不清哪些是系统算出来的,哪些是人补上去的。
每遇到一个线上卡点就加一条规则,这就是「堆条件」的完整生命周期。单个条件的理由都很充分,几百个条件叠在一起,就没人能说清系统整体在保证什么了。
| 指标 | 数值 | 说明 |
|---|---|---|
| 代码规模 | 6.7 万行 | 单文件最大 2,596 行,次大 2,197 行 |
| JSON schema | 28 个 | 两代规则引擎同时存活,靠 shim 兼容 |
| 专家评测集 | 21 条 | 全部指向包外路径,不在交付物里 |
| 校准样本 | n=1 | confidence_calibration 里 enabled=false |
最后一行是最诚实的:验证闭环没有跟着交付物一起发货。输出目录里唯一的执行历史是两次诊断、两次全 error。这套系统的内部一致性极高,但它在真实环境里一次都没有走完。
注意:通过率如果不是门禁设计出来的,就会变成门禁要防的东西。一个 8/8 的全绿结果,在一套没有校准、没有留出样本的门禁里,说明的是门禁太松,不是系统太好。
一边是完美主义的独立研究者:单人署名,宁可不交付也不交付可疑结论。失败模式是「在脑子里能证明正确的事」压过了「周五之前要有一条可以看的结论」。
一边是交付导向的编排者:先跑通再收紧,每条铁律后面跟着一次事故。失败模式是指标被当成目标本身——通过率、成功率、覆盖率,这些数字一旦变成考核项,就会以最快速度失去信息量。
这两种人格谁也说服不了谁,因为它们优化的不是同一个东西。但可以互相拿走一部分,而且不需要改任何代码。
一、每个兜底配一个计数器和一个基线问题。这个 fallback 吃了多少行?不加它的多数类基线是多少?两个数放在一起,兜底的价值立刻从「流程通了」变成「比瞎猜好多少」。
二、新规则先分类再落地。它是推理不变量(时序先于因果),还是事故记忆(某个排序在某个版本上害过一次)?前者进代码的类型系统,后者进一行带根因的铁律。分类错了,两种都会腐化:不变量写成铁律会被绕过,事故记忆写进类型系统会把架构焊死在一个补丁上。
三、让 unknown 成为合法交付。现有的 source: heuristic 已经是这个方向,再往前一步是把「证据不足」从「降一点 confidence」升级成独立的 verdict。降 confidence 的下游会照常消费,独立 verdict 的下游必须显式处理——前者是委婉,后者才是约束。
四、验证全绿之后多问一句:它测不到什么?确定性断言测的是契约,不是泛化。全绿说明交付物没有撒谎,不说明它有用。
反过来的账也一样清楚。算法那边能从工程这边拿走的,是给有限注意力的读者写接口、给真实环境写降级、给文件设长度上限、先发货再校准。这四件事没有一件需要牺牲严谨性,它们只影响严谨性被不被看见。
两个方向最后会撞在同一句话上:验证是瓶颈。一个在证明结论配不配被说出来,一个在证明系统能不能活到明天。前者决定天花板,后者决定地板。缺了任何一边,另一边都会显得很有道理但没人用。
下面几份材料支撑了文中的几个外围判断:校准为什么必须显式声明、指标为什么会自我腐化、锚定效应为什么需要在协议层防、以及信息增益为什么可以当停机条件。
别人家的 AI 桌面端是这样工作的:ChatGPT 按 ⌥Space 弹出一条浮动输入框,问完 Esc 走人;Claude 直接双击 Option 就能说话,主窗口一辈子不用打开。WorkBuddy 是另一套动作——切到它、找到输入框、点新建,三个动作做完,刚才那个念头已经凉了。
数据取自本机 WorkBuddy 5.9.3 客户端:快捷键定义从 app.asar 内 main / renderer 产物解析,内存与进程数由 ps 实测,采集时间 2026-11-03 23:00(UTC-8)。
我用一个 29.5 MB 的后台进程,给 WorkBuddy 补上了它缺的那块:按 ⌘⇧K,窗口到前台、落在空白新对话、光标在输入框里,直接打字就行。
但这不应该是外挂能干的事。所以我顺手把它每个快捷键的作用域数了一遍,结果比预想的更直接——28 个快捷键,只有 1 个能在 WorkBuddy 之外生效,而那唯一的一个,在我这台机器上压根没注册成功。
| 指标 | 数值 | 说明 |
|---|---|---|
| 快捷键总数 | 28 | 全部可自定义,覆盖导航、编辑、窗口、通用四类 |
| 能在应用外生效 | 1 | 唯一的全局项 toggle-window,默认 Shift+Alt+W |
| 实测该全局项可用 | 0 | 两种方式触发均无响应,注册路径被跳过 |
| 补上这一步的代价 | 29.5 MB | Hammerspoon 常驻内存,空闲 CPU 为 0 |
先算一笔小账:假定一天要问 30 次,每次切窗口、找输入框、点新建平均 3 秒,一天 90 秒,一年不到 9 小时。按这个口径,做不做这个优化都无所谓,谁都不缺这 9 小时。
真正的成本不在秒数。我在用 ChatGPT 和 Claude 的时候有个明显习惯:想到什么立刻按一下就能问,问题倾向于当场问完;换成要切窗口的工具,同一个问题会被我记成一句备忘,攒到晚上一起问。攒起来的那批问题,十个里有七个最后没问——不是不重要,是当时的上下文已经散了。
所以入口延迟影响的不是效率,是使用频率本身。一次交互超过两秒,人就会开始给自己找理由跳过它。这也是为什么 ChatGPT 和 Claude 都把这件事做成了系统级的默认能力,而不是藏在设置里的一个可选项。

ChatGPT 的入口是一条浮条。问完就走,主窗口可以一直不打开。

WorkBuddy 的入口是整扇窗。切过来、找到输入框,才轮到打字。
要点:把 AI 当工具用的人,衡量的是「这一次省了多少」;把 AI 当同事用的人,衡量的是「我愿不愿意随时开口」。前者看功能,后者看入口。
WorkBuddy 的快捷键设置页分四类:窗口、编辑、任务、通用。看起来挺完整,但真正决定「能不能在任何地方按下就用」的不是分类,是作用域(scope)。
我把应用包里那份快捷键定义抽出来统计了一遍:app 作用域 21 个,context 作用域 6 个,global 作用域 1 个。也就是说,只要你不在 WorkBuddy 窗口里,27 个快捷键全部失效。

28 个快捷键中只有 1 个(toggle-window)是 global 作用域,其余 27 个都要求 WorkBuddy 已在前台或输入框已聚焦。
| 动作 | 默认按键 | 作用域 | 能不能在别的应用里按 |
|---|---|---|---|
| 新建对话 | ⌘N | app | 不能 |
| 新建快速问答 | ⌘⇧N | app | 不能 |
| 唤起/隐藏主窗口 | ⇧⌥W | global | 理论上能,实测未注册 |
那个 global 项就是 toggle-window。它的定义写得很清楚:窗口可见且聚焦时隐藏,其余情况恢复并聚焦。语义是对的,问题出在注册时机。
我把主进程代码翻出来看了一遍:注册函数被放在「主窗口尚不存在时才创建窗口」的分支里。而正常启动流程里,窗口在那之前就已经建好了,于是这个分支被短路,注册被跳过——不报错、不提示、设置页里照常显示快捷键已启用。
我用两种方式验证过:程序合成按键、系统级脚本发送。窗口都没有任何反应。这不是我按错了,是这个键从头到尾没注册上。

这是 5.9.3 里的真实代码。getMainWindow() 一旦有值就 return false,后面那串注册语句永远等不到执行。
既然自带的用不了,就自己补。我先想到的是对标 Claude 的手感:双击修饰键,不占字母键,肌肉记忆成本最低。
| 方案 | 结果 | 失败原因 |
|---|---|---|
| 双击 Option | 撞车 | WorkBuddy 把单独按 Option 绑成了语音输入,双击等于连发两次语音指令 |
| 双击 Command | 事件全丢 | 我拿按键码做过滤,但它在这类事件里恒为 0,自己把事件筛没了 |
| ⌘⇧K | 可用 | 与 WorkBuddy 现有快捷键零冲突,走系统级热键注册 |
第一个坑值得展开说,因为它不是我的问题。WorkBuddy 把「单独按 Option」的默认绑定给了语音输入——这跟 Claude 双击 Option 唤起输入框的设计直接对撞。两个功能抢同一个键,表现出来就是「偶尔能生效、偶尔逻辑很奇怪」,因为一半的事件被语音吃了。
第二个坑是我的:Hammerspoon 里监听修饰键变化的事件回调,返回的按键码在任何情况下都是 0。我用它区分左右 Command,等于给所有事件加了一个永远不成立的条件,于是监听器挂着,日志一条不进。这个 bug 掩盖得很好,因为热键列表里我的绑定看起来一切正常。
最后落到 ⌘⇧K。理由很朴素:系统级热键注册不依赖事件监听,不受语音快捷键干扰,也不会被输入法的组合键吃掉。查过 WorkBuddy 现有的 28 项,⌘K 是全局搜索、⌘⇧N 是快速问答、⌘N 是新建对话,⌘⇧K 空着。
注意:想在 macOS 上做「双击修饰键」触发,先查清楚目标应用有没有把这个修饰键单独绑走。修饰键双击天然脆弱:系统可能合并事件、输入法会抢、你自己的逻辑还容易写错。能用组合键就别用双击。
补这个功能有两类工具可选:Hammerspoon 这种配置式脚本引擎,或者 Raycast 那种带界面的启动器。功能上都能做,差别在代价。
Hammerspoon 是原生 Objective-C 外壳 + Lua 脚本,实测常驻 29.5 MB,空闲 CPU 为 0,不建索引、不同步、不联网。Raycast 第一代是原生 Swift,现在已经重写成 WebView + Node 后端,官方拆解里光 WebView 就 120–200 MB、Node 后端 150–200 MB。为了一个快捷键装一个启动器,不划算。

作为参照:WorkBuddy 单次运行 18 个进程、合计 1792 MB。最大的单个渲染进程 457 MB,已是 Hammerspoon 整个进程的 15 倍。
这不是说 WorkBuddy 内存占用有问题——Electron 应用多进程是这个量级,Chrome 也一样。问题是当它连「按一下就问」这种基础入口都要靠第三方补时,那 1792 MB 里有一块是白花的。
把这件事归到「产品没做」并不准确。它做了:有快捷键设置页、有 global 作用域的字段、有 toggle-window 这个动作,代码里连「被其他应用占用时打警告日志」都写了。这是一个知道该做什么、并且动手做了的团队。
问题出在收尾。功能写完了,但没验证它在真实启动路径上是否生效;注册失败只写进日志,界面上照样显示「已启用」;用户按了没反应,唯一能得到的解释是自己去翻设置。这不是能力问题,是交付标准的问题。
| 产品 | 默认全局唤起 | 唤起后是什么 | 需要主窗口吗 |
|---|---|---|---|
| ChatGPT macOS | ⌥Space | 浮动输入条,可直接提问/截图/传文件 | 不需要 |
| Claude Desktop | 双击 Option | 快速输入框 | 不需要 |
| WorkBuddy 5.9.3 | ⇧⌥W(实测未注册) | 把主窗口切到前台,停在原对话 | 需要 |
三点具体差距,按严重程度排:
一是「唤起」和「新对话」被拆成了两个动作。竞品的全局唤起进去就是一个空白输入框,WorkBuddy 唤起的是你上次那个对话,要新开还得再按 ⌘N。这两个动作在产品逻辑上是独立的,但在用户意图上是一件事——我按快捷键的那一刻,想的是「我要问个新问题」,不是「我要看看上次聊到哪」。
二是快捷键的能力边界没有暴露。设置页列了 28 项,看不出哪些只在窗口内有效。用户很容易以为是自己设置错了,实际上那 27 项本来就不该期待跨应用生效。一个 scope 标签、一句「仅应用内生效」,能省掉用户半小时的困惑。
三是状态不可见。全局热键注册失败是硅谷式静默失败:日志里有 warn,界面上一切正常。这类失败必须让用户看见——设置页那一行应该直接标红「注册失败,可能被其他应用占用」。
要点:这三个问题指向同一个设计惯性:把 WorkBuddy 当成一个「应用」,而不是「随时可用的能力」。一旦按应用来设计,入口就自然长在窗口里;按能力来设计,入口必须先于窗口存在。ChatGPT 和 Claude 的差距不在模型,在这一层。
全局入口不是锦上添花,是这类工具的第一优先级。判断标准很简单:用户在其他应用里想到要问的时候,能不能不离开当前窗口就问出口。做不到这一条,其余功能再强,使用频率也会被入口卡死。
另外两条:全局热键注册失败必须可见,不要只写日志;快捷键列表要标出作用域,别让用户猜。这两件事的开发成本都以小时计,但对信任的伤害是长期的。
别碰修饰键双击,直接上组合键。选键之前先翻一遍目标应用已有的快捷键定义,避开它的保留键——尤其注意它有没有把某个修饰键单独绑给了别的功能(语音输入是重灾区)。
启动类操作要留出足够的等待时间。冷启动时窗口画出来了不代表界面准备好接快捷键,那中间还有一两秒,早发的按键会被吞掉,表现出来就是「有时候行有时候不行」。
-- 唤起 WorkBuddy 并落到空白新对话
local BUNDLE = "com.tencent.workbuddy.mac"
local function mainWindow()
local app = hs.application.get(BUNDLE)
if not app then return nil end
for _, w in ipairs(app:allWindows()) do
local f = w:frame()
-- 只认足够大的标准窗口,避开启动闪屏
if w:isStandard() and f.w >= 600 and f.h >= 300 then return w end
end
end
hs.hotkey.bind({ "cmd", "shift" }, "K", function()
-- 未运行:先拉起,轮询等窗口
if not hs.application.get(BUNDLE) then
hs.execute('open -a "WorkBuddy"')
end
local tries = 0
local timer
timer = hs.timer.doEvery(0.5, function()
tries = tries + 1
local w = mainWindow()
if w then
timer:stop()
w:raise(); w:focus()
-- 等渲染器挂稳,否则 ⌘N 会被吞
hs.timer.doAfter(2.5, function()
hs.eventtap.keyStroke({ "cmd" }, "n", 0)
end)
elseif tries > 120 then
timer:stop()
end
end)
end)
开发者社区 Linux.do 上有用户分享了一款开源的 macOS 菜单栏工具 ThreadLight,用于监控 Codex 与 Claude Code 对话的运行和完成状态。作者作为 Mac 用户,长期使用 Codex 积累了大量对话,希望有一个简洁的工具随时查看对话状态,而 Codex 自带的宠物功能占用空间大且不够直观,因此自行开发了这款工具并分享给社区。在设计思路上,ThreadLight 将状态直接集成到顶部状态栏,用户一眼即可查看有多少任务正在运行、哪些已完成;点击后可唤出一个前置的极小窗口,展示对话列表,点击列表项能直接打开对应的客户端和对话。工具强调读取速度,避免像多数插件那样读取完整对话数据,保证轻量流畅。项目同时兼容 Claude 客户端。目前作者已发布 v0.1.0 预览版,源码托管在 GitHub 并完整开源。由于作者手头没有 Windows 设备,暂不支持 Windows 平台,欢迎社区开发者基于源码自行适配 Windows 或兼容其他 AI 编程客户端。该项目帖子已按社区开源推广规范打标,声明完整开源、无未开源部分,并已链接认可来源社区,接受社区监督。
核心观点:AI编程进入多Agent并行时代,会话状态监控正从可有可无的周边功能变成开发者工作流的新入口。
原文链接:Linux.do
开发者在使用大模型 API 时,常面临本机与服务器需要分别配置模型和密钥的问题,任一端改动都要重复操作。近日,Linux.do 社区用户分享了利用 magpie 工具实现服务器与本机统一调用模型的方案。magpie 的定位类似 ccswitch,核心思路是在本机运行一个网关,将所有模型请求汇聚到统一入口。具体实现分为几步:首先通过组网工具 Tailscale 创建虚拟网络,服务器和本机分别下载客户端并扫码登录,即可组成虚拟局域网;随后在本机的 magpie 中配置好一系列模型和供应商信息,选择该网关(即 Tailscale 建立的虚拟网络),并获取网关密钥;最后在服务器的 providers 配置中添加该网关信息,即可完成接入。配置完成后,服务器端的模型请求和 token 消耗都能在本机网关界面实时显示,便于统一监控用量。这一方案省去了在两端重复维护 API 配置的麻烦,模型增删、供应商切换只需在本机网关处修改一次,服务器端无需变动,对同时在本机和远程服务器使用 AI 编程或模型服务的开发者而言,提供了一种轻量的统一管理思路。
核心观点:模型调用走向多端常态后,统一网关加虚拟组网正成为开发者管理密钥与用量的轻量解法。
原文链接:Linux.do