Kubernetes Is All You Need
OOPS is a Kubernetes PaaS where humans and AI Agents are equal first-class operators. Deploy applications, manage multiple clusters, run sandboxed commands, and configure domains — all from a clean web UI, or driven programmatically through the bundled Claude Code Skill.
KubeSphere, Rainbond, and ArgoCD each solve a real slice of the Kubernetes problem — and each one assumes a human is the only operator. OOPS keeps the human experience intact and lets Agents drive the same platform through the same surface:
| Project | Built for | How OOPS differs |
|---|---|---|
| KubeSphere | Platform teams building enterprise IDPs through plug-in ecosystems | Small, focused surface — same actions usable from UI or API, no plug-in framework to navigate |
| Rainbond | Developers who don't want to learn Kubernetes | Same simplicity for developers, plus a programmatic surface so Agents can drive the platform too |
| ArgoCD | GitOps pipelines reconciling Git → cluster | Humans or Agents can deploy directly from a code archive — Git is supported but not required |
Push code or upload a ZIP, and OOPS builds the image and rolls it out to your Kubernetes cluster, with build logs streaming in real time.
Connect any number of clusters and manage them side by side from a single console — switch deployment targets without leaving the UI.
Live logs, in-browser terminal, and a file browser for any running pod. Cluster nodes and pod status at a glance.
Agent-grade sandbox capability built in (similar to OpenSandbox) — give your Agent an isolated workspace to run commands, install tools, or debug. Results stream back live, and everything is torn down when it's done.
Manage multiple domains from a single console. Configure automatic HTTPS via certificate resolvers or upload your own TLS certificates; wildcard domains are supported.
| Component | Required | Purpose |
|---|---|---|
| Kubernetes cluster (1.22+) | Yes | Runtime for applications, pipelines, and IDEs |
| MySQL 8.x | Yes | Persistence for OOPS metadata |
| Container image registry | Yes | Pipeline image push / pull |
| Traefik v3 | No | Ingress and HTTPS routing |
| S3-compatible object storage | No | ZIP source uploads |
cp docker/application.yml.example docker/application.yml
# edit docker/application.yml — change secrets, datasource, and any optional featuresPulls ghcr.io/wellch4n/oops-backend:latest and ghcr.io/wellch4n/oops-frontend:latest from GitHub Container Registry.
docker compose -f docker/docker-compose.yml up -dThen open http://localhost:8080 and sign in with admin / admin123.
Build images locally instead of pulling from GHCR.
Bundled MySQL:
docker compose -f docker/docker-compose.build.yml up -d --buildExisting MySQL — edit the spring.datasource section in docker/application.yml first:
docker compose -f docker/docker-compose.local.yml up -d --build# Backend
cp config/application.yml.example config/application.yml
./mvnw spring-boot:run
# Frontend
cd web && pnpm install && pnpm devDefault admin credentials: admin / admin123 (override oops.admin.password in application.yml).
flowchart TD
Start([User triggers deploy]) --> Src{Source}
Src -->|GIT| Clone["① Clone<br/>git clone"]
Src -->|ZIP| Upload["Upload ZIP<br/>(presigned S3 URL)"]
Upload --> CloneZ["① Clone<br/>curl from S3"]
Clone --> Build["② Build<br/>(optional)"]
CloneZ --> Build
Build --> Push["③ Push<br/>Buildah build & push"]
Push --> Scan{"Job result<br/>(polled 5s)"}
Scan -->|Failed| Err([ERROR ❌])
Scan -->|Succeeded| Mode{Deploy mode}
Mode -->|MANUAL| Wait([BUILD_SUCCEEDED ⏸️<br/>awaits trigger])
Mode -->|IMMEDIATE| Deploy["Apply K8s<br/>StatefulSet · Service · IngressRoute"]
Wait --> Deploy
Deploy --> Ok([SUCCEEDED ✅])
style Start fill:#4CAF50,color:#fff
style Ok fill:#4CAF50,color:#fff
style Err fill:#f44336,color:#fff
style Wait fill:#FF9800,color:#fff
stateDiagram-v2
direction TB
[*] --> INITIALIZED: Pipeline created
INITIALIZED --> RUNNING: K8s Job submitted
RUNNING --> BUILD_SUCCEEDED: Job succeeded<br/>(MANUAL mode)
RUNNING --> DEPLOYING: Job succeeded<br/>(IMMEDIATE mode)
RUNNING --> ERROR: Job failed
RUNNING --> STOPPED: User cancels
BUILD_SUCCEEDED --> DEPLOYING: User triggers deploy
DEPLOYING --> SUCCEEDED: Deploy completed
DEPLOYING --> ERROR: Deploy failed
SUCCEEDED --> [*]
ERROR --> [*]
STOPPED --> [*]
This project is licensed under the Apache License 2.0. See the LICENSE file for details.






