- 博客(37)
- 收藏
- 关注
原创 电脑上那份报告,手机上点开闪一下就没了
网页类型的照旧走他自己的页面查看器,剩下的类型弹一个选择器,让人自己挑。手机上一个能打开的 App 都没有时,直接说「手机上没有能打开这个文件的应用」,再把文件路径给出来。点开一个文件的时候,系统并不问你「想用什么打开」,它只按文件的类型去挑。刚好有个音乐 App 在安装的时候说了句「所有文字文件我都能打开」,还是用很宽的口气说的。手机上他借的是系统给视障人士用的那套读屏本事,能看见屏幕上的字,也自己点得动按钮。我只在荣耀这台手机上撞见那个音乐 App,别的机型会不会被别的 App 抢走,我没测。
2026-11-13 20:32:56
48
原创 Mac 上他把活交给另一个 AI,成品去文件夹里数
有个小东西住在我的手机和 Mac 上,叫 Andee。在手机上的时候,他借系统里的无障碍服务看屏幕,就是那个本来是给视障人士用的接口,读得到字,也点得动按钮,微信、银行这些 App 不用专门为他开一道门。你平时只在屏幕边上看到一颗球。Mac 上他是同一个他,多了键盘、鼠标,还有一个能敲命令的终端。昨天晚上我给了他一件新差事:在 Mac 上,他可以把一整份活交给另一个 AI 去做。那个 AI 叫 dsh,DeepSeek 开源的,跑在自己的进程里、自己的文件夹里,能读代码仓库、能上网、能跑几十分钟的命令。
2026-11-13 10:19:15
172
原创 他说办完了,那件事还挂在列表里
他现在说办完,只算「交付」。那件事留在列表里,后面挂一句「交付了,等你确认」,等我按了「办完了」才算关。我说还没完,它退回在办,我那句没完的话会被记成一条记录,下一轮他自己看得到。前两天被他标成完成的,今天全部回到「交付了,等你确认」,只回这一次,之后不再翻旧账。我自己主动放下的那些没动,那是我说不要的,不是他办完的。那两条跟当时聊的事没关系,我们前一句在说别的,他顺手一起收了尾。手机上那一行也多了确认按钮,位置没改,就是在原来那行后面加了一个。现在他干完一件事,我只看到一句话:交付了,等你确认。
2026-11-12 20:32:48
85
原创 Mac 截图失败 6 天,他一直说是我没给权限
Andee 是一个住在设备里的 agent。说白了就是一个自己能看屏幕、自己会动手的程序。手机版住在 Android 里,靠系统的无障碍服务读屏、自己点,不需要哪个 App 专门给他留门;Mac 版是同一个他在第二副身体上,看屏幕靠系统截一张图,再自己读。两副身体,一个脑子。11 月 11 日下午一点,我发了 v0.14.1,标题写着 XDR 屏上的截图修好了。下午两点五十三分,我发了 v0.14.2,第一句是「v0.14.1 的结论是错的」。中间隔了 1 小时 53 分。
2026-11-12 19:24:50
156
原创 微信里点一下,用户就截不了自己的图:8 个方法被禁
Andee 是一个住在 Android 手机里的 agent。他靠无障碍服务读屏幕、自己点,不需要哪个 App 给他开接口,也没有一个属于自己的窗口——你看到的只是屏幕边上那颗球。这颗球背后的身体,本来能点开手机上任何一个 App。11 月 12 日,仓库合进一条提交,标题直白得像一句认输:「手机上,绝不操作微信」。起因不是点不动,恰恰相反:一次点击之后,用户连自己的微信都截不了图了,而且不是截一会儿,得清掉微信数据、重新登录才恢复。
2026-11-12 18:39:59
165
原创 手机上一张 0 帧动画的脸:19 种状态、14 个参数
Andee 是一个跑在 Android 上的 agent。他装在手机里,靠无障碍服务自己看屏幕、自己点,不需要哪个 App 给他开接口,也没有一个属于自己的窗口——你看到的只是屏幕边上那颗球。那颗球就是他全部的样子。这一周桌宠扎堆出现,卖点出奇地一致:91 段透明动画、一百多段、最多九个同屏。段数确实好卖,可它回答的是「看起来在动吗」,不是「现在到底在干什么」。一个天天待在你手机上的东西,大部分时间并不处在任何一个能被命名的动作里——他在想、在等一个确认、在发呆、睡着了。这几件事没有对应的「段」。
2026-11-12 10:19:34
145
原创 cron 两个日期字段是「或」:一年 63 次,不是 1 次
语法合法,2 月没有 30 号,它一次都不会触发。1500 是为了盖住 2 月 29 日,闰年四年一次,再留点余量。时间用的是 systemDefault,夏令时那两天我没测过。为了「下次什么时候触发」这一件事再引一个库,等于多一个要钉的东西。心里想的是「每月 1 号早上 9 点,如果那天不是周一就跳过」。只想表达「每天 8 点」「每周一 9 点」这类,这段够用。要「每月最后一个工作日」,别用它。的时候,只要有一个命中就算命中。要「与」,只能把条件塞进一个字段,或者两条表达式取交集。
2026-11-11 20:37:34
216
原创 MIUI 每 40 分钟杀他一次,醒来时麦克风没跟回来
Nod 说"合盖就停",那是把限制交给用户:别合盖,插上电,它就在。这句话在桌面端是负责任的。手机上的问题是,这个决定不在你手里。Doze 是平台的,40 分钟一杀是厂商的,类型声明是平台的,唯一能补回来的那一下是人的。三者都不会告诉你发生了什么。所以 “一直在” 这件事,我最后是当一个功能做的,不是一个默认值:一个页面,几行红绿,每行都能点到一个真的能改状态的地方。而不是一条"某服务已停止"的系统通知。
2026-11-11 10:23:31
180
原创 说完一句话等 3 秒:最慢那次已经用掉 2.676 秒
我在做一个住在 Android 里的 agent。他叫 Andee,靠语音听人说话。前天我说完一句,字幕停了一下,然后没了,什么都没发生。不是识别错了。是我给「等最终结果」设的 3 秒上限到了。socket 带着最后一帧关掉,最终结果永远不来。整句话消失,界面上连个错误都没有。语音走火山的流式识别。它不会说「这一轮说完了」。「说完」是我自己判的:3 秒没有新的字,就当你说完了。判定之后还有一段路。把最后一帧发过去,等服务器把最终结果吐回来。这段路我给了 3000 毫秒。
2026-11-10 20:50:26
117
原创 机器狗回了 OK,腿一步没动:500 毫秒里能证明什么
我在做一个住在 Android 里的 agent,叫 Andee。他没有自己的窗口,跑在平板系统里:靠无障碍服务点屏幕,靠前台服务一直醒着,靠悬浮在别人 App 上面的那颗球表达状态。除此之外,他还接过一样在身体之外的东西——一台四足机器狗。平板用 USB OTG 线连一个 Arduino Nano 加 NRF24L01 模块,模块再用 2.4G 遥控那台狗。狗的原厂固件一行没改。这两天冒出来一批很像的东西。
2026-11-10 11:04:07
152
原创 产物列表里跳出个 v5:那页跟前面四版没关系
一页的源码通常 50 到 100 KB,CSS、JS、base64 图片全内联,所以磁盘上限是 100 页,面板底下那句就是「只保留最近 100 个」。这两个以前共用一个预算,结果 80 条聊天记录就能把页面连文件一起挤掉,页面上限等于没写。同一轮里后面每画一张页,都读到它。修法是把「读」改成「消费」:目标交出去就置空,一轮只承认一张页,模型自己在参数里写。把那一页读回来,读的这一下,代码把「这一页属于哪件产物」记进字段。版本号一旦能从一个「最近读过哪页」的状态里推出来,就没法再信了。起因是模型要改一页。
2026-11-09 20:36:37
193
原创 一小时的会议录音,逐字稿里没有一个“谁说的”
这一批个人智能体卖的"在场",在单人场景里几乎不需要回答一个问题。邮箱是你的,日历是你的,账单是你的,替他同意不需要第二个人。但只要他坐进一个有别人的房间,问题就换了:不再是"他能不能替你开完这个会",而是"这间屋子里另外几个人,什么时候知道他在听"。我们现在的答案是半份:转写不猜、不替别人设提醒、会议是被谁结束的一定如实说。另外半份——让房间里的人知道——还挂在一句提示词上。这里现在不行。
2026-11-09 10:12:22
177
原创 机器狗动作上限 30 秒:数秒的是平板,不是狗
开串口时拉 DTR 会让 Nano 复位,板子要重启、重新初始化射频、打一行 banner,所以第一条指令前得等最多 3 秒。狗端固件没有「多久没收到包就停」的看门狗,App 补不了,得改固件。急停那条要等,因为「已经停了」这个结论得有狗自己的 OK 撑着。用户说停,代数加一,下一个 100 毫秒的切片就发现自己过期了,立刻退出,把狗交出去。它会把最后那条动作走完,剩下的秒数就是最坏情况。所以每条动作的终点,只能由发指令的这一侧负责。,坏的是那块射频模块或者它的 3.3V 供电,不是狗。
2026-11-08 20:34:44
212
原创 一个 9008 端口,让同一 WiFi 的人能点你的屏幕
Andee 是装在 Android 手机或平板上的一个 agent,靠无障碍服务读屏幕、自己点、自己打字。不需要哪个 App 配合,不接 SDK,装成一个 APK 就在那儿了。这周冒出来一个叫 Poki 的开源项目,用一个本地的 MCP server 让电脑上的 agent 去控一台 iPhone,不用越狱、不用额外硬件。报道里给它的标签是 local-first——不过云,数据不出本机。我没读它的代码,只读了报道,所以关于它我一个字都不评价。
2026-11-08 10:13:04
173
原创 恢复出厂设置擦掉 10 样东西,闹钟必须第一个撤
AlarmManager 的 requestCode 是从 todo 的 id 算出来的,而 id 就存在那个马上要被删掉的文件里。写反了,设备上会留一个闹钟,到点弹出一条通知,指向一件谁也查不到的事。保险箱和小本本是加密的,prefs 一没,打开它们的那把 Keystore 钥匙就跟着 App 一起没了,里面的东西再也打不开。理由很具体:上一版把它一起清了,用户装回来发现设备是哑的,还得先去把 key 找回来。删一半停下,用户看到的是一个既不是新的、也不是旧的状态,比直接失败更糟。有两件事我故意没碰。
2026-11-07 20:35:37
156
原创 悬浮窗挡住 Android:agent 读到 0 个节点
我在做一个跑在 Android 上的 agent,叫 Andee。他没有常规主界面,也不用 Compose——整个应用就是一颗悬浮球挂在你屏幕上,点那颗球说话,他靠无障碍服务读屏幕、点按钮,替你把事办了。悬浮窗权限是他唯一「不给就完全不能用」的一项:球、字幕、设置面板、保险箱,全都是。写这篇,是因为「系统级 agent」这两天开始真往用户手机上推了。荣耀 MagicOS 11 从 11 月 6 日向 Magic V6、Magic8 系列推送,今天轮到 Magic V5、Magic7 系列;
2026-11-07 10:08:45
214
原创 Android 打字两条路:一条要先借走键盘 0.75 秒
还有一个坑我到现在没修好:有的 ROM 直接不给答案。我这边只能记一条日志,然后假装没这回事。这段时间里,平板上的人一个字也打不进去,因为那个输入法没有键盘界面。上,和真键盘走同一条道。不安装、不启用、不切换,用户那把键盘全程没动过。打完我抬头看了一眼平板,键盘没了。Android 上打字只有两条路,我先走的是旧那条。它不活着,就没人听。轮询,我给 600 毫秒预算,每 60 毫秒读一次。,它替你把字 commit 进当前编辑器。手上没有电脑的人,永远打不了这个字。改写成它,打完再写回原来那个。
2026-11-06 20:36:10
196
原创 手机里那个 agent 想拿麦克风,要先过 7 道门
AWS 那句话说得很准:agent 贵在等待。于是大家把"等待"做成了一个可以暂停的状态,把机器收回,把成本压到零。但这个结论只对一台空着的电脑成立。他这台不空。所以他要考虑的不是怎么被暂停,而是怎么在你接起电话的那一秒安静下来——省下的不是钱,是另一种代价:他得知道自己什么时候该消失。那七道门里,没有一道是为省钱写的。
2026-11-06 10:05:04
142
原创 桌面上的他点不动:防抖在跟自己比,永远攒不到 2 次
窗口就是他的外接矩形,透明角落也在接点击,点他脑袋旁边的空气没反应,因为那一下被这个窗口吃了。现在每 12 毫秒采一次像素的 alpha,把空白区还回去,采样是半分辨率、阈值 0.31,边缘那圈还是会漏。过滤后的值本来就是上一次认定过的结果,它在 true 和 false 上跟原始值每个 tick 都不一样,计数器每次被重置成 1,永远到不了 2,按下状态就锁死在 false。读数会抖,所以加了防抖:连续两次读到一样,才认这次状态。抖动被当成一次新的按下,抓取点被重新记了一遍,后面整段位移都偏。
2026-11-05 20:34:22
164
原创 两台设备互认不靠账号:6 位数字,3 次机会,2 分钟作废
Andee 是一个跑在 Android 上的 agent:他靠系统的无障碍服务读屏幕、自己点,也听得见你说话。现在他也跑在 Mac 上 —— 两台机器共用同一份core,同样的循环、同样的记忆格式、同样的脾气。配对之后,手机可以把写代码的活交给他自己在 Mac 上的那一半,Mac 可以让他去手机上点一份外卖。这篇讲的是这一步之前的事:没有账号、没有服务器,两台设备凭什么确认对面坐的是他。11 月 4 日这天,我翻到的几条消息是同一个动作:再给 Personal Agent 加一具身体。
2026-11-05 10:06:33
187
原创 恢复出厂设置要清 7 项,最难的是先把闹钟取消
所以 wipe() 的第一段不是删,是取消:先 cancelSweep(),再把小本本里的待办逐条 cancelTodo(),然后才开始清那 7 项——key 与语音设置、小本本、保险箱、唤醒词录音、对话历史和它生成的页面、内置页面的 cookie 与本地存储、接地采集的截图与日志。顺序一旦反过来,先删数据再清闹钟,结果不是少删了什么,是多留了什么:数据没了,闹钟还在。过一会儿通知弹出来「提醒你回个电话」,点进去是空的,那条待办在任何库里都找不到。点「确认清空」之前,我先干了一件看着不相干的事:取消闹钟。
2026-11-04 10:47:19
185
原创 1.08 秒能打断语音 agent,抢回麦克风要两道锁
这个指标很硬,也确实解决了一个真问题——过去两年语音 agent 几乎都死在同一处:答应一声"好的",然后安静两分钟。但这个数字是模型侧的。
2026-11-04 10:08:47
211
原创 DeepSeek Super-agent 的另一半:Worker 不只是一个 Agent
DS 那篇文章的标题里有「更自主」三个字。而它的实验数据里有一条很值得看:中性提示下,单会话那组跑了五次,模型一次都没派活,全自己干了。换成「优先委派」的提示词,五次里四次派了活;剩下那一次,它判断「活太小」,又自己干了。同一个模型、同一个场景,换个提示词,行为就变了,而且同组内还不稳。所以 DS 的结论是:靠提示词让模型学会分工是不稳的,得靠结构。Router 不准亲自干活,甚至不给它配 Bash。这个判断是对的。结构决定它能派给谁。DS 那套结构里,Worker 接的是 GitHub、是飞书。
2026-11-03 17:10:51
227
原创 155 款 App 拒绝读屏,拦不住他打字
155 款 App 里真正拦住一个 agent 的,大概率不是「不给读屏」。支付前的风控、短信验证码、人脸识别,不是权限问题,是。
2026-11-03 10:10:06
202
原创 手机上装个 agent,不等于他住在手机里
Andee 是一个跑在自己 Android 手机上的 agent。他没有主界面:没有一个你能翻的会话列表,也没有一个点进去的首页。他的身体是一个前台服务,球浮在别的 App 上面;眼睛是相机,耳朵是语音识别加一个完全离线的唤醒词,手是无障碍服务——读屏幕上的节点树,然后自己把点击、滑动、输入一条条发出去。你把手机锁上,他还在。11 月 1 日,Nous Research 的 Hermes 开放了手机版内测。。
2026-11-02 10:11:56
179
原创 他把删除认成关闭:Android 上一次点击要过三道关
屏幕上提示落点的圆环,画的就是交给系统的那同一组 x、y——整条链路没有第二次测量,也就没有可标定的误差项。它能看到的只有模型的错。
2026-11-01 10:12:47
73
原创 公司能远程清空一台手机,而抹掉他要清 8 个地方
我在做一个跑在 Android 上、靠无障碍服务自己看屏幕、自己点屏幕的 agent,叫 Andee。他不是那种问一句答一句的助手:他在这台设备上思考,留一本只有自己能读的笔记本,没人看着的时候也还是同一个样子。手机在,他就在。10 月 29 日,深兰科技联合华为鸿蒙生态发布了一台叫 Wowoker 的企业级"智能体工作手机"。发布稿里最响的功能是 AI 通话分身:用声音克隆复刻机主的声线,7×24 小时自动外呼、自动接听,自己完成客户初筛、业务资料推送、加客户。
2026-10-31 10:05:24
215
原创 第一批个人 Agent 用户正在卸载:权限给得太满,Andee v0.8.0 选了另一条路
不是因为不好用。恰恰相反——是因为太好用,所以给了它太多权限。而 Andee 选的那条路,和这件事直接相关。
2026-10-30 10:03:09
249
原创 Android 上拒掉权限,他还有 82 个工具能用
我在做一个叫 Andee 的 agent,他装在 Android 手机或者平板上,没有主界面,靠无障碍服务读到屏幕上的元素树,自己看、自己点。屏幕之外他还能直接读设备里的东西:短信、通话记录、通讯录、日历、位置、步数。这些在系统里全是要运行时授权的,所以每个装他的人都会撞上同一件事——一串授权弹窗,一边点一边心里犯嘀咕:这玩意儿是不是有点问题。我自己的权限说明第一句就是这个:这套权限组合——无障碍、悬浮窗、通知监听、短信、通话记录、通讯录、已安装应用列表——和安卓银行木马的检测特征高度重合。
2026-10-29 10:11:25
204
原创 手机唤醒词:2.8 的门槛,放过了 57 句闲聊
我在做一个住在 Android 手机和平板里的 agent,叫 Andee。他没有主界面,靠无障碍服务拿到屏上的元素树,自己看、自己点。平时叫他的办法是点一下浮在屏幕上的那颗球;唤醒词只省掉这一下——喊一声,麦克风接着交给对话,入口跟亲手点球是同一个。这套「听」整个在设备上完成。没有模型文件,不下载、不联网、没有一次请求。你把自己的词录三遍,那三遍录音就是识别器本身:落到磁盘上的只有每 10 毫秒 12 个浮点数,录音从不保存。本来这该是一篇「离线唤醒词怎么做」的教程。
2026-10-28 10:07:15
68
原创 小米平板上微信的界面:开着 219 个节点,关掉 0 个
Andee 是一个开源项目:一个住在 Android 手机和平板里的 agent。他不等哪个 App 为他改代码,也不接谁的 SDK——设备给他两样东西就够了:无障碍服务能读到屏幕上的控件和文字,同一个服务能派发真实的触摸事件。所以他做事的姿势跟人一样:先看,再按。但「先看」这件事在国产 ROM 上并不稳。前几天在一块小米平板 5 上,微信把界面藏了起来——同样的无障碍权限,系统设置页能读到 89 个节点,微信聊天页一个都读不到。回来的不是一个能用的树,是一个没有尺寸、没有子节点、没有类名的空壳。
2026-10-27 10:05:40
128
原创 Android 上他能替你输密码,回话里只有 1 个数字
Andee 是一个开源项目:一个住在 Android 手机里的 agent。他不接 SDK、不等哪个 App 为他改代码,靠无障碍服务读屏幕上的字和控件,然后自己点、自己打字。你让他在某个 App 里办一件事,他会真的伸手去按。这段时间我在给他补一件事:用你自己的账号登录。最省事的做法就摆在桌上——把密码当成一条普通设置存下来,需要的时候拼进提示词。这条路我没走:他每一步都跑在一次模型调用里,密码进了上下文,就等于进了一台我看不见、也收不回来的机器。
2026-10-26 10:12:08
56
原创 别人发来的一条通知,74 个工具里只挡住 7 个
这是一个装在 Android 手机上的 agent,叫 Andee。他不接 SDK、不要 App 配合,靠无障碍服务读屏幕上的字和控件,然后自己点、自己打字。你把通知权限给他之后,他会读你的通知:每来一条,先判断这条值不值得打断你,值得就自己开一个回合去处理——回消息、打开 App、把事办了。10 月 23 日,我给这个项目加「好友」那天,顺手在护栏文件里补了一条规则:如果这个回合的题目不是你写的,而是别人写给你的,保险箱对他关闭。
2026-10-25 10:13:22
213
原创 安静 20 分钟后,Android 上的他自己开一个回合
这是三个定义里最容易验的。把手机放在桌上,不说话,去干别的。二十分钟后回来,进设置里找到「小本本」那一栏的「今天」一行,你会看到复盘次数加了 1,后面的 token 数也跟着变了。这个计数不是装饰,只在一次复盘真的跑完把这一轮的 token 传出去,落盘次数、当日累计 token 和最后复盘时间。设置页那段代码上面有一句注释我原样留着 ——「The bill, such as it is」:这些调用花的是用户自己的 key,所以次数和花销都摆出来,不藏。
2026-10-24 10:08:36
157
原创 71 个工具里 14 个不上网:Android 手机的私人笔记本
Andee 是一款运行在 Android 手机本地的私密助手,71 个工具中 14 个(如记忆、情景管理)被强制保留本地,不上传云端。其笔记以加密 JSON 存于 SharedPreferences,依赖 Keystore 保护,容量限制明确。通过 localOnly 标志与快照测试确保隐私边界不可越界。换机无法迁移,数据不备份,强调“自己动手”管理记忆。核心原则:隐私不在承诺,而在注册前的代码过滤——真正的信任,来自可验证的架构设计。
2026-10-23 16:19:52
293
原创 每来一条通知都要问一次大模型:2 万 token 换一句「要不要告诉你」
默认沉默不是省事。他意味着每一次亮起来之前,已经有人替你看过一遍了。真正的懒是反过来的那种:把所有判断都推给你,然后说自己很诚实。仓库在。分诊那部分是,闸门在,机械拦截在。想看他怎么决定"不打扰",比看他怎么"帮忙"更有信息量。
2026-10-22 10:11:36
230
原创 一个 APK 住进 Android:Andee 怎么自己看屏幕、自己动手,以及它没打算藏起来的五个坑
回头看这个项目,我觉得它最有意思的地方不是"能操作手机"。能操作手机的方案有很多,接个 SDK、暴露个 intent、写一堆自动化脚本,都能干到七八成。先有"自己",才有"手"。有它自己的时间:你没开口的时候它在收尾、在复盘、在判断要不要出声(而且默认选择不出声);有它自己的笔记本:只有它能读,物理上出不了这台设备;有它自己划的线:付款最后一步、同一个位置的第四次点击、陌生人通知触发的回合——这些不是"请模型遵守",是代码里拒绝。而它承认的部分,写得比它宣称的部分更详细。
2026-10-21 14:34:17
272
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