Open source · Kubernetes native · Agent ready

Deploy to Kubernetes.
Prove it works.

Site is the deployment control plane built for AI agents and humans who refuse to call a green command “done.” It ships the workload, opens the route, makes a real HTTP request, and records the proof.

01
command to a live site
1,030
contract tests
4
first-class interfaces
site / applications● live
RUNTIME OPERATIONS

Applications

ACTIVE1FAILED0VERIFIED1
hello-sitelocal / local
● RUNNING ✓ HTTP 200 Open ↗
body SHA-2565e7f06f9…12178242measured
AGENT REQUESTsites deploy-static ./appaccepted in 42ms
Traffic verifiedresponse body matches
Evidence over optimism

Shipping is not success.
A measurement is.

Most deployment tools stop when an API accepts an object. Site follows the result all the way to traffic and persists bounded, inspectable evidence on the resource itself.

  • 01Real HTTP probe from the control plane
  • 02Status code and response digest recorded
  • 03Redirects rejected; only 2xx counts
SiteDeployment.statusverified just now
{
  "phase": "Running",
  "ready": true,
  "url": "http://127.0.0.1:18090",
  "verification": {
    "ok": true,
    "httpStatus": 200,
    "bodySha256": "5e7f06f9…"
  }
}
✓ desired state converged✓ response measured
One serious control plane

Small surface. Hard boundaries.
Ridiculous leverage.

01

Speak agent

MCP, a typed CLI, HTTP API, and an operator console all converge on the same narrow contract. No special backdoor for automation.

MCPCLIHTTPCONSOLE
02

Tenancy you cannot fake

Merchant and tenant identity come from credentials—not caller-controlled headers. Namespaces, quotas, and routes are derived from both.

{ credential } namespace
03

Deploy five ways

Existing images, flat static files, immutable versioned sites, source builds, and multi-component bundles.

04

Sleep without disappearing

With Gateway API and KEDA, the activator holds the first request, wakes a zero-replica site, then forwards it.

0 → 1
05

Operate what you shipped

Applications, verification, tenants, quotas, builds, images, health, and real Prometheus samples—without giving the browser cluster credentials.

DATABASE HEALTHYOPERATOR HEALTHYKUBERNETES HEALTHY
Architecture

The shortest honest path
from intent to evidence.

INTENTAgent or humanMCP · CLI · HTTP · Console
authenticated
CONTROLsites-apiadmission · quotas · metadata
desired state
CONVERGENCEsites-operatorbuild · workload · route
real request
EVIDENCEHTTP 200 ✓status + body digest

Site owns deployment convergence. Your cluster, ingress policy, domains, billing, and organizational RBAC stay yours.

Kubeadm-first quickstart

One command.
Three real nodes.
A live URL.

The repository-owned trial creates one tainted control-plane and two worker Lima VMs, bootstraps Kubernetes with kubeadm, installs Cilium and Site, deploys the included app on a worker, and refuses to pass without measured HTTP proof. Resize to 1–4 workers in place; scale-down drains before removal and every change rechecks the live URL.

Git · Lima · running Docker · kubectl · Helm · uv · Python 3.12+
8 CPU · 10 GiB RAM · 70 GiB sparse disk · outbound HTTPS
site — zsh
$ git clone https://github.com/hullwork/site.git
$ cd site
$ make quickstart

Site kubeadm quickstart passed
  topology: 1 control-plane + 2 workers (3 Ready)
  example node: site-quickstart-w2
  phase: Running
  HTTP verification: 200
  public URL: http://127.0.0.1:18090
  public URL body: matches verification digest

$ make quickstart-access  # keep terminal 1 open
$ make quickstart-token   # run in terminal 2
$ SITES_QUICKSTART_WORKERS=3 make quickstart-scale
kubeadm cluster readyproof, not promises
MIT licensed

Your infrastructure.
Your proof.

Read the architecture, run the full stack locally, and help shape an agent-native deployment primitive that stays understandable.