deploy
Skill131 starsChanged 6 months agoMITView on GitHub
Deploy, update manifests, and troubleshoot the ambient-ui component. Use when creating or modifying deployment manifests, adding ambient-ui to a new overlay, building images, or debugging cluster issues.
- Installs packages
155 other projects use a version of this.
Adopted by
Most recently taken up by
- pedrohcgs/claude-code-my-workflowtheir own version, first seen Nov 8, 2026
- KingKongRobotics/jumpertheir own version, first seen Nov 8, 2026
- stakeme-team/arc-agent-kittheir own version, first seen Nov 8, 2026
- dockhold/mcptheir own version, first seen Nov 8, 2026
- KhaiTrang1995/nexus-kbtheir own version, first seen Nov 8, 2026
- ribato22/vibechecktheir own version, first seen Nov 8, 2026
Used with
Projects with it also use pm-discovery, qa-phase and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
ww-w-aiSkillpm-discovery
PM Agent Team - Automated product discovery, strategy, and PRD generation. Runs PM analysis workflow to produce comprehensive PRD before PDCA Plan phase.
Also in 3 projects that use this
ww-w-aiSkillqa-phase
Run QA tests at various levels (L1-L5) for features under PDCA management. Integrates with MCP tools to execute structured test plans.
Also in 3 projects that use this
- +10 more from ww-w-ai
Other versions155 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 155
- ok-oldking/ok-wuthering-waves★ 8.6ksame name
- memovai/mimiclaw★ 5.8ksame name
- KingKongRobotics/jumper★ 3.1ksame name
- jhd3197/ServerKit★ 1.8ksame name
- pedrohcgs/claude-code-my-workflow★ 1.7ksame name
- mattmireles/gemma-tuner-multimodal★ 1.5ksame name
- microsoft/power-platform-skills★ 1.1ksame name
- jazzyalex/agent-sessions★ 941same name
- awslabs/agent-plugins★ 918same name
- patrickjaja/claude-desktop-extra★ 734same name
145 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository19 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- alignSkill
- amber-reviewSkill
- workflowSkill
- ambient-pr-testSkill
- ambientSkill
- dev-clusterSkill
- devflowSkill
- discoverSkill
- cypress-demoSkill
- frontend-developmentSkill
- grpc-devSkill
- unleash-flagSkill
- memorySkill
- pr-fixerSkill
- scaffoldSkill
- ambient-api-serverSkill
- specSkill
The file
We split this skill into the rules it gives an agent
5 rules. 0 are common, 4 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 139 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 35
No sidecar proxy. The BFF IS the confidential OIDC client.
- Very specific: line 176
Add image entries for quay.io/ambient_code/vteam_ambient_ui
- Distinctive: line 178
If auth: create OIDC client and secrets per Prerequisites
- Distinctive: line 179
If OpenShift with HTTPS to ambient-api-server: trust the service-ca bundle.
- Distinctive: line 183
Add a Route if external access is needed
“Common” is measured: kept by at least 6 in 10 of the 139 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Ambient UI Deployment
Instructions for deploying the ambient-ui component across environments.
User Input
$ARGUMENTSArchitecture
The ambient-ui is a Next.js BFF (Backend-for-Frontend) that handles OIDC authentication as a confidential client, manages server-side sessions, and proxies API requests to the ambient-api-server with JWT relay.
Route (port 443, TLS edge termination)
→ Service (port 3000)
→ Next.js BFF (port 3000)
├── OIDC auth (Authorization Code Flow + PKCE against Red Hat SSO)
├── Server-side session (iron-session, httpOnly cookie)
├── JWT relay to ambient-api-server (Authorization: Bearer <jwt>)
└── ambient-api-server (port 8000, HTTPS, validates JWT against same issuer)No sidecar proxy. The BFF IS the confidential OIDC client. The browser never receives a raw JWT — only an httpOnly session cookie.
Manifest File Map
| File | Purpose |
components/manifests/base/core/ambient-ui-deployment.yaml | Base Deployment, ServiceAccount, Service |
components/manifests/overlays/kind/kustomization.yaml | Kind overlay (Quay images, no auth) |
components/manifests/overlays/kind-local/kustomization.yaml | Kind-local overlay (localhost images) |
components/ambient-ui/Dockerfile | Multi-stage Docker build |
.github/workflows/components-build-deploy.yml | CI build matrix entry |
components/manifests/overlays/hcmais/kustomization.yaml | HCMAIS overlay (ambient-api namespace, Keycloak SSO) |
Production overlay files exist (ambient-ui-oauth-patch.yaml, etc.) but are
disabled — they used origin-oauth-proxy which can't produce JWTs. See Auth section.
Docker Build
Build context is ./components (not ./components/ambient-ui), because
the Dockerfile references ambient-sdk/ts-sdk as a sibling.
Critical details
- SDK dist/ is gitignored. The Dockerfile must build it:
COPY ambient-sdk/ts-sdk /ambient-sdk/ts-sdk RUN cd /ambient-sdk/ts-sdk && npm install --ignore-scripts && npm run build - Standalone output path.
outputFileTracingRoot: ../..in next.config.js resolves to/in Docker (WORKDIR/app), so standalone nests underapp/:
Locally it nests undercp -r .next/standalone/app/. /app-output/components/ambient-ui/. Always verify with:find .next/standalone -name server.js -not -path '*/node_modules/*' - Webpack, not Turbopack. The build script is
next build --webpack. Turbopack cannot resolvefile:linked dependencies. - OpenShift permissions. The builder stage must run:
The runner image (Red Hat Hardened Image) is distroless — no shell at runtime.chmod -R g=u /app-output && chgrp -R 0 /app-output
Local build & test
podman build -t ambient-ui-test -f components/ambient-ui/Dockerfile components/
podman run --rm ambient-ui-test node -e 'require("fs").statSync("/app/server.js"); console.log("server.js found")'
podman run -d --name ambient-ui-test -e HOSTNAME=0.0.0.0 ambient-ui-test
podman exec ambient-ui-test node -e "require('http').get('http://localhost:3000/', r => { console.log(r.statusCode); r.on('data',()=>{}); r.on('end',()=>process.exit(0)); })"
podman stop ambient-ui-test && podman rm ambient-ui-testEnvironment Configuration
| Env Var | kind / local | Production |
API_SERVER_URL | http://ambient-api-server:8000 | https://ambient-api-server:8000 |
NODE_EXTRA_CA_CERTS | (unset) | /etc/ssl/service-ca/service-ca.crt (from service-ca ConfigMap) |
SSO_ISSUER_URL | Keycloak realm URL (auto-generated by make dev COMPONENT=ambient-ui) | https://sso.redhat.com/auth/realms/redhat-external |
SSO_CLIENT_ID | ambient-frontend (Kind Keycloak) | OIDC client ID |
SSO_CLIENT_SECRET | dev-secret-do-not-use-in-prod (Kind Keycloak) | OIDC client secret (from Secret) |
SESSION_SECRET | auto-generated from cluster name | Random 32+ byte string (from Secret) |
NEXT_PUBLIC_PREVIEW_ALLOWED_HOSTS | (unset, defaults localhost:*) | target domains |
Authentication
Native SSO (target architecture)
The BFF handles OIDC directly using Authorization Code Flow with PKCE:
- User visits ambient-ui → BFF redirects to SSO issuer authorize endpoint
- User authenticates at Red Hat SSO → redirected back with auth code
- BFF exchanges code for tokens (access token = JWT, refresh token, ID token)
- BFF stores tokens in an iron-session encrypted httpOnly cookie
- On API requests, BFF extracts JWT from session and forwards as
Authorization: Bearer - ambient-api-server validates JWT against
sso.redhat.comJWKS endpoint
This is already implemented in:
src/lib/oidc.ts— OIDC discovery, auth URL, code exchange, token refreshsrc/lib/session.ts— iron-session storage, token expiry, auto-refreshsrc/lib/auth.ts—resolveAccessToken()extracts JWT from sessionsrc/app/api/auth/sso/login/route.ts— initiates OIDC flowsrc/app/api/auth/sso/callback/route.ts— handles callback, stores tokenssrc/app/api/auth/sso/logout/route.ts— destroys session
What's needed to enable native SSO
An OIDC confidential client on sso.redhat.com/auth/realms/redhat-external:
- Client protocol:
openid-connect, access type:confidential - Valid redirect URI:
https://<ambient-ui-route>/api/auth/sso/callback - Scopes:
openid,email,profile
Then set the env vars: SSO_ISSUER_URL, SSO_CLIENT_ID, SSO_CLIENT_SECRET,
SESSION_SECRET, and AUTH_MODE=native-sso.
Why origin-oauth-proxy doesn't work
The OpenShift origin-oauth-proxy issues opaque sha256~ tokens, not JWTs.
The ambient-api-server requires Red Hat SSO JWTs (--enable-jwt=true).
Confirmed via source code audit: origin-oauth-proxy has zero JWT support.
The upstream OIDC id_token is decoded for claims and permanently discarded
by the OpenShift OAuth server. No configuration can change this.
Production overlay files for oauth-proxy exist as reference but are disabled.
Prerequisites (Manual Steps)
1. Quay.io repository
quay.io/ambient_code/vteam_ambient_ui with push access for vteamrobbit.
2. OIDC client (REQUIRED for production)
Create on sso.redhat.com/auth/realms/redhat-external:
- Client protocol:
openid-connect, access type:confidential - Redirect URI:
https://<route>/api/auth/sso/callback - Scopes:
openid,email,profile
3. Secrets
oc create secret generic ambient-ui-config \
--from-literal=sso-client-id=<client-id> \
--from-literal=sso-client-secret=<client-secret> \
--from-literal=session-secret="$(openssl rand -base64 32)"4. Route + TLS
OpenShift Route with TLS edge termination, targeting the ambient-ui Service on port 3000.
Adding ambient-ui to a New Overlay
- Include base:
resources: [../../base](ambient-ui-deployment.yaml is in base/core) - Add image entries for
quay.io/ambient_code/vteam_ambient_ui - Apply environment patches (auth mode, API URL, SSO config)
- If auth: create OIDC client and secrets per Prerequisites
- If OpenShift with HTTPS to ambient-api-server: trust the service-ca bundle. The API server TLS cert is signed by OpenShift service-ca, not the default SA CA. Create a ConfigMap with inject-cabundle annotation, mount it into the ambient-ui container, and set NODE_EXTRA_CA_CERTS=/etc/ssl/service-ca/service-ca.crt
- Add a Route if external access is needed
- Verify:
kustomize build overlays/<target> | grep -A5 "name: ambient-ui"
HCMAIS Environment (ambient-api namespace)
The hcmais overlay deploys to ambient-api namespace on the HCMAIS ROSA cluster.
It includes only: ambient-api-server, ambient-api-server-db, ambient-control-plane,
ambient-ui, and postgresql.
Prerequisites
- Keycloak client — create
ambient-uiclient in theambient-coderealm athttps://keycloak-ambient-keycloak.apps.rosa.hcmais01ue1.s9m2.p3.openshiftapps.com/admin:- Client authentication: ON (confidential)
- Root URL:
https://ambient-ui-ambient-api.apps.rosa.hcmais01ue1.s9m2.p3.openshiftapps.com - Valid redirect URIs:
https://ambient-ui-ambient-api.apps.rosa.hcmais01ue1.s9m2.p3.openshiftapps.com/api/auth/sso/callback - Valid post logout redirect URIs:
https://ambient-ui-ambient-api.apps.rosa.hcmais01ue1.s9m2.p3.openshiftapps.com/*
- Secrets (create in
ambient-apinamespace):# SSO credentials for ambient-ui oc create secret generic sso-credentials -n ambient-api \ --from-literal=SSO_ISSUER_URL=https://keycloak-ambient-keycloak.apps.rosa.hcmais01ue1.s9m2.p3.openshiftapps.com/realms/ambient-code \ --from-literal=SSO_CLIENT_ID=ambient-ui \ --from-literal=SSO_CLIENT_SECRET=<from-keycloak> \ --from-literal=SESSION_SECRET=$(head -c 32 /dev/urandom | base64 | head -c 32) - Deploy:
kustomize build components/manifests/overlays/hcmais | oc apply -n ambient-api -f - - Verify:
oc get pods -n ambient-api curl -s https://ambient-ui-ambient-api.apps.rosa.hcmais01ue1.s9m2.p3.openshiftapps.com/api/healthz
Troubleshooting
| Symptom | Fix |
Cannot find module '/app/server.js' | Copy from .next/standalone/app/ |
Can't resolve 'ambient-sdk' | Build SDK dist in Dockerfile deps stage |
| Liveness probe 401 | Use /api/healthz, not / |
Client sent HTTP request to HTTPS server | Use https:// in API_SERVER_URL |
401 text/plain from API server | Token format mismatch — ensure JWT, not opaque token |
| Turbopack build fails | Use next build --webpack |
Verification
kustomize build overlays/<target>valid YAML- Image references consistent across kustomization, CI, Makefile
- Pod starts with 0 restarts
/api/healthzreturns 200- API proxy returns data
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

