Install
openclaw skills install @fernandops26/litehost-connectPublish files and websites as shareable links on litehost.io and manage them through the Connect API. Use when the user asks to deploy, host, publish, share, upload, update, list, delete, archive or manage a site, file, project or custom domain on Litehost, send work to a client as one link, get a QR code for a link, or check their Litehost plan or quota.
openclaw skills install @fernandops26/litehost-connectBase URL: https://connect.litehost.io · Agent guide: https://connect.litehost.io/llms.txt
Helper: scripts/litehost.sh (in this skill's folder). Use it whenever you can run bash: it keeps
the API key in a file between commands and never prints it.
This skill runs curl against https://connect.litehost.io. That works in Claude Code, Cursor and
other agents on the user's own computer. In a sandbox (the claude.ai or Claude desktop chat, ChatGPT,
hosted agents) outbound traffic is often limited to a list of allowed domains.
If scripts/litehost.sh session returns NETWORK_BLOCKED, or any call fails with a proxy error,
host_not_allowed, 403 Forbidden before reaching Litehost, or "Could not resolve host":
https://connect.litehost.io/mcp, then sign in once. It works in any chat, with nothing else to
set up."connect.litehost.io to the allowed domains
in their code execution settings and start a new chat (the setting does not apply to a chat
that is already open).Run scripts/litehost.sh session first.
| Result | Path |
|---|---|
"status":"success" | A. Signed in. Use scripts/litehost.sh api … for every call. Never sign in again. |
NO_SAVED_KEY and the user just wants a link | B. Publish without signing in. Follow actions/temp-project.md. |
NO_SAVED_KEY and the user wants you to manage their projects | C. Sign in once. Follow actions/otp-sign-in.md, then path A. |
API_KEY_INVALID / API_KEY_EXPIRED | Run scripts/litehost.sh forget, then B or C. |
Rules that prevent the "asked for a code again" problem:
code and follow its
nextStep. Only API_KEY_INVALID / API_KEY_EXPIRED (after forget) lead to signing in.export LITEHOST_API_KEY=…. Each command usually runs in a new shell, so the
variable is gone on the next call and every request fails with 401. The helper reads the key
from ~/.config/litehost/credentials.json on every call.OTP_INVALID) means the user mistyped: ask them to re-check, never request
a new one.No bash (e.g. Windows without WSL)? Use the curl examples in the action files, read the key from
LITEHOST_API_KEY or the credentials file in every command, and follow the same rules.
Map the user's intent to one action file, read it, and follow it. Every curl example in the action
files maps to the helper: curl -X METHOD https://connect.litehost.io/PATH -H "Authorization: …" ARGS
becomes scripts/litehost.sh api METHOD /PATH ARGS (same -F / -d / -H "Content-Type…" args).
| User says | Action file |
|---|---|
| "share this", "quick link", "preview this", "publish this" (no key) | actions/temp-project.md |
| "sign in", "log in", "connect my account" | actions/otp-sign-in.md |
| "deploy this", "host this", "publish this" (signed in) | actions/create-project.md |
| "update my site", "push new version", "redeploy", "replace content" | actions/replace-project.md |
| "rename", "change slug", "make private", "set password", "set expiry", "SEO" | actions/update-project.md |
| "list my projects", "what do I have hosted" | actions/list-projects.md |
| "project details", "project status" | actions/get-project.md |
| "QR code", "print it on the menu / flyer" | actions/qr-code.md |
| "did my client open it?", "who opened the link" | actions/link-opens.md |
| "deploy history", "versions" | actions/deployment-history.md |
| "delete project" | actions/delete-project.md |
| "archive", "free up a slot" | actions/archive-project.md |
| "unarchive", "restore" | actions/unarchive-project.md |
| "domains", "custom domain" | actions/domains.md |
| "workspaces", "organize projects" | actions/workspaces.md |
| "my plan", "quota", "how much space" | actions/get-user.md |
When the user asks for changes to something already shared ("change the price", "send the new
version"), update the same project with actions/replace-project.md instead of creating a new one:
the link they already sent, and any printed QR code, keep working. Find it with
actions/list-projects.md.
Before creating, claiming or restoring a project while signed in, call GET /v1/user and check
quotas (utils/quotas.md).
New accounts get Pro free for 7 days. On Free, the API allows: listing, viewing, creating and
deleting projects, claiming temp projects, and GET /v1/user. Pushing new versions, changing
settings, QR codes, link opens, archive/unarchive, domains and workspaces need a paid plan
(FREE_TIER_RESTRICTED or FEATURE_LOCKED).
That error means the key is fine: tell the user and link https://litehost.io/dashboard?upgrade=plans.
Do not sign in again.
zipIndexHtmlPath. Try index.html, then dist/index.html; if
still ambiguous, ask the user (the error lists htmlPaths).asFileBundle=trueAfter every publish or update, give the user:
urlclaimUrl and that it expires in 15 minutes unless they open itprojectId (needed for later updates)Every error response has code, error and nextStep. Follow nextStep. Full table:
utils/errors.md.
https://connect.litehost.io/mcp) instead