Self-hosted coding stack for open-weight models. One kernel. Your GPUs.
Chat, IDE, and CLI on LiteLLM. Default harness is Spockify. Wichy-class tool loops and OpenHands-class SWE sandboxes are optional backends — not the product.
Quality is model × harness × slice. More GPUs add chat replicas and eval sessions. They do not raise pass@1.
Three pools. SWE and canary never share the chat ingress.
| Pool | Runs | Hard rule |
|---|---|---|
| Chat | Chat UI, router, small and mid chat tags | No SWE, no multi-day benches |
| Coding sessions | One runHarness process per session |
One worker slot per session |
| Eval | Canary, Lite slices, plugin tests | Never the chat ingress |
Workstation (Compose, or the IDE plus your API) is the first way to run this. It is not the product name.
Live: apex splash at /, chat login at /chat, IDE at /ide. Source: site/ (published via k8s/ide-site/www/). Details: docs/SITE.md.
Local compose, desktop IDE, and CLI. Workstation first.
Ubuntu / Fedora:
cp .env.example .env # change secrets
make up # GHCR pull, no local Vite; or ./docker/run.shUses Podman if compose works, else Docker (only if the daemon is up). Fedora: sudo dnf install -y podman podman-compose and systemctl --user enable --now podman.socket. ./docker/run.sh uses podman-compose (not hyphenated docker-compose) and chowns Postgres data for rootless UID 70. Force Docker with SPOCKIFY_CONTAINER_ENGINE=docker.
Open http://localhost:3080 — first account is admin.
GPU: make gpu or ./docker/run.sh --gpu (Docker: gpus=all; Fedora Podman: /dev/nvidia* unless CDI verifies). run.sh verifies nvidia-smi inside ollama after up.
Authorized security demo (scoped pentest/AD/hardening with permission — not unfiltered/jailbreak): make demo-gpu or ./docker/run.sh --gpu --demo security.
make clean stops compose leftovers (frees ports 3080/4000/4100); make clean CLEAN_DATA=1 or ./docker/clean.sh --data also wipes local data. Does not touch k8s/PVCs.
Details: docker/README.md (Use with spockify-auto vs Use as UI default under Adding models). Fedora: do not --build Open WebUI; make up pulls GHCR.
Desktop IDE in a container. Fedora: prefer this or Distrobox, not a host AppImage.
./docker/ide/run.sh --build # first time: downloads the published AppImage
make ide # ./docker/ide/run.sh--build fetches the AppImage from https://spockify.eu/downloads/ unless you drop one in docker/ide/payload/. Needs a graphical session.
Details: docker/ide/README.md. Linux packaging: make release.
make build-cli
spockify login # browser approve → virtual keySee packages/spockify-cli/README.md.
Compose above is the workstation path. Do not point SWE or canary at this chat stack.
Production profile (single-tenant compose, not managed hosting): set
SPOCKIFY_PRODUCTION=1, loopback binds, ENABLE_SIGNUP=false,
SPOCKIFY_ISOLATED_RUNNER=bwrap (or podman), and digest-pin images with
./docker/record-image-digests.sh. Rehearse restore with
./docker/restore-drill.sh --synthetic (throwaway Postgres, not the live
compose volume). Details: docs/RUNBOOKS.md.
Gate tracker: docs/PRODUCTION_READINESS.md.
Chat UI, router (spockify-auto), LiteLLM, Ollama, SearXNG, Postgres.
cp .env.example .env # change secrets
./docker/run.sh # or ./docker-run.sh — Podman if compose works, else Docker if the API is upOpen http://localhost:3080 and create the first account (admin).
- Guide (rebuild one service, SELinux, GPU, failures): docker/README.md
- Downloadable kit: GitHub Release
docker-v*or https://spockify.eu/downloads/spockify-docker.zip - Pack locally:
make docker-kitthen./scripts/publish-docker-kit.sh(downloads host)
NVIDIA GPU: make gpu or ./docker/run.sh --gpu (Podman also gets CDI). Authorized security demo: make demo-gpu (not unfiltered). See docker/README.md.
Vendored at services/openwebui/upstream/ — v0.9.6 + Spockify edits.
- Build/deploy: services/openwebui/README.md
- Upgrade / touch-list (stock vs Spockify-only): docs/SPOCKIFY_OPENWEBUI_TOUCHLIST.md
- Desktop IDE (plan): docs/SPOCKIFY_DESKTOP_IDE_PLAN.md — Cursor-like code-oss app; Ghost Monaco stays web-only for now
- Cursor clone build plan: docs/SPOCKIFY_CURSOR_CLONE_BUILD_PLAN.md — parallel agents closing MVP → clone v1
New features: prefer routers/spockify.py, /spockify/* routes, Spockify*.svelte, and the router service — not deep stock file edits when avoidable. Do not refactor existing stock patches into modules unless explicitly asked.
Catalog under apps/spockify-ide/ (WS-A shell + Remote SSH). AI extension: extensions/spockify/ (WS-B/C/D). Shared packages: packages/spockify-*.
Local run: make ide — docker/ide/README.md.
Claude Code–style terminal agent: packages/spockify-cli/ — device link+code login, tool loop (read/edit/grep/shell).
make build-cli
spockify login # browser approve → virtual key
spockify "fix the bug"See packages/spockify-cli/README.md. Device routes live in OpenWebUI (/api/v1/spockify/cli/...); redeploy OWUI to enable login.
MVP (~9k+ LOC) on code-oss — Cursor-like surfaces thickening overnight; see phase scorecard.
- App README (remote-first AI, P0 SSH, OSS models): apps/spockify-ide/README.md
- Cursor clone build plan (parallel agents): docs/SPOCKIFY_CURSOR_CLONE_BUILD_PLAN.md
- Post–clone-v1 roadmap: docs/SPOCKIFY_CURSOR_CLONE_ROADMAP.md
- Phase status (honest scorecard): docs/SPOCKIFY_IDE_PHASE_STATUS.md — overnight continued (ext 0.5.5): Apply/checkpoints UX + Agents/Ctrl+K polish retained. Still not full Cursor/Claude Code parity.
- Phase plans: 1 Runtime · 2 UI · 3 Indexing · 4 Composer · 5 Terminal · 6 Cloud · 7 Packaging
- MVP checklist snapshot: docs/SPOCKIFY_CURSOR_CLONE_CHECKLIST.md
- AppImage: apps/spockify-ide/docs/APPIMAGE.md
- Fetch code-oss:
./scripts/fetch-code-oss.sh - Remote SSH spike: apps/spockify-ide/docs/REMOTE_SSH.md