Content
<div align="center">
# 🚀 vibe-launch
### Deploy AI-written projects to your server with one click | MCP Native | Agentless | Multi-server orchestration
**One command to deploy | SSH fully automated | Visual operation panel | Git deployment closed loop | Secure tunnel**
[](https://github.com/tmwgsicp/vibe-launch/stargazers)
[](LICENSE)
[](https://nodejs.org/)
[]()
> **100% Open-source, completely free.** Pure local tool - No account, no backend, no secret; list and key are on your machine, transparent and controllable.
</div>
---
> **vibe-tutor teaches you how to do it, vibe-launch deploys it for you.** - Completing the last mile of vibecoding "from writing to deployment".
## 🎯 What problems does it solve?
AI helps you write the project, but **deployment** is still a hurdle:
- ❌ Manually create `ssh-keygen`, configure passwordless, and add deploy key to GitHub - for each server and project
- ❌ Multiple projects scattered on multiple machines, hard to remember which project is on which machine and how it was deployed
- ❌ Want AI to deploy for you, but it can't access your server
- ❌ Database port opened for convenience, quietly becoming an attack surface
- ❌ After deployment, unsure if it's successful, and issues require SSH to check logs
**vibe-launch helps you:**
- ✅ **One command to connect to the server** - Automatically install a dedicated key, then passwordless
- ✅ **One local list** manages all servers and projects, clear about which project is on which machine and how it was deployed
- ✅ **MCP Native** - In Claude Code / Cursor, say "deploy X" to deploy
- ✅ **SSH Tunnel** maps internal network database to local, completely closing public database port
- ✅ **Visual operation panel** - Deployment / rollback / logs / status at a glance
## ✨ Core Features
- 🪶 **Agentless** - Use your local `~/.ssh` to connect, zero installation on target server
- 🤖 **AI Native** - MCP lets Claude Code / Cursor / Codex call directly; CLI for terminal and automation
- 🔑 **Fully automated SSH** - One command generates a dedicated key, installs it on the server, then passwordless
- 🔌 **Deploy mechanism pluggable** - Each project configures its own deploy command (e.g., `git pull && docker restart` / `docker compose up` / arbitrary script), not limited to 1Panel / GitHub
- 📥 **Git deployment closed loop** - One command converts server directory to git checkout + automatically configures read-only deploy key, then `git pull` deployment
- 🖥️ **Visual operation panel** - Status / deployment / rollback / real-time logs / port detection / file management, all in local browser
- 🔒 **Secure tunnel** - Internal network PG / Redis mapped to local, public database port can be completely closed
- 🌍 **Cross-distribution** - Metrics collection only depends on procfs + POSIX, compatible with CentOS 7 and git 1.8
## 📦 Installation
```bash
npm install -g vibe-launch
```
> Requires Node ≥ 18. After installation, `vibe-launch` (or `vl`) is available.
## 🚀 Get started in 60 seconds
```bash
# 1. Connect to server (automatically configure SSH, then passwordless)
vibe-launch server add prod --host 1.2.3.4 --user root --password "your password"
# 2. Register project (deploy to which server, how to deploy, container, health check)
vibe-launch project add myapp --server prod \
--dir /path/to/app \
--deploy "git pull && docker restart myapp-api myapp-web" \
--containers myapp-api,myapp-web \
--health http://127.0.0.1:8000/health
# 3. Deploy / check status / restart
vibe-launch deploy myapp
vibe-launch status
vibe-launch restart myapp # Only restart container + health check, no code pull
```
## 🖥️ Visual Operation Panel
```bash
vibe-launch ui # Start local operation panel + automatically open browser (localhost:7777)
```
> After starting `vibe-launch ui`, view in browser: **Overview / Servers / Projects / MCP / Settings** five tabs.
A complete operation panel, pure local, only listens to `127.0.0.1`, no account required.
## 🤖 For AI Tools (MCP)
Start MCP server:
```bash
vibe-launch mcp
```
In Claude Code / Cursor, configure and say **"deploy myapp"**, it will call `deploy_project` tool to complete.
```json
{
"mcpServers": {
"vibe-launch": { "command": "npx", "args": ["-y", "vibe-launch", "mcp"] }
}
}
```
| Command | MCP Tool |
|---|---|
| `server add` | `onboard_server` |
| `project add` | `add_project` |
| `setup-git <project>` | `setup_git` |
| `deploy <project>` | `deploy_project` |
| `restart <project>` | `restart_project` |
| `status [project]` | `get_status` |
Plus 6 **read-only diagnosis** tools, letting AI see the data on the operation panel, forming a "deploy → check health → read logs → decision" closed loop:
| MCP Tool | Function |
|---|---|
| `get_logs` | Pull container logs tail, locate health check failure reason |
| `preview_deploy` | View new commits to be pulled before deployment |
| `get_history` | View deployment / rollback history |
| `get_server_stats` | Server CPU / memory / disk / load metrics |
| `list_containers` | List containers (including stopped) |
| `check_ports` | Database port exposure detection |
> MCP only exposes **safe idempotent verbs + read-only diagnosis**. Interactive / side-effect operations like watching real-time logs, opening tunnels, rolling back, deleting containers, and file I/O are only in the operation panel (`ui`), not in MCP.
## 🔗 Let projects use git deployment (one command)
Want server `git pull` to deploy from a private repository, the difficulty is "how does the server have permission to pull code". `setup-git` one command automatically:
```bash
vibe-launch setup-git myapp --repo yourname/yourrepo
```
It will:
1. **Install git** (if not installed; compatible with old git 1.8 / CentOS 7)
2. **Generate a dedicated deploy key** (one key per project, read-only)
3. **Automatically add key to GitHub repository's Deploy Keys** - no need to manually configure GitHub settings
4. **Configure ssh alias + remote**, passwordless pull
> **Adding key to GitHub requires authorization**, three options (automatic selection, priority from top to bottom):
> - `vibe-launch auth` - **Browser click to authorize** (device flow, most convenient, no need to install gh, no need to manually create token)
> - Local `gh` already logged in (zero configuration)
> - `--token <PAT>` or environment variable `GITHUB_TOKEN` (requires `repo` / `Administration:write` permission)
### Browser Authorization (device flow)
```bash
vibe-launch auth # Pop up "open link + enter code", authorize and store token locally
vibe-launch auth --status # Check if authorized
vibe-launch auth --logout # Clear token
```
Pure local, no backend, no secret - same mechanism as `gh auth login`.
> Three keys each have their own role and are unrelated: ① Your local SSH key to connect to the server ② Your local authentication to push code to GitHub (using `gh`) ③ Server deploy key to pull code (automatically configured by this command).
If the directory already has handwritten code (not git), add `--adopt`, it will **backup** and convert to git checkout (using repository to overwrite tracked files, retaining `.env` / build products, etc., untracked files).
## 🔒 Secure Access: SSH Tunnel (no public DB port)
Database / cache **should not be exposed on the public network**. In production, let the app access PG / Redis through the internal network container; when you need to connect to the database locally for development, use a tunnel:
```bash
vibe-launch tunnel prod --service pg # Local localhost:5432 → server internal network PG
vibe-launch tunnel prod --service redis # Local localhost:6379 → server internal network Redis
vibe-launch tunnel prod --remote-port 8001 --local-port 18001 # Arbitrary port
```
Using existing SSH port (key encryption). Your DB tool connects to `localhost`, and **server PG / Redis public port can be completely closed**, greatly reducing the attack surface. `Ctrl+C` closes the tunnel.
## 🧭 Design Principles
- **Do not duplicate 1Panel / k8s existing work** - no container running, no database management, no proxy, no image building
- **Only do the missing part** - multi-server multi-project **centralized orchestration + list + AI interface**
- **List + dedicated key** are in local `~/.vibe-launch/`, transparent and controllable
## 🧩 vibecoding Tool Family
From writing to deployment, a complete process:
- 📘 **[vibecoding tutorial](https://vibecoding.waytomaster.com)** - AI programming methodology, from idea to deployment
- 🎓 **[Vibe Tutor](https://github.com/tmwgsicp/vibe-tutor)** - AI programming methodology mentor (14-step process + 7 major trap detection)
- 🚀 **vibe-launch** - here: deploy your project
## 💬 Contact
<table>
<tr>
<td align="center">
<img src="assets/qrcode/wechat.jpg" width="200"><br>
<b>Personal WeChat</b><br>
<em>Technical exchange · Business cooperation</em>
</td>
<td align="center">
<img src="assets/qrcode/sponsor.jpg" width="200"><br>
<b>Appreciation support</b><br>
<em>Open source is not easy, thank you for support</em>
</td>
</tr>
</table>
- **GitHub Issues**: [Submit issue](https://github.com/tmwgsicp/vibe-launch/issues)
- **Email**: creator@waytomaster.com
## 🙏 Acknowledgments
- [commander](https://github.com/tj/commander.js) - CLI framework
- [ssh2 / node-ssh](https://github.com/mscdex/ssh2) - SSH direct connection
- [Model Context Protocol SDK](https://github.com/modelcontextprotocol) - AI tool interface
---
## License
[AGPL-3.0-only](LICENSE)
<div align="center">
**If you find it useful, give it a ⭐ Star!**
[](https://star-history.com/#tmwgsicp/vibe-launch&Date)
Made with ❤️ by [tmwgsicp](https://github.com/tmwgsicp)
</div>