@justin0713/opspilot
v1.1.6
Published
CLI installer for OpsPilot Local — self-hosted SSH operations platform
Maintainers
Readme
OpsPilot
OpsPilot is a Flask + Socket.IO based remote operations dashboard for SSH/Serial management, test execution, file transfer, and real-time collaboration (War Room).
Features
- Multi-target SSH command execution (single/batch/streaming shell)
- Serial console sessions (when
pyserialis installed) - Target/group management and command favorites
- SFTP file browser and upload/download
- Reboot/Network/SSD test workflows
- Share links for outputs/test snapshots
- War Room collaboration:
- shared terminal output
- guest approval/control
- chat (including rich text/image)
- WebRTC voice signaling
- Local JSON persistence (no external database required)
- Offline frontend vendor assets under
static/vendor/
Project Structure
opspilot.py: main startup entry (recommended)web_app.py: core Flask + Socket.IO appssh_agent.py: SSH and connection pool logicauth.py: auth decorators and user helperstemplates/: web UI templates (index,login,collab,share)tests/: reboot/network/ssd blueprints and test state handlingstatic/vendor/: local frontend dependencies (React/Babel/Tailwind/xterm/socket.io/simple-peer/fonts)*.json: runtime/config/test/share/audit data files
Requirements
- Python 3.9+ recommended
- Windows/Linux supported (some X11 and serial paths are platform-specific)
Install Python dependencies:
pip install -r requirements.txtOptional:
pyserialfor serial console supportpyOpenSSLfor local certificate generation (if cert files are missing)
Checkout Source Code
Clone by HTTPS:
git clone https://github.com/<org-or-user>/<repo>.git
cd <repo>Clone by SSH:
git clone [email protected]:<org-or-user>/<repo>.git
cd <repo>Checkout a specific branch:
git fetch --all --prune
git checkout <branch-name>
git pull --ff-onlyCheckout a specific commit:
git fetch --all --prune
git checkout <commit-sha>Create a working branch from current HEAD:
git switch -c <new-branch-name>Run
Default (HTTPS mode, auto cert handling):
python opspilot.pyHTTP mode:
python opspilot.py --httpCustom port:
python opspilot.py --port 6000Then open:
https://<host-ip>:5000(default)- or
http://<host-ip>:5000with--http
Authentication
- Login page:
/login - Default credential in UI hint:
admin / admin(change immediately in real environments)
Notes
- This project currently uses Flask debug/dev server settings for convenience.
- Data is persisted in local JSON files; back them up regularly.
- Frontend dependencies are available locally in
static/vendor, so UI can run without public CDN access. - Security baseline (2026-02-27):
llm_config.jsonandrooms.jsonare local-only and ignored by git.- Runtime logs (
*.log) must not be committed. - If secrets were ever committed, rotate credentials first, then rewrite history.
Security and Git Hygiene
- Keep secrets in environment variables or local untracked files only.
- Never commit bot tokens, API keys, chat IDs, or runtime logs.
- For Telegram bridge operations:
- restrict with
ALLOWED_USER_IDS/ALLOWED_CHAT_IDS - keep shell mode behind explicit intent (
shell:) and safety policy - monitor usage via
GET /api/telegram/bridge/metrics
- restrict with
- If history rewrite is performed:
- force-push is required
- all collaborators must re-sync (
git fetch --all --pruneand reset/reclone)
Troubleshooting
- If style looks broken, force refresh (
Ctrl+F5) to clear old browser cache. - If
Cannot access 'xxx' before initializationappears, ensure latest templates are deployed and cache is cleared. - If HTTPS certificate warnings appear, trust local cert for internal use or run with
--httpin trusted networks.
