ββββββββββ ββββββββββ ββββββββ
βββββββββββ βββββββββββββββββββ
βββ βββ ββββββ βββββββββ βββ
βββ βββ ββββββ βββββββββ \
βββββββββββββββββββββββββββββββββββ \ β±ββββ²
βββββββββββββββββββββββββ ββββββββ β²__β± β β β²
βββββββββββββββββ ββββββ βββββββ βββ βββββββββ β½ β
ββββββββββββββββββββββββββββββββββββ ββββββββ β²ββββ±
ββββββββ βββ βββββββββββββββββββ ββββββ β± β²
ββββββββ βββ βββββββββββββββββββ ββββββ β± β β β²
ββββββββ βββ βββ ββββββββββββββββββββββββββββ± β β β²
ββββββββ βββ βββ ββββββββββ ββββββββββββββββ
the stable where your dales live v0.1
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
dashboard Β· stalls Β· split view Β· activity logs
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
VPS-side session server for clidesdale.
A lightweight server that manages stalls (observable shell sessions) on a VPS. Each stall gets a web terminal (ttyd) and an activity log. One port, multiple sessions, zero complexity.
pip install -e .
clidestable serve # start on port 7690
clidestable serve --port 7690 --bind 100.x.x.x # Tailscale onlyThen open http://your-vps:7690 to see the dashboard.
- Manages named stalls (observable agent sessions on the VPS)
- Each stall gets a web terminal via ttyd that streams the activity log in real time
- Activity logs from clidesdale agents are visible in the dashboard
- Split view for watching multiple agents side-by-side
- REST API for stall management
- clidesdale agents run commands on the VPS via
sdale exec/sdale run - Every command + output is appended to
/opt/stacks/.sdale-<name>.log - clidestable creates stalls β each stall spawns a ttyd instance that
tail -f's the corresponding log file - You see agent activity streaming in your browser in real time
clidesdale (client) clidestable (server)
βββββββββββββββββ βββββββββββββββββββββββ
sdale exec edge "cmd" ββ> .sdale-edge.log ββ> ttyd (tail -f) ββ> browser
sdale exec edge2 "cmd" ββ> .sdale-edge2.log ββ> ttyd (tail -f) ββ> browser
No tmux nesting, no SSH tunnels β just log files and ttyd.
| Term | What |
|---|---|
| clidesdale | The CLI client (sends commands to dales) |
| clidestable | This server (where the dales live) |
| stall | One session/shell (where one dale works) |
GET /api/stalls # list stalls
POST /api/stalls # create stall {"name": "edge"}
DELETE /api/stalls/{name} # destroy stall
GET /api/stalls/{name}/log # get activity log
ββββββββββββββββββββββββββββββββββββββββββββ
β clidestable server (port 7690) β
β β
β / β dashboard (stall list) β
β /stall/edge β ttyd terminal β
β /stall/edge2 β ttyd terminal β
β /log/edge β activity log viewer β
β β
β ββββββββββ ββββββββββ ββββββββββ β
β β edge β β edge2 β β edge3 β β
β β :7701 β β :7702 β β :7703 β β
β β (ttyd) β β (ttyd) β β (ttyd) β β
β ββββββββββ ββββββββββ ββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββ
docker compose up -d --buildConfigure in .env:
STABLE_BIND=100.x.x.x # Tailscale IP (default: 0.0.0.0)
STABLE_PORT=7690 # Dashboard port
STABLE_DATA_DIR=/opt/stacks # Shared with clidesdale agent logs| Page | What |
|---|---|
/ |
Dashboard β create/destroy stalls, quick links |
/view |
Split view β side-by-side terminals for all stalls |
/stall/<name>/ |
Single stall terminal (live agent activity stream) |
/log/<name> |
Activity log viewer (auto-refreshes every 3s) |
- Python 3.10+
ttyd(included in Docker image)
| Project | What |
|---|---|
| clide | CLI Development Environment β sandboxed terminal for AI agents |
| clidesdale | CLI client β SSH access to remote VPSes for agents |
| clidestable | This server β dashboard, stall management, split terminal view |
MIT