이제 Claude도 채팅 하나예요.

aipager는 Claude Code 세션을 Telegram으로, 가족과 친구와 팀 채팅 바로 옆으로 가져와요. 내 컴퓨터에서 실행돼요.

안전한 호출은 알아서 실행되고, 위험한 건 허용할 때까지 기다려요.

노트북에서 쉬고 있는 Claude Code 세션이에요. 자동 모드예요. 새 세션은 모두 이 모드로 시작해요.

$curl -fsSL aipager.run/install | sh

Linux & macOS · MIT · 약 1분

권한 모드

모드는 세 가지. 시작은 자동 모드예요.

모든 세션은 이 세 모드 중 하나로 돌아가요. 세션마다 따로 정하고 /mode로 언제든 바꿔요. 확인 모드는 동작 하나하나 앞에서 멈춰요. 새 세션은 모두 자동 모드로 시작하고, 여기서는 Claude Code의 자체 안전 검사가 안전한 호출은 알아서 실행하고 위험한 것만 멈춰서 물어봐요. 전체 권한 모드는 아무 확인 없이 전부 실행해요. 모드가 바꾸는 건 Claude Code의 권한 요청뿐이에요. 그룹에서 멤버의 역할이 쓸 수 없는 도구는 어떤 모드에서도 거부돼요.

aipager
봇
💬 확인 모드/mode ask
쿠키 헬퍼부터 볼게요.”
🔐 Read: 쿠키 헬퍼
src/auth/cookie.ts
🔐 api · 권한이 필요해요
✅ 허용❌ 거부🟢 항상 허용⏹ 중지
✅ api · 허용됨 · Read: src/auth/cookie.ts

파일을 읽는 것까지, 모든 호출이 답변을 기다려요.

aipager
봇
🤖 자동 모드기본값
테스트가 세션 쿠키가 설정되기 전에 클릭해요.”
✅Read: src/auth/cookie.ts
✅Bash: pnpm test e2e/login --trace on
🔐 Bash: staging의 최신 세션 보기
psql $STAGING_URL -c 'select id, …'
🔐 api · 권한이 필요해요
✅ 허용❌ 거부🟢 항상 허용⏹ 중지

읽기와 테스트 실행은 알아서 통과했어요. staging을 건드리는 명령은 위험한 쪽이라 멈췄어요.

aipager
봇
🔓 전체 권한 모드/mode full
/mode full
✅ api 세션이 이제 🔓 전체 권한 모드예요.
가끔 실패하는 로그인 e2e 테스트 고쳐줘
▸ 도구 4번 사용
테스트가 세션 쿠키가 설정되기 전에 클릭해요. 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 테스트 고쳐줘
  • 📎
    버그 스크린샷

    사진과 파일은 내 컴퓨터의 폴더에 저장되고, Claude에게 그 경로를 알려줘요. 캡션이 있으면 캡션이 메시지가 되고, 없으면 “check this: …”가 대신 들어가요. 여러 개를 한 번에 보내면 메시지 하나로 가요.

  • 📤
    파일도 보내 줘요

    평소 말로 “스크린샷 보내 줘”라고 부탁하면, 답변 바로 뒤에 그 세션의 채팅으로 파일이 와요. 이미지는 사진으로, 동영상과 오디오는 그대로, 나머지는 파일로, 여러 개는 앨범 하나로 와요. aipager 설정, Claude 인증 정보, 내 키는 절대 보내지 않아요. 보내기 전에 거부돼요.

    스크린샷 보내 줘
  • 👀
    다음 메시지는 지금 보내세요

    메시지는 보내는 순간 Claude에게 가요. 작업 중이어도요. Claude의 대기열에 있는 동안은 👀, Claude가 받으면 👍예요. ⚡ 지금 보내기를 누르면 단계가 끝나길 기다리지 않고 바로 넘겨요.

  • ⏸
    답변으로 잘못 읽히지 않아요

    권한 요청이 열려 있을 때 보낸 메시지는 그 요청에 섞이지 않고 잠시 기다려요. 요청에 답하는 순간 세션으로 가요.

  • 🤖
    에이전트와 백그라운드 명령, 하나씩

    Claude가 시작한 백그라운드 에이전트마다 카드에 줄이 하나씩 생기고, 거기에 무엇을 하는지 나와요. 백그라운드에서 계속 도는 명령은 끝날 때까지 경과 시간이 따로 표시돼요.

  • 🔔
    먼저 알려줘요

    컨텍스트 경고, 대화 압축, 종료되거나 조용해진 세션, 너무 오래 끈 작업까지, 보러 가지 않아도 채팅이 알려줘요.

  • ⌨️
    버튼은 이미 깔려 있어요

    메시지 입력창 아래에 키보드가 있어요. 실행 중인 세션마다 버튼 하나, 그다음 상태, 중지, 신규, 그리고 매번 다시 치게 되는 메시지를 담아두는 템플릿과 Claude Code가 직접 처리하는 명령어 버튼이에요.

  • 📋
    /status, 채팅 전체를 한 번에

    모든 세션이 바로 다룰 수 있는 목록으로 나와요. 각 세션이 무엇을 하는지, 모델, 남은 컨텍스트, 쓴 비용, 뒤에 쌓인 대기열까지 보이고, 세션마다 중지와 답하기를 비롯한 메뉴가 붙어 있어요.

