From bento
Deploys additional application stacks on a VPS already running bento via SSH. Use when adding apps like n8n or Chatwoot to an existing bento server.
How this skill is triggered — by the user, by Claude, or both
Slash command
/bento:deployThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are operating bento on a remote machine the user trusts you with. Narrate
You are operating bento on a remote machine the user trusts you with. Narrate before every state-changing step and stop on anything that smells off. Every artifact and message you produce stays in English.
The user has a server that ALREADY has bento installed and wants more apps:
<host>"If bento is NOT yet installed on the host, this is the wrong skill — use
/bento:install (fresh-VPS bootstrap). If the user wants logs/restart/scale of
an already-running app, point them at Portainer (https://portainer.<domain>).
| Input | Source | Validation |
|---|---|---|
| VPS host | user message; ask if missing | reachable via SSH |
| SSH user | default root; ask if otherwise | has sudo or is root |
| apps to deploy | user message (CSV) | each must be a directory under stacks/app/ on the host clone |
| per-app overrides | only if the user wants a non-default hostname/secret | passed as BENTO_ENV_<STACK>_<VAR> |
Use AskUserQuestion for anything missing. Don't guess an app name.
ssh -o ConnectTimeout=5 "$user@$host" "echo SSH_OK".ssh "$user@$host" "test -f ~/.config/bento/state.json && echo BENTO_OK". If absent, stop — tell the user to run /bento:install first.ssh "$user@$host" "ls /root/.local/share/bento/stacks/app"
Reject any requested app not in that list and show the valid options.dig +short A "<app>.<base_domain>" @1.1.1.1. The wildcard *.<base_domain> from the original install normally already covers it; warn only if it doesn't resolve to the VPS IP.Never drive bento's interactive TUI over SSH (gum prompts hang without a real
terminal). Re-run bento's installer in unattended mode with BENTO_APPS set to
ONLY the new apps. bento reconciles state.stacks against Portainer on entry to
unattended_step3, so orphaned state from a Portainer-side deletion won't
short-circuit the deploy.
ssh "$user@$host" "\
BENTO_UNATTENDED=1 \
BENTO_APPS=<comma,separated,apps> \
${BENTO_ENV_OVERRIDES:+$BENTO_ENV_OVERRIDES} \
bash /root/.local/share/bento/install.sh"
Per-app override example (non-default hostname):
BENTO_ENV_N8N_N8N_HOST=automation.example.com.
Stream stdout. Watch for the failure patterns in the install skill's
"Failure-mode library" (409 stack-already-exists, ENOTFOUND postgres, directory
nonexistent, post-deploy ran too early) — the recoveries there apply verbatim.
Identify the pattern before running any recovery.
docker service ls --filter name=<stack>_ --format '{{.Name}} {{.Replicas}}' shows the expected replicas (n8n has 3 services).curl -sI --max-time 15 https://<app>.<base_domain>/ returns a sane status (2xx/3xx or the app's expected code).psql -lt | grep -w <stack> finds the DB on the postgres container.stacks/app/<stack>/install.sh to know what it bootstrapped (e.g. paperclip's ~/.config/bento/paperclip-invite-url.txt).Don't trust an install.sh "is ready" line — verify against Swarm + HTTPS + the marker file, always.
state_get .bootstrap.base_domain + each manifest's post_deploy_url)./bento:auth.Format URLs as clickable links and quote credentials verbatim.
npx claudepluginhub felipefontoura/bento --plugin bentoDrives an end-to-end bento install on a fresh Ubuntu/Debian VPS via SSH: pre-flight checks, unattended setup, infra and app deploys, recovery, and final report. For first-run only; use deploy skill for existing servers.
Turns application stacks into production deployments on Linux VPS with Docker Compose, Traefik, private registries, SSH tunnels, backups, and rollback planning.
Automate self-hosting of open-source apps on cloud infrastructure the user owns. Use when the user asks to "self-host", "deploy to my own cloud", "install X on AWS/Lightsail/Hetzner/DigitalOcean", "set up my own Ghost blog / Mastodon / WordPress / Nextcloud", or names a combination of an open-source app and a cloud provider. Walks the user through provisioning, DNS, TLS, outbound email (SMTP), and inbound email, in phases that are resumable across sessions via a state file at `~/.open-forge/deployments/<name>.yaml`. Supported today: Ghost on AWS Lightsail (Bitnami). More projects and infras added under `references/projects/` and `references/infra/`.