golive-skill README

The project's README from github.com/mikehasa/golive-skill. As one markdown file: README.md.

GoLive

Take your agent-built product live: hosting, database, auth, domain, email, payments — on your own accounts. Then hand it over, or tear it all down.

Your coding agent can build an app in minutes. Getting it to real users still means accounts, hosting, databases, domains, secrets and connected services. GoLive is the open-source Agent Skill for that work: it detects what your app needs, plans the exact changes, asks for your approval, applies them with your own logins, and verifies what actually works — then records what it created, re-checks it for drift on demand, and can remove it again.

Automate the parts providers expose. Guide you through the parts that need a human. Verify what can be observed, and make unfinished work clear. No GoLive account, hosted backend or product telemetry.

Early alpha · 0.1.0-alpha.3 Disposable live tests now cover six journeys: hosting (Vercel, Netlify), database (Supabase, Neon), custom-domain DNS (Porkbun, GoDaddy), transactional email (Resend), test-mode payments (Stripe) and Supabase authentication, plus the teardown uninstall path. The ownership document and the on-demand golive status drift check are implemented with test coverage (golive status also ran read-only in a live validation), while the broader roadmap is our direction, not a claim that it is all built.

Install · Use GoLive · See the workflow · Alpha scope · Roadmap · Contribute

Install

You need Node.js 20+, npm/npx, Git, and a coding agent that can load skills and run commands. Installation has been checked for Codex and Claude Code; other clients are unverified.

Install once for all your projects. Run this from any directory:

npx skills add https://github.com/mikehasa/golive-skill --skill golive --global

Select your agent when prompted: use the arrow keys to move, Space to select, and Enter to confirm. That screen is waiting for input; installation continues after you confirm.

To skip the agent picker, use the command for your agent:

# Codex
npx skills add https://github.com/mikehasa/golive-skill --skill golive --global --agent codex --yes

# Claude Code
npx skills add https://github.com/mikehasa/golive-skill --skill golive --global --agent claude-code --yes

For installation in just one project, run from that project's repository and omit --global.

Or paste this into your coding agent:

Install the GoLive skill globally so I can use it across projects:
npx skills add https://github.com/mikehasa/golive-skill --skill golive --global

Target the agent I'm using: add --agent codex --yes for Codex, or
--agent claude-code --yes for Claude Code. Keep --global.
If the agent isn't clear, ask me which one.

Verify the installation with:
node <installed-skill-dir>/scripts/golive.mjs version --json
Tell me if I need to reload skills or start a new session.
Stop after installation; don't connect accounts or deploy yet.

The install includes the instructions, provider references and prebuilt runtime. It does not connect accounts or deploy anything. See installation and updates for noninteractive agent flags, runtime verification and the optional own installer.

Install from npm

The same skill is published to npm as [email protected] (dist-tags alpha and latest), which installs it offline, with no Git or Skills CLI involved:

# Codex
npx golive@alpha install --agent codex

# Claude Code
npx golive@alpha install --agent claude

Add --global to install into your home directory (~/.agents/skills/golive or ~/.claude/skills/golive) instead of the current project. The installer copies the complete skill the package ships with, refuses an existing destination, and never connects provider accounts.

Both channels carry the same release. The npm package publishes the version in this repository, including the standalone installer helpers, so an npm installation is an owned copy that updates in place. The earlier 0.1.0-alpha.0 snapshot has no updater: remove that copy and reinstall, or use the GitHub channel, which manages its own installs. The npm package also exposes the terminal CLI: npx golive@alpha help, version, detect, menu, plan, apply, verify, handoff — apply needs the approved plan ID and explicit confirmation. See installation and updates for the channel's exact limits.

Use GoLive

Open your app repository in your coding agent. After installation, reload skills or start a new session if GoLive does not appear. The skill's name is golive. For the standalone installation above, type one of these in your agent's chat:

Agent Example prompt
Codex $golive Help me take this app live.
Claude Code /golive Help me take this app live.

You can also ask in plain language:

Use the golive skill to take this app live. Keep the providers it already uses.
Show me the destination accounts and plan before changing anything.

