← Back to Skills Marketplace
g4f4r0

Hoist

by g4f4r0 · GitHub ↗ · v0.1.5 · MIT-0
cross-platform ✓ Security Clean
96
Downloads
1
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install hoist
Description
Deploy and manage apps, servers, databases, domains, and environment variables on VPS providers using the Hoist CLI.
README (SKILL.md)

Hoist CLI

Hoist is an AI-native CLI built specifically for AI agents. When called from an agent (non-TTY), it automatically outputs structured JSON and skips interactive prompts. Just run commands directly.

How You Should Behave

You are the user's infrastructure guide. Be thorough and transparent:

  • Always explain what you are about to do before doing it. Tell the user which commands you will run, what resources will be created, and what the estimated cost is.
  • Ask for confirmation before any action that creates, modifies, or destroys resources. This includes creating servers, deploying apps, adding databases, deleting domains, rotating keys, and setting env vars.
  • Never assume critical deployment inputs. If the user says "deploy this", ask which server, which service, and which port unless hoist.json already resolves them clearly.
  • Present options clearly. When there are choices like region, server type, or database version, list them with context like price, location, and specs so the user can make an informed decision.
  • After every action, verify it worked. Run hoist status and report the result.
  • If something fails, investigate before retrying. Follow the troubleshooting workflow below.

Smart Defaults

Hoist auto-detects and fills in sensible defaults when called from an agent:

  • Deploys all app services if --service is omitted
  • Auto-resolves --server from the service config in hoist.json
  • Generates random server names if --name is omitted
  • Uses cheapest server type and first region as defaults

Even though defaults exist, always present the plan to the user and get confirmation before executing.

When to Use

  • "Deploy this app" -> hoist deploy
  • "Create a server" -> hoist server create
  • "Set up Postgres" -> hoist deploy --template postgres --server \x3Cs>
  • "Add a domain" -> hoist domain add example.com
  • "What's running?" -> hoist status
  • "Something is broken" -> hoist logs \x3Cservice>, then hoist logs traefik, then hoist doctor
  • "Check everything" -> hoist doctor

When NOT to Use

  • Provider setup without env vars. hoist init and hoist provider add need HOIST_*_API_KEY env vars or an interactive human terminal.
  • General coding. Hoist is for infrastructure only.

Decision Tree

Is hoist installed? (`which hoist`)
+-- NO -> Run: `npm install -g hoist-cli`
+-- YES -> Is hoist configured? (`hoist provider list`)
    +-- NO -> Are HOIST_*_API_KEY env vars set?
        +-- YES -> Run: `hoist init`
        +-- NO -> Tell user to run: `hoist init`
    +-- YES -> Does hoist.json exist?
        +-- NO -> Create hoist.json after asking about project name and services
        +-- YES -> What does the user want?
            +-- New server -> `hoist server create`
            +-- Import server -> `hoist server import --ip \x3Cip>`
            +-- Deploy app -> `hoist deploy`
            +-- Add database -> `hoist deploy --template postgres --server \x3Cs>`
            +-- Add domain -> `hoist domain add \x3Cdomain>`
            +-- Set env vars -> `hoist env set \x3Cservice> KEY=VAL`
            +-- Check status -> `hoist status`
            +-- Something broken -> `hoist logs \x3Cservice>` + `hoist doctor`

Sensitive Operations - Human in the Loop

Command Behavior
hoist init If HOIST_*_API_KEY env vars are set, auto-configures. Otherwise prompts interactively, so tell the user to run it.
hoist provider add Requires --type and reads the API key from a HOIST_*_API_KEY env var. If the env var is missing, tell the user to set it first.
hoist keys rotate Rotates SSH keys on all servers. Always confirm first.
hoist server destroy Destroys a server permanently. Always confirm first.
hoist template destroy Destroys a database and its data. Always confirm first.
hoist domain delete Removes a domain and SSL config. Always confirm first.

Environment variables: HOIST_HETZNER_API_KEY, HOIST_VULTR_API_KEY, HOIST_DIGITALOCEAN_API_KEY, HOIST_HOSTINGER_API_KEY, HOIST_LINODE_API_KEY, HOIST_SCALEWAY_API_KEY


Commands

For full command reference, see COMMANDS.md.

  • Providers: provider add, provider list, provider test, provider update, provider set-default, provider delete
  • Servers: server create, server import, server list, server status \x3Cname>, server ssh \x3Cname>, server destroy \x3Cname>, server regions, server types, server stats \x3Cname>
  • Deploy: deploy, deploy --service \x3Cname>, deploy --template \x3Ctype> --server \x3Cs>, deploy --repo \x3Curl> --branch \x3Cbranch>, rollback --service \x3Cname>
  • Templates: template list, template info \x3Cname>, template services, template inspect \x3Cname>, template backup \x3Cname>, template destroy \x3Cname>, template stop/start/restart \x3Cname>, template public \x3Cname>, template private \x3Cname>
  • Domains: domain add \x3Cdomain>, domain add \x3Cdomain> --service \x3Cname>, domain list, domain delete \x3Cdomain>
  • Env vars: env set \x3Cservice> KEY=VAL, env get \x3Cservice> \x3Ckey>, env list \x3Cservice>, env delete \x3Cservice> \x3Ckey>, env import \x3Cservice> \x3Cfile>, env export \x3Cservice>, echo KEY=VAL | env set \x3Cservice> --stdin
  • Observability: logs \x3Cservice>, logs traefik, logs \x3Cservice> --follow, status, doctor
  • Skills: skills sync, skills export [dir]
  • Other: keys show, keys rotate, config validate, --status

Project Config

Read hoist.json in the project root for current project context.

{
  "project": "my-app",
  "servers": { "prod": { "provider": "hetzner-1" } },
  "services": {
    "api": { "server": "prod", "type": "app", "source": ".", "port": 3000 }
  }
}

Deployment Procedure

Walk the user through each step. Ask for confirmation before proceeding:

  1. Server - Which server? If none exist, ask the user which provider, region, type, and name they want. Present available options with pricing.
  2. Service - App or database? If no Dockerfile exists, generate one using DOCKERFILES.md and show it to the user before deploying.
  3. Domain - Ask whether they want a custom domain. User must point both example.com and www.example.com to the server IP.
  4. Env vars - Ask about DATABASE_URL, API keys, and other runtime config. If a database was just created, suggest the connection URL.
  5. Confirm - Summarize the server, service, domain, env vars, and estimated cost, then ask for final approval.

After Deploying

  1. hoist status - verify services are running and check for drift
  2. hoist logs \x3Cservice> - verify the app started correctly
  3. hoist domain add \x3Cdomain> - add the custom domain and SSL if requested

After Adding a Database

  1. hoist template inspect \x3Cname> - get credentials and the connection string
  2. hoist env set \x3Capp> DATABASE_URL=\x3Cconnection-string> - inject it into the app
  3. hoist template public \x3Cname> --server \x3Cs> - only if the user explicitly needs public access
  4. Tell the user the database is ready and whether the app was restarted with the new connection string.

Troubleshooting Workflow

When something goes wrong, use these tools to investigate:

1. Check app logs

hoist logs \x3Cservice> --lines 200

Look for crash loops, startup errors, missing env vars, database failures, and wrong ports.

2. Check proxy logs

hoist logs traefik --lines 200

Look for 502 errors, ACME cert failures, and TLS issues.

3. Check infrastructure

hoist doctor

Checks SSH connectivity, Docker, Traefik, firewall state, and provider auth.

4. Check project state

hoist status

Shows which services are running versus configured, along with drift and resource status.

Common Issues and Fixes

Symptom How to investigate Fix
502 Bad Gateway hoist logs \x3Cservice> then hoist logs traefik Fix the app crash or port mismatch, then redeploy.
Site not loading hoist status Redeploy the service with hoist deploy --service \x3Cname>.
SSL cert invalid hoist logs traefik Verify DNS points to the server IP and wait for the next ACME retry.
DNS not resolving hoist domain list User must add or fix the DNS A record.
Wrong response hoist logs \x3Cservice> Fix the app and redeploy.
Database unreachable hoist template inspect \x3Cname> Start the template service or fix the connection string.

When to Rollback

Only rollback when a deploy introduced a regression and the previous version was working.

hoist rollback --service \x3Cname>

Always confirm first and verify with hoist status after the rollback.


Error Reference

Error Solution
Run hoist init first If env vars are set, run hoist init. Otherwise tell the user to run it interactively.
Provider not found Check hoist provider list for the correct label.
Server not found Check hoist server list.
SSH connection failed Run hoist doctor and verify the server IP.
No hoist.json found Create hoist.json in the project root.
references unknown server Make the service server value match the servers section.
Re-run with --confirm Destructive action. The error includes the exact command to re-run.
Multiple app services found Specify --service \x3Cname>.

Golden Rules

  1. Explain first, act second. Always tell the user what you plan to do and get confirmation before running commands that create, modify, or destroy resources.
  2. Just run commands. JSON output and confirmations are handled automatically. Do not add extra machine flags.
  3. Parse stdout for JSON and check the exit code.
  4. Never handle API keys directly. Use env vars or tell the user to run setup commands.
  5. Investigate failures instead of retrying blindly. Use hoist logs \x3Cservice>, hoist logs traefik, hoist doctor, and hoist status.
  6. After every action, verify it worked and report the result.
  7. Server names in hoist.json must match the names used during creation.
Usage Guidance
This skill is a wrapper around the Hoist CLI and appears coherent with its stated purpose, but before installing: (1) Verify the npm package 'hoist-cli' and the GitHub repo are the official project and review recent package versions and changelogs; (2) treat provider API keys as sensitive — create least-privilege tokens where possible and avoid placing them in global/long-lived shells; (3) be aware the CLI can create/destroy servers and rotate keys — require explicit confirmation for destructive commands; (4) consider installing/testing the CLI in an isolated environment or container first to inspect behavior and network activity; and (5) keep the npm package updated and monitor supply-chain advisories for 'hoist-cli'.
Capability Analysis
Type: OpenClaw Skill Name: hoist Version: 0.1.5 The 'hoist' skill bundle provides a comprehensive interface for managing VPS infrastructure, applications, and databases via the Hoist CLI. The instructions in SKILL.md prioritize safety and transparency, explicitly requiring the AI agent to obtain human confirmation before performing any sensitive or destructive operations (e.g., server destruction, key rotation, or environment variable modification). The bundle includes well-structured documentation for Docker security best practices and troubleshooting workflows, and its high-risk capabilities (such as secret management and remote execution) are strictly aligned with its stated purpose as a deployment tool with no evidence of malicious intent or prompt injection.
Capability Tags
crypto
Capability Assessment
Purpose & Capability
Name/description, required binary ('hoist'), and the install spec (npm package 'hoist-cli' that creates the 'hoist' binary) are coherent with a CLI for deploying apps/servers/databases/domains. Declared provider env vars (HOIST_*_API_KEY) match the described providers.
Instruction Scope
SKILL.md limits actions to running the Hoist CLI, reading hoist.json for project context, and running provider-specific commands. It instructs the agent to request confirmation before any create/modify/destroy and to verify actions with 'hoist status' or 'hoist doctor'. It does not instruct the agent to read unrelated system files or exfiltrate data.
Install Mechanism
Install uses npm (npm install -g hoist-cli) to provide the 'hoist' binary. This is a typical distribution channel for CLI tools but carries standard supply-chain risk (npm package install scripts, postinstall hooks). No direct downloads from arbitrary URLs or extract steps are present.
Credentials
The only environment variables mentioned are provider API keys (HOIST_HETZNER_API_KEY, HOIST_VULTR_API_KEY, HOIST_DIGITALOCEAN_API_KEY, HOIST_HOSTINGER_API_KEY, HOIST_LINODE_API_KEY, HOIST_SCALEWAY_API_KEY), which are necessary and proportional for managing providers. The skill does not request unrelated secrets or broad platform credentials.
Persistence & Privilege
The skill is not force-included (always:false) and does not request elevated platform privileges. It can perform destructive infrastructure actions via the CLI, but SKILL.md instructs a human-in-the-loop confirmation policy for sensitive operations. Autonomous invocation is allowed by default on the platform but is not a problem unique to this skill.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install hoist
  3. After installation, invoke the skill by name or use /hoist
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v0.1.5
Hoist CLI 0.1.5 - Added detailed guidelines and workflow documentation in SKILL.md, enhancing clarity on usage, confirmation steps, and troubleshooting. - Outlined best practices for agent/infrastructure interactions, including required user confirmations before creating, modifying, or destroying resources. - Presented decision trees and procedures for common deployment and management tasks, including server, service, domain, and environment variable setup. - Listed all major commands, environment variables, and sensitive operations requiring human intervention. - Improved transparency and user guidance for both standard and error workflows.
Metadata
Slug hoist
Version 0.1.5
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is Hoist?

Deploy and manage apps, servers, databases, domains, and environment variables on VPS providers using the Hoist CLI. It is an AI Agent Skill for Claude Code / OpenClaw, with 96 downloads so far.

How do I install Hoist?

Run "/install hoist" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Hoist free?

Yes, Hoist is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Hoist support?

Hoist is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Hoist?

It is built and maintained by g4f4r0 (@g4f4r0); the current version is v0.1.5.

💬 Comments