Claude 也只是一个聊天。

aipager 把你的 Claude Code 会话放进 Telegram,夹在家人、朋友和团队的聊天中间。它运行在你自己的电脑上。

安全的操作自己跑;有风险的要等你允许才跑。

一个在你笔记本上就绪的 Claude Code 会话,处于自动模式,每个新会话都从这个模式开始。

$curl -fsSL aipager.run/install | sh

Linux 和 macOS · MIT · 大约一分钟

权限模式

三种模式。从自动模式开始。

每个会话都处在三种模式中的一种,各自单独设置,随时用 /mode 切换。询问模式在每个操作前都停下来。自动模式是每个新会话的起点,它让 Claude Code 自己的安全检查放行安全的操作,把有风险的拦下来交给你。完全访问模式什么都不检查,直接运行。模式只管 Claude Code 自己的权限请求,别的都不管:在群组里,成员的角色不能用的工具照样会被拒绝,模式怎么设都一样。

aipager
机器人
💬 询问模式/mode ask
我先看看处理 cookie 的那个辅助函数。”
🔐 Read: cookie 辅助函数
src/auth/cookie.ts
🔐 api · 需要你授予权限
✅ 允许❌ 拒绝🟢 始终允许⏹ 停止
✅ api · 已允许 · Read: src/auth/cookie.ts

每个操作都等你,连读一个文件也一样。

aipager
机器人
🤖 自动模式默认
测试在 session cookie 写入之前就点了下去。”
✅Read: src/auth/cookie.ts
✅Bash: pnpm test e2e/login --trace on
🔐 Bash: 查一下 staging 上最新的 session 记录
psql $STAGING_URL -c 'select id, …'
🔐 api · 需要你授予权限
✅ 允许❌ 拒绝🟢 始终允许⏹ 停止

读文件和跑测试都直接放行了。对 staging 执行命令属于有风险的那类,所以它停了下来。

aipager
机器人
🔓 完全访问模式/mode full
/mode full
✅ api 现在是 🔓 完全访问模式。
修一下那个不稳定的登录 e2e 测试
▸ 用了 4 次工具
测试在 session cookie 写入之前就点了下去。它只是 sleep 5 秒,然后碰运气。”
✅Edit: e2e/login.spec.ts
⏳Bash: pnpm test e2e/login --repeat 10
⏳ api · 工作中 · 4:02 · Read ×2 · Bash ×3 · Edit ×1

不检查,也没有按钮。做完了直接给你答案。

  • ✅ 允许 · 只这一次
  • ❌ 拒绝 · Claude 会挡下这次操作
  • 🟢 始终允许 · Claude 给出规则时,把这条规则加上
  • ⏹ 停止 · 打断这次任务,不回答
/mode

会为其他每个模式各显示一个按钮;/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>
  • BT
    backend-team群组 · 团队模式
    Sara: @aipagerbot /web 在 staging 上跑一遍登录 e2e
    你团队的群组

    把机器人拉进群组,名单里的人都可以 @ 它。每条消息都按发送者的角色运行;角色不能用的工具在运行之前就被拒绝,每个决定都会连同点按钮的人一起记进审计日志。

    owneradminuserread_only
  • J
    Jim对方和机器人的私聊
    🔐 web · 需要你授予权限
    别人,在自己的聊天里

    把同事和机器人的私聊加进来,对方就能开自己的会话,带着自己的角色和自己的根文件夹:Claude 的任务都从那个文件夹里开始,文件夹之外、你主文件夹里的东西一概读不到。只需要旁观的人,在你的群组里给 read_only。

    成员的根文件夹~/aipager-users/<label>read_only/new

四种角色,每种角色一套工具规则。

起作用的是你在当前聊天里的那个角色;角色不能用的工具,在运行之前就被拒绝,不会来问你。Telegram 和 Mini App 里的任何操作都改不了名单上有谁:只有电脑上的 aipager config 可以。

可以owneradminuserread_only
给会话发消息✓✓✓✕
允许、拒绝、回答 Claude 的问题✓✓✓✕
Bash,以及其他运行代码的工具✓✓✕✕
完全访问模式、群组的 /settings、/update✓✓仅限自己的私聊✕
会话可以在哪里工作任何地方任何地方根文件夹根文件夹
读取凭证文件(~/.ssh 等)✓✓✕✕
完整的团队模式说明 →
日常

就当聊天用。

