Skip to content
Agentmart
Submit a tool

clawctl-fly-deploy

Use when deploying clawctl Hub on Fly.io as public HTTPS Autopilot, including first-run MFA setup, verification, and disposable app cleanup.

Skill by TED-H-com

IndexedApache-2.0★ 2
Write a review

Chalk Labs

Need help deploying clawctl-fly-deploy?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/ted-h-com-clawctl-fly-deploy

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Use when deploying clawctl Hub on Fly.io as public HTTPS Autopilot, including first-run MFA setup, verification, and disposable app cleanup.

Use cases: devops

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/clawctl-fly-deploy

What's inside

Skill name
clawctl-fly-deploy
Description
Use when deploying clawctl Hub on Fly.io as public HTTPS Autopilot, including first-run MFA setup, verification, and disposable app cleanup.
License
Apache-2.0
Instructions
78 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Fly Autopilot deployment

Use plain shell from the repository root. Read `docs/DEPLOY-FLY.md`. Prerequisites: flyctl installed (`fly` or `flyctl` on PATH), Python 3, curl, and a Fly org token in `FLY_API_TOKEN`. Load the token privately into the environment; never print it or pass it as a command argument.

Ask the human for the org, app name, and region (default `iad`). Decide the custom domain before any real enrollment. R2 backups and Telegram notifications are optional. Without R2, leave every `R2_*` and `LITESTREAM_*` setting unset. If optional secrets are supplied, use a regular mode-0600 file outside the repository; never read its contents into chat.

## Commands

Replace placeholders with the confirmed choices. First preview:

```sh
ops/fly/deploy.sh --org <org> --app <app> --region iad --dry-run
```

Before deploying a production app, have the human confirm the exact app name. Then:

```sh
ops/fly/deploy.sh --org <org> --app <app> --region iad
# With optional secrets:
ops/fly/deploy.sh --org <org> --app <app> --region iad --secrets-file /private/fly-secrets.env
```

The script copies the public config outside the tree, creates only missing resources, deploys, and scales to one Machine. It waits for `/healthz` and checks whether `/setup` is still open before reading first-run logs. A setup code may be printed once by deploy.sh on the operator's own terminal on first run only. Never paste it into chat.

Humans can complete `/setup` in the browser. For non-browser setup, have the operator save the code privately, then run:

```sh
ops/fly/setup-admin.sh --app <app> --username <username> \
  --setup-code-file /private/setup-code --out /private/admin-credentials.json
# After a custom domain switch:
ops/fly/setup-admin.sh --url https://hub.example.com --username <username> \
  --setup-code-file /private/setup-code --out /private/admin-credentials.json
```

The helper generates a password and writes username, password, TOTP secret, and ten recovery codes to a new mode-0600 JSON file. It never prints those values and refuses overwrites. Use secure storage for the file. It uses one keep-alive HTTPS connection for setup, enrollment, and confirmation.

Account security can regenerate ten recovery codes with the current password and an unused authenticator code; recovery codes are not accepted. All previous codes are invalidated. Failures count toward the shared account/client lockout. New codes are shown once, and the regeneration audit contains no codes. Alternatively, stop the Hub and run `clawctl-hub regenerate-recovery-codes --db PATH --username U`, then restart it; the host command requires MFA enabled and prints one code per line. An authenticator step used to sign in cannot be reused: wait for the next 30-second step before regenerating, and use one keep-alive HTTPS connection for login and regeneration.

To destroy a confirmed disposable app:

```sh
ops/fly/deploy.sh --app <app> --destroy --dry-run
ops/fly/deploy.sh --app <app> --destroy
```

Type the exact app name at the prompt. Non-TTY stdin is supported, but must supply the same exact name on one line. There is no flag that skips the typed name. Destroy removes the app's machines, its clawctl_data volumes, and the app; it never deploys.

## Verification

- HTTPS `/healthz` returns 200 with valid TLS; never disable certificate verification.
- A wrong Host on `/login` returns 421. `/healthz` intentionally exempts Host for Fly probes and is not the Host test.
- MFA is required: after enrollment, password-only login does not create a session. Complete authenticator verification privately.
- Audit client IP is the real client IP, not a proxy address in `172.16.0.0/12` or `fdaa:`. Check trusted proxies and `Fly-Client-IP` if wrong.
- Perform an enroll/retire drill with a disposable agent in an isolated HOME. Use a keyed Linux installer (amd64 and arm64 are available) or `clawctl-agent enroll` with private token input. Verify identity and a fresh HTTPS check-in, then retire through the UI/API. Keep the token out of chat and avoid the operator's existing agent state.
- A live terminal WebSocket at `/v1/agent/terminal-link` requires a local bat-server endpoint. HTTPS check-in alone does not establish that WebSocket; do not claim it does.
- Run a restore drill only when R2 replication is configured.

## Stop rules

- No resources beyond the documented one shared-cpu-1x 1024mb Machine and 3GB clawctl_data volume without asking. The classic build fallback may temporarily create a builder; the script tears down only newly created fly-builder-* apps.
- Never allocate a dedicated IPv4. Never create Postgres.
- Never merge. Do not deploy or destroy a production app without the human confirming the app name.
- Never paste secrets, setup codes, passwords, TOTP secrets or codes, recovery codes, or enrollment tokens into chat. Keep raw logs and credential files private.

## Troubleshooting

- Depot handshake, `Waiting for depot builder...`, or `failed to list workers`: deploy.sh retries each builder up to three times on transient transport failures, then auto falls back Depot → remote → local and tears down new classic builders. Permanent failures stop immediately. The wrapper first verifies fresh volume snapshots; see docs/DEPLOY-FLY.md for timeout and explicit emergency bypass.
- Builder left behind: teardown failure names the app and exits non-zero. Confirm that exact builder was created by the retry before removing it. Preserve pre-existing builders and all unrelated apps.
- Setup already closed (`/setup` 404): use `/login`. Do not recover an old setup code from logs. setup-admin.sh exits without writing a file.
- MFA `Pending login expired`: login is bound to the full client IP. New connections can rotate egress IP; use one keep-alive HTTPS connection. First-run setup uses `__Host-clawctl_session` directly, not `hub_pending_mfa`.
- Restore drill missing R2 variables: configure replication first. The drill requires `R2_ACCESS_KEY_ID`, `R2_SECRET_ACCESS_KEY`, `LITESTREAM_BUCKET`, and `LITESTREAM_ENDPOINT`; it does not work without R2.
- Wrong-host 421 after switching domains: open the origin set in `CLAWCTL_PUBLIC_URL`, verify DNS and TLS, and enroll real machines only after that origin is stable. Old agent URLs require re-enrollment.

After initial setup, add more admins through `/account/users`, or stop the Hub and
run `clawctl-hub add-admin --db PATH --username alice [--email alice@example.com]`
with the initial password on stdin. New admins must enroll MFA on first login.

From TED-H-com/AI-Intune, Apache-2.0.

Signals

Stars
2
Forks
1
Open issues
0
Last commit (this folder)
Oct 17, 2026 (13 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
Apache-2.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from TED-H-com

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get clawctl-fly-deploy running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying clawctl-fly-deploy?

CallGet help
Cite this page

clawctl-fly-deploy skill. Agent Mart. https://agentmart.dev/skills/ted-h-com-clawctl-fly-deploy (last updated 2026-10-24)