Design and implementation plan published:
Decisions
- Use Svelte 5 + SvelteKit + TypeScript + Vite +
@sveltejs/adapter-static. - Embed deterministic generated assets in the existing Go binary with
//go:embed all:assets; Node is not required at runtime or for an unchangedgo install ./.... - Keep
gitcode-mcp service runas the only daemon/job owner. Add an optional loopback admin listener plusgitcode-mcp admin open/status; do not introduce a second long-lived UI control plane. - Add a thin versioned HTTP/SSE adapter over the same coordinator/use-case/capability layers used by CLI/MCP. The browser does not invoke CLI/MCP or talk directly to the Unix JSON-RPC socket.
- Start with observation, then add bounded/idempotent job controls and plan/apply policy controls. Destructive cache/RAG operations, credential management, raw logs/payloads, and remote destructive writes remain CLI-only.
- Treat loopback as insufficient by itself: exact Host/Origin, no CORS, one-time launch exchange, SameSite/HttpOnly session, CSRF, CSP, and public-safe DTOs are part of the foundation.
Temporal was used as a packaging reference. Its UI is a SvelteKit static SPA built into Go UI-server assets and embedded with go:embed; its production deployment uses a separate UI-server, while Temporal CLI imports that Go UI-server for server start-dev. We copy the static-build/embed technique, not the extra production process.
Product model
The UI is organized into six semantic cohorts rather than CLI command groups:
- identity/topology — service, caches, bindings, registrations, namespaces;
- readiness — daemon, cache/schema/WAL, GitCode auth, provider/model, capabilities;
- corpus freshness/completeness — head, tail, secondary queues, projection, RAG;
- execution/scheduling — jobs, progress, rate limits, contention, retry;
- policy/control — maintenance bounds, collections, intervals, profiles;
- governance/recovery — plans, receipts, typed diagnostics, remediation.
The design deliberately keeps current coverage separate from active contention, scheduled retry, and last stage error. That incorporates the dogfood finding in #91: a current/searchable namespace must not be hidden by a transient stale degraded stage result.
Follow-up issues
- #92 — embedded SvelteKit runtime and secure local listener.
- #93 — versioned observation API and resumable SSE events.
- #94 — overview, cache topology, repository coverage, diagnostics.
- #95 — sync/RAG job supervision and safe cancel/retry.
- #96 — maintenance and repository-binding plan/apply controls.
- #97 — RAG Search Lab, accessibility, browser E2E, and release-quality gates.
Dependency order:
#92 foundation
-> #93 observation API
-> #94 read-only product views
-> #95 job supervision
-> #96 maintenance/binding controls
-> #97 Search Lab + release hardening
#96 and #97 can proceed in parallel once their dependencies are satisfied. #91 is a correctness input to #93/#94 and should be reflected in their DTO/state derivation even if its scheduler fix lands independently.
Recommended first implementation slice: #92. It establishes the packaging/security/process boundary while keeping the initial UI intentionally read-only.


Admin Web UI epic delivered.
All implementation follow-ups are closed:
- #92 embedded SvelteKit runtime and secure loopback listener;
- #93 versioned observation API and resumable SSE;
- #94 overview, cache topology, repository coverage, and diagnostics;
- #95 daemon-owned job supervision with safe cancel/retry;
- #96 maintenance and repository-binding plan/apply controls;
- #97 RAG Search Lab and release-quality gates.
The final product keeps service run as the only coordinator, embeds deterministic static assets in the Go binary, defaults the listener off and loopback-only, uses one-time launch/session/CSRF/CSP boundaries, exposes public-safe DTOs, and keeps destructive/cache-path/credential/provider-setup operations outside browser authority.
Dogfood feedback about cross-tab visual inconsistency was resolved before closing: all views now share documented Light/Dark/System tokens, System default, one typography/control scale, and Lucide icon semantics. The durable contract is docs/admin-ui-design-system.md; runtime/API ownership is docs/admin-ui.md; release budgets and checks are docs/admin-ui-release-gates.md.
Final implementation merged in !101. Full Go/frontend/browser/deterministic-asset gates passed. The remaining open #90 and #91 are bounded repair/scheduler correctness follow-ups, not incomplete UI-epic acceptance criteria.


Why
As
gitcode-mcpgrows beyond a small CLI/MCP bridge, operators need an easier way to observe and control local state:The CLI remains the source of truth, but a local admin Web UI could make dogfood, debugging, and everyday operation much easier.
Scope
Design a local-only admin UI for one machine/user. This is not a hosted multi-tenant product.
Initial surfaces to explore:
Safety Requirements
Design Questions
gitcode-mcp service run, or should it be a separategitcode-mcp admin servemode in the same binary?Acceptance Criteria
gitcode-mcp service run.Dogfood Context
This came from runtime-core RAG dogfood where: