Show HN: Control Claude Code, Codex, Pi and Gemini CLI from Telegram Developer Younggi Choi released cliclaw, a daemon that lets users control Claude Code, Codex, Pi, and Gemini CLI from Telegram, with per-chat agent sessions, a safety gate, and auto-detection of corporate TLS interceptors. The tool, installed via Bun or npm as @younggichoi/cliclaw, supports switching between agents, image attachments, and launchd auto-start on macOS. English | 한국어 /choiyounggi/cliclaw/blob/main/README.ko.md A single daemon that lets you drive four local coding CLIs Claude Code · Codex · Pi · Gemini from Telegram, switching between them per chat. It keeps an independent per-agent session for every chat, and ships a confirm gate for dangerous commands, response streaming, image-attachment handling, and auto-detection of corporate TLS interceptors Zscaler, etc. . Install only the CLIs you want— missing agents are automatically dropped from the active list. The chat UX user messages, errors, /help is currently Korean-first; the bot itself works fine either way. - macOS Apple Silicon / Intel Bun https://bun.sh 1.x — curl -fsSL https://bun.sh/install | bash At least one of the coding CLIs installed and logged in the bot merely spawns authenticated child processes - Claude Code: npm install -g @anthropic-ai/claude-code - Codex: npm install -g @openai/codex - Pi: npm install -g @earendil-works/pi-coding-agent - Gemini: npm install -g @google/gemini-cli - Claude Code: Bun recommended bun add -g @younggichoi/cliclaw or npm npm install -g @younggichoi/cliclaw The package publishes under a scoped name @younggichoi/cliclaw , but the installed command is simply. cliclaw cliclaw init Five steps, guided: Welcome to cliclaw setup. Step 1/5 — Telegram bot token Get one from @BotFather /newbot on Telegram. Bot token: 1234:ABC... ✓ @yourbotname id=... verified Step 2/5 — Detect installed coding agents ✓ claude 2.1.139 Claude Code @ ~/.nvm/.../bin/claude ✓ codex 1.0.0 @ /opt/homebrew/bin/codex ✓ pi unknown @ /opt/homebrew/bin/pi ✓ gemini 0.42.0 @ ~/.nvm/.../bin/gemini Default agent? claude claude/codex/pi/gemini : claude Step 3/5 — Authorize your Telegram account Open Telegram and send any message to @yourbotname now. Waiting up to 5 minutes... press Ctrl-C to abort. ✓ Received from user id=123456789 Authorize this Telegram user? Y/n y Step 4/5 — Corporate TLS interceptor optional $NODE EXTRA CA CERTS: /path/to/Zscaler.pem Apply this CA certificate to the bot's LaunchAgent environment? Y/n y Step 5/5 — Auto-start at login launchd Install LaunchAgent so the bot starts automatically on login? Y/n y ✓ Installed ~/Library/LaunchAgents/com.alice.cliclaw.plist ✓ Bot started. All set. Logs: tail -f ~/.cliclaw/logs/bot.log Test: send /status in Telegram. That's it. The bot restarts automatically after screen lock or a reboot. | Command | What it does | |---|---| cliclaw init | Interactive setup token, agent detection, telegram-id capture, CA, launchd | cliclaw start | Run the bot in the foreground for testing | cliclaw install-launchd | Install the LaunchAgent auto-applies launchd.extraEnv from config.json | cliclaw uninstall-launchd | Remove the LaunchAgent | cliclaw doctor | Check paths, agents, and plist status | cliclaw help | Help | | Command | What it does | |---|---| /claude /codex /pi /gemini | Switch this chat's active agent uninstalled agents are hidden | /status | Per-agent session status + any job in progress | /health | Bot system status uptime, memory, log sizes, chat/job counts | /stop | Cancel this chat's running job SIGTERM → SIGKILL after 5s | /reset | Discard only the current active agent's session | /reset all | Discard every agent session in this chat | /safety | Show safety-mode status — toggle with /safety on / /safety off | /start /help | Help | | Any other text / photo | Sent as a prompt to the active agent photos are downloaded and their path is prepended to the prompt | Switching agents keeps the old session intact — come back and continue. Sending a new prompt to a chat with a running job is rejected use /stop or wait . All state is isolated under ~/.cliclaw/ : ~/.cliclaw/ ├── config.json mode 600; token, allowlist, launchd extraEnv ├── safety.json persisted /safety on|off state ├── sessions.json per-chat active-agent metadata ├── sessions/ per-chat codex / pi / gemini directories ├── workspace/ the agents' shared cwd sandbox │ ├── .claude/settings.json dangerous-command hook + deny rules when safety is ON │ └── uploads/