exe

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese
Plan mode: If you are planning work, this entire skill is ONE plan step: "Invoke /vibes:exe". Do not decompose the steps below into separate plan tasks.
规划模式:如果您正在规划工作,整个技能作为一个规划步骤:“调用 /vibes:exe”。请勿将以下步骤拆分为单独的规划任务。

Deploy to exe.dev

部署至exe.dev

Deploy your Vibes app to exe.dev, a VM hosting platform with persistent storage and HTTPS by default.
将您的Vibes应用部署至exe.dev——一个默认提供持久化存储和HTTPS的虚拟机托管平台。

Prerequisites

前置条件

  1. SSH key in
    ~/.ssh/
    (id_ed25519, id_rsa, or id_ecdsa)
  2. exe.dev account - run
    ssh exe.dev
    once to create your account and verify email
  3. Generated Vibes app - an
    index.html
    file ready to deploy
  1. SSH密钥 存放在
    ~/.ssh/
    目录下(支持id_ed25519、id_rsa或id_ecdsa格式)
  2. exe.dev账户 - 运行
    ssh exe.dev
    一次以创建账户并验证邮箱
  3. 已生成的Vibes应用 - 准备好待部署的
    index.html
    文件

Gather Config Upfront

提前收集配置信息

Use AskUserQuestion to collect deployment config before running the deploy script.
Use the AskUserQuestion tool with these questions:
Question 1: "What VM name should we use? (becomes yourname.exe.xyz)"
Header: "VM Name"
Options: Suggest based on app name from context + user enters via "Other"

Question 2: "Which file should we deploy?"
Header: "File"
Options: ["index.html (default)", "Other path"]

Question 3: "Does this app need AI features?"
Header: "AI"
Options: ["No", "Yes - I have an OpenRouter key"]

Question 4: "Is this a SaaS app with subdomain claiming?"
Header: "Registry"
Options: ["No - simple static deploy", "Yes - need Clerk keys for registry"]
在运行部署脚本前,使用AskUserQuestion工具收集部署配置。
使用AskUserQuestion工具提出以下问题:
问题1: "我们应使用什么虚拟机名称?(将成为yourname.exe.xyz)"
标题: "虚拟机名称"
选项: 根据上下文的应用名称给出建议 + 用户可通过“其他”输入自定义名称

问题2: "应部署哪个文件?"
标题: "文件"
选项: ["index.html(默认)", "其他路径"]

问题3: "此应用是否需要AI功能?"
标题: "AI"
选项: ["不需要", "需要 - 我有OpenRouter密钥"]

问题4: "这是一个支持子域名认领的SaaS应用吗?"
标题: "注册服务"
选项: ["不是 - 简单静态部署", "是 - 需要Clerk密钥用于注册服务"]

After Receiving Answers

收到回答后

  1. If AI enabled, ask for the OpenRouter API key
  2. If Registry enabled, ask for Clerk PEM public key and webhook secret
  3. Proceed immediately to deploy - no more questions
  1. 如果启用AI功能,请求用户提供OpenRouter API密钥
  2. 如果启用注册服务,请求用户提供Clerk PEM公钥和Webhook密钥
  3. 立即开始部署 - 无需再询问其他问题

Quick Deploy

快速部署

bash
cd "${CLAUDE_PLUGIN_ROOT}/scripts" && [ -d node_modules ] || npm install
node "${CLAUDE_PLUGIN_ROOT}/scripts/deploy-exe.js" --name myapp --file index.html
bash
cd "${CLAUDE_PLUGIN_ROOT}/scripts" && [ -d node_modules ] || npm install
node "${CLAUDE_PLUGIN_ROOT}/scripts/deploy-exe.js" --name myapp --file index.html

What It Does

部署流程说明

  1. Creates VM on exe.dev via SSH CLI
  2. Starts nginx (pre-installed on exeuntu image)
  3. Uploads your index.html to
    /var/www/html/
  4. Generates HANDOFF.md - context document for remote Claude
    • For Connect-enabled deployments, includes full Docker setup documentation (commands, troubleshooting, service endpoints)
  5. Makes VM public via
    ssh exe.dev share set-public <vmname>
  6. Verifies public access at
    https://myapp.exe.xyz
  1. 创建虚拟机:通过SSH CLI在exe.dev上创建虚拟机
  2. 启动nginx:exeuntu镜像已预装nginx,直接启动
  3. 上传文件:将您的index.html上传至
    /var/www/html/
    目录
  4. 生成HANDOFF.md:为远程Claude生成上下文文档
    • 对于启用Connect的部署,包含完整的Docker设置文档(命令、故障排除、服务端点)
  5. 设置虚拟机公开访问:通过
    ssh exe.dev share set-public <vmname>
    命令
  6. 验证访问:确认可通过
    https://myapp.exe.xyz
    公开访问