它不是套了聊天外壳的控制台:你在 Telegram 里本来会做的事,这里都能做。回家路上对它说几句,把截图直接扔给它,上一条还没做完就把下一个想法发过去。

  • 🎙️
    说给它听

    发一条语音消息,转写在你自己的电脑上完成(不经过任何人的云),转好的文字会发回来给你看一眼,然后像你亲手打的一样输进会话。

    0:07
    🎙️ 我听到的是:修一下那个不稳定的登录 e2e 测试
  • 📎
    一张 bug 的截图

    照片和文件会落到你电脑上的一个文件夹里,Claude 拿到的是路径,你写的说明就是消息;没写说明时,发过去的就是“check this:”加上路径。一次发好几个,它们会合成一条消息。

  • 📤
    它也会给你发文件

    用你自己的话说,比如“把截图发给我”,文件就会在回答之后发到那个会话的聊天里:图片作为照片,视频和音频保持原样,其他的作为文件,一次几个就合成一个相册。但 aipager 的设置、Claude 的凭据和你的密钥永远不会发出:发送之前就会被拒绝。

    把截图发给我
  • 👀
    下一条现在就发

    你一发出去,消息立刻就到 Claude 那里,任务做到一半也一样:消息在 Claude 自己的队列里等着时是 👀,Claude 收下了就是 👍。点 ⚡ 立即发送,不等这一步结束就把消息递过去。

  • ⏸
    绝不会被当成回答

    权限请求还开着的时候,你发的消息会先被扣住,不会被算成对请求的回答,等你答完就马上发给会话。

  • 🤖
    代理和后台命令,都有数

    Claude 启动的每个后台代理在卡片上都有自己的一行,写着它在做什么;留在后台跑的命令会一直有自己的计时,直到它结束。

  • 🔔
    它会先告诉你

    上下文快用完的提醒、压缩了一次对话、会话结束了或者没动静了、任务跑得太久了:不用你去看,聊天里就会说。

  • ⌨️
    按钮早就在那儿

    输入框下面有一块按钮键盘:每个运行中的会话一个按钮,然后是状态、停止、新建,再是模板(放你反复要打的消息)和命令(放 Claude Code 自己处理的那些)。

  • 📋
    /status,一眼看完整个聊天

    所有会话排成一张能直接操作的列表:每个在做什么、用的模型、还剩多少上下文、花了多少、后面排着什么,每一条上都有停止、回答,以及菜单里的其余操作。

Mini App

一个控制面板,还是在 Telegram 里。

/app 一次打开所有会话:每个一张小卡片,带着上下文圆环、文件夹、模型和已经花掉的钱。回答还是在聊天里做,这个 app 是用来一眼看全部的,也用来做聊天里不方便做的事,比如看改动(diff)或者改设置。

aipager⋮
aipager
@aipagerbot · v1.3.8 · 已运行 141 分钟
1 个在等你回复、2 个工作中、1 个就绪
已花费 $4.19 · 12 个已结束
等你回复
@aipagerbot
所有会话一屏看完

每个会话一张小卡片,带上下文圆环、它是谁的、用的模型和已经花掉的钱;上面一行说明这个聊天的整体情况:哪些在工作、哪些就绪、今天花了多少、结束了几个。点 + 再开一个:取个名字,从你常用的文件夹里挑一个,选个模型。

等你回复的排在最前

等着你回答权限请求或者问题的会话排在最上面,写着它在问什么。点“在聊天中回答”,这个请求连同按钮会重新发到聊天最下面,你在那里回答它。

每个会话一个页面

状态那一行写着“工作中(3:12)”或“就绪,上次活动 5 分钟前”,还有一键“停止”或“恢复”。下面是最近用过的工具、最新的回复、模型选择、这次任务改动的文件(diff),还有这个会话自己的设置。

由 aipager 自己提供

默认开启,每个请求都对照 Telegram 自己的签名校验,页面不从别处加载任何东西:没有字体,没有脚本。aipager miniapp disable 可以关掉它。

这个 app 能做什么 →
十五种语言

用你的语言,连数字都是。

变的只有 aipager 自己的文字:卡片、请求、按钮、置顶栏、/status、Mini App、文档。你的会话不变:你用什么语言写,Claude 就用什么语言回;aipager 发给 Claude 的内容也原样不动。用 /language 选一个,或者让它跟着你的 Telegram 走。

从右到左,做对了

波斯语和阿拉伯语从右往左读,用波斯数字(۰-۹)或阿拉伯-印度数字(٠-٩)和它们自己的分隔符,Telegram 里和 Mini App 里都是。会话名、路径、命令和代码保持它们自己的方向。

是写出来的,不是翻出来的

每种语言都按用这门语言的人平时怎么说来写,外来词照留,复数形式也按各自语言的规矩(阿拉伯语有六种)。

你的聊天,你的语言

私聊可以跟着你的 Telegram 走。群组只有一种语言,由管理员设置;点完按钮弹出来的提示,用的是点按钮那个人自己的语言。

文档也一样

README 和 docs/ 下的每一页都翻译了。翻译和英文页不一致时,以英文页为准。

aipager
机器人
فارسی
置顶消息
‏⏳ ⁨api⁩ منتظر شماست‏ - ‏⁨Bash: pnpm test e2e/login⁩‏
‏🔐 ⁨api⁩ · اجازه می‌خواهد‏
pnpm test e2e/login --trace on
‏✅ اجازه بده‏‏❌ رد کن‏‏🟢 همیشه اجازه بده‏‏⏹ توقف‏
‏⁨✅⁩ ⁨api⁩ · ⁨‏اجازه داده شد‏⁩ · ⁨Bash: pnpm test e2e/login⁩‏
‏⁨⏳⁩ ⁨api⁩ · ⁨‏در حال تأمل‏⁩‏ · ۳:۱۴ · Read ×۲ · Bash ×۱
‏✅ کار ۲ ایجنت تمام شد (⁨۶:۱۲⁩)‏
‏🌐 زبان: ⁨فارسی⁩‏
聊天底下

