mujoco
人无远虑,必有近忧。——孔子 一个名字就是一句定义:MuJoCo 与它那个「不分配内存」的秘密先把名字拆开MuJoCo 是缩写:Multi-Joint dynamics with Contact。多关节动力学,带接触。 名字本身就是定义。前半段说它模拟什么——由多个关节连起来的结构;后半段说它最难的地方——接触。 物理引擎里,自由落体是初中题,弹簧是高中题,而两个物体表面碰上那一刻的力,是研究生课题。因为接触是离散的、突变的、不光滑的:碰之前没有力,碰之后突然有;而且到底哪几个点接触、法线朝哪、摩擦锥多大,全都取决于当下的几何。 一个物理引擎能不能用,很大程度上取决于它怎么处理这个「碰」。 项目地址:https://github.com/google-deepmind/mujoco 它的描述很朴素:多关节动力学,带接触,一个通用物理模拟器。 文档展开了一点:一个通用物理引擎,目标是为机器人学、生物力学、图形与动画、机器学习,以及其他需要快速且准确地模拟「关节结构与环境交互」的领域,提供研发基础。 注意「快速且准确」这两个词被绑在一起。物理模拟里这两者经常对立——快就得近似,准...
agent-browser
天下兴亡,匹夫有责。——顾炎武 一次一条命令:agent-browser 把浏览器拆成一小步一小步先算一下「用浏览器」这件事的成本让 agent 上网,通常有三种做法。 一种是给它一个浏览器自动化框架的 API,让它写脚本;一种是给它一个云端的浏览器实例,让它通过协议操作;还有一种是给它截图,让它看着图猜。 三种做法都绕不开同一个问题:上下文。浏览器是一个巨大的状态机,一次把所有东西塞给模型,它会被淹没;每次只给一点点,它又不知道自己站在哪。 agent-browser 的答案是把这件事拆到最小:一次一条命令。 它的描述只有一行:给 AI agent 用的浏览器自动化 CLI。 项目地址:https://github.com/vercel-labs/agent-browser 正文说得更清楚:一个用 Rust 写的原生 CLI,给 agent 一个可以一次一条命令驱动的浏览器。snapshot 把页面返回成紧凑的文本,每个元素带一个像 @e1 这样的 ref。agent 对着 ref 操作,再读一次页面确认,如此往复。 而浏览器在命令之间是开着的,所以每一步都只是一次很短的 ...
OpenMausBot
仰不愧天,俯不愧人,内不愧心。——韩愈 一个聊天框装不下一个团队:OpenMausBot 把 agent 摆成了通讯录先说一个形状问题你手机上的 AI 助手,几乎都是同一个形状:一个输入框,一个对话框,一条时间线。 你问它答,你追问它再答。所有事情挤在同一个上下文里——今天早上让它改的简历,和下午让它查的机票,住在同一个滚动条里。 这个形状在「问答」时代是合理的。但当你开始让 agent 干活,它就不太对劲了。 因为干活需要分工。一个负责翻你的代码库,一个负责写文案,一个负责盯数据;它们该有不同的记忆、不同的工具、不同的权限。而一个对话框只允许有一种人格和一条历史。 OpenMausBot 的诞生文档,第一句话就冲着这个来的:一个盒子里放一个助手,对 agent 来说是错的形状。 项目地址:https://github.com/milind-soni/OpenMausBot 它的解法很朴素:把 agent 摆成通讯录。 侧边栏里一排名字,每个都是一个真的 agent,点进去像跟人聊天一样。它把这套东西叫「一个聊天应用里的 AI bot 团队」。 每个名字都是真的它对自己产品的...
sherlock
仁者见仁,智者见智。——《易经・系辞上》 一个用户名,四百多个站点:Sherlock 做的是最窄的一件事先说一个形状「一个用户名」是什么形状? 它不是一串随机字符。人在不同平台注册时,往往会保留同样的手感:同样的词、同样的下划线、同样的数字后缀、同样的缩写。哪怕换了三个平台,那个 ID 还是那个 ID。 所以当你想知道一个人在网上留下过多少痕迹时,最省力的入口不是搜索,是把这个名字拿到每个站点去试一遍。 Sherlock 就做这一件事。它的描述只有一行:按用户名在社交网络中找出对应的账号。 项目地址:https://github.com/sherlock-project/sherlock 文档的副标题写得更具体:在 400 多个社交网络里追查社交账号。 四百多个。这个数字意味着四百多套规矩:每个站点有自己的命名方式、自己的返回行为,而且这些规矩会变。 所以它本质上是一份需要持续维护的站点清单,外面套了一个命令行。 用法:一行命令,一堆 txt最简单的用法就一行: 1sherlock user123 想一次查多个,就把名字并排写: 1sherlock user1 user2 ...
astryx
若要功夫深,铁杵磨成针。——曹学《蜀中广记・上川南道彭山县》 八年,一万三千个应用,然后开源:Astryx 想让人和 agent 用同一套工具设计系统开源时的两种命运一个公司内部的设计系统拿出来开源,通常只有两种结局。 第一种是变成考古现场:文档停在两年前,组件里全是只有内部人才懂的耦合,示例代码引用的包早就改名了。你 clone 下来,跑不起来,然后关掉。 第二种是被重新打磨成一件产品:依赖理清,文档重写,边界划明白,然后老老实实标上「Beta」。 Astryx 属于第二种。它甚至在第一屏就把这两件事都写清楚了:它是 Meta 内部长了八年的东西,现在开源,目前是 Beta。 项目地址:https://github.com/meta/astryx 它的自我介绍是:一个完全可定制的开源设计系统,为「我们现在的构建方式」而生——由人,以及和他们并肩工作的 agent 一起构建。 这句话里最值得琢磨的是后半段。设计系统这个词已经被说了十几年,而「为 agent 而生」是个新命题。 来路:一万三千个应用文档里有一句话,比任何功能列表都有说服力: 它在 Meta 内部生长了八年,成了...
floci
居安思危,思则有备,有备无患。——《左传》 一台本地的 AWS:快 24 毫秒,只吃 13 MiB,然后决定哪些东西必须是真的先说本地模拟这件事的尴尬在本地跑云服务,是每个后端都干过的事。 尴尬的地方在于:模拟器太好用,你会忘了自己在模拟;模拟器太粗糙,你会在一周后发现「本地能跑,线上不行」。 这个矛盾没法用「覆盖更多服务」解决。因为问题不在数量,在深度——一个 S3 的 mock 可以接受 PutObject 并返回 200,但它不会告诉你版本控制、对象锁、预签名 URL 在真实环境里是怎么互相作用的。 所以当我看到 Floci 的介绍时,最先注意到的不是它支持多少服务,而是它把「哪里用真 Docker」单独列了一张表。 项目地址:https://github.com/floci-io/floci 它的定位很干脆:一个免费、开源的本地 AWS 模拟器,用于开发、测试和 CI。 口号四句:任何云,本地跑。轻、蓬松、永远免费。不要账号,不要 auth token,不要功能门槛。只要 docker compose up。 家族:四个云,四个端口有个细节挺可爱:它是 Floci 模...
auto-ontology
书到用时方恨少,事非经过不知难。——陆游 数字错了,快也没用:Auto Ontology 想给 agent 补上「这词到底指什么」一句很扎心的开场一份文档的第一段,通常用来讲产品多好。 这份文档的第一段,用来讲一件事有多没用: agent 能检索文档,也能查数据库,但可靠性卡住了 agentic analytics 的脖子——一个收入指标,答得再快,只要数字是错的,就一文不值。 这句话放在 2026 年,几乎是对整个行业的一记耳光。 过去两年,所有人都在比谁的 agent 跑得快、谁的工具调用更花哨、谁能一次读更多文档。而真正让企业不敢把报表交给 agent 的原因,从来不是速度,是那句没人敢问出口的话:你这个「营收」,和我财务系统里的「营收」,是同一个东西吗? 项目地址:https://github.com/NVIDIA/auto-ontology Auto Ontology 就是冲这个问题来的。它的描述写得很技术:一个 Python 框架,用于在数据之上构建语义的、基于图的推理层,从而实现确定性的查询生成、更好的上下文检索,以及更可解释的 AI。 翻译一下:给 agent...
worktrunk
人之相识,贵在相知,人之相知,贵在知心。——孟子 三行命令变一行:worktrunk 把 git 里那个被埋没的功能挖了出来一个被埋了很久的功能git 里有个东西叫 worktree。 它的作用是:让同一个仓库同时在多个目录里被检出,各自在不同的分支上。你在 ~/repo 上待着不动,另开一个 ~/repo.feat 去做新功能,两边的改动互不干扰,共享同一份 .git。 这个功能在 git 里已经存在很多年了,一直不温不火。原因是大部分人的工作流里,切换分支就够了——反正你只有一双手,一次只能改一处。 然后 agent 来了。 一个能连续跑半小时不喊停的编码 agent,会让你产生一种很自然的念头:那我同时开五个呢? 项目地址:https://github.com/max-sixty/worktrunk worktrunk 就是从这个念头开始的产品。它的描述只有一句:一个 git worktree 管理的 CLI,为并行 AI agent 工作流而设计。 五个 agent,五个目录,互不踩脚文档把背景交代得很清楚: 像 Claude Code 和 Codex 这样的 age...
Hyprland
同是天涯沦落人,相逢何必曾相识。——白居易 一个不肯将就的窗口管理器先说一件很小的事你每天在这个东西上面花八个小时,却几乎从不注意它。 窗口管理器就是这样一个角色:它决定窗口怎么摆、切桌面时有没有动画、边框是灰的还是带渐变的、你按下那个键之后屏幕是立刻响应还是迟疑半秒。它不该抢戏,但它决定了你一天里几百次微小交互的手感。 绝大多数人用的是系统给的默认选项,能开窗口、能拖动、能最小化,就到此为止。 而有一小部分人不肯。他们愿意为「切换窗口时的曲线是贝塞尔还是弹簧」折腾一整个下午。 Hyprland 就是为这一小部分人准备的,而且它一点也不掩饰这一点。 项目地址:https://github.com/hyprwm/Hyprland 它的自我介绍是:一个独立的、高度可定制的、动态平铺的 Wayland 合成器,而且不在外观上做任何妥协。 最后半句是关键。通常一个平铺窗口管理器的宣传语会是「高效」「轻量」「键盘驱动」。而它把「好看」写进了第一句,还用了「不牺牲」这种带情绪的措辞。 三个词,各有各的分量独立。 这个词在下面会单独讲,因为它在这份文档里的分量最重。 动态平铺。 窗口自动铺...
agent-desktop
鞠躬尽瘁,死而后已。——诸葛亮 让 agent 别再靠截图猜按钮:agent-desktop 换了个器官先说「computer use」这件老活让 AI 操作电脑,行业里流行了很多年的办法是:截一张图,让模型看图,猜按钮在哪,然后按坐标点下去。 猜对了,皆大欢喜。猜错了,你会在某个清晨发现它把「删除」当成了「重命名」,然后很有礼貌地告诉你任务完成了。 这个项目对这件事的措辞很客气,但意思很直白:不去像素里猜。 项目地址:https://github.com/vercel-labs/agent-desktop 它的自我介绍是:给任何 agent 提供可靠的桌面 computer use。用 Rust 写,通过操作系统的可访问性树看见任何应用真实的 UI 结构并操作它——ref 保持稳定,动作可以安全重试,而不是从像素里猜。 一句话概括:它不看脸,它摸骨。 它到底换了什么器官可访问性树这个东西,本来是为视障用户准备的。屏幕阅读器靠它念出界面:这里有个按钮,叫「保存」,可点击;那里有个列表,第三行叫「文档」。 agent-desktop 干的事,是把这棵原本给人用的树,交给 age...
