Claude 也只是一个聊天。
aipager 把你的 Claude Code 会话放进 Telegram,夹在家人、朋友和团队的聊天中间。它运行在你自己的电脑上。
一个在你笔记本上就绪的 Claude Code 会话,处于自动模式,每个新会话都从这个模式开始。
三种模式。从自动模式开始。
每个会话都处在三种模式中的一种,各自单独设置,随时用 /mode 切换。询问模式在每个操作前都停下来。自动模式是每个新会话的起点,它让 Claude Code 自己的安全检查放行安全的操作,把有风险的拦下来交给你。完全访问模式什么都不检查,直接运行。模式只管 Claude Code 自己的权限请求,别的都不管:在群组里,成员的角色不能用的工具照样会被拒绝,模式怎么设都一样。
- ✅ 允许 · 只这一次
- ❌ 拒绝 · Claude 会挡下这次操作
- 🟢 始终允许 · Claude 给出规则时,把这条规则加上
- ⏹ 停止 · 打断这次任务,不回答
会为其他每个模式各显示一个按钮;/mode ask、/mode auto 和 /mode full 直接切换。新会话从自动模式开始,除非这个聊天在 /settings 的“新会话”里改过。
不用重启,Claude 正在工作时也一样:aipager 在会话里按下 Shift+Tab,卡片会一直显示正在切换,直到 Claude Code 确认了新模式。
切到完全访问模式或从它切出来,会话都会重启,对话会保留。只有管理员能把会话开在这个模式里或者切过去(在你和机器人的私聊里,你自己也可以)。
模式管的是权限请求,不是决定:Claude 问你事情的时候,不管在哪个模式,按钮都会出现在你的聊天里。
三个聊天。其余的都是你的生活。
- aipager机器人⏳ api · 工作中 · 3:14 · Read ×2 · Bash ×2你和 Claude 的聊天
所有会话都在这一个聊天里。每次任务一张实时卡片,自己不断更新;权限请求点一下就能回答;置顶栏告诉你哪个在等你回复。普通消息会发到置顶栏点名的那个会话;用 /web 可以把下一条发到别处,之后就在那边继续聊。
/status/new/mode/stop/app/<session> <prompt> - BTbackend-team群组 · 团队模式Sara: @aipagerbot /web 在 staging 上跑一遍登录 e2e你团队的群组
把机器人拉进群组,名单里的人都可以 @ 它。每条消息都按发送者的角色运行;角色不能用的工具在运行之前就被拒绝,每个决定都会连同点按钮的人一起记进审计日志。
owneradminuserread_only - JJim对方和机器人的私聊🔐 web · 需要你授予权限别人,在自己的聊天里
把同事和机器人的私聊加进来,对方就能开自己的会话,带着自己的角色和自己的根文件夹:Claude 的任务都从那个文件夹里开始,文件夹之外、你主文件夹里的东西一概读不到。只需要旁观的人,在你的群组里给 read_only。
成员的根文件夹~/aipager-users/<label>read_only/new
四种角色,每种角色一套工具规则。
起作用的是你在当前聊天里的那个角色;角色不能用的工具,在运行之前就被拒绝,不会来问你。Telegram 和 Mini App 里的任何操作都改不了名单上有谁:只有电脑上的 aipager config 可以。
| 可以 | owner | admin | user | read_only |
|---|---|---|---|---|
| 给会话发消息 | ✓ | ✓ | ✓ | ✕ |
| 允许、拒绝、回答 Claude 的问题 | ✓ | ✓ | ✓ | ✕ |
| Bash,以及其他运行代码的工具 | ✓ | ✓ | ✕ | ✕ |
| 完全访问模式、群组的 /settings、/update | ✓ | ✓ | 仅限自己的私聊 | ✕ |
| 会话可以在哪里工作 | 任何地方 | 任何地方 | 根文件夹 | 根文件夹 |
| 读取凭证文件(~/.ssh 等) | ✓ | ✓ | ✕ | ✕ |
就当聊天用。
它不是套了聊天外壳的控制台:你在 Telegram 里本来会做的事,这里都能做。回家路上对它说几句,把截图直接扔给它,上一条还没做完就把下一个想法发过去。
- 🎙️说给它听
发一条语音消息,转写在你自己的电脑上完成(不经过任何人的云),转好的文字会发回来给你看一眼,然后像你亲手打的一样输进会话。
0:07🎙️ 我听到的是:修一下那个不稳定的登录 e2e 测试 - 📎一张 bug 的截图
照片和文件会落到你电脑上的一个文件夹里,Claude 拿到的是路径,你写的说明就是消息;没写说明时,发过去的就是“check this:”加上路径。一次发好几个,它们会合成一条消息。
- 📤它也会给你发文件
用你自己的话说,比如“把截图发给我”,文件就会在回答之后发到那个会话的聊天里:图片作为照片,视频和音频保持原样,其他的作为文件,一次几个就合成一个相册。但 aipager 的设置、Claude 的凭据和你的密钥永远不会发出:发送之前就会被拒绝。
把截图发给我 - 👀下一条现在就发
你一发出去,消息立刻就到 Claude 那里,任务做到一半也一样:消息在 Claude 自己的队列里等着时是 👀,Claude 收下了就是 👍。点 ⚡ 立即发送,不等这一步结束就把消息递过去。
- ⏸绝不会被当成回答
权限请求还开着的时候,你发的消息会先被扣住,不会被算成对请求的回答,等你答完就马上发给会话。
- 🤖代理和后台命令,都有数
Claude 启动的每个后台代理在卡片上都有自己的一行,写着它在做什么;留在后台跑的命令会一直有自己的计时,直到它结束。
- 🔔它会先告诉你
上下文快用完的提醒、压缩了一次对话、会话结束了或者没动静了、任务跑得太久了:不用你去看,聊天里就会说。
- ⌨️按钮早就在那儿
输入框下面有一块按钮键盘:每个运行中的会话一个按钮,然后是状态、停止、新建,再是模板(放你反复要打的消息)和命令(放 Claude Code 自己处理的那些)。
- 📋/status,一眼看完整个聊天
所有会话排成一张能直接操作的列表:每个在做什么、用的模型、还剩多少上下文、花了多少、后面排着什么,每一条上都有停止、回答,以及菜单里的其余操作。
一个控制面板,还是在 Telegram 里。
/app 一次打开所有会话:每个一张小卡片,带着上下文圆环、文件夹、模型和已经花掉的钱。回答还是在聊天里做,这个 app 是用来一眼看全部的,也用来做聊天里不方便做的事,比如看改动(diff)或者改设置。
每个会话一张小卡片,带上下文圆环、它是谁的、用的模型和已经花掉的钱;上面一行说明这个聊天的整体情况:哪些在工作、哪些就绪、今天花了多少、结束了几个。点 + 再开一个:取个名字,从你常用的文件夹里挑一个,选个模型。
等着你回答权限请求或者问题的会话排在最上面,写着它在问什么。点“在聊天中回答”,这个请求连同按钮会重新发到聊天最下面,你在那里回答它。
状态那一行写着“工作中(3:12)”或“就绪,上次活动 5 分钟前”,还有一键“停止”或“恢复”。下面是最近用过的工具、最新的回复、模型选择、这次任务改动的文件(diff),还有这个会话自己的设置。
默认开启,每个请求都对照 Telegram 自己的签名校验,页面不从别处加载任何东西:没有字体,没有脚本。aipager miniapp disable 可以关掉它。
用你的语言,连数字都是。
变的只有 aipager 自己的文字:卡片、请求、按钮、置顶栏、/status、Mini App、文档。你的会话不变:你用什么语言写,Claude 就用什么语言回;aipager 发给 Claude 的内容也原样不动。用 /language 选一个,或者让它跟着你的 Telegram 走。
波斯语和阿拉伯语从右往左读,用波斯数字(۰-۹)或阿拉伯-印度数字(٠-٩)和它们自己的分隔符,Telegram 里和 Mini App 里都是。会话名、路径、命令和代码保持它们自己的方向。
每种语言都按用这门语言的人平时怎么说来写,外来词照留,复数形式也按各自语言的规矩(阿拉伯语有六种)。
私聊可以跟着你的 Telegram 走。群组只有一种语言,由管理员设置;点完按钮弹出来的提示,用的是点按钮那个人自己的语言。
README 和 docs/ 下的每一页都翻译了。翻译和英文页不一致时,以英文页为准。
pnpm test e2e/login --trace on一切以终端为准。
Claude Code 跑在一个真正的终端里(放在 dtach 里),所以谁都不用一直开着窗口。每一步都会触发一个 hook,通过本地套接字(socket)往 aipager 发一个数据报,aipager 再去改你聊天里的那条消息。你的回答原路返回:要么是给正扣着这次操作的 hook 一个结果,要么是直接按键输进会话。
- Claude Code跑在 dtach 里,不用开窗口
- hook每一步都会触发
- aipager一个进程,以你的身份运行
- Telegram你自己的机器人 token
- 你的聊天你的私聊,你团队的群组
在任何终端里运行 aipager session api,就能接上正在跑的会话。在那边打字,在聊天里打字,是同一个会话。关掉窗口它照样继续,会话重启时这个连接也跟着走。
aipager 往会话里打字,并监听 Claude Code 自己发出的事件。你在聊天里看到的东西来自 hook 和保存的对话,不是从终端屏幕上抓来的。
一个 hook 发出一个数据报就返回,占用 Claude Code 大约 20 ms。没有 aipager 在听的时候,事件直接丢掉,Claude 照常继续;之后 aipager 会从会话自己的文件里把进度补回来。
中间什么都没有。
aipager 从不和 Anthropic 通信。会和它通信的只有 Claude Code 自己,用你自己的登录,在你自己的电脑上。aipager 只是在终端里把它启动起来,然后听 Claude Code 发出的 hook。没有谁逆向出来的接口,没有中转服务器,除了你自己没有别的账号:你在手机上操作的那个会话,就是你坐在键盘前会操作的那一个。
aipager 用你自己的机器人 token 直接和 Telegram Bot API 说话。没有 aipager 账号,也没有 aipager 服务,你的手机和你的电脑之间没有别人的电脑。
aipager 只在你配置里列出的聊天中回应。陌生人找到这个机器人,只会收到一句话:它没有被配置成和对方说话;对方发的任何东西都到不了会话。
它只监听本地回环。Mini App 通过 Cloudflare tunnel 对外,每个请求都必须带上 Telegram 的签名,aipager miniapp disable 可以关掉它。
机器人 token 和聊天 id 放在 ~/.config/aipager/aipager.yaml 里,权限 600。它们不会写进 aipager 的 log;凡是可能混进 log 的地方,也都会打码。
没有 sudo,没有 setuid。它写的东西都在你的主文件夹、/tmp 或者它自己的套接字文件夹里;它启动的每个进程(claude、dtach、安装程序)都以你的身份运行。
什么需要问你,由你的 settings.json 说了算。aipager 只是把问题转过来,从不决定什么可以运行;已经结束的任务留下的按钮点了也不生效,不会动到现在正在跑的工作。
成员和角色只能用电脑上的 aipager config 改。Telegram 里和 Mini App 里的任何操作都加不了人,也放不宽角色。
每一次允许、拒绝和回答都写进 ~/.claude/aipager-audit.jsonl,只追加;在群组里还会记下是谁点的。
四行命令。存到收藏夹里。
点一行就能复制。先准备两样东西:在 @BotFather 那里建一个自己的机器人(记得在里面按 Start),以及在这台电脑上登录好的 Claude Code。剩下的,第二行的向导会问你。
把机器人 token 放进一个它根本不用读的文件里,然后把这段话交给 Claude Code:
Install aipager for me by following https://aipager.run/agent.md. My Telegram bot token is in ~/.config/aipager/bot-token and my Telegram user id is <your id>.
更想用自己的包管理器?uv、pipx、Homebrew、Docker、Nix、AUR 和 Snap 都行。 所有安装方式 →
问吧。
把 Claude 加进你的聊天。
然后关掉终端,去过你的晚上。