GoLive inspects the app, asks about missing providers, and presents the destination accounts and plan for your approval before making provider changes.

These are chat prompts. golive skill is not a command. Installing through npx skills add does not add a golive command to your terminal; the agent runs the included CLI from the installed skill directory. The npm package can also install the skill offline and exposes that CLI as npx golive@alpha <command>; its terminal commands run individual operations rather than the conversational skill workflow.

What a run looks like

An illustrative conversation for an app that already uses Supabase:

You: Use golive to take this app live. Use test resources for now.

Agent: This app uses Supabase. Where would you like to host it?

  1. Vercel — built-in hosting workflow; live-tested with Supabase.
  2. Netlify — built-in hosting workflow; the live-tested pairing is Netlify + Neon.
  3. Other — tell me your provider; I'll try a guided setup using its official tools and docs.

You: Vercel.

Agent: We'll keep Supabase. Does this app already have a Supabase project, or should we create a new test project?

You: Create a new one.

Agent: Run vercel login and supabase login in a separate terminal window. I'll check which account and organization are connected when you're done.

You: Done.

Agent: Here's the plan: create a new test frontend project in your selected Vercel team, create its database in your selected Supabase organization, transfer the required environment values, and deploy. I'll show the actual destination names and IDs, resource settings and cost information with the plan. Approve before I apply it.

You: Approved.

Agent: The deployment is live. Here is the URL, the verification report, and anything still unverified. Next we'll test the app's own signup and data flows. When you're done with this test project, golive teardown plans its removal for your approval before anything is deleted.

GoLive keeps the provider choices already in your app and asks about missing pieces. You handle signups, browser logins, identity checks and purchases. If an API key is needed on macOS, a native hidden-input dialog explains why it is asking and where the key will be saved. Its value goes directly to the local credentials file, never to chat or command output. Other platforms use your own editor as a fallback. A later change to the plan needs another approval; connecting auth or a domain may require a follow-up after the first deploy.

Using another provider? The skill has a general guided flow: check the provider's official CLI, an available official MCP integration or API, then guide you through its dashboard if needed. The agent still shows the destination, changes and cost before asking for approval, and checks what it can afterward. This is best-effort guidance, with no guarantee of completion or the same verification coverage as a built-in adapter. If a step cannot be completed or verified, you get the specific blocker and next action. See guided provider scope.

What this alpha supports

Two hosting choices: Vercel and Netlify. Two database choices: Supabase and Neon.

Live-tested path What was exercised
Vercel + Supabase Provisioning, environment wiring, deployment, authenticated CRUD and access isolation
Netlify + Neon Provisioning, environment wiring, deployment, Postgres connectivity, two-session API checks and browser CRUD
Vercel + Porkbun (custom domain) Domain attachment, an approved DNS record write under --confirm-dns, ownership verification and HTTPS serving on a disposable subdomain
Vercel + GoDaddy (custom domain) The same journey on a second subdomain, including the ownership TXT challenge Vercel requested after attaching
Vercel + Resend (email) Sending-domain setup, DNS records, domain verification and a real send through the app's own environment key (delivered; the fresh subdomain landed in spam)
Vercel + Stripe (test payments) Test-mode keys and webhook registration, an unsigned-request rejection, and a real test-card payment delivered as a signature-verified event
Supabase Auth (SMTP + password recovery) Custom-SMTP write read back with the raised auth email rate limit, and the whole recovery rotation on the seeded test account — accepted request, identical answer for an unknown address, spent token refused on replay, new password signing in and the old one refused

These were approved disposable runs on existing accounts; completed test resources were deleted afterward, and recent runs' disposable projects and records are cleaned up under the same supervision. Cross-pairings have mocked coverage, not equivalent live proof. Supabase CLI-login reuse separately passed read-only verification; the complete deployment test used an explicit token. A new user's first-account setup and every application framework have not been validated.

