Skip to content

feat: ship built-in Agents and skills editor - #3554

Open
danielle-mustillo wants to merge 17 commits into
mainfrom
danielle-mustillo/k8s-agent-skills
Open

danielle-mustillo wants to merge 17 commits into
mainfrom
danielle-mustillo/k8s-agent-skills

Conversation

@danielle-mustillo

@danielle-mustillo danielle-mustillo commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

Written by 🤖 (start)

Why

New installs have no example agents. Skills need kubectl today.

What changed

  • Built-in Agent. platform-agent runs on kagent-default.
    • It sends Kubernetes, Helm, Istio and other questions to specialist AgentTemplates.
    • builtins.platformAgent.enabled: false turns it off.
    • builtins.enabled is off in the chart; kagent install turns it on with harnesses.enabled.
    • The chart fails when platform-agent is on without kagent-default or kagent-tools.
    • --profile minimal now skips it.
  • Skills from kagent-tools 0.3.1. No separate skills image.
    • files/builtin-skills.json lists them, pinned by digest.
    • make builtin-skills-catalog regenerates it.
    • Prometheus appears only with a Prometheus URL.
  • Skills in the agent template form.
    • Pick a built-in skill, or add OCI, Git or S3.
    • Each skill shows as a labeled card.
    • Old built-in versions show an Update button.
    • env-config.js now escapes multi-line values.

Limits

Testing

  1. Run kagent install on Kind.
  2. Check platform-agent is Ready.
  3. Ask platform-agent about a failing pod.
  4. It hands off, then loads k8s-troubleshooting.
  5. Open the agent template form; pick a skill.
  6. Run kagent install --profile minimal; expect no built-in Agent.

Written by 🤖 (end)

@github-actions github-actions Bot added the enhancement New feature or request label Nov 6, 2026
@danielle-mustillo
danielle-mustillo force-pushed the danielle-mustillo/k8s-agent-skills branch from 819f7ed to 29f2818 Compare November 6, 2026 14:37
@danielle-mustillo danielle-mustillo changed the title feat: ship kagent skills with a k8s-agent, and add skills to the agent template form feat: ship the kagent-tools skills with a k8s-agent, and add skills to the agent template form Nov 6, 2026
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Nov 6, 2026
@danielle-mustillo
danielle-mustillo force-pushed the danielle-mustillo/k8s-agent-skills branch from 29f2818 to eb66003 Compare November 6, 2026 15:09
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Nov 6, 2026
@danielle-mustillo
danielle-mustillo force-pushed the danielle-mustillo/k8s-agent-skills branch from eb66003 to 543e5fc Compare November 6, 2026 15:20
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Nov 6, 2026
@danielle-mustillo

This comment has been minimized.

@danielle-mustillo
danielle-mustillo marked this pull request as ready for review November 6, 2026 16:12
@danielle-mustillo
danielle-mustillo requested a review from a team as a code owner November 6, 2026 16:12
Charlesthebird

This comment was marked as outdated.

@Charlesthebird Charlesthebird left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-values from a release without builtins: every read goes through dig on .Values.AsMap
  • ✅ global.imageRegistry: the catalog and k8s-agent both 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
  • ✅ plugins and promptTemplate on save: specFromDraft replaces only spec.skills
  • ✅ KAGENT_UI_BUILTIN_SKILLS escaping through the entrypoint into JSON.parse
  • ✅ CI: only the Harness named kagent clashes with the lifecycle suite, and k8s-agent drops out with kagent-tools off
  • ✅ Default s3://ate-snapshots/kagent/ matches the RustFS store in setup-cluster.sh
  • ✅ No internal brand terms in the diff

Written by 🤖

@Charlesthebird Charlesthebird left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On second review, this LGTM overall. Couple notes:

  • Could /improve-ui for both of these areas. Specifically, it could be clearer what skill the delete button is for, and the link could look more like a link.
Image Image

Comment thread helm/kagent/templates/k8s-agent.yaml Resolved
Comment thread ui/entrypoint/main.go Resolved
@iplay88keys
iplay88keys self-requested a review November 9, 2026 22:18
@younsl

younsl commented Nov 10, 2026

Copy link
Copy Markdown
Contributor

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.

@blacksmith-sh

This comment has been minimized.

@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Nov 10, 2026
@danielle-mustillo

This comment has been minimized.

@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Nov 10, 2026
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>
…t subagents

- builtins has three switches: enabled, k8sAgent.enabled and platformAgent.enabled.
- The built-in skills always come from the kagent-tools image when builtins.enabled is on.
- platform-agent routes each task to a specialist AgentTemplate with one skill.

Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
@danielle-mustillo
danielle-mustillo force-pushed the danielle-mustillo/k8s-agent-skills branch from 02b340d to 28f847f Compare November 12, 2026 14:51
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Nov 12, 2026
… kagent-tools

Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
@danielle-mustillo

Copy link
Copy Markdown
Contributor Author

Thanks! Changes from your review:

  1. Each skill is now a card with labeled fields and a red remove button, on the form and the details page (28f847f).
  2. Went with option (c): platform-agent hands each task to a specialist AgentTemplate (Kubernetes, Helm, Istio, Argo Rollouts, Kubescape, Prometheus), each with one skill. k8s-agent stays a plain Agent (13cc6d7).

🤖 written by Claude

@Charlesthebird

Copy link
Copy Markdown
Collaborator

Thanks! I'm kicking off another automated review and video to see the changes

@danielle-mustillo

danielle-mustillo commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor Author

Before is main at 7fb0935; after is this PR's images. Both are real kagent install runs on kind with an OpenAI model.

  1. Agents list: a default install now creates k8s-agent and platform-agent, both Ready. On main the list is empty.
  2. Templates tab: six AgentTemplates now ship. The main run has a copy of k8s-agent applied with kubectl, so the template pages below compare the same data.
  3. Template details: the Skills section (AgentTemplateForm.tsx#L603) shows kagent · k8s-troubleshooting. On main only a note says the template has skills.
  4. Template edit: each skill is a card with a red remove button. "Add a kagent skill" (SkillsField.tsx#L305) lists the 5 built-in skills, and "Add your own skill" adds an OCI, Git or S3 card.
  5. New agent, inline template: the same skills editor now shows here too.
  6. Chat: platform-agent hands off with transfer_to_agent, runs load_skill k8s-troubleshooting and k8s_get_resources, then lists the kagent pods. load_skill ran in 2 of 4 tries. The other tries listed the pods without it.
  7. CLI: after kagent install, kubectl get agents,agenttemplates lists 2 Agents and 6 AgentTemplates. With --profile minimal (minimal.yaml#L4) it lists none.
pr3554-verify-reel.mp4

Screenshots

Before: Agents list after install before-agents-list
After: built-in k8s-agent and platform-agent after-agents-list
After: 6 built-in AgentTemplates after-templates-tab
Before: template details, skills hidden before-template-details-skills
After: template details, Skills section after-template-details-skills
Before: template edit, no skills editor before-template-edit-skills
After: template edit, skill card and add buttons after-template-edit-skills
After: Add a kagent skill catalog after-template-edit-builtin-catalog
Before: New agent inline template before-new-agent-inline-skills
After: New agent inline template with skills after-new-agent-inline-skills
After: platform-agent chat answer after-chat-platform-agent

🤖 written by Claude

@Charlesthebird Charlesthebird left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This automated review is a first pass. A manual review will follow once the blockers are addressed.


Nothing blocks merge. Two Medium findings are inline: the specialists bind no Kubernetes read tools, and a multi-line KAGENT_UI_BUILTIN_SKILLS override breaks the whole UI config.

✅ What I checked
  • ✅ Rendered AgentTemplate and Agent fields match the v1alpha3 CRD types (tools[].mcp.server, requireApproval, subAgent.templateRef, skills[].source.oci/path, harnessRef).
  • ✅ platform-agent calls k8s-agent, which has no subagents, so the compiler's one-level and no-repeat rules hold.
  • ✅ helm unittest on the chart with kagent-tools 0.3.1: 35 suites, 383 tests pass; go test ./ui/entrypoint/... passes.
  • ✅ UI validation matches the CRD patterns (OCI digest, Git URL and commit, S3 fields, relative paths, 50-skill cap, unique names).
  • ✅ Save keeps plugins and promptTemplate; mustToJson escapes <, so a skill description cannot close the <script> tag.

Written by 🤖

Comment thread ui/entrypoint/main.go Resolved
Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
@danielle-mustillo danielle-mustillo changed the title feat: ship the kagent-tools skills with a k8s-agent, and add skills to the agent template form feat: ship built-in Agents and skills editor Nov 12, 2026
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Nov 12, 2026

@Charlesthebird Charlesthebird left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for making these updates!

This LGTM now but just wondering if we really need 2 agents - I think just one "platform" agent should do it. And the description for the platform agent should be updated now to include that it sends "Kubernetes" questions to a specialist.

Screenshot 2026-11-12 at 12 07 55 PM

k8s-agent becomes the platform-kubernetes specialist AgentTemplate, and
platform-agent's description says it sends Kubernetes questions to a specialist.

Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Nov 12, 2026
Comment thread helm/kagent/values.yaml Outdated
builtins:
# -- Create the built-in Agent and offer the kagent-tools skills in the UI.
# The Agent needs `harnesses.enabled`, `harnesses.kagent.enabled` and `kagent-tools.enabled`.
enabled: true

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had thought we would have this disabled by default and only enable it by default with the kagent install flow.

Can you remind me why it's enabled by default here?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They rendered nothing on a plain install because they also depended on harnesses.enabled, but that was hard to see. builtins.enabled is now false in the chart and kagent install sets it to true, like harnesses.enabled. The chart now fails with a clear message when platform-agent is on but the kagent-default Harness or kagent-tools is off.


Written by 🤖

builtins.platformAgent now fails the render when the kagent-default Harness or
kagent-tools is off, instead of rendering nothing.

Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Nov 12, 2026
Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants