---
name: heremyapp
description: Deploy a static website (landing page, app homepage, docs) or publish an app installer (.pkg, .dmg, .zip) to heremyapp and return its permanent public URL. Use when the user asks to deploy, publish, host or release something on heremyapp or heremyapp.com, or to put an app's landing page or download link online with heremyapp.
---

# heremyapp

heremyapp hosts static sites and installers for AI agents. Before acting, read the current docs. They are the
source of truth for endpoints, rules and limits:

```bash
curl -fsSL https://heremyapp.com/llms-full.txt
```

If the docs cannot be fetched, these are the essentials:

```bash
export HEREMYAPP_TOKEN="${HEREMYAPP_TOKEN:-$(cat ~/.config/heremyapp/token 2>/dev/null)}"   # never print it
# No token? Device login: POST $API/auth/device, show the user verification_uri_complete, poll POST $API/auth/token
# (details: https://heremyapp.com/docs/authentication.md#device-login-for-agents-without-a-token)
API=https://api.heremyapp.com/v1; AUTH="Authorization: Bearer $HEREMYAPP_TOKEN"
curl -sS --fail-with-body "$API/me" -H "$AUTH"                     # account.username, token.scope
curl -sS -X POST "$API/spaces" -H "$AUTH" -H "content-type: application/json" \
  -d '{"slug":"my-app"}' -w '\nHTTP %{http_code}\n'                # 201 created, 409 already exists
COPYFILE_DISABLE=1 tar -czf - -C dist . | curl -sS --fail-with-body -X POST "$API/spaces/my-app/deployments" \
  -H "$AUTH" -H "content-type: application/gzip" --data-binary @-  # folder with index.html at its root
```

- Public URL: `https://heremyapp.com/ACCOUNT/SPACE`. Share this, not the site origin it redirects to.
- Installers: `POST $API/spaces/SPACE/artifacts` with `{filename (bare name), version, size, sha256}`, then follow
  the `upload` object in the response. Link the site to `https://heremyapp.com/dl/ACCOUNT/SPACE/latest/FILENAME`.
- Before every deploy: `GET $API/spaces/SPACE/versions`. Choose the bump yourself (major: incompatible or large
  changes, minor: features, patch: fixes) and deploy with `--url-query "bump=minor" --url-query "notes=..."`.
  Installers: increase the app's version and build before building.
- Contact details: if `contact_status` is `unknown`, ask the user once (skipping is fine) and save it with
  `PUT $API/spaces/SPACE/contact`.
- Landing pages: follow https://heremyapp.com/docs/landing.md (link previews, favicon, languages, release notes). Every site gets
  `/privacy` and `/terms` from the templates in https://heremyapp.com/docs/legal.md, linked from every page. For a page the user
  already has, keep its design and add only the missing basics listed in landing.md (legal pages included). Never invent contact or legal details; leave out what
  you do not know and tell the user.
- URLs: share `public_url` everywhere outside the page; absolute URLs inside the HTML (`og:url`, `og:image`,
  `canonical`) use `site_url`.
- Read the `advice` list in every deploy response and fix what applies.
- No token: run the device login; the user signs up or signs in with GitHub and approves in the browser. Never sign up,
  accept terms or pay for the user. Unsigned macOS installer: ask the user before uploading.
- `402 plan_limit` / `quota_exceeded`: tell the user the limit and give them `details.upgrade_url`
  (plans: https://heremyapp.com/docs/billing.md).
- Finish by checking that the public URL returns 200 and report it to the user.
