ov-images/skills/openwebui/SKILL.md
Open WebUI image with auto-configured LLM providers, MCP servers, and Jupyter on port 8080. MUST be invoked before building, deploying, configuring, or troubleshooting the openwebui image.
npx skillsauth add overthinkos/overthink-plugins openwebuiInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Open WebUI with auto-configured LLM providers (Ollama, OpenRouter), MCP server discovery, and Jupyter code execution. No manual setup needed — secrets auto-managed via ov secrets.
openwebui:
base: fedora
layers:
- agent-forwarding
- openwebui
- dbus
- ov
ports:
- "8080:8080"
| Layer | Purpose |
|-------|---------|
| agent-forwarding | SSH + GPG agent forwarding into container |
| openwebui | Open WebUI with auto-config entrypoint |
| dbus | D-Bus session bus |
| ov | Overthink CLI for in-container management |
ov image build openwebui
ov config openwebui -e OPENROUTER_API_KEY=sk-or-xxx
ov start openwebui
# Open http://localhost:8080
ov secrets gpg setup
ov secrets gpg set OPENROUTER_API_KEY sk-or-xxx
ov image build openwebui
ov config openwebui --env-file .secrets
ov start openwebui
ov config ollama
ov config openwebui --env-file .secrets --update-all
ov start ollama openwebui
ov config ollama
ov config jupyter --update-all
ov config selkies-desktop --update-all
ov config openwebui --env-file .secrets --update-all
ov start ollama jupyter selkies-desktop openwebui
# Tier 1: Auto-generated infrastructure secrets
ov secrets list ov/openwebui
ov secrets get ov/openwebui webui-secret-key
ov secrets set ov/openwebui admin-password --generate
# Tier 2: User API keys (GPG-encrypted)
ov secrets gpg set OPENROUTER_API_KEY sk-or-new-key
ov secrets gpg show
ov config openwebui --env-file .secrets --update-all
Deploy alongside provider containers for full functionality:
# 1. Deploy ollama (provides OLLAMA_HOST)
ov config ollama
ov start ollama
# 2. Deploy jupyter (provides jupyter MCP server)
ov config jupyter --update-all
ov start jupyter
# 3. Deploy openwebui (consumes both)
ov config openwebui --env-file .secrets --update-all
ov start openwebui
Open WebUI receives:
OLLAMA_BASE_URL=http://ov-ollama:11434 — local LLM inferenceTOOL_SERVER_CONNECTIONS=[...] — MCP servers (jupyter + chrome-devtools)CODE_EXECUTION_ENGINE=jupyter — code execution via Jupyter/ov-layers:openwebui — Auto-config entrypoint, secrets, env_accepts, TOOL_SERVER_CONNECTIONS format/ov-layers:agent-forwarding — SSH/GPG forwarding/ov-images:jupyter — deploy alongside for MCP notebooks and code execution/ov-images:ollama — deploy alongside for local LLM inference/ov-images:hermes — alternative AI frontend (CLI agent vs web UI)/ov-images:selkies-desktop — deploy alongside for shared Chrome browserov status openwebui
ov service status openwebui # openwebui: RUNNING
curl -s -o /dev/null -w '%{http_code}' http://localhost:8080 # 200
ov shell openwebui -c "open-webui version"
# Verify secrets
podman secret ls | grep openwebui # webui-secret-key, admin-password
# Verify MCP (inside container process)
podman exec ov-openwebui cat /proc/3/environ | tr '\0' '\n' | grep TOOL_SERVER_CONNECTIONS
Latest ov test openwebui run: 24 passed, 0 failed, 0 skipped.
Covers: openwebui entrypoint script presence, pixi python + ov binary,
and deploy-scope: service up, port reachable on 127.0.0.1:${HOST_PORT:8080},
HTTP 200 on / (30-second timeout for first-request startup), admin
email env var injected. See /ov:test for the framework.
/ov-layers:openwebui — layer authoring/ov:test — declarative testing framework/ov:secrets — WEBUI_ADMIN_PASSWORD + provider API keys/ov:config — -e WEBUI_ADMIN_EMAIL=... deploy-time env setupMUST be invoked before building, deploying, configuring, or troubleshooting the openwebui image.
/ov:image — image family umbrella (image: entries in overthink.yml, build/validate/inspect/list)/ov:build — build.yml vocabulary (distros, builders, init-systems)tools
Use when authoring or modifying a charly PLUGIN — a candy with a `plugin:` block that contributes Providers (verbs/kinds/deploy-targets/steps/builders/commands), its own CUE schema, builtin (compiled-in) or external (out-of-tree git repo). Covers the unified Provider model, the per-plugin CUE-schema contract (single source → Go params for dev + schema-over-Describe RPC for runtime), the SDK, and the loader.
tools
The CUE data-validation / configuration CLI (cue), pinned to v0.16.1. Use when working with the cue candy, installing the cue binary into a box or onto a target:local dev host, or running the offline schema-vendoring pipeline that feeds charly's egress validation.
tools
CUE EGRESS validation — validating (and, where it adds value, generating) the config files charly WRITES to a system BEFORE the bytes hit disk. MUST be invoked before working on charly/egress.go, the vendored schemas under candy/plugin-egress/egress-schemas/vendor/, the ValidateEgress / registerVendoredEgressKind path, the offline `task cue:vendor` pipeline, or adding an egress schema for any written artifact (cloud-init, k8s manifests, traefik routes, runtime config, install ledger, systemd/quadlet units, ssh_config, libvirt XML).
tools
Kubernetes cluster-probe declarative check verb — the `kube:` check verb (nodes, pods, ingress, storage class, addon health, apply/delete, and arbitrary resource GETs) served out-of-process by the candy/plugin-kube plugin (vendored client-go; no external kubectl required).