| name | service_expose |
| description | Run user-created frontend/backend/WebSocket services and expose them through Cloudflare by default when the user asks to start, deploy, preview, share, or make the service accessible. Local-only is allowed only when explicitly requested. |
| version | 1.0.0 |
| author | XSpoon Team |
| tags | ["service","frontend","backend","cloudflare","tunnel","background"] |
| default_active | true |
| triggers | [{"type":"keyword","keywords":["background service","run service","expose service","cloudflare tunnel","trycloudflare","frontend preview","backend preview","websocket","public link"],"priority":90}] |
| scripts | {"enabled":true,"definitions":[{"name":"service_expose","description":"Start, stop, inspect, log, and Cloudflare-expose local frontend/backend services.","type":"python","file":"scripts/service_expose.py","timeout":60,"input_schema":"[Truncated]"}]} |
Service Expose
Use this skill when a user-created frontend, backend, API, WebSocket server, or preview app needs to keep running after the turn.
Default stance: when the user asks to create and start, deploy, preview, share, open, or make a service accessible, Cloudflare exposure is part of completion unless the user explicitly says local-only. A local URL, localhost port, PID, or background process alone is an intermediate state, not a final answer.
Prefer service_expose over one-off shell backgrounding for preview services because it persists service metadata, log paths, PIDs, local URLs, and tunnel URLs under ~/.spoon-bot/service-expose.
Actions
start: run a service command in the background. Include name, command, and usually cwd plus port or url. For deploy/preview/share/access requests, pass start_tunnel=true in the same call unless the user explicitly asked for local-only.
tunnel / expose / start_tunnel: start a Cloudflare Quick Tunnel for an existing service or an explicit local url.
status / list / inspect: inspect running services and tunnel URLs.
logs: return recent service or tunnel logs.
stop / stop_tunnel: stop the background service or only its Cloudflare tunnel.
Rules
Use replace=true only when the user wants to restart/replace the existing named service. Quick Tunnels use cloudflared from CLOUDFLARED_PATH or PATH; when it is missing on Linux/Windows, this skill can download the official latest Cloudflare binary into ~/.spoon-bot/service-expose/bin unless SPOON_BOT_AUTO_INSTALL_CLOUDFLARED=0.
For generated services in sandbox/runtime environments, prefer one service_expose call with action=start and start_tunnel=true. Use action=start without a tunnel only for explicit local-only requests, internal preflight phases, or background helper services that the browser will not access. If a service was already started locally and the user still needs deployment/preview/share access, immediately call service_expose again with for that service before finalizing.