The lifecycle commands have their own evidence: golive teardown was live-exercised on a disposable Netlify project (blocked without --confirm-destroy, then removed, the account's site list unchanged apart from it) and earlier runs removed the GoDaddy and Porkbun records golive had written, revoked the Resend sending keys it had issued and removed the Stripe test-mode endpoint it had registered. golive status ran read-only against a live project; golive handoff --write ran on a disposable Vercel-only fixture: both artifacts were written and audited (a provenance tag on every claim row, the ownership proof and the teardown gate named, no credential-shaped value in the document, its JSON twin, state or config), and the project was removed afterwards through the approved teardown flow — the stack was host-only, so the document's other-provider rows remain mock-covered. See observed validation for the evidence.

Experimental adapters also exist for Supabase Auth configuration, the Supabase Auth signup journey, its password recovery and account isolation, and Cloudflare DNS. Supabase Auth settings — signup, email confirmation, minimum password length, the mailer it uses, plus the site URL and redirect allowlist — are automated through an approved plan and re-read for evidence, and that path passed a disposable live run: the policy write held in the read-back (password minimum length: 6 → 12) and auth-policy ended with the built-in-mailer advisory as its only finding. The opt-in signup journey (auth.e2e) passed the same run: one approved step seeded a real test account (auth:test-user, needs --confirm-live), the address could not sign in before confirming (email_not_confirmed), and the auth-signup/auth-session checks proved the signup email, the enforced confirmation, the confirmed login, the session token and the anonymous refusal. Two limits stay: the confirmation was applied through the Auth admin API rather than the seeded account's own email click, and inbox delivery is human-confirmed by design — golive never sees the inbox. A later approved run on a disposable fixture (a deployed Vercel site whose declared route answers 401 without a session, plus one RLS-protected table) exercised both app-side legs: an anonymous GET of auth.protectedPath answered 401 and the signed-in probe read that table as the authenticated user, so the probe's bearer fix is no longer mock-covered. What that evidence cannot show: that run's table line is a count rather than table names, and any 401 counted as protected — a WAF or maintenance page would read the same; both were fixed afterwards (issue #30: the probe names the tables it read, and a refused protected path is corroborated against the public root, with mocked coverage and no live re-run yet). Password recovery is live-validated on the same provider: the same 2026-09-24 run carried auth.smtp: resend (the custom-SMTP write and the raised auth email rate limit, both read back) and auth.recovery: true, whose one approved step (auth:recovery, needs --confirm-live) rotated that recorded test account's password through the provider's own recovery calls — request the email, mint the link with the admin API, exchange it for a session, set the new password with that session — and the auth-recovery check passed every leg: the request was accepted, an address with no account got the same answer (no account enumeration), the spent token was refused on replay, the new password signed in and the one it replaced did not. The inbox click and any captcha stay with the human (the auth:recovery-email handoff says so), the SMTP password is write-only (the provider answers a hash, so the read-back proves the settings, not a delivery), and the account was confirmed through the Auth admin API rather than the owner's click. Account isolation is implemented on the same provider too: auth.isolation: true with auth.identityPath and auth.isolationPath adds one approved step (auth:isolation, needs --confirm-live) that seeds a second real test account — the address derived from auth.testEmail, the password again only in that run's memory — and confirms it through the provider's admin API (no second inbox click: the journey is about the app's data, not delivery). The auth-isolation check then signs in as both accounts and reads the app's own two declared routes on the production URL: both must refuse an anonymous caller (a 200 is a critical finding), each account's identity route must answer with its own user id and never the other's, and the rows route must return only the caller's own rows — checked with one unique marker row per account written through that route with the account's session and read back, so another account's marker in the answer is a cross-account read and fails critically. When the routes are not declared, the non-blocking auth:isolation-routes handoff hands the app-code task over; a 404 or a refused session skips with that task named, never as a pass. Account isolation is implemented and mock-covered, not live-validated yet — its live run comes separately. The recovery run's own output contained two defects, both fixed here with mocked regressions: teardown reported the owner's adopted sending domain as created by golive (an empty creation-marker list made [].every() true, so every recorded domain read as golive's), and the auth:recovery-email handoff showed a standalone verify skip as its evidence while state recorded that step done. Its third finding — Resend kept reporting that domain verified while the records it listed were absent from the zone's authoritative nameserver — is fixed by #52: email-verified now resolves the records the provider itself lists for the domain before passing (a verified domain whose records are gone fails, a record golive wrote inside the propagation window only warns, and a provider that cannot list them skips rather than passing), and the email plan keeps the email:dns step or handoff for records that do not resolve, so a stale flag can no longer hide them. Mock-covered; not re-exercised live. The DNS, email and test-mode payment paths listed above are the tested ones, with the custom-domain runs using Porkbun and GoDaddy record writes; Cloudflare DNS specifically is not a validated alpha path yet, and other auth providers stay guided. See provider scope and observed validation.

The full go-live checklist and roadmap

A working URL is the beginning. Depending on the app, going live can mean all of the following. GoLive should work out which items apply, help you finish them, and show evidence for the result. A static site should not be asked to set up a database; a paid SaaS should not stop at a deployed homepage.

This is our product roadmap as a launch checklist. Checkmarks and strikethroughs mark specific live-tested milestones, not a finished category or a completed checklist for your app.

✅ Live-tested · 🚧 In progress / experimental (code exists; complete journey pending) · 🗺️ Planned

Ship the app

Make it a complete product

Launch with confidence, then keep it running

Some steps will always need a person: accepting terms, identity verification, purchases, billing choices and reviews that a provider requires. “Guided” should still mean a clear next action, the right page, the right permissions, a check afterward, and a return to the same workflow. When the app itself needs code changes, GoLive should give the coding agent a concrete task and recheck the result. It should not make you coordinate a dozen disconnected setup conversations.

Next up: complete and live-test the remaining launch journeys—the live run for account isolation (implemented and mock-covered on Supabase, not yet exercised against a real project), live-mode payment flows and the Cloudflare DNS adapter—then expand app architectures and ongoing operations.

These are directions, not release dates. A capability should graduate from experimental only after its account setup, connection, verification and recovery have been exercised. Contributions toward any part of this checklist are welcome, especially evidence of where a real launch gets stuck.

Production checklists informing this roadmap

The scope draws on Vercel's launch checklist, Supabase's production checklist, Stripe's go-live checklist, Google's OAuth production guidance and Next.js production guidance. These inform the goals above; they are not GoLive features or blanket requirements for every app.

Verification you can inspect

The report records pass, fail, warning and skipped results, along with remaining human steps. Checks include account access, environment-variable names, provider-confirmed deployment URLs, public JavaScript secret patterns, database access, supported auth/webhook/DNS settings, and (where the host can answer it) the deployment the provider says production serves.

A ready deployment is not proof that the app works. An environment-variable name can exist with a wrong value. A verified email domain does not prove inbox delivery. Signed payment events, signup and the app's business flows need functional tests. Skipped is not passed.

Your app gets golive.yaml, .golive/state.json, .golive/report.json and GOLIVE_REPORT.md. State preserves resource IDs and step evidence for recovery; it is not a credential store. golive teardown removes what golive created after its own approval and --confirm-destroy; there is no cross-provider rollback, restore or general reconciliation command for those resources — release:rollback (opt-in) only re-points production at an earlier deployment golive itself recorded, and touches no data, DNS, payment or email resource.

golive handoff --write adds the ownership document: GOLIVE_HANDOVER.md at the repo root and its JSON source in .golive/handover.json. It names the accounts and login route, every resource golive created and the proof it is golive's, what is still manual, what recurs, how removal works, and which commands re-check each subject. Each row says whether it was verified in that run, recorded earlier, not verifiable by golive or unknown; golive read no billing data, so no cost figure is stated. The files contain no secret values, but secret-free metadata can still identify private resources — review them before sharing. --write never overwrites a file golive did not generate unless --force is passed.

golive status asks the follow-up question: has anything changed behind golive's back since it recorded what it did? It compares recorded baselines — the DNS records golive wrote, the environment variable names it delivered, the registered webhook endpoint, the domain attachment, the database project and its connection selectors, the sending domain, the payment account behind the app's keys, the host project — with reads taken now, and labels both sides: expected (recorded by golive <time>) against observed (read now). Each item says who can act: re-run a check, re-plan and apply an approved change, or a decision only a human can make. It is read-only: no report file, no provider write, no state change, and it exits with 2 when something needs acting on. A provider it cannot read is reported as unverifiable — never as clean, and never as a failure — and it never re-baselines anything by itself. Drift is deliberately not a gate: plan, apply and verify never consult it. status is implemented, and it ran read-only during the Supabase auth validation (a failed step surfaced as actionable, then an empty list once it completed), but a live validation of the remaining drift subjects is still pending.

Credentials and control

Contribute

🤝 We're early, and we'd love your help shaping GoLive. Bug reports, feature ideas, docs fixes and pull requests are all welcome. You don't need to build an adapter to contribute: an unclear login instruction or a real launch that got stuck is useful feedback too.

Open an issue to report a problem or discuss an idea, or send a focused PR. For a larger provider or workflow addition, consider starting an issue so we can agree on the scope together. Never include secrets or raw authentication responses in a report.

See CONTRIBUTING.md for local setup, tests and your first contribution. The architecture, provider scope and validation record explain what exists and where help is needed.

MIT licensed. Bundled third-party notices are included in THIRD_PARTY_NOTICES.md.

golive-skill (mikehasa/golive-skill)

Searching Database…

What is this?GoLive is an open-source Agent Skill plus a zero-dependency Node CLI that takes an agent-built app live by detecting what it needs, planning the exact changes, asking for your approval, applying them with your own accounts, and verifying what actually works - covering hosting, databases, domains, email and payments.
Is this a standalone app or something my coding agent runs?It is an Agent Skill that your coding agent (Codex or Claude Code) loads and runs through chat prompts; it also ships a terminal CLI you can call directly for individual operations like detect, plan, apply and verify.
How do I install and use it?Install it globally or per-project via the skills installer, or offline via npm as golive@alpha, then reload your agent and type '/golive' in Claude Code or '$golive' in Codex to start a session.
What do I need before using it?You need Node.js 20+, npm/npx, Git and a coding agent that can load skills and run commands; installation is specifically verified for Codex and Claude Code, other clients are unverified.
How solid is this right now?It is early alpha (0.1.0-alpha.3): only six provider journeys have disposable live test coverage (Vercel/Netlify hosting, Supabase/Neon databases, Porkbun/GoDaddy DNS, Resend email, Stripe test payments, Supabase auth), cross-provider pairings are mock-covered rather than live-proven, and a brand-new user's first-account setup hasn't been validated.
Does it work the same on macOS, Windows and Linux?The CLI runs anywhere Node.js 20+ runs, but macOS gets a native hidden-input dialog for entering secrets while other platforms fall back to your own text editor for that step.
Where do my credentials and account data go?Nothing goes to a GoLive account or backend - there is no telemetry; API keys are saved straight to a local credentials file and never appear in chat or command output.
Can I undo everything GoLive sets up?Yes - golive teardown plans the removal and requires an explicit --confirm-destroy approval before deleting anything; it has been live-tested removing a Netlify project, DNS records, Resend keys and a Stripe test endpoint.
What if my app uses a provider that is not Vercel, Netlify, Supabase or Neon?GoLive falls back to a general guided flow: it checks the provider's official CLI, MCP integration or API, then walks you through its dashboard if needed, still showing destination and cost before approval, but with best-effort guidance and no guaranteed verification coverage.
Can GoLive set up user login/auth for my app?There are experimental adapters for Supabase Auth configuration, signup, password recovery and account isolation; a live run successfully changed the password policy and walked through signup, confirmation and recovery, though email confirmation is applied via the admin API rather than a real inbox click.
Does GoLive actually deploy my app or just plan the steps?After you approve a plan, GoLive applies the changes with your own logins (creating projects, wiring environment variables, deploying) and then runs a verification pass to report what is confirmed working and what is still unverified.
Creator
mikehasa
Size
3.3 MB
Stars
1.3K
Age
25d
Commits · 90 Days