Telegram bot để điều khiển codex từ xa qua Telegram, theo từng task được viết trong todo.md của một project local.
Phù hợp khi bạn muốn giữ workflow đơn giản:
- project chạy trên máy local
- task được quản lý bằng
todo.md - Codex xử lý từng task theo ID
- trạng thái, diff và follow-up được theo dõi ngay trong Telegram
- Chạy task theo ID từ
todo.md - Xem danh sách task trực tiếp trong Telegram với nút
Run - Gửi follow-up prompt vào đúng Codex thread đang lưu bằng
/reply - Theo dõi tiến trình đang chạy với
/status - Dừng job hiện tại hoặc xóa session với
/stop - Mở diff viewer local hoặc public link qua tunnel
- Approve commit ngay từ Telegram với
/approve_commit - Tự kiểm tra config và môi trường trước khi bot bắt đầu polling
- Bot đọc
config.jsonđể biết project nào sẽ được Codex thao tác. - Bot parse
todo.mdđể lấy danh sách task theo ID như1,1.2,2.1. - Khi chạy
/run <id>, bot gọicodextrong thư mục project đã cấu hình. - Kết quả và trạng thái được stream về Telegram.
- Thread Codex được lưu lại để bạn tiếp tục bằng
/reply. - Diff viewer hiển thị thay đổi hiện tại; nếu bật tunnel, bot sẽ trả public URL để mở từ Telegram.
- Node.js
18+ codexCLI có trongPATH- Telegram bot token từ BotFather
chat_idđược phép sử dụng bot- Tùy chọn:
cloudflaredhoặcngroknếu muốn public diff viewer
.
├── bot.js
├── src/
│ ├── app.js
│ ├── codex.js
│ ├── config.js
│ ├── constants.js
│ ├── diff-viewer.js
│ ├── git.js
│ ├── session.js
│ ├── telegram.js
│ └── todo.js
├── config.example.json
├── config.json
├── package.json
├── README.md
├── todo.md
└── web/
├── app.js
├── index.html
└── styles.css
bot.js là entrypoint mỏng; phần logic chính đã được tách vào src/ theo từng domain.
npm installcp .env.example .envCấu hình tối thiểu trong .env:
TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here
ALLOWED_CHAT_ID=123456789
DIFF_VIEWER_TUNNEL=ngrokcp config.example.json config.jsonVí dụ:
{
"path": "/absolute/path/to/your/project",
"todoFile": "todo.md",
"model": "your-preferred-model",
"reasoningEffort": "medium"
}Ý nghĩa các trường:
| Field | Required | Description |
|---|---|---|
path |
Yes | Đường dẫn tuyệt đối tới project mà Codex sẽ làm việc |
todoFile |
No | Tên file task bên trong project, mặc định là todo.md |
model |
No | Model truyền vào codex --model, có thể đổi bằng bot |
reasoningEffort |
No | Reasoning effort, map sang model_reasoning_effort |
node bot.jsKhi khởi động thành công, bot sẽ:
- validate
.env,config.json, project path vàtodo.md - kiểm tra
codex --version - khởi chạy diff viewer tại
http://127.0.0.1:3210mặc định - mở public tunnel nếu
DIFF_VIEWER_TUNNELđược bật
| Command | Description |
|---|---|
/start |
Kiểm tra bot đã sẵn sàng và xem onboarding ngắn |
/help |
Xem danh sách lệnh và config hiện tại |
/diff |
Lấy link diff viewer local/public |
/tasks |
Xem danh sách task parse từ todo.md |
/model |
Xem model/reasoning hiện tại và chọn bằng nút |
/model <name> |
Đổi model thủ công cho các lần chạy tiếp theo |
/reason <name> |
Đổi reasoning effort thủ công cho các lần chạy tiếp theo |
/run <id> |
Chạy task theo ID, ví dụ /run 1 hoặc /run 1.2 |
/reply <prompt> |
Gửi follow-up prompt vào Codex thread hiện tại |
/status |
Xem Codex có đang chạy hay không |
/stop |
Dừng job đang chạy hoặc xóa session đã lưu |
/approve_commit |
Stage toàn bộ thay đổi và commit nếu phù hợp |
Ngoài slash commands, bot cũng có reply keyboard nhanh cho Tasks, Status, Help, Stop.
Bot hỗ trợ các dòng task có ID dạng số hoặc phân cấp. Ví dụ:
- [ ] 1. Setup authentication
- [ ] 1.1 Add login endpoint
- [x] 2. Refactor navbarTask đã hoàn tất có thể đánh dấu [x], bot vẫn parse được đầy đủ.
Diff viewer luôn chạy local. Nếu muốn mở từ điện thoại hoặc ngoài mạng nội bộ, cấu hình DIFF_VIEWER_TUNNEL trong .env.
| Value | Description |
|---|---|
none |
Không public diff viewer |
cloudflared |
Dùng Cloudflare Tunnel |
ngrok |
Dùng ngrok |
auto |
Thử cloudflared trước, fallback sang ngrok |
cloudflared --versionBot sẽ chạy:
cloudflared tunnel --url http://127.0.0.1:3210 --no-autoupdatengrok helpBot sẽ chạy:
ngrok http http://127.0.0.1:3210 --log stdoutNếu dùng ngrok, bạn có thể cần cấu hình auth token trước:
ngrok config add-authtoken <your-token>- Mở
/tasksđể lấy ID task cần làm. - Chạy
/run <id>. - Theo dõi bằng
/status. - Mở
/diffđể xem thay đổi hiện tại. - Dùng
/modelđể chọn model hoặc reasoning bằng nút. - Dùng
/model <name>nếu muốn đổi model thủ công. - Dùng
/reason <minimal|low|medium|high|xhigh>nếu muốn đổi reasoning thủ công. - Dùng
/replynếu muốn Codex sửa tiếp trong cùng thread. - Dùng
/approve_commitkhi muốn tạo commit từ task vừa hoàn tất.
- Bot chỉ cho phép đúng
ALLOWED_CHAT_IDsử dụng. - Mỗi thời điểm chỉ xử lý một Codex job.
- Session Codex được lưu trong
.codex-session.json. - Có thể đổi model runtime bằng
/model; bot sẽ ghi lại vàoconfig.json. - Có thể đổi reasoning effort runtime bằng
/reason; bot sẽ ghi lại vàoconfig.json. - Khi dùng
/approve_commit, bot sẽ dùng task hoàn tất gần nhất làm commit message. - Nếu project chưa là git repo, bot sẽ thử
git inittrước khi commit. - Không nên commit
.env,config.jsonhoặc session file vào repo public.
