一个一直存在的身份
全局配置名字、指令、人设卡、模型和思考档都写在它身上。对话、任务、定时任务都用这份身份,不会每开一次就换一个人。
GROK BOT / MUSE 的开源替代 · 零锁定 · 100% BYOK
Grok Bot 说每个智能体都有自己的电脑——在他们的机房里。Muse 接进你的邮箱和相册,Today 读你的日程和会议。它们都在别人家学会了懂你,也在别人家记着你。eta 是同一件事的开源版本:那个懂你的东西,住在你自己家。
$ git clone \ https://github.com/0xfe-project/eta.git $ cd eta $ bun run setup $ bun run dev
打开 http://127.0.0.1:3000 。数据在 ~/.eta,和装好之后是同一份。
# 设置 → 机器 → 添加,复制它给出的命令 $ eta-daemon setup <主 node 地址> <安装码> $ eta-daemon run
安装码只能用一次、24 小时过期;daemon 只出站连接主 node。
一个数据目录装下全部:对话、记忆、任务、用量。拷走就是全部。
会话回放 · 脚本数据 · 时间已压缩 · 不是实时 回放会停在需要你确认的地方,就像 eta 本身。
Grok Bot、Muse、Today 都在做同一件事:住进你的生活,在你开口之前动手。差别只是谁接的应用更多。代价是同一个:那个懂你的东西,住在别人家。
| Grok Bot / Muse / Today | eta | |
|---|---|---|
| 住在哪 | 他们的机房。订阅停了,团队就散了 | 你的机器,你自己的机房 |
| 谁在答你 | 动态路由,你不知道这一次是谁在答 | 你定。100% BYOK:ChatGPT、Grok、Gemini,自己机房那台私有模型也算 |
| 记忆 | 一个黑箱,只能相信它记得对 | 一个 SQLite 文件,能查、能改、能删、能拷走 |
| 做了啥 | 给你一份总结 | 每一步都在时间线上:读了哪个文件、跑了哪条命令、改了哪一行 |
| 规则谁定 | 涨价、限流、封号,你只能接受 | 他们改不到你手上 |
| 能改吗 | 不能 | 源码全在 |
租来的 7×24,和你自己的 7×24。 它们按订阅卖你一支团队,停订就收走。eta 是你自己养的一支,装一次就一直在。
它记得你。你记得它记得什么吗? 记忆就是你硬盘上的一个 SQLite 文件:能翻、能搜、能一条条删。删掉就是真的删掉。
一个订阅,还是你自己的模型。 100% BYOK:订阅账号、API key、你自己机房那台私有模型,都是第一等公民。
黑箱记忆,和一个文件。 断网、拔线、搬家,拷一个目录就跟着走。
封号那天。 它们封号等于你的智能体消失。eta 没有这个开关——能按下开关的人只有你。
| Claude Code | eta | |
|---|---|---|
| 会话 | 关上终端就散了 | 智能体常驻,记得上一轮,按点自己开工 |
| 模型 | 他们一家,涨价和限流由他们决定 | 100% BYOK,包括你机房那台 |
| 数据 | 会话和代码流进他们的服务 | 一个 SQLite 文件在你硬盘上,拷走就是全部 |
需要 100% 透明度和 100% 控制的人。
愿意把生活交给 AI,但不愿意把生活交给一家公司。
公司不让代码出内网的人。
被限流过、被悄悄换过模型、被封过号的人。
要能对审计说清「这个智能体到底读过什么」的人。
eta 是一个常驻智能体的工作台。它跑在你自己的机器上,在浏览器里用,桌面和手机都行。它不是一次会话,是一支一直在的队伍。
常驻智能体 每个有自己的名字、指令、人设卡和模型。重启不丢东西,记得上一轮说到哪。
群聊与主理人 几个智能体在一个对话里,@ 到谁谁答;没有 @ 的时候交给主理人。
任务看板 智能体提出任务,你确认,它在自己的会话里去做,做完交回待验收。
定时任务 按计划跑一次短会话,留一份报告;没有新东西就不打扰你。
记忆 记得以前说过什么,你能翻、能搜、能删。记忆是库里的行,不是它的心情。
产物 智能体发布静态网页:报告、图表、原型。可预览、可分享、可撤回。
自带模型 100% BYOK:订阅账号、API key、你机房那台私有模型,都算。
智能体是你对话、交代任务的对象:名字、指令、人设卡、模型、准它用哪些环境包。它不是一次会话,也不是一台机器。
每个人的脸是它自己 id 长出来的:改名字不换脸,加一个智能体就多一张。上面这群是真的在呼吸。
名字、指令、人设卡、模型和思考档都写在它身上。对话、任务、定时任务都用这份身份,不会每开一次就换一个人。
每个(智能体 × 对话)一个会话,记得上一轮说到哪,重启后按同一条记录找回。会话在一个工作目录里跑。
一个群里放几个智能体,只有被 @ 的会回答;没 @ 时交给主理人。被唤醒的只收到它没看过的行,不重读整段历史。
一轮开始前想起相关的事,结束后记下新的。翻、搜、加、删都在界面上;记忆就是数据目录里的一个 SQLite 文件。
智能体发布静态网页:报告、图表、原型。任意版本可公开分享,撤回后永久失效。页面在不透明 origin 里跑,读不到 cookie。
改名字、指令、模型或环境包,正在写的那一轮先写完;下一轮用新的。
智能体在对话里提出任务,你确认后它去执行:在项目里开一个 worktree,做完交回待验收。你看到的是每一步,不是一句「已完成」。
派给一个智能体去做,再让它把结果交回来:任务上的每条评论都会把它叫醒一次,在同一个会话里接着干。没有任何东西会自己合并 PR,或自己把任务标成完成。
· list_tasks · get_task · update_task · comment_task # 汇报做完,任务交回待验收 · finish_task # 合并是一次你来点的操作,不是它 · open_pull_request
会话在它所在的那台机器上、以你的用户身份跑,工具该有的权限它都有。只把专门用来干活的机器接进来。
让一个东西按时去做一件事。它背后没有智能体,只有模型、一份简报和一个时钟。每次运行要么汇报,要么什么也不说。
每次运行给下一次写交接说明,也能查以前的运行和报告。
你对报告说「只看破坏性变更」,它就合进新一版简报,下次起生效。旧版本可以恢复。
一次运行最多 15 分钟;同一时刻最多一次;错过的点不补跑——重启后从现在算起。
掌控感优先。智能体在做什么,你看得见、停得住、改得了。需要你点头的事,会一直等你。
$ git push origin fix/checkout-clock 规则 confirm-push · 来自环境包的 akhook.yml
✓ 已允许 · 仅这一条命令 · 10 分钟内有效 · 只用一次 ✕ 已拒绝 · 它被要求不许换个写法绕过去
命令、改文件、工具调用,都变成同一种卡片,在对话里或「待处理」里答复。等待没有时限。
# 内置的那一层,随源码一起在 - id: gh-pr-create on: shell_exec checks: - argv: [gh, pr, create] message: 推送分支后用 open_pull_request 工具开 PR。 # 环境包里带的 akhook.yml - id: confirm-push on: shell_exec action: ask checks: - argv: [git, push] message: 推送需要你确认。
每条 shell 命令、每次改文件,执行前都过一遍规则:要么拦下并告诉它该用什么,要么先问你。环境包能带自己的 akhook.yml,关不掉内置的那层。这是防手滑的护栏,不是安全边界。
所有等你的事集中在一处:
插入当前回复 停止全部 /compact 环境包是一份目录:技能、MCP 服务器、hook 规则,可选地还有一个服务。智能体勾上哪些,它在那台机器上的会话就带着哪些。不用重新打包,也不跑安装脚本。
my-bundle/ ├── plugin.json # name、description、requires、config、service ├── mcp.json # stdio 或 streamable HTTP ├── skills/*/SKILL.md └── akhook.yml # 工具调用规则
模型用你自己的。三选一:用设备码绑 ChatGPT(Codex)或 Grok 的订阅账号、填 Google AI Studio 的 key、或者接任何 OpenAI 兼容的服务——包括你自己机房里那台。
在提供方的页面输入这串码,eta 就拿到了登录。
某个模型在某个账号上失败,只冷却那一个模型,整个账号照常用。
「刷新状态」检查每个账号,不消耗额度。
需要重新登录、额度用完、暂时失败,都写在账号旁边;恢复后自动继续。
自己机房那台只要兼容 OpenAI 接口,就是一个正常模型,不是「兼容项」。
全部东西在一个进程里:Web、产品数据、会话的运行、模型凭据。没有控制面,也没有消息队列。
对话、任务、记忆、产物、智能体的工作区,都在你自己的机器上,在一个目录里。离开这台机器的,只有你让它离开的。
一台机器就够。一个进程、一个数据目录、一个 SQLite 文件。装之前先想清楚:数据放在哪台机器上。
git clone \ https://github.com/0xfe-project/eta.git cd eta bun run setup bun run --cwd apps/web build HOME=/var/lib/eta bun apps/eta/src/main.ts \ --web-dir apps/web/dist \ --host 0.0.0.0 --port 8787
数据目录固定是 $HOME/.eta,没有开关:换位置就换 HOME。systemd 里是 Environment=HOME=/var/lib/eta。
监听回环以外的地址时,令牌门自动开启:除 /up 外每个请求都要令牌。浏览器打开一次 /?token=<令牌> 就种下 cookie(HttpOnly、SameSite=Strict、30 天),脚本用 Authorization: Bearer。放在反向代理后面时,把 --allow-origin 设成页面的外部地址。
订阅账号(用设备码)、Google AI Studio 的 key、任何 OpenAI 兼容的服务,三选一,也可以同时来。私有部署的模型填地址和 key 就行。
# 设置 → 机器 → 添加,复制它给出的命令 eta-daemon setup <主 node 地址> <安装码> eta-daemon run eta-daemon install-service
daemon 是一个单文件,不含 Web 和数据库:会话在那台机器上跑,产品数据和模型调用回到主 node。安装码一次性、24 小时过期,配对时你核对指纹后批准。install-service 把它注册成 systemd 用户服务或 launchd agent。
一个常驻智能体的开源工作台,装在你自己的机器上:智能体有记忆、能用工具、按时间自己跑,需要你点头的事会停下来等你。Grok Bot、Muse、Today 做的是同一件事,只是它们住在别人的机房里。
没有。eta 跑在你的机器上,数据也在那台机器上。我们不碰你的会话,也不转售模型算力。
不能。eta 是单用户服务,没有账号和角色。它给自己上锁的方式是令牌门:监听非回环地址时自动开启。
随你。订阅账号(ChatGPT Codex、Grok)、Google AI Studio 的 key、任何 OpenAI 兼容的服务都行;私有部署的模型填地址和 key 就能用。模型是 provider:模型 id,默认的 provider 就是 Anthropic。
它是租来的一个终端:关掉就散了,模型只有他们一家,会话流进他们的服务。eta 是常驻的一支队伍,模型你自己带,数据在你自己硬盘上。写代码它很强,这一点不用争。
不会。任务交付的 PR 要你在任务页点合并;合并前核对 head 没变,按仓库允许的方式合并,不用管理员权限越过保护。GitHub 那条链默认不加载。
daemon 只出站连接主 node,密钥在本地生成、主 node 只存指纹,配对要你核对后批准;安装码一次性、24 小时过期。会话在那台机器上以你的用户身份跑,所以只接专门干活的机器。
一个进程,几百 MB 内存起步;每个会话再按模型和工具算。不用 Kubernetes,也不用消息队列。
一个目录,默认 $HOME/.eta:一个 SQLite 文件装对话、任务、记忆、用量和设置,会话是文件,产物也是文件。拷走这个目录就是全部。
eta 的界面按这几条做。这一页也是。
用的时候要感到事情在自己手里。冷静,只是为了不把人赶出这个状态。
目的是让人留在心流里,并且能停在事情里面。
逐个检查界面元素并尝试移除。删掉后不影响理解和操作,就不保留。
像汽车仪表盘一样利用空间。紧凑是尊重,不是拥挤。
全局使用直角。颜色一律走变量,浅色和深色都支持。
交互过渡 60ms linear,不拖尾、不弹跳。尊重减少动态效果的设置。
智能体和技术部分用日常说法,让人知道发生了什么。不堆系统术语。
精致指对齐、间距、状态、反馈和动效都做完,而不是换一层更「专业」的皮。