You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The UI's Agents page fails to load on every install, showing Could not load agents — internal server error. The page is fine; SystemService/ListNamespaces returns INTERNAL on every call, and the agents list treats the namespace read as its own failure because templates are read one namespace at a time.
Stand up a cluster with scripts/setup-cluster/setup-cluster.sh.
Open Agents. The page shows Could not load agents — internal server error and lists nothing, although kubectl get agenttemplates,harnesses -n kagent returns the harness and template the script created.
Root cause
systemservice.WithInventory is the only thing that gives the system service a Kubernetes client, and it has no caller:
core/internal/service/system/service.go:111 func WithInventory(...) ← declaration only
It used to be called from go/core/pkg/app/app.go, which 221674d1 — refactor: remove legacy controller runtime (#2595) — deleted:
SystemService/GetSubstrateStatus fails even once the inventory is wired: managerScheme in core/cmd/controller-v2/main.go registers only clientgoscheme and kagentv1alpha3, while the deleted app.go also registered atev1alpha1. Listing worker pools and actor templates has no kind registered for the type.
Why nothing appears in the controller logs
Nothing in go/ calls ctrl.SetLogger/log.SetLogger. controller-runtime prints
[controller-runtime] log.SetLogger(...) was never called; logs will not be displayed.
and then discards every ctrllog write — the RPC completed lines, and the cause behind each redacted internal server error. The failure above is invisible server-side, which is most of why it reads as a broken local setup.
Summary
The UI's Agents page fails to load on every install, showing
Could not load agents — internal server error. The page is fine;SystemService/ListNamespacesreturnsINTERNALon every call, and the agents list treats the namespace read as its own failure because templates are read one namespace at a time.Reproduce
scripts/setup-cluster/setup-cluster.sh.Could not load agents — internal server errorand lists nothing, althoughkubectl get agenttemplates,harnesses -n kagentreturns the harness and template the script created.Root cause
systemservice.WithInventoryis the only thing that gives the system service a Kubernetes client, and it has no caller:It used to be called from
go/core/pkg/app/app.go, which221674d1— refactor: remove legacy controller runtime (#2595) — deleted:core/cmd/controller-v2/main.gonever carried that over, sogrpcserver.Newfalls back to its own default:and every namespace read stops at the guard in
ListNamespaces:The silent default is what let this ship: a missing service becomes a runtime
INTERNALon first use rather than a failure to start.Same deletion, still open
Probed against the running controller,
grpc-status 12 unknown service:ModelService,ToolService,PromptTemplateService,FeedbackService,MemoryServiceare not registered at all —controller-v2never constructs them. Models, MCP Servers and Prompts are unreachable for the same reason. (Distinct from [BUG] MCP servers never appear in the list — nothing writes the toolserver table since the legacy reconciler was removed #2603, which is about the toolserver table having no writer; these RPCs do not exist on the server.)SystemService/GetSubstrateStatusfails even once the inventory is wired:managerSchemeincore/cmd/controller-v2/main.goregisters onlyclientgoschemeandkagentv1alpha3, while the deletedapp.goalso registeredatev1alpha1. Listing worker pools and actor templates has no kind registered for the type.Why nothing appears in the controller logs
Nothing in
go/callsctrl.SetLogger/log.SetLogger. controller-runtime printsand then discards every
ctrllogwrite — theRPC completedlines, and the cause behind each redactedinternal server error. The failure above is invisible server-side, which is most of why it reads as a broken local setup.Version
Observed on
9e246fd3.🤖 written by Claude