Repository navigation
feat: ship the kagent-tools skills with a k8s-agent, and add skills to the agent template form - #3554
danielle-mustillo wants to merge 9 commits into
Conversation
819f7ed to
29f2818
Compare
29f2818 to
eb66003
Compare
eb66003 to
543e5fc
Compare
pr3554-reel.mp4ScreenshotsWritten by 🤖 |
Charlesthebird
left a comment
There was a problem hiding this comment.
This automated review is a first pass. A manual review will follow once the blockers are addressed.
Nothing blocks merge. One non-blocking gap: the skill form accepts an OCI image the controller rejects.
✅ What I checked
- ✅
--reuse-valuesfrom a release withoutbuiltins: every read goes throughdigon.Values.AsMap - ✅
global.imageRegistry: the catalog andk8s-agentboth use the mirrored image, so "Older version" compares like with like - ✅ Git, S3, path, 50-skill limit and duplicate-name checks against the v1alpha3 CRD and the translator
- ✅
pluginsandpromptTemplateon save:specFromDraftreplaces onlyspec.skills - ✅
KAGENT_UI_BUILTIN_SKILLSescaping through the entrypoint intoJSON.parse - ✅ CI: only the Harness named
kagentclashes with the lifecycle suite, andk8s-agentdrops out with kagent-tools off - ✅ Default
s3://ate-snapshots/kagent/matches the RustFS store insetup-cluster.sh - ✅ No internal brand terms in the diff
Written by 🤖
|
The kagent-tools bump to 0.3.1 in this PR also fixes a downgrade for users upgrading from 0.10.x. The v0.10.6 chart depends on kagent-tools 0.3.1, while v1.0.0 pins 0.3.0, so moving from 0.10.6 to 1.0.0 rolls kagent-tools back. Keeping this dependency on the latest tools release matters because operational fixes land there. For example, kagent-dev/tools#84 (the Streamable HTTP server leaking heap on every MCP initialize request) was fixed in 0.3.0 by kagent-dev/tools#85. Users only get fixes like that without overriding the subchart when the chart tracks the current release. Changes between kagent-tools 0.3.0 and 0.3.1:
If the rest of this PR needs more review time, landing the dependency bump on its own would keep the next 1.0.x release from shipping the older tools chart. |
This comment has been minimized.
This comment has been minimized.
Charlesthebird
left a comment
There was a problem hiding this comment.
Thanks for the updates!
Couple of small notes:
- For this list of skills, it would be nice if:
- The skill name and other fields here had labels
- The delete icon buttons were red
- Each row was in a card and had a slightly different background/elevation to make it clear that it is a single item.
- I like the updates to this section. Something that could improve it is if each skill here was a card and had a slightly different background/elevation to make it clear that it is a single item.
- I think the
platformagent name doesn't sound right here. Some ideas are:
a. Onebuilt-in(orexampleorquickstart) agent with all the skills (showing what's possible), and onek8sagent with just the "k8s" skills.
b. Only onebuilt-inagent, with all the skills and nok8sagent.
c. OneAgentTemplateper example agent from v0.x with the relevant skills attached, and one rootAgentTemplatethat references all these example agents as child templates. Then thebuilt-inAgentcould use the rootAgentTemplateand thekagentharness.
I think option (c) might show off what kagent can do the best because it would show a single Agent attached to a root AgentTemplate and one level of child AgentTemplates with skills working.
Charlesthebird
left a comment
There was a problem hiding this comment.
This automated review is a first pass. A manual review will follow once the blockers are addressed.
Nothing blocks merge. The description lags the code on which skills the UI offers.
Written by 🤖
| # The kagent-tools skills the UI offers. Cilium is left out; the chart offers | ||
| # Prometheus only when kagent-tools.tools.prometheus.url is set. | ||
| skills=(argo-rollouts-progressive-delivery helm-release-management istio-traffic-debugging | ||
| k8s-troubleshooting kubescape-security-posture prometheus-observability) |
There was a problem hiding this comment.
Level: 🟠 Medium · Not Blocking
The description says the UI offers three skills and leaves out Argo Rollouts and Kubescape, but this list includes both. "What changed" also doesn't mention platform-agent. Update the description (five skills, plus platform-agent), or drop those skills here and regenerate the catalog.
Written by 🤖
…ols skills The chart now creates a default Go ADK Harness and a k8s Agent on it. The Agent uses the kagent-tools Kubernetes tools, with tools that change the cluster behind approval, and the k8s-troubleshooting skill. The skill comes from the kagent-tools image that the chart already deploys. The chart packages files/builtin-skills.json, which pins that image by digest and lists the skills in it. make builtin-skills-catalog regenerates the file from the image. Bump kagent-tools to 0.3.1, the release that ships the skills. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
The UI ConfigMap passes the catalog as KAGENT_UI_BUILTIN_SKILLS, so the UI can offer the built-in skills when a user builds an agent. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
The UI image writes KAGENT_UI_BUILTIN_SKILLS into env-config.js as BUILTIN_SKILLS, and runtimeConfig parses it into a typed catalog. A missing or invalid catalog means the UI offers no built-in skills. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
A user building an agent can now add one of the built-in skills or their own skill from an OCI image, a Git commit or an S3 object version. The form owns spec.skills and checks the same rules as the CRD. A row that holds a built-in skill unchanged shows as a kagent skill with its description. The mock backend serves a built-in catalog, and the agent templates journey adds both kinds of skill and reads them back. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
…roller A live spec builds an AgentTemplate with a kagent skill and an OCI, a Git and an S3 skill through the form. It reads spec.skills back from the controller, keeps them through an edit, and refuses a short Git commit and a name with a slash. A second test builds an Agent with only the kagent skill and checks in chat that load_skill returns the skill's text. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
- k8s-agent is now an AgentTemplate plus an Agent that references it. - platform-agent is a second example Agent with the k8s, Helm, Istio and Argo Rollouts skills and their tools; tools that change things need approval. - The UI skill catalog also offers Argo Rollouts and Kubescape, and offers Prometheus only when kagent-tools.tools.prometheus.url is an http(s) URL. - The built-in agents render from builtin-agents.yaml and the Harness from builtin-harness.yaml. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
- The UI rejects an OCI skill image path with uppercase letters. The controller cannot parse it, so the Agent would never become Ready. - On the AgentTemplate pages, divider lines separate the skills, each remove button names its skill, and a Git skill's repository is a link. - The built-in Harness is named kagent-builtin. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
The built-in Agents now use kagent-default and appear only when harnesses.enabled is on. That is off in the chart and on in kagent install. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
27db0bf to
02b340d
Compare
| enabled: true | ||
| k8sAgent: | ||
| # -- Create k8s-agent, an Agent that helps you troubleshoot workloads in | ||
| # this cluster, and the AgentTemplate it references. It runs on | ||
| # kagent-default, uses the kagent-tools Kubernetes tools and the | ||
| # k8s-troubleshooting skill, and asks for your approval before it changes | ||
| # anything. Needs kagent-tools.enabled. | ||
| enabled: true | ||
| # -- Name of the Agent and its AgentTemplate. | ||
| name: k8s-agent | ||
| platformAgent: | ||
| # -- Create platform-agent, an example Agent for workloads, Helm releases, | ||
| # Istio traffic and Argo Rollouts. Same needs as k8s-agent; the Helm, Istio | ||
| # and Argo skills and their tools are added when the catalog has them. | ||
| enabled: true | ||
| # -- Name of the Agent and its AgentTemplate. | ||
| name: platform-agent | ||
| skills: | ||
| # -- Offer the built-in skills. A skill is a set of instructions an Agent | ||
| # loads when a task needs it. The UI lists these skills when you build an | ||
| # Agent, and k8s-agent and platform-agent use them. | ||
| enabled: true | ||
| # -- Leave empty to use the skills that ship in the kagent-tools image. | ||
| # To offer skills from your own image instead, set its digest-pinned | ||
| # reference here, for example | ||
| # registry.example.com/team/skills@sha256:<digest>, and list the skills in | ||
| # builtins.skills.list. | ||
| image: "" | ||
| # -- The skills in builtins.skills.image, used only when that is set. Each | ||
| # entry has a name, a one-line description and the skill's directory in | ||
| # the image, for example: | ||
| # {name: k8s-troubleshooting, description: Diagnose unhealthy workloads., path: skills/k8s-troubleshooting} | ||
| list: [] |
There was a problem hiding this comment.
I think this could be simplified - less comments, no name override. Also I think the skills should just be enabled if builtin.enabled=true and not configurable. If builtin.enabled=true, at least some of the skills would need to be available for the built in agent(s), so having an extra set here is a bit confusing.




















Why
A new kagent install has no example agent and no skills to start from, and the UI has no way to add a skill to an agent. Today skills can only be set with kubectl.
What changed
Built-ins in the chart. A new
builtinsvalues group gives a new install a starting point:builtins.k8sAgent: an Agent namedk8s-agent. It uses the kagent-tools Kubernetes tools and thek8s-troubleshootingskill. Tools that change the cluster wait for approval.builtins.platformAgent: an example Agent namedplatform-agentfor workloads, Helm releases, Istio traffic and Argo Rollouts.builtins.skills: the skills the UI offers.builtins.skills.imagewithbuiltins.skills.listoffers skills from another image instead.builtins.enabled: falseturns all three off. Each also has its ownenabled.Both Agents run on the
kagent-defaultHarness from #3566, so they appear only whenharnesses.enabledis on. That is off in the chart and on inkagent install.Skills come from kagent-tools. kagent does not build a skills image of its own.
k8s-troubleshooting,helm-release-managementandistio-traffic-debugging. The image's other skills need Argo Rollouts, Cilium, Kubescape or Prometheus, so the list leaves them out.helm/kagent/files/builtin-skills.jsonholds the list and the kagent-tools image pinned by digest.make builtin-skills-catalogregenerates it from the image.KAGENT_UI_BUILTIN_SKILLS.global.imageRegistrymirrors the image.Skills in the agent template form.
spec.skills. The form rejects what the CRD or the runtime would reject, and each message names the skill.pluginsandpromptTemplate, which the form does not show, are kept on save.Limits
helm upgrade --reuse-valuesfrom an older release keeps the old chart's defaults, which have nobuiltinsvalues. The chart then renders no built-ins instead of failing.--reset-then-reuse-valuespicks up the new defaults and turns them on.Testing
helm unittest helm/kagent: 398 tests pass.yarn typecheck, vitest (850 tests), the UI entrypoint Go tests and the mock Playwright agent-templates journey pass.k8s-agentis Ready with its skill fromghcr.io/kagent-dev/kagent/tools@sha256:607cb0ac…. Asked about a crash-looping pod, it calledload_skillfork8s-troubleshootingand got the kagent-tools text back.builtins.enabled=falseremoved the Agent and the UI skill list. Turning it back on restored them, andk8s-agentbecame Ready again.kagent install,k8s-agentandplatform-agentbecame Ready onkagent-default.harnesses.enabled=falseremoved both Agents, their AgentTemplates and the three default Harnesses.--reuse-valuessucceeded with no built-ins. A following--reset-then-reuse-valuesupgrade brought them back, andk8s-agentbecame Ready.