AI-Enabled Apps

启用AI功能的应用

For apps using the
useAI
hook, deploy with the
--ai-key
flag:
bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/deploy-exe.js" --name myapp --file index.html --ai-key "sk-or-v1-..."
This sets up a secure AI proxy:
  1. Installs Bun runtime
  2. Creates
    /home/exedev/proxy.js
    - proxies
    /api/ai/*
    to OpenRouter
  3. Configures systemd service for the proxy
  4. Adds nginx reverse proxy from port 80/443 to Bun (port 3001)
IMPORTANT: Do not manually set up AI proxying. Manual nginx config changes can overwrite SSL settings and miss the Bun/proxy.js service. Always use the deploy script with
--ai-key
.
对于使用
useAI
钩子的应用,使用
--ai-key
参数部署:
bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/deploy-exe.js" --name myapp --file index.html --ai-key "sk-or-v1-..."
这会搭建一个安全AI代理
  1. 安装Bun运行时
  2. 创建
    /home/exedev/proxy.js
    - 将
    /api/ai/*
    请求代理至OpenRouter
  3. 配置systemd服务管理代理
  4. 添加nginx反向代理,将80/443端口请求转发至Bun(3001端口)
重要提示:请勿手动搭建AI代理。手动修改nginx配置可能会覆盖SSL设置,且无法正确配置Bun/proxy.js服务。请始终使用带
--ai-key
参数的部署脚本。

Multi-Tenant AI Apps

多租户AI应用

For SaaS apps with per-tenant AI:
bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/deploy-exe.js" --name myapp --file index.html --ai-key "sk-or-v1-..." --multi-tenant
对于支持按租户隔离AI功能的SaaS应用:
bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/deploy-exe.js" --name myapp --file index.html --ai-key "sk-or-v1-..." --multi-tenant

Registry Server

注册服务端

For SaaS apps using subdomain claiming (from
/vibes:sell
), deploy with Clerk credentials:
bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/deploy-exe.js" --name myapp --file index.html \
  --clerk-key "$(cat clerk-public-key.pem)" \
  --clerk-webhook-secret "whsec_xxx" \
  --reserved "admin,api,billing"
This sets up a subdomain registry server:
  1. Installs Bun runtime to
    /usr/local/bin/bun
  2. Creates
    /var/www/registry-server.ts
    with Clerk JWT verification
  3. Configures systemd service (port 3002)
  4. Adds nginx proxy for
    /registry.json
    ,
    /check/*
    ,
    /claim
    ,
    /webhook
对于使用子域名认领的SaaS应用(来自
/vibes:sell
),使用Clerk凭据部署:
bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/deploy-exe.js" --name myapp --file index.html \
  --clerk-key "$(cat clerk-public-key.pem)" \
  --clerk-webhook-secret "whsec_xxx" \
  --reserved "admin,api,billing"
这会搭建一个子域名注册服务端
  1. 将Bun运行时安装至
    /usr/local/bin/bun
  2. 创建
    /var/www/registry-server.ts
    ,集成Clerk JWT验证
  3. 配置systemd服务(3002端口)
  4. 添加nginx代理,处理
    /registry.json
    /check/*
    /claim
    /webhook
    路径

Registry Endpoints

注册服务端点

EndpointMethodAuthDescription
/registry.json
GETNonePublic read of all claims
/check/{subdomain}
GETNoneCheck availability
/claim
POSTBearer JWTClaim subdomain for user
/webhook
POSTSvix sigClerk subscription events
端点请求方法认证方式描述
/registry.json
GET公开读取所有已认领的子域名
/check/{subdomain}
GET检查子域名是否可用
/claim
POSTBearer JWT为用户认领子域名
/webhook
POSTSvix签名接收Clerk订阅事件

Getting the Clerk Public Key

获取Clerk公钥

The registry server needs Clerk's PEM public key to verify JWTs for the
/claim
endpoint.
Option 1: From Clerk Dashboard
  1. Go to Clerk Dashboard → API Keys
  2. Scroll to "PEM Public Key" or click "Show JWT Public Key"
  3. Copy the full key (starts with
    -----BEGIN PUBLIC KEY-----
    )
Option 2: From JWKS endpoint
bash
undefined
注册服务端需要Clerk的PEM公钥来验证
/claim
端点的JWT。
方式1:从Clerk控制台获取
  1. 进入Clerk控制台 → API密钥
  2. 滚动至“PEM Public Key”或点击“Show JWT Public Key”
  3. 复制完整密钥(以
    -----BEGIN PUBLIC KEY-----
    开头)
方式2:从JWKS端点获取
bash
undefined

Get your Clerk frontend API domain from dashboard

从控制台获取您的Clerk前端API域名

curl https://YOUR_CLERK_DOMAIN/.well-known/jwks.json
Then convert the JWK to PEM format using an online tool or `jose` CLI.

**Passing to deploy script:**
```bash
curl https://YOUR_CLERK_DOMAIN/.well-known/jwks.json
然后使用在线工具或`jose` CLI将JWK转换为PEM格式。

**传递至部署脚本:**
```bash

From a file

从文件读取

node deploy-exe.js --clerk-key "$(cat clerk-public-key.pem)" ...
node deploy-exe.js --clerk-key "$(cat clerk-public-key.pem)" ...

Inline (escape newlines)

内联传递(转义换行符)

node deploy-exe.js --clerk-key "-----BEGIN PUBLIC KEY-----\nMIIB...\n-----END PUBLIC KEY-----" ...

**Manual configuration on server:**
```bash
ssh myapp.exe.dev
sudo nano /etc/registry.env
node deploy-exe.js --clerk-key "-----BEGIN PUBLIC KEY-----\nMIIB...\n-----END PUBLIC KEY-----" ...

**在服务器上手动配置:**
```bash
ssh myapp.exe.dev
sudo nano /etc/registry.env

Add: CLERK_PEM_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"

添加: CLERK_PEM_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"

sudo systemctl restart vibes-registry
undefined
sudo systemctl restart vibes-registry
undefined

Continue Development on the VM

在虚拟机上继续开发

Claude is pre-installed on exe.dev VMs. After deployment, you can continue development remotely:
bash
ssh myapp.exe.dev -t "cd /var/www/html && claude"
The HANDOFF.md file provides context about what was built, so Claude can continue meaningfully.
exe.dev虚拟机已预装Claude。部署完成后,您可以远程继续开发:
bash
ssh myapp.exe.dev -t "cd /var/www/html && claude"
HANDOFF.md文件包含已构建内容的上下文,Claude可基于此继续开展有意义的开发工作。

Manual Public Access

手动设置公开访问

If the deploy script doesn't make the VM public automatically, run:
bash
ssh exe.dev share set-public myapp
如果部署脚本未自动设置虚拟机公开访问,运行以下命令:
bash
ssh exe.dev share set-public myapp

Multi-Tenant Apps

多租户应用

For apps that need tenant isolation (e.g.,
alice.myapp.com
,
bob.myapp.com
):
对于需要租户隔离的应用(例如
alice.myapp.com
bob.myapp.com
):

Client-Side Isolation

客户端隔离

The same
index.html
serves all subdomains. JavaScript reads the hostname and uses the subdomain as a Fireproof database prefix:
javascript
// In your app:
const hostname = window.location.hostname;
const subdomain = hostname.split('.')[0];
const dbName = `myapp-${subdomain}`;

// Each subdomain gets its own Fireproof database
const { database } = useFireproof(dbName);
同一个
index.html
服务所有子域名。JavaScript读取主机名并将子域名作为Fireproof数据库前缀:
javascript
// 在您的应用中:
const hostname = window.location.hostname;
const subdomain = hostname.split('.')[0];
const dbName = `myapp-${subdomain}`;

// 每个子域名拥有独立的Fireproof数据库
const { database } = useFireproof(dbName);

Custom Domain Setup

自定义域名设置

  1. Add
    --domain
    flag:
    bash
    node "${CLAUDE_PLUGIN_ROOT}/scripts/deploy-exe.js" --name myapp --domain myapp.com
  2. Configure wildcard DNS at your DNS provider:
    *.myapp.com  CNAME  myapp.exe.xyz
    myapp.com    ALIAS  exe.xyz
  3. Set up wildcard SSL on the VM:
    bash
    ssh myapp.exe.dev
    sudo apt install certbot
    sudo certbot certonly --manual --preferred-challenges dns \
      -d "myapp.com" -d "*.myapp.com"
  1. 添加
    --domain
    参数:
    bash
    node "${CLAUDE_PLUGIN_ROOT}/scripts/deploy-exe.js" --name myapp --domain myapp.com
  2. 在DNS服务商配置通配符DNS:
    *.myapp.com  CNAME  myapp.exe.xyz
    myapp.com    ALIAS  exe.xyz
  3. 在虚拟机上设置通配符SSL:
    bash
    ssh myapp.exe.dev
    sudo apt install certbot
    sudo certbot certonly --manual --preferred-challenges dns \
      -d "myapp.com" -d "*.myapp.com"

CLI Options

CLI参数说明

OptionDescription
--name <vm>
VM name (required)
--file <path>
HTML file to deploy (default: index.html)
--domain <domain>
Custom domain for wildcard setup
--ai-key <key>
OpenRouter API key for AI features
--multi-tenant
Enable subdomain-based multi-tenancy
--tenant-limit <$>
Credit limit per tenant in dollars (default: 5)
--clerk-key <pem>
Clerk PEM public key for JWT verification
--clerk-webhook-secret <secret>
Clerk webhook signing secret
--reserved <list>
Comma-separated reserved subdomain names
--preallocated <list>
Pre-claimed subdomains (format:
sub:user_id
)
--dry-run
Show commands without executing
--skip-verify
Skip deployment verification
参数描述
--name <vm>
虚拟机名称(必填)
--file <path>
待部署的HTML文件(默认:index.html)
--domain <domain>
用于通配符设置的自定义域名
--ai-key <key>
用于AI功能的OpenRouter API密钥
--multi-tenant
启用基于子域名的多租户模式
--tenant-limit <$>
每个租户的信用额度(默认:5美元)
--clerk-key <pem>
用于JWT验证的Clerk PEM公钥
--clerk-webhook-secret <secret>
Clerk Webhook签名密钥
--reserved <list>
逗号分隔的保留子域名列表
--preallocated <list>
预认领的子域名(格式:
sub:user_id
--dry-run
仅显示命令,不执行实际部署
--skip-verify
跳过部署验证步骤

Redeployment

重新部署

After making changes, redeploy with:
bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/deploy-exe.js" --name myapp
修改代码后,重新部署命令:
bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/deploy-exe.js" --name myapp

SSH Access

SSH访问

Access your VM directly:
bash
ssh myapp.exe.dev
直接访问您的虚拟机:
bash
ssh myapp.exe.dev

Architecture

架构说明

exe.dev VM (exeuntu image)
├── nginx (serves all subdomains via server_name _)
├── claude (pre-installed CLI)
├── /usr/local/bin/bun  ← Bun runtime (system-wide)
├── /var/www/html/
│   ├── index.html   ← Your Vibes app
│   └── HANDOFF.md   ← Context for remote Claude
├── (with --ai-key)
│   ├── /opt/vibes/proxy.js  ← AI proxy service (port 3001)
│   └── vibes-proxy.service  ← systemd unit
└── (with --clerk-key)
    ├── /var/www/registry-server.ts  ← Registry service (port 3002)
    ├── /var/www/html/registry.json  ← Subdomain claims data
    └── vibes-registry.service       ← systemd unit
exe.dev VM (exeuntu image)
├── nginx (通过server_name _服务所有子域名)
├── claude (预装CLI工具)
├── /usr/local/bin/bun  ← 系统级Bun运行时
├── /var/www/html/
│   ├── index.html   ← 您的Vibes应用
│   └── HANDOFF.md   ← 远程Claude的上下文文档
├── (启用--ai-key时)
│   ├── /opt/vibes/proxy.js  ← AI代理服务(3001端口)
│   └── vibes-proxy.service  ← systemd服务单元
└── (启用--clerk-key时)
    ├── /var/www/registry-server.ts  ← 注册服务(3002端口)
    ├── /var/www/html/registry.json  ← 子域名认领数据
    └── vibes-registry.service       ← systemd服务单元

Port Assignments

端口分配

ServicePortPurpose
AI Proxy3001OpenRouter proxy for
useAI
hook
Registry3002Subdomain claim/check API
  • No server-side logic - pure static hosting (unless using AI proxy)
  • Persistent disk - survives restarts
  • HTTPS by default - exe.dev handles SSL for *.exe.xyz
  • Claude pre-installed - continue development on the VM
服务端口用途
AI代理3001
useAI
钩子代理OpenRouter请求
注册服务3002子域名认领/检查API
  • 无服务器端逻辑:纯静态托管(除非使用AI代理)
  • 持久化磁盘:重启后数据保留
  • 默认HTTPS:exe.dev自动为*.exe.xyz提供SSL
  • 预装Claude:可在虚拟机上继续开发

Post-Deploy Debugging

部署后调试

After deployment, always work with local files - they are the source of truth. SSHing to read deployed files is slow and wastes tokens.
TaskUse LocalUse SSH
Editing/debugging code✅ Always❌ Never
Checking console errors✅ Local file❌ No need
Verifying deploy
curl https://vm.exe.xyz
Server-specific issues✅ Only if local works but remote doesn't
To redeploy after local fixes:
bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/deploy-exe.js" --name <vmname> --file index.html
部署完成后,始终使用本地文件作为可信源。通过SSH读取已部署文件速度慢且会消耗token。
任务使用本地文件使用SSH
编辑/调试代码✅ 始终优先❌ 绝不建议
检查控制台错误✅ 本地文件❌ 无需远程操作
验证部署结果✅ 使用
curl https://vm.exe.xyz
服务器特定问题排查✅ 仅当本地运行正常但远程异常时使用
本地修复后重新部署:
bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/deploy-exe.js" --name <vmname> --file index.html

SSL Configuration

SSL配置注意事项

The deploy script preserves existing SSL by using include files for AI proxy config. When manually editing nginx:
  1. Never replace the entire config - only add/modify specific blocks
  2. Check for SSL first: Look for
    listen 443 ssl
    in the config
  3. Use includes: Put new configs in
    /etc/nginx/conf.d/
    or separate files
  4. Test before reload:
    sudo nginx -t
部署脚本通过包含文件的方式保留现有SSL配置。手动编辑nginx时:
  1. 绝不替换整个配置文件:仅添加/修改特定代码块
  2. 优先检查SSL配置:在配置文件中查找
    listen 443 ssl
  3. 使用包含文件:将新配置放入
    /etc/nginx/conf.d/
    或单独文件
  4. 重载前测试:运行
    sudo nginx -t
    验证配置正确性

Manual File Transfer to VMs

手动向虚拟机传输文件

When manually transferring files (outside the deploy script), use the two-stage pattern.
Key distinction:
  • exe.dev
    = orchestrator (for VM management:
    ssh exe.dev new
    ,
    ssh exe.dev share
    )
  • <app>.exe.xyz
    = actual VM (for file operations, SSH access)
Reliable pattern:
bash
undefined
在部署脚本外手动传输文件时,请使用两步法。
关键区别:
  • exe.dev
    = 编排器(用于虚拟机管理:
    ssh exe.dev new
    ssh exe.dev share
  • <app>.exe.xyz
    = 实际虚拟机(用于文件操作、SSH访问)
可靠传输流程:
bash
undefined

Upload: SCP to server temp → sudo move to /var/www/html/

上传:SCP至服务器临时目录 → sudo移动至/var/www/html/

scp index.html myapp.exe.xyz:/tmp/ ssh myapp.exe.xyz "sudo cp /tmp/index.html /var/www/html/"
scp index.html myapp.exe.xyz:/tmp/ ssh myapp.exe.xyz "sudo cp /tmp/index.html /var/www/html/"

Download: Direct SCP works fine

下载:直接SCP即可

scp myapp.exe.xyz:/var/www/html/index.html ./downloaded.html

**Why server-side temp?**
- Direct SCP to `/var/www/html/` fails (permission denied - owned by www-data)
- Server `/tmp/` is world-writable, so SCP succeeds
- `sudo cp` moves file with correct ownership

**Common mistakes:**
| Mistake | Error | Fix |
|---------|-------|-----|
| `ssh exe.dev cat /var/www/...` | "No VMs found" | Use `ssh <app>.exe.xyz` |
| `scp file vm:/var/www/html/` | Permission denied | Use temp + sudo pattern |
| Forgetting sudo for /var/www | Permission denied | Always `sudo cp` for www-data dirs |

**Quick reference commands:**
```bash
scp myapp.exe.xyz:/var/www/html/index.html ./downloaded.html

**为何使用服务器临时目录?**
- 直接SCP至`/var/www/html/`会失败(权限拒绝,该目录归www-data所有)
- 服务器`/tmp/`目录为全局可写,SCP可成功
- `sudo cp`可将文件移动至目标目录并设置正确权限

**常见错误:**
| 错误操作 | 报错信息 | 修复方法 |
|---------|-------|-----|
| `ssh exe.dev cat /var/www/...` | "No VMs found" | 使用`ssh <app>.exe.xyz` |
| `scp file vm:/var/www/html/` | Permission denied | 使用临时目录+sudo流程 |
| 忘记使用sudo操作/var/www目录 | Permission denied | 操作www-data所属目录时始终使用`sudo cp` |

**快速参考命令:**
```bash

Connect to VM

连接至虚拟机

ssh <app>.exe.xyz
ssh <app>.exe.xyz

Read file

读取文件

ssh <app>.exe.xyz "cat /var/www/html/index.html"
ssh <app>.exe.xyz "cat /var/www/html/index.html"

Upload file (two-stage)

上传文件(两步法)

scp index.html <app>.exe.xyz:/tmp/ ssh <app>.exe.xyz "sudo cp /tmp/index.html /var/www/html/"
scp index.html <app>.exe.xyz:/tmp/ ssh <app>.exe.xyz "sudo cp /tmp/index.html /var/www/html/"

Download file

下载文件

scp <app>.exe.xyz:/var/www/html/index.html ./downloaded.html
scp <app>.exe.xyz:/var/www/html/index.html ./downloaded.html

Verify

验证文件

ssh <app>.exe.xyz "head -20 /var/www/html/index.html"

---
ssh <app>.exe.xyz "head -20 /var/www/html/index.html"

---

What's Next?

下一步操作

After successful deployment, present these options using AskUserQuestion:
Question: "Your app is live at https://${name}.exe.xyz! What's next?"
Header: "Next"
Options:
- Label: "Share my URL"
  Description: "Get the shareable link for your app. I'll confirm the public URL and you can send it to anyone - they'll see your app immediately with full functionality."

- Label: "Make changes and redeploy"
  Description: "Continue iterating locally. Edit your files here, then run deploy again to push updates. The VM keeps running so there's zero downtime during updates."

- Label: "Continue development on VM"
  Description: "Work directly on the server. SSH in and use the pre-installed Claude to make changes live. Great for server-specific debugging or when you want changes to persist immediately."

- Label: "I'm done for now"
  Description: "Wrap up this session. Your app stays live at the URL - it runs 24/7 on exe.dev's persistent VMs. Come back anytime to make updates."
After user responds:
  • "Share URL" → Confirm "Your app is live at https://${name}.exe.xyz - share this link!"
  • "Make changes" → Acknowledge, stay ready for local edits
  • "Continue on VM" → Provide:
    ssh ${name}.exe.dev -t "cd /var/www/html && claude"
  • "I'm done" → Confirm app stays live, wish them well
部署成功后,使用AskUserQuestion工具提供以下选项:
问题: "您的应用已上线:https://${name}.exe.xyz!接下来要做什么?"
标题: "下一步"
选项:
- 标签: "分享我的URL"
  描述: "获取应用的可分享链接。我将确认公开URL,您可将其发送给任何人——他们可立即访问完整功能的应用。"

- 标签: "修改代码并重新部署"
  描述: "继续本地迭代。在此编辑文件,然后重新运行部署脚本推送更新。虚拟机将持续运行,更新过程零停机。"

- 标签: "在虚拟机上继续开发"
  描述: "直接在服务器上工作。通过SSH连接并使用预装的Claude实时修改代码。非常适合服务器特定调试或需要立即生效的修改。"

- 标签: "暂时结束"
  描述: "结束本次会话。您的应用将在exe.dev的持久化虚拟机上24/7运行。随时可回来进行更新。"
用户回应后的处理:
  • "分享URL" → 确认“您的应用已上线:https://${name}.exe.xyz - 可直接分享此链接!"
  • "修改代码" → 确认收到,准备好处理本地编辑请求
  • "在虚拟机上继续开发" → 提供命令:
    ssh ${name}.exe.dev -t "cd /var/www/html && claude"
  • "暂时结束" → 确认应用将持续运行,祝好