{"slug": "static-hosting-a-coding-agent-can-drive-end-to-end", "title": "Static hosting a coding agent can drive end to end", "summary": "Novence launched a static-site hosting service that lets coding agents deploy a site end to end via a single command, `npx novence deploy ./dist`, which uploads files, publishes, and prints the live URL at `https://{suffix}.novence.ai`. The service offers TypeScript and Python SDKs, an MCP endpoint at https://api.novence.ai/mcp for clients including Claude and Cursor, plus REST and GraphQL APIs, with a demo showing an agent building and deploying a site in 75 seconds. Agents bootstrap an API key via email without waiting for OTP verification, and a Pro plan upgrade is required after the first live URL or a second project returns HTTP 402.", "body_md": "## [CLI](/cli)\n\nnpx novence deploy ./dist — upload, check, publish, print the live URL. No install.\n\nnovence.ai · static sites for agents\n\n`npx novence deploy ./dist` — or the TypeScript and Python SDKs, MCP, REST, or GraphQL. Live at `https://{suffix}.novence.ai`.\n\n```\n$ # One command. Prints the live URL. No email until you claim.\nnpx novence deploy ./dist\n\n#   Created project site (abcd1234)\n#   Uploaded 12 files\n#   https://abcd1234.novence.ai/\n\n# Claim afterwards:\n#   novence claim --email you@example.com\n\n# The URL is the last line on stdout, so it pipes:\nURL=$(npx novence deploy ./dist)\nbash\n$ curl -s -X POST https://api.novence.ai/v1/bootstrap \\\n  -H 'content-type: application/json' \\\n  -d '{\"email\":\"you@example.com\"}'\n# → { \"apiKey\":\"nv_live_…\", \"emailVerificationRequired\":true }\n# Save apiKey. Deploy on unverified trial — do not wait for OTP.\n# AFTER the live URL: ask for the 6-digit code, then:\n# curl -s -X POST https://api.novence.ai/v1/auth/verify-email \\\n#   -H 'content-type: application/json' \\\n#   -d '{\"email\":\"you@example.com\",\"code\":\"123456\"}'\n$ # 1) bootstrap  2) project  3) upload  4) deploy → live URL\n# 5) THEN verify email OTP for Free quotas\n# Live URL: https://{suffix}.novence.ai/\n\nexport KEY=nv_live_…\nexport API=https://api.novence.ai\n\ncurl -s -X POST $API/v1/projects \\\n  -H \"authorization: Bearer $KEY\" -H 'content-type: application/json' \\\n  -d '{\"name\":\"launch\"}'\n\n# uploads → deployments → poll until status=live\n# Or just: npx novence deploy ./dist\n$ # MCP (streamable HTTP) — no nv_ key first. Same session.\nhttps://api.novence.ai/mcp\n\n# bootstrap(email) → create_project → upload → deploy\n# Session adopts the key. Do not reconnect. Do not paste a key before bootstrap.\n# Trial may skip checks (checkRuns: 0) and still go live.\n# After live URL: verify_email. 2nd project / 402: checkout or mpp_upgrade (plan=pro).\n# Spec: https://novence.ai/openapi.yaml\n# Agent brief: https://novence.ai/llms-full.txt\njs\n$ import { Novence, bootstrapAccount, verifyEmail } from \"@novence/sdk\";\n\nconst { apiKey } = await bootstrapAccount(\"you@example.com\");\nconst client = new Novence({ apiKey }); // defaults to https://api.novence.ai\nconst { project, url } = await client.projects.create({ name: \"launch\" });\nawait client.files.uploadDir(project.id, \"./site\");\nawait client.deployments.create(project.id);\n// url → https://{suffix}.novence.ai/  (trial may skip checks — still live)\n\n// AFTER the live URL:\nawait verifyEmail(\"you@example.com\", process.env.VERIFY_CODE!);\npython\n$ pip install novence\n\nfrom novence import Novence, bootstrap_account, verify_email\n\nboot = bootstrap_account(\"you@example.com\")\nclient = Novence(api_key=boot[\"apiKey\"])\nproject = client.create_project(\"launch\")\npid = project[\"project\"][\"id\"]\nclient.upload_dir(pid, \"./dist\")\nclient.deploy(pid)\nprint(client.wait_for_deployment(pid)[\"liveUrl\"])\n\n# AFTER the live URL:\nverify_email(\"you@example.com\", \"123456\")\n$ # Recurring — MCP checkout(plan=pro) or REST:\ncurl -s -X POST https://api.novence.ai/v1/billing/checkout \\\n  -H \"authorization: Bearer $KEY\" -H 'content-type: application/json' \\\n  -d '{\"plan\":\"pro\"}'\n# → { \"url\": \"https://checkout.stripe.com/…\" }\n# After 2nd project or a 402 — never after the first live URL.\n# billing_portal is manage-only once already on Pro.\n\n# Agent subscription (MPP / SPT)\ncurl -i -X POST https://api.novence.ai/v1/billing/mpp \\\n  -H \"authorization: Bearer $KEY\" -H 'content-type: application/json' \\\n  -d '{\"plan\":\"pro\"}'\n```\n\nWatch\n\nAn agent builds a static site, bootstraps a key, deploys, and lands on `https://{suffix}.novence.ai`. 75 seconds, no cuts to a dashboard.\n\nAutomate your workflow · Start today\n\nnpm install @novence/sdk or pip install novence. Typed clients over the same plane.\n\nStreamable HTTP tools for Claude, Cursor, and any MCP client at /mcp.\n\nFor agents\n\n**Fastest: npx novence deploy. Or the SDKs. Raw REST below.**\n\nUse HTTPS — Canonical API `https://api.novence.ai`. Auth is Bearer `nv_live_…`. Lost key? Resend OTP then `POST /v1/auth/reissue-key`.\n\nPOST /v1/bootstrap returns an API key immediately. Do not wait for OTP — unverified trial still publishes.\n\nCreate a project, upload static website, deploy. Live URL is https://{suffix}.novence.ai/. Checks may be skipped on trial; still live.\n\nAsk for the 6-digit OTP and POST /v1/auth/verify-email to unlock Free quotas. Required before Checkout or full free quotas.\n\nCNAME www → fallback.novence.ai; apex URL-redirect to www. Checkout: POST /v1/billing/checkout. Agents: POST /v1/billing/mpp.\n\nAgent loop\n\ncreate_project\n\nBootstrap an account key, then open a project with a unique suffix.\n\n→ projectId + upload session\n\nCustom domains\n\nPoint **www** at Novence with a CNAME. Send bare-domain visitors to www with a registrar URL redirect. That is the recommended path for SSL and apex visitors.\n\n| Type | Host | Value | \n|---|---|---|\n| CNAME | www | fallback.novence.ai | \n| URL redirect | @ | https://www.example.com/ | \n\nWhat ships\n\nStreamable HTTP MCP for projects, uploads, deploys, domains, and quotas. Errors tell the agent what to fix.\n\n#1 MCP\nCheck workers run Lighthouse, axe, and link checks. Failed deploys stay off live until thresholds pass.\n\n#2 Checks\nStatic sites are served globally at https://{suffix}.novence.ai/ after checks pass.\n\n#3 Edge\nnpx novence, npm install @novence/sdk, or pip install novence. Same plane as REST, GraphQL, and MCP.\n\n#4 APIs\nOpt-in pageviews, 404s, referrers, and countries from the edge. No cookies, no script in your HTML. Read via dashboard, API or MCP.\n\n#5 Analytics\nProjects, storage, bandwidth, deploys, and form submissions are capped per plan. Overages meter on Pro and Scale.\n\n#6 Quotas\nHTML, CSS, and JS marketing sites. Embed Cal.com, Snipcart, or GA. Ship /data/*.json for menus and hours. No server-side apps.\n\n#7 Scope\nFree · Pro · Scale\n\nFree for one live site. Pro for twenty client pitches. Scale when you're running a studio. Paid plans include a large pool before anything extra hits the invoice — see [examples](/examples) and [for agencies](/for-agencies).\n\nSelected: **Pro** ($29 / mo)\n\nAfter verify: MCP `checkout` or REST `POST https://api.novence.ai/v1/billing/checkout` with Bearer key and `{ \"plan\": \"pro\" }`. Opens Stripe Checkout. Use after a 2nd project or a 402. `billing_portal` is manage-only once already on Pro.\n\nSame monthly subscription via Machine Payments Protocol: `POST https://api.novence.ai/v1/billing/mpp`. Returns HTTP 402, then settle with a Payment credential (e.g. link-cli). First month charged via SPT; renews until cancelled.", "url": "https://wpnews.pro/news/static-hosting-a-coding-agent-can-drive-end-to-end", "canonical_source": "https://novence.ai", "published_at": "2026-09-10 10:58:50+00:00", "updated_at": "2026-09-10 11:30:28.897099+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-products"], "entities": ["Novence", "npx novence deploy", "@novence/sdk", "Claude", "Cursor", "Stripe", "api.novence.ai"], "alternates": {"html": "https://wpnews.pro/news/static-hosting-a-coding-agent-can-drive-end-to-end", "markdown": "https://wpnews.pro/news/static-hosting-a-coding-agent-can-drive-end-to-end.md", "text": "https://wpnews.pro/news/static-hosting-a-coding-agent-can-drive-end-to-end.txt", "jsonld": "https://wpnews.pro/news/static-hosting-a-coding-agent-can-drive-end-to-end.jsonld"}}