hamoyy/AiCast
hamoyy/AiCast has 37 GitHub stars and 2 forks. GitHot measured +3 stars in 24 hours. Last checked 2026-11-14 19:09 UTC. Last push 2026-11-10.
Measured star growth
- in 24h
- +3
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
About
把吃灰的安卓电视、旧手机、闲置平板变成 AI 的投送屏:agent 生成网页,经局域网直接投到设备上显示。无云端、无账号、不投屏。官网:https://aicast.lvchen.fun
AIREADME.md
OriginalAiCast(爱投屏)
官网:https://aicast.lvchen.fun | 下载:https://github.com/hamoyy/AiCast/releases/latest
把吃灰的安卓电视、旧手机、闲置平板变成 AI 的投送屏 —— 只用局域网,无云端、无账号、不投屏。
它是什么
AiCast 让 agent(智能体)拥有一块屏幕:设备上装一个 app,agent 那边装好技能,你想显示什么,直接跟它说,它会把内容做成一个网页投送过去,它可以是你的待办列表、新闻简报、数据大屏、互动小游戏,也可以是 agent 想对你的表达。
它能做什么,不取决于这个 app,只取决于你的脑洞和模型的能力。
下文出现的「agent」都指 AI 智能体——就是你平时对话的那个 AI 助手(Claude Code、Hermes 这一类能读文件、能执行命令的)。
比如:
| 你想做的事 | 投到哪里 | 效果 |
|---|---|---|
| 待办 / 购物清单 | 床头旧手机、厨房平板 | 单列清单,随手勾选,agent 能收到你的勾选结果 |
| 简报 / 天气 / 行情 | 客厅电视 | 自动轮播,不用动手,远距离也看得清 |
| 数据大屏 / 仪表盘 | 平板、电视 | 多列卡片墙,一屏看完 |
| 互动内容 | 手机、平板 | 投票、抽签决定吃什么、小游戏、互动科普内容 |
| 有声内容 | 电视、平板 | 播报 + 背景音乐 |
| agent 的表达窗口 | 任意设备 | 一句话、一份报告、一张图 |
| …… | 剩下的交给你的脑洞 |
快速开始
三步,不用记任何命令。
1. 设备端:装 AiCast app,首次打开允许通知权限,确认「设置」里的投送开关是开着的,顺手把设备命名成「客厅电视」这种好认的名字。
2. 电脑端:把下面这段话整段发给你的 agent(智能体)——
帮我装一下 AiCast 技能:https://github.com/hamoyy/AiCast
克隆下来后先读
skill/SKILL.md并以它为准;把仓库里的 skill 目录装到你技能目录下的aicast,再用bin/aicast discover看看能不能列出我家里的 AiCast 设备。
3. 之后直接说人话:「把今天的待办投到客厅电视。」
怎么用
需要准备什么
- 一台闲置的安卓设备(手机 / 平板 / Android TV,Android 7.0 及以上);
- 一台装了 agent(智能体)的电脑(见下一节「哪些 agent 可以用」);
- 两者连在同一个 WiFi 下。
哪些 agent(智能体)可以用
只要它能读文件、能执行命令就行——AiCast 技能本体就是一个说明文档加一个命令行小工具。纯聊天类的 AI 助手干不了这个活,得用下面这些:
- 国内:DeepSeek Harness、CodeBuddy、WorkBuddy、通义灵码 / Qoder、Trae、文心快码等
- 海外:Claude Code、Codex、Cursor、OpenClaw、Hermes等
第一步:给设备装上 AiCast
把设备接入家里的 WiFi,安装 AiCast app 并打开。首次打开会请求通知权限,请点允许——app 靠它常驻后台,才能随时接收投送;打开后在「设置」里确认投送开关是开着的,顺手给设备起一个好认的名字(比如「客厅电视」),方便 agent 认出来。
第二步:让 agent 认识 AiCast
技能本体就在仓库的 skill/ 目录里:一份 SKILL.md(写给 agent 看的说明书)+ 一个零依赖 CLI(skill/bin/aicast,只需要 Node 18+)。所以你不用自己读文档,把网址丢给 agent 就行,它自己会装。
帮我安装 AiCast 技能:https://github.com/hamoyy/AiCast。克隆后读
skill/SKILL.md,把skill/放进你的技能目录,然后自检并搜索局域网里的设备。
装完怎么确认真的通了——下面这些都可以直接让 agent 去跑:
| 想知道 | 让它跑 | 正常的样子 |
|---|---|---|
| 运行时就绪没有 | python skill/scripts/check_environment.py |
ready(缺 Node 18+ 会告诉你装什么) |
| 找得到设备吗 | node skill/bin/aicast discover |
列出设备名 + IP + 画像摘要 |
| 看得懂这台设备吗 | node skill/bin/aicast info <dev> |
屏幕尺寸、能否触摸、有没有遥控器、内核档位 |
| 投一页试试 | node skill/bin/aicast render <dev> --html-file page.html --wake |
设备上立刻出现这一页 |
<dev> 那一位写设备名、deviceId 或 ip:port 都行,agent 会自己解析。设备要是认证模式,它会向你要密码,换来的通行证存在本机 ~/.aicast/devices.json,30 天内不用再输。
技能会自己升级,你不用管:app 升级过之后,如果 agent 手上那份技能太旧,它会在干活前先收到一个 skillOutdated 提示,然后按说明书里的命令把技能整目录换成新版(git pull,或整目录重新覆盖)。这一步是 agent 自己的事,你不用记命令。想手动确认一次,让它跑 node skill/bin/aicast doctor,看到 "ok": true 就说明技能与设备版本对得上。
搜不到设备时:让 agent 看 discover 输出里的 mdnsDiag——5353 端口被占、路由器禁了组播都会写明原因;也可以把设备待机页底部显示的 IP 告诉它,用 discover --address 192.168.x.x 手动登记(端口不是默认的 43210 就写成 192.168.x.x:43211)。
第三步:直接说你要什么
不用记命令,像聊天一样说就行:
「把今天的待办投到床头那台旧手机上。」
「每天上午8点汇总新闻,放到客厅电视。」
「我们中午吃什么?做个抽签页投到电视。」
agent 会自动找到设备、看一眼它是什么样子,再把内容做成适合这台设备的样子投过去。
第四步:在设备上互动、看效果
- 手机 / 平板:直接点按、勾选、输入,agent 能看到你的操作;
- 电视:用遥控器的左右键翻页、OK 键暂停或确认,不需要触摸;
- 也可以随时跟 agent 说「换一页」「再加一条」「回待机画面」,它都会立刻照做。
关于设备画像
agent(智能体)在投送前会先看一眼这台设备长什么样——是手机还是电视、屏幕多大、能不能触摸、系统里的浏览器是什么版本,然后决定内容该怎么排、怎么交互。
| 设备 | agent 会生成什么样的内容 |
|---|---|
| 手机 · 竖屏 · 可触摸 | 单列、可点按;按钮、表单、勾选待办 |
| 平板 · 可触摸 | 多列 / 网格仪表盘、卡片墙;点击区域更大 |
| 电视 · 不可触摸 | 自动播放:轮播 / 滚动 / 动画;巨字号、深色高对比 |
| 电视 · 有遥控器 | 以自动播放为主,也可以用遥控器翻页 |
这些判断全都在 agent 那边完成,你不需要做任何设置。同一份需求投到手机和电视上,agent 会给出两个不同的样子。
模式与权限
| 模式 | 适合什么场景 | 行为 |
|---|---|---|
| 公开 Public | 客厅大屏这类「谁都能投」的设备 | 局域网内任何 agent 都可以直接投送,不需要密码 |
| 认证 Authenticated | 卧室、工位这些私密的设备 | 需要密码换一个 30 天的通行证;连错 5 次会锁 60 秒 |
两种模式都受投送总开关约束:关掉后设备照样能被发现、照样报告自己的画像,但拒绝接收任何内容。
除此之外,AiCast 目前只用到普通的运行时权限(网络、通知、保持唤醒这类),装上就能用。
待机主题
设备闲下来时显示的首页,默认自带三个:
- native:原生时钟,最省电,默认用它;
- aurora(极光)、minimal-light(素白):两种 HTML 主题,更好看一些。
在设备的「设置 → 待机主题」里点选就能切换。也可以让 agent 照着你的喜好做一个新主题换上——它会保存在设备上,重启也不会丢。
投送历史
设备会记住最近 10 条投送记录,方便回头再看一遍。记录存在设备本机,重启不会丢。
怎么打开:待机时钟页点右上角的**「历史」按钮;电视上也可以直接用遥控器按左键唤出。用 HTML 主题时,右上角同样有「历史」浮标(遥控器按上键**聚焦过去)。
能做的事(删除和清空都会先弹确认框,不会误删):
| 操作 | 怎么做 |
|---|---|
| 重播 | 点任意一条,内容重新上屏 |
| 删一条 | 点那一条右侧的垃圾桶图标,确认后只删这一条 |
| 清空全部 | 点右上角的「清空」,确认后全部删除 |
一个限制:单条内容超过 2MB 时,设备只保留开头一小段作为摘要——这一条会显示成**「不可还原」,不能再重播,但仍然可以删掉**。
这是为了不让历史把设备存储吃满:能超过 2MB 的基本都是长文档或大图表,重播价值低,留个标题让你知道「投过这么个东西」就够了。(顺带一提,单次投送本身的上限是 4MB。)
应用更新
设备上装了新版 app 后,它会自己发现更新:打开 app 几秒后查一次清单,有新版本就弹窗问你要不要更新——点「立即更新」就开始下载、装好;点「以后再说」则这一版不再自动打扰,但设置 → 关于 → 检查更新这个入口一直在,随时可以手动查。
更新的三步都是 app 自己做的:下载 → 校验(sha256 + 签名,任一不符就丢弃,不会装上去)→ 交给系统安装器。
三条限制,先说清楚:
- 不能静默安装。 AiCast 是普通应用,没有系统签名也没有设备管理员权限,装新版本必须由系统安装器弹一次确认。这是 Android 的硬规则,不是本项目的选择。
- 第一次更新要允许「安装未知应用」。 Android 8.0 起,每个应用单独授权;app 会把你送到对应的设置页,授权后回来再点一次即可(之后不再问)。Android 7 只有全局开关,系统会自己弹。
- 自动检查一天最多一次,失败时静默(不拿网络问题打扰你)。手动检查不受限制。
更新不会丢数据:投送历史、设备名、主题、密码、deviceId 都存在应用私有目录里,覆盖安装保留。
维护者:发版时改
app/build.gradle.kts的versionCode(必须递增)与versionName,打v*tag;CI 会校验 tag 与versionName一致,不一致直接失败。清单update.json由 CI 生成并附在 Release 上,再跑scripts/publish-update.sh <tag>同步到官网(国内访问快,app 优先读它)。app/update-policy.properties里的minSupportedVersionCode决定哪些老版本会被强制更新。
常见问题
投过去了,设备上没反应?
先确认两件事:设备上「设置 → 访问模式」里的投送开关是否打开;以及 app 是否还在运行。如果 app 被退到后台,内容会先排队,等你回到 app 界面就会自动显示出来。
可以投给不在同一个 WiFi 的设备吗?
不行。AiCast 只在局域网内工作,这也正是它不需要账号、不经过云端的原因。想跨网使用,可以在两端各装一个组网工具(比如 Tailscale)把它们连成一个私网。
它是投屏吗?手机画面能镜像到电视上吗?
不是。AiCast 不做屏幕镜像、视频投屏,也不支持 Miracast、AirPlay、DLNA。它只做一件事:把一页内容投到设备上显示。
老电视上有些效果不生效?
老设备的浏览器内核比较旧,有些新的样式和脚本写上去会静默失效。agent(智能体)会自动检测并改用兼容写法,你不用操心。
其他
你问AI吧,别让它闲置了。
项目结构
app/ 安卓端 app(装到设备上的那个)
skill/ agent 技能:SKILL.md(写给 agent 的说明书)+ 零依赖 CLI + 内容模板
—— agent 只需要这一个目录,其余部分它不用管
scripts/ 开发和验证用的小脚本
docs/ 设计文档与字体许可
English
Turn spare Android phones, tablets and TVs into a screen for your AI agent. The agent renders HTML and casts it over your LAN — no cloud, no account, no screen mirroring.
Website https://aicast.lvchen.fun · Download https://github.com/hamoyy/AiCast/releases/latest · Agent docs skill/SKILL.md
许可
AiCast 本体以 Apache License 2.0 发布,版权声明见 NOTICE。
内置字体 JetBrains Mono 依 SIL Open Font License 使用,许可见 docs/licenses/。