Skip to content

feat(helm): add example Agents with the kagent-tools skills - #3417

Draft
danielle-mustillo wants to merge 12 commits into
kagent-dev:mainfrom
danielle-mustillo:danielle-mustillo/skills-examples
Draft

danielle-mustillo wants to merge 12 commits into
kagent-dev:mainfrom
danielle-mustillo:danielle-mustillo/skills-examples

Conversation

@danielle-mustillo

@danielle-mustillo danielle-mustillo commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Why

kagent 1.x dropped the ready-made example agents that 0.x shipped as Helm charts. kagent-dev/tools#91 ports their domain guidance to Agent Skills inside the kagent-tools image. This PR adds a chart flag that installs example Agents that load those skills, so a user can try the skills without writing their own Agent.

What changed

  • exampleAgents.enabled (off by default) installs one Go ADK Harness, kagent-tools-example, and three Agents on it:

    Agent Skills Tools
    kagent-tools-cluster-ops k8s-troubleshooting, helm-release-management, argo-rollouts-progressive-delivery, prometheus-observability 29
    kagent-tools-networking istio-traffic-debugging, cilium-network-debugging 31
    kagent-tools-security kubescape-security-posture 10

    Each Agent uses default-model-config, the built-in prompts, one binding to the chart's kagent-tools MCP server, and the skills from opt/kagent-tools-skills in the kagent-tools image, pinned by @sha256 digest.

  • make helm-publish resolves the digest of the kagent-tools image that the chart depends on and packages it as files/kagent-tools-image.json. It records no digest for kagent-tools 0.3.0 and earlier, which have no skills.

  • exampleAgents.snapshotLocation defaults to gs://ate-snapshots/kagent/, the bucket that the Substrate chart's built-in rustfs store creates.

exampleAgents:
  enabled: true
  skillsImage: ghcr.io/kagent-dev/kagent/tools@sha256:<digest>

Scope

Tradeoffs

The original request was for a single example Agent. One Agent cannot hold all seven skills. The skills name 64 tools, one binding lists at most 50, and the whole tool server exceeds the 128-tool limit of OpenAI and Azure OpenAI. Two bindings to the same server work on Go ADK. The Claude and Codex harnesses reject them. Three Agents with one binding each run on every harness.

Blast radius

Nothing renders unless a user sets the flag, and the render fails with a clear message when skillsImage is missing or snapshotLocation is empty. The skills image mounts read-only in full, so an Agent can read the files of skills it did not select. Skill selection is not a security boundary.

Verification

  • helm unittest helm/kagent (347 passed), scripts/package-release-charts_test.sh, and make lint pass.
  • The new e2e test TestExampleAgentToolsSkills checks that each Agent advertises exactly its own skills and loads one of them, on the kagent, byo-adk, Claude, and Codex harnesses with a mock model. It passed 3 of 3 runs on a local Kind cluster with an image built from feat: ship kagent 1.x skills bundle in the tools OCI image tools#91. CI skips it until a kagent-tools release ships the skills.
  • On a local Kind cluster, all three Agents loaded a skill and called its tools in 3 of 3 runs each on Go ADK with Azure OpenAI and with Gemini. Claude with Anthropic and Codex with OpenAI also passed one run per Agent. After the networking Agent gained four Kubernetes read tools, it called them after it loaded its skill, 3 of 3 runs on each provider.

@github-actions github-actions Bot added the enhancement New feature or request label Oct 28, 2026
@danielle-mustillo danielle-mustillo changed the title feat(helm): add an example Agent with the kagent-tools skills feat(helm): add example Agents with the kagent-tools skills Oct 28, 2026
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Oct 28, 2026
One binding lists at most 50 tools, Claude and Codex accept each MCP server
once, and OpenAI accepts at most 128 tools per request. Three Agents with one
binding each fit every harness.

Signed-off-by: Danielle Mustillo <[email protected]>
Read each example Agent's skills from the chart template and run every
Agent shape on every harness. Each must advertise only its own skills and
load one of them.

Signed-off-by: Danielle Mustillo <[email protected]>
The example Harness copied the release's Go ADK image into
spec.workload.image, which marks it as an explicit override that no longer
follows the image catalog. Leave workload unset so the controller selects
the release default.

Give the networking Agent the Kubernetes read tools its Istio and Cilium
skills need to find pods, services, logs, and events. Update the e2e README
for the three-Agent test.

Signed-off-by: Danielle Mustillo <[email protected]>
…writes

Only release packaging writes kagent-tools-image.json, and it writes it
into its staging folder, never into the chart sources.

Signed-off-by: Danielle Mustillo <[email protected]>
It had one caller. The example Agents' setup checks now sit together at
the top of example-agents.yaml.

Signed-off-by: Danielle Mustillo <[email protected]>
tools-image-metadata.sh now writes {image, version} to the output file
itself, and removes an old file first. Release packaging checks the
version against the chart's kagent-tools dependency and copies the file,
instead of parsing a Buildx-shaped record back into an image reference.
The Makefile recipe no longer juggles a temp file.

Signed-off-by: Danielle Mustillo <[email protected]>
@danielle-mustillo
danielle-mustillo force-pushed the danielle-mustillo/skills-examples branch from 318c094 to 8ba54e1 Compare October 29, 2026 02:41
The template now shows the Harness and the three Agents as plain YAML,
instead of a dictionary of names, skills and tools fed to a range loop,
so a reader sees what the chart deploys. The rendered output is
unchanged. The skills e2e test reads each Agent from the YAML lines.

Signed-off-by: Danielle Mustillo <[email protected]>
exampleAgents.snapshotLocation now defaults to gs://ate-snapshots/kagent/, the bucket that the Substrate chart's built-in rustfs store creates. A user who turned off rustfs sets their own bucket.

Reword the example Agents comments, docs, and messages for plain technical writing: no semicolons, active voice, and one idea per sentence.

Signed-off-by: Danielle Mustillo <[email protected]>
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Oct 29, 2026
@danielle-mustillo
danielle-mustillo marked this pull request as ready for review October 29, 2026 03:52
@danielle-mustillo
danielle-mustillo requested a review from a team as a code owner October 29, 2026 03:52
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Oct 29, 2026
A PR number goes stale once kagent-tools ships the skills. Say that kagent-tools 0.3.0 and earlier have no skills folder, which is the rule release packaging enforces.

Signed-off-by: Danielle Mustillo <[email protected]>
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Oct 29, 2026
tools:
- k8s_apply_manifest
- k8s_check_service_connectivity
- k8s_delete_resource

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.

delete and uninstall tools lack requireApproval here

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.

2 participants