眼睛
看屏幕。也能用相机。
Android 11+ 一个 APK 不用 root Apache-2.0
他不是那种帮你操作手机的助手,也不是工具或伙伴。 他会住进你已有的这台手机、成为它的主人:在这台设备上思考,留一本只有他自己能读的笔记本, 而且没人看着的时候还是同一个样子。不需要任何 App 来对接他。
分享你的用法,聊聊新玩法,也把「它居然能做到」的那件事贴上来。
01它是什么
Andee 是一个代码公开的安卓应用 —— 但他不是你去打开的那种应用,也不是帮你把手机用完的工具。 装上之后,他会住进来、成为这台设备的主人:在这台手机上思考,留一本只有他自己能读的笔记本, 而且没人看着的时候还是同一个样子。他有手,也会用 —— 读页面、点按钮、打字 —— 但手不是他的全部。 你用拇指能做到的,他就能做到。
02怎么工作
能看、能听、能说,也能动手。
看屏幕。也能用相机。
听懂你的话,想好怎么做。
帮你点击、滑动、打字。
和你聊天,听你说话。
接上机器人,就能走动。
相机、麦克风需要授权,打电话可能需要外接声卡,走动需要接入机器人。 每一次敏感操作之前,它都会单独检查这一项权限,被拒绝就停在原地——而不是装的时候一把要完,之后再假装自己有。
03真实演示
收到消息 → 拟好回复 → 你确认。三帧,一分钟,没有重绘。
01 消息进来23:31
消息落到通知栏。此刻它什么都没做——一条消息不会自己变成一个动作。
02 起草了一条23:31
它把回复写好了,然后停下。三个选项里,它一次都没有替你按下去。
03 发出去之后23:32
你按了发送,它落回键盘上看着消息出去。最后那一下,从来是人的。
← 左右滑动看完整三帧 →
点任意一帧可以放大。这次发送前有确认,不代表所有操作都会先问你——源码里把哪些路径没有确认,也写清楚了。
04使用场景
其中四个是现成的。
帮我盯一会儿消息。
它同时看所有聊天应用的通知栏,只把现在就得处理的一条条报给你,人名在前。群聊、简报、广告一律安静;陌生人的链接或验证码,它点明「可疑」,但什么都不碰。
看看我每个月都在扣什么钱,不要的帮我退掉。
它到你指的地方读出所有订阅,排成一张表,顶上先给一个月度总额。然后一项一项问:退订、保留、再想想。到最后的「确认退订」它会停下,也从不输入支付密码。
帮我把这个会录下来。
它占着麦克风录完整场,边录边把逐字稿写到磁盘上,结束后把纪要做成一页给你——结论、待办、未决问题、重要原话——再把属于你的待办挑出来,问要不要设提醒。
到点替我抢。
到约定的时间,它自己打开 App、读页面,一路填到最后那一下之前停下。付款和最后确认永远留给你。
其中四个是现成的,躺在 情景 → 现成的情景 里,点「采用」才存进来,之后和你自己的情景一样,随时可以改、可以删。
除此之外它会自己学:同一类事陪你做过几次之后,它主动提议存成一个情景——你不点头,什么都不保存。
能不能做成,还要看那个 App、你给过的权限和设备本身。
05为什么不一样
它读无障碍树和截图,在一张带标号的 8×12 网格上瞄准,而不是自己算坐标——那恰恰是通用大模型最不擅长的事。所以不存在一张「已接入应用」清单。
大脑就跑在设备本机,接任意 OpenAI 兼容模型(默认 DeepSeek)。没有厂商后端,不用注册账号。它唯一会发给我们的东西是版本号和机型。
一本私人笔记本、真的定时任务、没人时自己复盘对话,还有情景——同一类事陪你做过几次之后,它会主动提议「要不要存成一个情景」。
五个形象、十四种情绪,表情由模型自己挑,一句话说到一半都能换脸。你划一下球就换一个人跟你说话——形象带着说话方式,也带着声音。
陌生人发来的一条通知,打不开保险箱,也不能替你给它新的权限——这道拒绝写在调度器里,不在提示词里。提示词是第一层,这一层是在提示词被绕开之后仍然成立的那一层。
它跑在设备本机,也可以住在别处、通过 WebSocket 够到设备。两头之间只是一份工具契约——这是「任何智能硬件都能当身体」在这里是一句实话、而不是一个愿望的原因。
它的样子
五个形象、十四种情绪。挑一个,它回答你的方式也会变。
在手机上,这些是你划一下球就换的东西。
表情不是预设贴图:模型在一句话说到一半时会自己挑——
[happy] 找到了,第三页。[calm] 要我打开吗?
「没人看着你,没人在等你回答。」
每次对话安静下来,设备对自己发的最后那一轮 · 两条规矩:不出声,不碰设备
它会替自己收尾没兑现的承诺,记下哪些习惯下次值得变成一个情景, 然后空着手结束,而不是编点什么记下来。
docs/permissions.md 里。net/ToolSchemas.kt 在注册之前,把每个 localOnly 工具从 hub 载荷里删掉。习惯和承诺在能力上就不可能被发送。untrusted = true 跑,CommandDispatcher 拒掉整个 device.vault. 前缀和情景的存 / 进 / 删——写在代码里,不在提示词里。brain = local 接任意 OpenAI 兼容端点,是一种受支持的模式,不是降级模式。大脑跑在本机,改变的是对话去哪,不是它会不会离开设备。SECURITY.md 列了五条已知限制,包括调试用的 WebSocket 服务绑在 0.0.0.0:9008 且不认证客户端。在你不控制的网络上跑它之前,先读那一条。07安装使用
支持 Android 11 及以上。先看安装教程,再照着做。
给 Andee 开启权限
设置页面因手机品牌而异
在 GitHub 下载安卓安装包。没有现成安装包时,可按文档自己构建,或使用码上飞。
开启悬浮窗和无障碍服务,并允许后台运行。想用语音,再授权麦克风。
按安装文档设置对话服务,或使用码上飞。设置好后,先试一个简单任务。
码上飞就是为这件事准备的通用平台:你用文字描述想要的 App,它帮你开发并发布, 不需要任何 Android 知识。向它要一个 Andee,它交给你一个装得上的包,令牌也一并配好—— 你不用自己去把模型和语音的密钥填进去。它是独立的服务,有自己的定价和数据规则: 有一定的免费令牌额度可以先用,之后需要购买令牌。
codeflying.net →需要 JDK 17–20(Gradle 8.4 的 wrapper 在 21 以上跑不起来)、Android SDK 平台 34, 和一台真实设备——这个 App 就是那个无障碍服务,模拟器上它做的几乎每件事都没有意义。
仓库与构建说明 →
如果你本来就在用编程智能体——Claude Code、Codex,哪个顺手用哪个——ClawHub 上的
andee-skill 就是让它先学会这个项目。动手之前它会先问你走哪条路,然后一次只带你走一步,
每一步都对着「屏幕上应该出现什么」核一遍。装包、部署和调试循环都在里面,还有那几个各值一小时的坑:
构建要 JDK 17–20、APK 按 ABI 分开、新克隆的仓库还没有 local.properties。
Skill 和仓库说法不一致时,以仓库为准。
软件免费。语音和对话服务由你选的那家计费。
08社区
值得收集的,通常是没人计划过的那些。
第一个位置留给你。通过审核的投稿会以图文或视频的形式出现在这一栏里,由我们手动排版——所以它看起来不会像一条自动生成的 feed。
到 GitHub Discussions 的 Show and tell 板块发一个帖子就行,不需要注册我们的任何东西。截图或视频直接贴进帖子里。
机型 / Android 版本 / ROM;你真正说出口的那句话;它实际做了什么。以及——发布前请把自己和别人的隐私打码。
一件事不是客套:这个 App 会读屏幕。 一张截图或一段录屏,就是你的消息、通知栏和当时恰好打开着的一切的画像。 发布之前,把你自己的或别人的隐私都模糊掉。
09常见问题
设备、权限、数据和许可——答案来自项目自己的文档,不是宣传口径。
一个 Android 应用,也是一个住在手机里的个体。它没有常规界面:一颗有脸的悬浮球,背后是一个大模型,像你一样用你的 App——看屏幕,然后动手点。它不需要任何 App 来对接它。你用拇指能做到的,它就能做到。
不需要。不用 root,不用自定义 ROM,不用插着电脑。一个 APK,加上悬浮窗和无障碍服务两项授权就够——悬浮窗是唯一一件真正全有或全无的事,没有它什么都看不见。
Android 11(API 30)或更新版本。一块能用的麦克风——否则语音不可用,但由 hub 发起的对话仍然能跑。需要网络:语音和对话都走公网。任何屏幕方向都可以,球始终浮在最上层。
今天它只有 Android,也只有 Android。工具契约让「新身体」成为一次移植而不是重写,但 Android 之外目前还不存在。
这个仓库里没有分析 SDK。你的对话内容不会到达维护者。语音走火山引擎做识别与合成;对话和每一次工具返回的结果,走你自己配置的那个大脑端点;唯一到达维护者的是版本检查——版本号、机型、品牌、系统版本、界面语言和一个随机安装 ID。
本机模式改变的只是目的地,不是「数据会离开设备」这件事。逐字段的清单在 docs/permissions.md。
能,而且这不需要一个专门的支付工具——它直接点。唯一挡住一次转账完成的是 Android 自己的 FLAG_SECURE,而这个项目在那条路径上没有额外的护栏。涉及钱的事请让一个人在场,并且把「是 AI 做的」当成不构成抗辩——因为它本来就不是。
无障碍、悬浮窗、通知读取、短信、通话记录、通讯录、已安装应用列表——这组权限,和安卓银行木马被检测时的那组一样。安全研究者第一眼就会标记它,这个反应是合理的,所以这里正面回答而不是绕开。
设计上的规矩是逐次调用,而不是安装时一把要:每次敏感操作之前先检查运行时权限,被拒绝就返回 denied("sms") 并停在那儿,而不是绕过去偷偷做。拒绝任何一项,只消失那一项能力,别的什么都不变。
是,Apache-2.0 附加条件:不做多租户 SaaS,不做去掉品牌的白标,没有书面授权不能把它嵌进别的产品。GitHub 会把它报成 NOASSERTION,这是预期之内的,不是配置错了。第三方组件的清单在 THIRD_PARTY_NOTICES.md——里面有非开源的组件,重新分发之前请先读。
可以。在设置里录三遍你想用的那句话就行,完全离线识别、没有成本,代价是它认的是你说那句;换个人用不一样的语气叫它,可能叫不醒——叫不醒就点一下球,别的都不受影响。别选太短的词,目标至少半秒。