Mini App

대시보드, 그래도 Telegram 안에서.

/app을 치면 모든 세션이 한 번에 열려요. 세션마다 타일 하나, 컨텍스트 링, 폴더, 모델, 쓴 비용이 보여요. 답하는 곳은 여전히 채팅이고, 앱은 전체를 한눈에 보거나 diff를 읽고 설정을 바꾸는 것처럼 채팅으로는 번거로운 일을 할 때 써요.

aipager⋮
aipager
@aipagerbot · v1.3.7 · 141분째 실행 중
답변 대기 중 1개, 작업 중 2개, 준비됨 1개
$4.19 사용 · 종료됨 12개
답변 대기 중
@aipagerbot
모든 세션이 한 화면에

세션마다 타일 하나예요. 컨텍스트 링, 누구 것인지, 모델, 쓴 비용이 들어가고, 그 위에 채팅이 어떤 상태인지 한 줄로 떠요. 무엇이 작업 중이고 무엇이 준비됐는지, 오늘 얼마를 썼고 몇 개가 끝났는지 보여줘요. +를 누르면 하나 더 시작해요. 이름, 이미 쓰던 폴더 중 하나, 모델만 고르면 돼요.

답변이 필요한 것부터

권한 요청이나 질문을 기다리는 세션이 맨 위에 올라와서 무엇을 묻는지 보여줘요. “채팅에서 답하기”를 누르면 그 요청이 버튼까지 그대로 채팅 맨 아래로 다시 오고, 거기서 답하면 돼요.

세션마다 페이지 하나

상태 줄에는 “작업 중 (3:12)”이나 “준비됨, 마지막 활동 5분 전”처럼 나오고, 중지나 재개는 탭 한 번이면 돼요. 그 아래에 최근 도구 사용, 마지막 답변, 모델 선택, 이번 작업이 바꾼 파일의 diff, 그리고 그 세션의 설정이 있어요.

aipager가 직접 띄워요

기본으로 켜져 있고, 모든 요청은 Telegram의 서명으로 확인해요. 페이지는 바깥에서 아무것도 불러오지 않아요. 폰트도, 스크립트도요. aipager miniapp disable로 끌 수 있어요.

앱으로 할 수 있는 일 →
15개 언어

숫자까지 내 언어로.

바뀌는 건 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이 하나씩 실행돼 로컬 소켓으로 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 16개, 그리고 모델, 컨텍스트, 비용을 읽어오는 상태 표시줄. aipager는 그 전부에 연결돼 있어요.
UserPromptSubmitPreToolUsePermissionRequestPostToolUsePostToolUseFailureNotificationStopStopFailureSubagentStartSubagentStopPreCompactPostCompactMessageDisplayPreModelSwitchSessionStartSessionEndstatusline
보안

중간에 아무것도 없어요.

aipager는 Anthropic과 통신하지 않아요. 통신하는 건 Claude Code뿐이고, 내 로그인으로 내 컴퓨터에서 해요. aipager는 터미널에서 Claude Code를 띄우고, Claude Code가 내보내는 hook을 들어요. 리버스 엔지니어링한 엔드포인트도, 프록시도, 내 것 아닌 계정도 없어요. 휴대폰으로 다루는 세션은 키보드 앞에서 다루는 바로 그 세션이에요.

01
aipager 서버는 없어요.

aipager는 내 봇 token으로 Telegram Bot API와 통신해요. aipager 계정도 aipager 서비스도 없고, 휴대폰과 내 컴퓨터 사이에 남의 컴퓨터는 없어요.

02
내 채팅에만 답해요.

aipager는 설정에 적힌 채팅에서만 답해요. 봇을 우연히 찾은 사람에게는 이 봇이 그 사람과 대화하도록 설정되어 있지 않다는 한 줄만 가고, 그 사람이 보낸 건 세션에 닿지 않아요.

03
열린 포트가 없어요.

루프백 주소에서만 연결을 받아요. Mini App은 Cloudflare 터널로 나가고, 모든 요청은 Telegram의 서명을 달고 있어야 해요. aipager miniapp disable로 끌 수 있어요.

04
내 token, 내 파일.

봇 token과 채팅 id는 ~/.config/aipager/aipager.yaml에 600 권한으로 들어 있어요. aipager 로그에는 남기지 않고, 흘러 들어갈 만한 곳에서는 가려요.

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요. 나머지는 두 번째 줄의 설정 마법사가 물어봐요.

아니면 이미 쓰고 있는 에이전트에게 맡기세요.

봇 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 모바일 앱과 뭐가 다른가요?
Claude 앱은 Anthropic이 운영하는 어시스턴트와 대화해요. aipager는 내 컴퓨터에서 돌아가는 Claude Code 세션을 그대로 보여줘요. 내 저장소, 내 도구, 내 환경이에요.

채팅 목록에 Claude를 더하세요.

그리고 터미널을 닫고 저녁을 보내러 가세요.

$curl -fsSL aipager.run/install | sh