tlive
y49 · y49/tlive
Provides self-hosted remote approval and live monitoring for Claude Code/Codex agents via Telegram, Feishu, or a web terminal, from any device.
Self-hosted remote approvals + live monitoring for Claude Code / Codex — via Telegram, Feishu, or a web terminal. Any subscription or API key.
Preview
What you can do with it
- Remotely approve agent actions from your phone via Telegram or Feishu.
- Monitor Claude Code or Codex agent runs live from any device.
- Take over agent typing directly from a web terminal for fine-grained control.
Safety check
Usable, but read the notes first.
- ●npm package runs a script automatically on install.
package.json - ●Installer downloads a remote script and pipes it to the shell.
README.md
Automated scan of the repo files. Always review code you run.
From the README
tlive
Vendor-neutral, self-hosted remote-approval + live-monitoring for claude / codex.
Approve tool calls, watch runs, take over typing — from Telegram, Feishu, or a web terminal.
Your
claude/codexruns in your terminal as usual. tlive rides the open hook mechanism both vendors support to push status (and, when you turn it on, approval cards) to Telegram / Feishu, and serves a web dashboard + real terminal off your own machine — watch a run, reply to continue, send a screenshot, or take over typing, from any device. Works regardless of subscription or API key; your session and data never leave your machine.Out of the box tlive watches and notifies (
mode: notify, the safe default — it can never hold up a tool call). Flip on remote approval — hold each tool call so you can Allow/Deny it from your phone — with one command:tlive mode full(or lettlive setupoffer it).
[!WARNING] v2.0 is a ground-up rewrite — breaking, with no migration. tlive is no longer the Agent-SDK IM bridge of v1.x and earlier: it no longer drives or owns your sessions, and the old bridge model, its config schema, and its commands (
workspace,/use, chat-binding, …) are gone and unsupported. Don't try to carry an old~/.tliveconfig forward — just runtlive setupfresh. The final SDK-bridge release is preserved at git tagv1.0-sdk-bridge.
Jump to: Quick start · Integration levels · Features · Install · Codex companion · Security · CLI · Config · Architecture
30 seconds to running
npm install -g tlive
tlive setup # wizard: registers the tlive plugin with Claude Code's/
# Codex's own plugin manager (hooks, skill, /tlive:*
# commands), then IM credentials — or skip IM entirely
# and say "help me configure tlive" inside Claude/Codex
tlive start # daemon up — prints web URLs + a QR code for your phone
tlive run claude # (optional) wrap the session → live web terminal + preview card
Scan the QR once — the dashboard lists every session and streams each run.
Turn on remote approval (tlive mode full) and, when a tool call needs
approval, your IM gets a card with Allow / Deny / Always-allow buttons and
the web card lights up red.
The two integration levels
hooks/companion only (claude/codex as usual) | wrapped (tlive run claude/codex) | |
|---|---|---|
| Approval cards (IM + web) | ✅ | ✅ |
| Stop-resume by IM reply | ✅ (reply window) | ✅ |
| Session card on dashboard | ✅ status / last message | ✅ + live terminal preview |
| Real web terminal (xterm) | — | ✅ multi-device, phone keys |
| IM text injection (quote-reply → typed into the pty) | — | ✅ |
| IM photo/file → agent | — | ✅ (downloaded, path injected) |
| Web paste/drop upload | — | ✅ |
Hooks-only always works — wrapping is pure addition. The Approval cards
row needs remote approval on (tlive mode full); the default notify mode
does everything else — live monitoring, turn-finished / waiting notifications,
reply-to-continue, the web terminal — without ever holding a tool call. IM
messages carry a label · prefix (the session's directory) but no longer
mark wrapped vs. hooks-only visually — the continue card's own "Reply to
continue" line makes the distinction moot for what you actually do.
What's in the box
- Posture —
off/notify(default) /full/all. One coarse switch that sits above every fine toggle, in escalation order (how much tlive intercepts).offmakes every hook a no-op (kill switch — no gating, notifications, monitoring, or daemon autostart).notify(default) watches and notifies but the shim can never hold or block an approval — every prompt stays 100% native (your local terminal dialog, or CC's own auto-deny when headless); when a prompt is waiting at the terminal it reports to the machine — desktop toast + read-only dashboard card, since only whoever is sitting there can act on it. IM stays quiet about these (a phone can't reach a terminal), except once ever per chat: the first time, a card explains why and offers the one-tap switch tofull. The desktop toast has no on/off switch of its own — use your OS's Do Not Disturb to silence it temporarily, ortlive mode offto stop tlive entirely.fullturns on remote approval for the main session — the posture that puts approvals on your phone: tlive holds each tool call so you can answer it from IM / desktop / dashboard (everything the Approvals bullet below describes), in parallel with the terminal dialog — first answer wins. Sub-agent prompts still pass through to the terminal.allholds sub-agent approvals too — the trade is that a held sub-agent has no terminal dialog until the window ends, because Claude Code awaits the hook before deciding whether to build one; use it only when nobody is at the keyboard, andtlive mode fullgoes back. Flip postures live withtlive mode off|notify|full|all(or/modefrom IM — a bare/modereplies with a card listing the ladder and marking the current rung); the shim re-reads config on the next hook, so no restart or new session is needed, andtlive statusshows the effective mode. Remote approval is opt-in by design — a freshly-installed tool must never be able to silently hang a workflow. - Approvals (remote approval —
mode: fullorall) — a tool call that needs approval is held so you can answer it from IM buttons or the web card:- Parallel, first-answer-wins — on Claude Code the
PermissionRequesthook fires alongside the local p
- Parallel, first-answer-wins — on Claude Code the