RepoPilot

wandb/openui

OpenUI let's you describe UI using your imagination, then see it rendered live.

Healthy

Healthy across all four use cases

HealthyDependency

Permissive license, no critical CVEs, actively maintained — safe to depend on.

HealthyFork & modify

Has a license, tests, and CI — clean foundation to fork and modify.

HealthyLearn from

Documented and popular — useful reference codebase to read through.

HealthyDeploy as-is

No critical CVEs, sane security posture — runnable as-is.

  • Slowing — last commit 3mo ago
  • Single-maintainer risk — top contributor 85% of recent commits
  • Scorecard: default branch unprotected (0/10)
  • Last commit 3mo ago
  • 5 active contributors
  • Apache-2.0 licensed
  • CI configured
  • Tests present

Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests + OpenSSF Scorecard

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Embed the "Healthy" badge

Paste into your README — live-updates from the latest cached analysis.

Variant:
RepoPilot: Healthy
[![RepoPilot: Healthy](https://repopilot.app/api/badge/wandb/openui)](https://repopilot.app/r/wandb/openui)

Paste at the top of your README.md — renders inline like a shields.io badge.

Preview social card

This card auto-renders when someone shares https://repopilot.app/r/wandb/openui on X, Slack, or LinkedIn.

Ask AI about wandb/openui

Grounded in the actual source code. Pick a starter question or write your own.

Or write your own question →

Onboarding doc

Onboarding: wandb/openui

Generated by RepoPilot · 2026-06-20 · Source

🎯Verdict

GO — Healthy across all four use cases

  • Last commit 3mo ago
  • 5 active contributors
  • Apache-2.0 licensed
  • CI configured
  • Tests present
  • ⚠ Slowing — last commit 3mo ago
  • ⚠ Single-maintainer risk — top contributor 85% of recent commits
  • ⚠ Scorecard: default branch unprotected (0/10)

<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests + OpenSSF Scorecard</sub>

TL;DR

OpenUI is a web-based IDE that lets users describe UI components in natural language and renders them live as HTML/CSS, with the ability to refine designs iteratively and export to React, Svelte, or Web Components. It uses LLMs (OpenAI, Anthropic, Groq, Ollama, or LiteLLM-compatible endpoints) to generate and modify UI code in real-time, functioning as an open-source alternative to Vercel's v0. Monorepo with frontend-first split: root directory contains TypeScript/Vite frontend (src/, vite.config.ts, package.json) that builds into backend/openui/dist/, while backend/openui/ is a Python FastAPI service (backend/main.py, backend/openui/config.py) with LiteLLM model routing and SQLite database (backend/openui/db/models.py). Build pipeline runs vite build then copies dist/ into the Python package for deployment.

👥Who it's for

Frontend developers, product designers, and W&B internal teams who want to rapidly prototype UI components without hand-coding boilerplate HTML/CSS, and teams building LLM-powered applications who need a testbed for next-generation tooling.

🌱Maturity & risk

Actively developed but pre-1.0: the repo shows comprehensive CI/CD setup (GitHub Actions for Docker publishing and Python testing), Husky pre-commit hooks, and TypeScript/Python test suites, but is not yet battle-tested at scale. The live demo at openui.fly.dev and Docker distribution via ghcr.io indicate production readiness for personal/team use, not enterprise SLA.

Moderate risk: depends on 30+ Radix UI components and Monaco Editor (heavyweight), LiteLLM for multi-model abstraction (adds maintenance surface), and tight coupling between Python backend and Node.js frontend (separate .venv and node_modules). No visible open issue backlog in file list, but the reliance on external LLM APIs means user experience degrades if keys are misconfigured or rate-limited.

Active areas of work

Active development visible via Husky hooks, recent Docker workflow (backend/.github/workflows/docker.yml), and deployment automation to Fly.io (backend/fly.toml). No specific PR or milestone data in file structure, but infrastructure suggests regular deployments of both frontend (Vite hot-reload during dev) and backend (Python package distribution).

🚀Get running

git clone https://github.com/wandb/openui && cd openui/backend && uv sync --frozen --extra litellm && source .venv/bin/activate && export OPENAI_API_KEY=xxx && python -m openui (then visit http://localhost:7878). For frontend-only work: cd openui && npm install && npm run dev (opens http://localhost:5173 with Vite hot reload).

Daily commands: Frontend dev: npm run dev (Vite with --open flag, watches src/ on http://localhost:5173). Backend dev: python -m openui (starts FastAPI on http://localhost:7878 after uv sync). Full stack Docker: docker run --rm -p 7878:7878 -e OPENAI_API_KEY -e OLLAMA_HOST=http://host.docker.internal:11434 ghcr.io/wandb/openui. Production: npm run build (frontend) then fly deploy ../backend (backend).

🗺️Map of the codebase

  • backend/openui/__main__.py — Entry point for the backend server; initializes the FastAPI application and serves the compiled frontend.
  • backend/openui/models.py — Core data models and LLM interaction logic; handles prompts, API calls to OpenAI/Groq/LiteLLM, and UI generation.
  • backend/openui/config.py — Configuration management for API keys, model selection, and environment variables; essential for understanding how to switch between LLM providers.
  • backend/openui/litellm.py — LiteLLM wrapper layer that abstracts multiple LLM provider integrations (OpenAI, Groq, Gemini, Claude).
  • backend/openui/ollama.py — Local Ollama model integration; allows running OpenUI without external API keys.
  • backend/openui/db/models.py — Database schema definitions for persisting UI generations and user sessions.
  • backend/openui/dist/index.html — Root frontend entry point; compiled from the frontend build process and served by the backend.

🧩Components & responsibilities

  • Frontend (React/Vite) (React, Vite, Monaco Editor, Tailwind CSS) — Displays UI preview, code editor, and chat interface; sends user prompts to backend and renders returned HTML/CSS/JS.
    • Failure mode: If frontend fails to load, user cannot interact with the app; if preview rendering fails, user cannot see generated UI visually.
  • FastAPI Backend — Exposes REST endpoints for UI generation, refinement, and session management; orchestrates LL

🛠️How to make changes

Add a new LLM provider

  1. Add environment variable handling for the new provider's API key (backend/openui/config.py)
  2. Create a wrapper function or class in the LiteLLM module to route requests to the new provider (backend/openui/litellm.py)
  3. Update the model selection logic in models.py to handle the new provider's model names and parameters (backend/openui/models.py)

Add a new API endpoint for UI generation

  1. Define request/response Pydantic models in models.py (backend/openui/models.py)
  2. Register a new FastAPI route in main.py that calls the LLM orchestration logic (backend/openui/__main__.py)
  3. Optionally persist results to the database using db/models.py schema (backend/openui/db/models.py)

Extend the evaluation pipeline

  1. Add new test cases or benchmarks to the dataset structure (backend/openui/eval/dataset.py)
  2. Implement new evaluation metrics or comparison logic (backend/openui/eval/evaluate.py)
  3. Update the synthesize script to generate more diverse UI examples (backend/openui/eval/synthesize.py)

Customize LLM prompts for UI generation

  1. Locate the prompt templates and system instructions in models.py or dedicated prompt files (backend/openui/models.py)
  2. Modify the prompt text to guide the LLM toward different UI styles, frameworks, or design patterns (backend/openui/models.py)
  3. Re-run evaluation tests to validate the new prompt effectiveness (backend/openui/eval/evaluate.py)

🔧Why these technologies

  • FastAPI — Lightweight, modern Python framework with async support for handling concurrent LLM requests; enables rapid iteration on new endpoints.
  • LiteLLM — Vendor-agnostic LLM abstraction that supports OpenAI, Groq, Gemini, Claude, and others; allows users to choose their preferred provider without code changes.
  • React + Vite — Fast, responsive frontend for real-time UI preview and code editing; Vite enables quick development iteration and small production bundles.
  • SQLAlchemy + Database — Persists user sessions, generated UIs, and design history for undo/redo and user resumption across sessions.
  • Docker + Fly.io — Containerized deployment enables easy hosting and scaling of the backend; Fly.io provides simple, cost-effective deployment with global distribution.

⚖️Trade-offs already made

  • Multi-provider LLM support via LiteLLM instead of single-provider lock-in

    • Why: Avoids vendor lock-in and gives users flexibility; accommodates diverse use cases (API-based, local, budget-conscious).
    • Consequence: Slightly increased complexity in model abstraction; must handle differences in API schemas, token limits, and output formats across providers.
  • Live frontend preview with backend-generated code instead of client-side generation

    • Why: Allows complex, context-aware code generation leveraging full LLM capabilities; easier to add multi-turn conversations and refinement.
    • Consequence: Network latency in the request–response cycle; server load scales with concurrent users; less suitable for offline-first usage.
  • Full HTML/CSS/JS generation instead of constraint-based component system

    • Why: Maximizes user freedom; users can describe any UI they imagine without being limited to a component library.
    • Consequence: Generated code may be inconsistent or use varying patterns; harder to enforce design systems or accessibility standards.

🚫Non-goals (don't propose these)

  • Does not provide authentication or multi-user access control; assumes single-user or trusted environment.
  • Does not include real-time collaboration or concurrent editing; designed for single-user workflow.
  • Does not handle image generation or vision-based design; text-to-HTML only.
  • Does not provide built-in deployment or hosting of generated UIs; outputs code that users must host separately.
  • Does not enforce or validate generated code for security; output may contain XSS or other vulnerabilities.

🪤Traps & gotchas

  1. LLM API keys must be set as environment variables (OPENAI_API_KEY, ANTHROPIC_API_KEY, etc.) before starting the backend, or model selection will fail silently. 2. Ollama requires special hostname http://host.docker.internal:11434 when running in Docker on macOS/Windows; http://127.0.0.1:11434 won't work. 3. Frontend build output (dist/) is gitignored and must be regenerated before backend deployment; the postbuild script (npm run postbuild) copies it into backend/openui/dist/. 4. Backend/frontend versions are tightly coupled via the dist/ folder; deploying stale frontend code to production is a common gotcha. 5. uv (Python package manager) is required instead of pip; uv sync --frozen --extra litellm installs exact pinned versions including optional LiteLLM dependencies.

🏗️Architecture

💡Concepts to learn

  • Prompt Engineering for Code Generation — OpenUI's core value is in crafting the right prompts to LLMs to generate valid, responsive HTML/CSS and framework-specific code; understanding prompt structure and few-shot examples is essential to improving output quality
  • LiteLLM Model Abstraction — The backend uses LiteLLM to support 15+ LLM providers (OpenAI, Anthropic, Groq, Ollama, etc.) with a unified API; contributors must understand how provider routing and fallback logic works to add new models
  • Server-Sent Events (SSE) / Streaming — OpenUI likely streams LLM responses token-by-token for live UI feedback (mentioned in README: 'see it rendered live'); understanding streaming API design is critical for frontend state management and backend endpoint design
  • Vite Build Plugin System — The monorepo uses Vite to bundle React and output static assets into backend/openui/dist/ for serving via FastAPI; understanding Vite's postbuild hooks and asset pipeline is required to debug build failures
  • FastAPI Dependency Injection & Pydantic Validation — The Python backend uses FastAPI's dependency injection (Depends) and Pydantic models for request validation; contributors working on backend APIs must understand this pattern to add new endpoints safely
  • Radix UI Primitive Components — The frontend relies on 30+ Radix UI primitives (Button, Dialog, Select, Popover, etc.) composed with Tailwind; understanding the Radix component API and accessibility constraints is needed to add UI features
  • Web Components Export Targets (React, Svelte, Web Components) — OpenUI must generate syntactically correct code for multiple frameworks from a single HTML source; understanding the differences in import syntax, state binding, and event handling across React/Svelte/WebComponents is critical to the export feature
  • vercel/v0 — Direct predecessor and inspiration; proprietary version of the same 'describe UI → render live' concept, but closed-source and cloud-only
  • anthropics/claude-web-crawler — Companion for using Anthropic Claude as the LLM backend in OpenUI (already supported via ANTHROPIC_API_KEY); shows best practices for Claude vision/code generation
  • wandb/wandb — Parent organization's main repo; OpenUI is used internally by W&B to prototype next-gen LLM tooling, so integration patterns and design philosophy are shared
  • lm-sys/FastChat — Complementary tool for running local LLMs; users can configure FastChat as an OpenAI-compatible endpoint via OPENAI_COMPATIBLE_ENDPOINT to avoid OpenUI's Ollama-only default for local inference
  • BerriAI/litellm — Core dependency providing multi-model abstraction layer; understanding LiteLLM's model routing and error handling is critical to debugging model selection issues in OpenUI

🪄PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add integration tests for backend LiteLLM provider support

The README mentions support for OpenAI, Groq, and any LiteLLM-supported model (Gemini, Anthropic), but there are no visible integration tests in backend/.github/workflows/test.yml. This is critical for a project that depends on multiple LLM providers with different API contracts. New contributors could add provider-specific test cases to ensure compatibility and prevent regressions.

  • [ ] Review backend/.github/workflows/test.yml and backend/openui/ structure to understand current test setup
  • [ ] Create provider-specific test fixtures in backend/tests/providers/ for OpenAI, Groq, and mock LiteLLM providers
  • [ ] Add GitHub Actions workflow step in test.yml to run provider integration tests with mocked API responses
  • [ ] Document environment variable requirements for each provider in backend/README.md

Add E2E tests for HTML-to-framework conversion workflows

The project explicitly supports converting HTML to React, Svelte, Web Components, etc., but the test scripts only show basic cypress setup. There are no visible E2E test cases covering the actual conversion pipelines. This is a core feature that deserves regression test coverage.

  • [ ] Review existing cypress tests in the repo structure and test.ts/tsx patterns
  • [ ] Create cypress E2E test suite in backend or frontend covering: HTML generation → React conversion → Svelte conversion workflows
  • [ ] Add test fixtures with sample UI descriptions and expected output for each framework target
  • [ ] Integrate new E2E tests into the existing 'test:e2e:ci' npm script pipeline

Create comprehensive API documentation for backend config and LLM endpoints

backend/openui/config.py and config.yaml exist but are not documented. The project supports multiple LLM providers and deployment targets (Fly.io via fly.toml), but there's no structured documentation about configuration options, environment variables, or API endpoints. New contributors need clear guidance.

  • [ ] Audit backend/openui/config.py, backend/openui/config.yaml, and backend/fly.toml to identify all configuration options
  • [ ] Create backend/CONFIGURATION.md documenting each config option, required env vars per provider, and example configs for OpenAI/Groq/Gemini/Claude
  • [ ] Document the API endpoints and request/response formats in backend/README.md (currently truncated in snippet)
  • [ ] Add JSDoc comments to config.py functions and YAML schema descriptions to help future maintainers

🌿Good first issues

  • Add unit tests for backend/openui/config.py: currently no visible test file for LLM provider configuration parsing; contributor could write tests for each OPENAI_API_KEY / ANTHROPIC_API_KEY / OLLAMA_HOST parsing path to catch env var misconfigurations early.
  • Write integration tests for the HTML→React conversion feature: the README mentions 'convert HTML to React, Svelte, Web Components' but no test files are visible in the file structure; contributor could add Vitest specs that verify prompting and code generation for framework exports.
  • Document the config.yaml schema and model selection UI: backend/openui/config.yaml is referenced but not shown; contributor could add JSDoc comments to backend/openui/config.py and create a README explaining how to add custom LLM models to the frontend dropdown.

Top contributors

Click to expand

📝Recent commits

Click to expand
  • f9d8f0e — Add port 6369 (vanpelt)
  • 8aaf2a4 — Add catnip (vanpelt)
  • 17764dc — Updated frontend assets (invalid-email-address)
  • 5c6d7bf — Merge pull request #233 from wandb/task/update-eslint (vanpelt)
  • e171e9d — Remove stray empty JSX brackets (vanpelt)
  • f8178f5 — Upgrade eslint, insanity (vanpelt)
  • 0d415c0 — Merge pull request #214 from wandb/chore/no-relative (vanpelt)
  • 39da2b6 — Merged main (vanpelt)
  • 9abda9b — Updated frontend assets (invalid-email-address)
  • 28cbe75 — Merge pull request #228 from wandb/chore/upgrade-deps (vanpelt)

🔒Security observations

  • High · Environment Variables Exposed in Docker Compose — docker-compose.yaml - environment section. API keys (OPENAI_API_KEY, ANTHROPIC_API_KEY, GROQ_API_KEY) are passed directly through environment variables in docker-compose.yaml without encryption or secret management. These credentials could be exposed in logs, process inspection, or container inspection. Fix: Use Docker secrets, external secret management (HashiCorp Vault, AWS Secrets Manager), or environment-specific .env files not committed to version control. Never pass sensitive credentials directly in docker-compose.yaml.
  • High · Unversioned Docker Image Base — docker-compose.yaml - ollama service image. The Ollama service uses 'ollama/ollama:latest' tag which pulls the latest version without pinning. This creates supply chain risks and non-deterministic builds. Security patches or breaking changes could be introduced unexpectedly. Fix: Pin to a specific version tag (e.g., 'ollama/ollama:0.x.x') and regularly update with tested versions. Implement image scanning in CI/CD.
  • Medium · Missing Security Headers Configuration — backend/openui/dist/index.html and backend server configuration. No evidence of security headers (CSP, X-Frame-Options, X-Content-Type-Options, etc.) in the frontend build or backend configuration. This increases vulnerability to XSS, clickjacking, and MIME-type sniffing attacks. Fix: Implement security headers in HTTP responses. Configure Content Security Policy, X-Frame-Options: DENY, X-Content-Type-Options: nosniff, and others appropriately.
  • Medium · Exposed Service Ports Without Access Control — docker-compose.yaml - ports configuration. Services are exposed on ports 7878 (OpenUI) and 11434 (Ollama) without documented firewall rules or authentication. Ollama API endpoint is accessible to any network client if deployed on a networked server. Fix: Restrict port access using firewall rules, reverse proxy authentication, or API key validation. At minimum, document security assumptions and restrict to localhost:127.0.0.1 if local-only deployment.
  • Medium · Incomplete Dependency Information — package.json - dependencies section. The package.json provided is truncated (ends at 'jo'), making it impossible to verify all dependencies for known vulnerabilities. This incomplete view could hide critical security issues. Fix: Maintain complete package.json files and regularly run 'npm audit' and 'pnpm audit' to identify vulnerable dependencies. Implement automated dependency scanning in CI/CD.
  • Medium · Hardcoded Environment File Reference — .env file and docker-compose.yaml. docker-compose.yaml references .env file that may contain secrets. If .env is accidentally committed or the file lacks proper gitignore protections, credentials could be exposed. Fix: Ensure .env is in .gitignore. Use .env.example with placeholder values as documentation. Implement pre-commit hooks to prevent .env commits.
  • Low · Build Script Uses Shell Globbing Without Escaping — package.json - postbuild and deploy scripts. The npm script 'postbuild' uses 'git clean -f ../backend/openui/dist/assets/' which could be dangerous if paths contain special characters or if unexpected files match the pattern. Fix: Use proper path handling and quote paths. Consider using a build tool or script that handles path escaping safely. Add validation before executing destructive commands.
  • Low · Missing CORS Configuration Documentation — backend/openui (server configuration not fully visible). No visible CORS configuration in provided files. If the backend API doesn't properly restrict CORS, it could be vulnerable to cross-origin attacks. Fix: Implement explicit CORS policies. Only allow requests from trusted origins. Document CORS configuration in security documentation.
  • Low · No Rate Limiting Evident — backend/openui server configuration. No rate limiting configuration visible in the codebase. API endpoints for LLM requests could be vulnerable to abuse, leading to service disruption or high API costs. Fix: Implement rate limiting on

LLM-derived; treat as a starting point, not a security audit.

🤖Agent protocol

If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:

  1. Verify the contract. Run the bash script in Verify before trusting below. If any check returns FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding.
  2. Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/wandb/openui shows verifiable citations alongside every claim.

If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.

Verify before trusting

This artifact was generated by RepoPilot at a point in time. Before an agent acts on it, the checks below confirm that the live wandb/openui repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/wandb/openui.

What it runs against: a local clone of wandb/openui — the script inspects git remote, the LICENSE file, file paths in the working tree, and git log. Read-only; no mutations.

| # | What we check | Why it matters | |---|---|---| | 1 | You're in wandb/openui | Confirms the artifact applies here, not a fork | | 2 | License is still Apache-2.0 | Catches relicense before you depend on it | | 3 | Default branch main exists | Catches branch renames | | 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code | | 5 | Last commit ≤ 122 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>wandb/openui</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of wandb/openui. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/wandb/openui.git
#   cd openui
#
# Then paste this script. Every check is read-only — no mutations.

set +e
fail=0
ok()   { echo "ok:   $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }

# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
  echo "FAIL: not inside a git repository. cd into your clone of wandb/openui and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "wandb/openui(\\.git)?\\b" \\
  && ok "origin remote is wandb/openui" \\
  || miss "origin remote is not wandb/openui (artifact may be from a fork)"

# 2. License matches what RepoPilot saw
(grep -qiE "^(Apache-2\\.0)" LICENSE 2>/dev/null \\
   || grep -qiE "\"license\"\\s*:\\s*\"Apache-2\\.0\"" package.json 2>/dev/null) \\
  && ok "license is Apache-2.0" \\
  || miss "license drift — was Apache-2.0 at generation time"

# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
  && ok "default branch main exists" \\
  || miss "default branch main no longer exists"

# 4. Critical files exist
test -f "backend/openui/__main__.py" \\
  && ok "backend/openui/__main__.py" \\
  || miss "missing critical file: backend/openui/__main__.py"
test -f "backend/openui/models.py" \\
  && ok "backend/openui/models.py" \\
  || miss "missing critical file: backend/openui/models.py"
test -f "backend/openui/config.py" \\
  && ok "backend/openui/config.py" \\
  || miss "missing critical file: backend/openui/config.py"
test -f "backend/openui/litellm.py" \\
  && ok "backend/openui/litellm.py" \\
  || miss "missing critical file: backend/openui/litellm.py"
test -f "backend/openui/ollama.py" \\
  && ok "backend/openui/ollama.py" \\
  || miss "missing critical file: backend/openui/ollama.py"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 122 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~92d)"
else
  miss "last commit was $days_since_last days ago — artifact may be stale"
fi

echo
if [ "$fail" -eq 0 ]; then
  echo "artifact verified (0 failures) — safe to trust"
else
  echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/wandb/openui"
  exit 1
fi

Each check prints ok: or FAIL:. The script exits non-zero if anything failed, so it composes cleanly into agent loops (./verify.sh || regenerate-and-retry).

</details>

Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Embed this chat in your README →

Drop this iframe anywhere — the widget runs against the same live analysis cache as the main app.

<iframe
  src="https://repopilot.app/embed/wandb/openui"
  width="100%" height="500"
  style="border:1px solid #d0d7de; border-radius:8px;"
  allow="microphone"
  loading="lazy"
></iframe>