kt0319/any-console
Project Overview
any-console
Self-hosted web console giving browser access to tmux terminals, Git operations, and shell jobs from any device.
True Intent (AI Assessment)
A self-hosted, mobile-first web dashboard that unifies persistent tmux terminals, Git UI, and shell job execution for personal remote development.
README Accuracy
Notes
Observed code matches README claims: FastAPI + Vue 3 + tmux + xterm.js, PWA assets, systemd/launchd installers, token auth, rate limiting, and security headers. No obfuscation, telemetry, or suspicious network calls detected.
any-console is a self-hosted web application that exposes a developer's shell environment, Git workflows, and job runner through a browser. It combines a FastAPI Python backend with a Vue 3 frontend and uses tmux as the persistence layer for terminal sessions, so the same session can be resumed seamlessly from a phone, tablet, or desktop.
It targets the pain of not having a real development environment on mobile devices and the friction of context-switching between SSH clients, Git tools, and CI dashboards. By putting a persistent web terminal plus a Git UI plus a shell-job runner behind one authenticated URL, the user can start a build on their PC, monitor it from their phone, commit and push from either device, and never lose session state.
Intended users are individual developers, homelabbers, and Mac mini / Raspberry Pi tinkerers who want a mobile-friendly remote console for their own machine — typically accessed over Tailscale or a private network. Setup is a single `./any-console setup` script that registers a systemd unit on Linux or a launchd LaunchAgent on macOS.
Architecturally the backend is a FastAPI app with routers for terminal (WebSocket + PTY + tmux), git operations, jobs, devices, push notifications, and status streaming. A watchfiles-based watcher pushes realtime git status changes, and an agent-state watcher polls tmux panes to broadcast idle/working state and fire notify-phrase push notifications. The frontend is a Vite-built Vue 3 + Pinia PWA using xterm.js with a custom mobile flick keyboard.
The codebase shows serious engineering hygiene: ruff/mypy configured, pytest with 85% coverage floor, Playwright e2e, Vitest, release-please automation, security headers middleware, rate limiting, token auth with a first-run bootstrap token printed to stdout (not embedded in URLs), and thoughtful comments explaining security tradeoffs. No red flags observed.
| Languages | Python, JavaScript, Vue, Shell, CSS |
| Runtime | Python 3.11+, Node.js 18+ |
| Framework | FastAPI (backend), Vue 3 + Pinia (frontend) |
| Database | None (JSON config files and JSONL activity logs on disk) |
| Package Manager | pip (requirements.txt) and npm |
| Key Dependencies | fastapi, uvicorn, websockets, pydantic, watchfiles, vue, pinia, @xterm/xterm |
| Build Tool | Vite |
| Test Framework | pytest, Vitest, Playwright |