一切以终端为准。

Claude Code 跑在一个真正的终端里(放在 dtach 里),所以谁都不用一直开着窗口。每一步都会触发一个 hook,通过本地套接字(socket)往 aipager 发一个数据报,aipager 再去改你聊天里的那条消息。你的回答原路返回:要么是给正扣着这次操作的 hook 一个结果,要么是直接按键输进会话。

  1. Claude Code
    跑在 dtach 里,不用开窗口
  2. hook
    每一步都会触发
  3. aipager
    一个进程,以你的身份运行
  4. Telegram
    你自己的机器人 token
  5. 你的聊天
    你的私聊,你团队的群组
随时可以坐到它跟前

在任何终端里运行 aipager session api,就能接上正在跑的会话。在那边打字,在聊天里打字,是同一个会话。关掉窗口它照样继续,会话重启时这个连接也跟着走。

它从不读你的屏幕

aipager 往会话里打字,并监听 Claude Code 自己发出的事件。你在聊天里看到的东西来自 hook 和保存的对话,不是从终端屏幕上抓来的。

没有东西在等聊天

一个 hook 发出一个数据报就返回,占用 Claude Code 大约 20 ms。没有 aipager 在听的时候,事件直接丢掉,Claude 照常继续;之后 aipager 会从会话自己的文件里把进度补回来。

十六个 hook,再加上它读取模型、上下文和花费的那条状态栏。aipager 每一个都接上了。
UserPromptSubmitPreToolUsePermissionRequestPostToolUsePostToolUseFailureNotificationStopStopFailureSubagentStartSubagentStopPreCompactPostCompactMessageDisplayPreModelSwitchSessionStartSessionEndstatusline
安全

中间什么都没有。

aipager 从不和 Anthropic 通信。会和它通信的只有 Claude Code 自己,用你自己的登录,在你自己的电脑上。aipager 只是在终端里把它启动起来,然后听 Claude Code 发出的 hook。没有谁逆向出来的接口,没有中转服务器,除了你自己没有别的账号:你在手机上操作的那个会话,就是你坐在键盘前会操作的那一个。

01
没有 aipager 服务器。

aipager 用你自己的机器人 token 直接和 Telegram Bot API 说话。没有 aipager 账号,也没有 aipager 服务,你的手机和你的电脑之间没有别人的电脑。

02
只回应你的聊天。

aipager 只在你配置里列出的聊天中回应。陌生人找到这个机器人,只会收到一句话:它没有被配置成和对方说话;对方发的任何东西都到不了会话。

03
不开任何端口。

它只监听本地回环。Mini App 通过 Cloudflare tunnel 对外,每个请求都必须带上 Telegram 的签名,aipager miniapp disable 可以关掉它。

04
你的 token,你的文件。

机器人 token 和聊天 id 放在 ~/.config/aipager/aipager.yaml 里,权限 600。它们不会写进 aipager 的 log;凡是可能混进 log 的地方,也都会打码。

05
它从不提权。

没有 sudo,没有 setuid。它写的东西都在你的主文件夹、/tmp 或者它自己的套接字文件夹里;它启动的每个进程(claude、dtach、安装程序)都以你的身份运行。

06
决定权还在 Claude Code。

什么需要问你,由你的 settings.json 说了算。aipager 只是把问题转过来,从不决定什么可以运行;已经结束的任务留下的按钮点了也不生效,不会动到现在正在跑的工作。

07
权限在电脑上给。

成员和角色只能用电脑上的 aipager config 改。Telegram 里和 Mini App 里的任何操作都加不了人,也放不宽角色。

08
每个回答都留档。

每一次允许、拒绝和回答都写进 ~/.claude/aipager-audit.jsonl,只追加;在群组里还会记下是谁点的。

安全模型 →
安装

四行命令。存到收藏夹里。

点一行就能复制。先准备两样东西:在 @BotFather 那里建一个自己的机器人(记得在里面按 Start),以及在这台电脑上登录好的 Claude Code。剩下的,第二行的向导会问你。

或者交给你已经在用的 AI 代理。

把机器人 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 都行。 所有安装方式 →

收藏夹
4 条消息
常见问题

问吧。

aipager
机器人
这和 Claude 的手机 app 有什么不一样?
Claude 的 app 连的是 Anthropic 托管的助手。aipager 同步的是跑在你自己电脑上的 Claude Code 会话:你的仓库、你的工具、你的环境。

把 Claude 加进你的聊天。

然后关掉终端,去过你的晚上。

$curl -fsSL aipager.run/install | sh