████████╗██████╗ ████████╗
╚══██╔══╝╚════██╗╚══██╔══╝
██║ █████╔╝ ██║
██║ ██╔═══╝ ██║
██║ ███████╗ ██║
╚═╝ ╚══════╝ ╚═╝
Chinese documentation: README.zh-CN.md
t2t is a lightweight remote terminal orchestration tool for engineering and operations teams.
It uses an Agent + Server + Client/Web architecture to support multi-host access, collaborative remote sessions, browser terminal operations, and command playback.
Project goal: provide a secure, observable, and easy-to-operate remote terminal platform with minimal deployment overhead.
- Unified multi-host onboarding: manage multiple online agents from one control plane
- CLI + Web access: connect from command line or browser terminal
- Collaborative access: allow multiple users to work on the same target host
- Terminal Time Machine (MVP): review and replay command timeline per session
- War Room Mode (MVP): multi-host split view with command broadcast
-
Agent
- Deployed on target hosts
- Maintains persistent connections between local shell/PTY and server
-
Server
- Works as control plane and traffic hub
- Handles agent registration, client/web attachment, session lifecycle, and page/API serving
-
Client / Web
- Client: fast command-line attachment
- Web: visual management, browser terminal, Time Machine, and War Room
Basic flow:
- Agent starts and registers to server
- User initiates a connection from Client or Web
- Server routes traffic by
hostTag + clientId - Bidirectional stream forwarding is established for terminal interaction
Requirements:
- Docker
- Docker Compose v2
Run:
docker compose up -d --buildAccess:
- Dashboard:
http://localhost:9002 - Default local account:
admin / admin123
Useful commands:
# Follow logs
docker compose logs -f server
docker compose logs -f agent
# Stop and remove containers
docker compose downNotes:
- The compose setup starts one
serverand oneagentby default. agentusesT2T_SERVER_HOST=server:9002so container-to-container networking works correctly.- Terminal Time Machine logs are shared through the
t2t_commandsvolume (/tmp/t2t/commands).
- Go 1.22+
- Linux/macOS (depending on your deployment target)
Use cmd/server/config.yaml as your server configuration template:
cp cmd/server/config.yaml config.yamlDefault local account example:
admin / admin123.
Please change credentials before production deployment.
go build -o build/t2t-server ./cmd/server
go build -o build/t2t-agent ./cmd/agent
go build -o build/t2t-client ./cmd/client./build/t2t-server./build/t2t-agentAfter startup, agent prints:
Host信息(host tag)授权码(client ID / auth code)
./build/t2t-client connect -t <Host信息> -c <授权码>Or access Web UI:
http://localhost:9002
Entry: click 终端时光机 on dashboard
Capabilities:
- session list browsing
- command timeline replay (play/pause/speed/seek)
- dangerous command marking
Current MVP details:
- command logs are written to
/tmp/t2t/commands - Time Machine reads session data from this directory
Entry: click 战情室模式 on dashboard
Capabilities:
- select multiple online hosts
- open multiple web terminals in split view
- broadcast one command to all selected terminal panes
- change default account/password in production
- place server behind reverse proxy and enable HTTPS
- restrict server exposure scope (security groups / firewall)
- set retention and cleanup policies for
/tmp/t2t/commands
Please check:
- agent is upgraded to the latest version and restarted
- commands were actually executed in the monitored terminal
/tmp/t2t/commands/commands_<hostTag>_<clientId>.jsonexists
Issues and PRs are welcome. Recommended check before submission:
go test ./...


