Skip to content

feat(harness): mount tool images read-only into the runtime - #3192

Open
QuentinBisson wants to merge 1 commit into
kagent-dev:mainfrom
giantswarm:feat/harness-tool-images
Open

QuentinBisson wants to merge 1 commit into
kagent-dev:mainfrom
giantswarm:feat/harness-tool-images

Conversation

@QuentinBisson

@QuentinBisson QuentinBisson commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Agents need CLIs their harness image does not ship (go, kubectl, helm). Today that means an image built FROM the harness image, rebuilt for every release, or skills and plugins, which are capped at 100 MiB, never reach PATH, and land in every snapshot. #3190 has the full motivation.

Change

Harness.spec.workload.toolImages[] lists digest-pinned OCI images. The controller adds one Substrate image volume per entry to the ActorTemplate, mounted read-only at /opt/kagent/tools/<name>, for every runtime. It sets KAGENT_TOOL_PATHS to the colon-joined bin/ directories instead of PATH, since a template PATH would replace the image's; the Claude and Codex harnesses, the Go ADK and the Python ADK each append it to their own PATH at start, so the image's binaries always win. The variable is reserved in spec.env, the list is capped at 16 entries and is part of revision identity, volume names carry a tool- prefix so they cannot collide with the built-in volumes, and the Harness edit form in the UI keeps the field it does not author. Sandbox guests run in their own tools image and do not see the mounts. Docs describe the tool image contract (files under one prefix with bin/, static or musl-compatible binaries).

This is a typed, digest-pinned list with a controller-fixed mount and environment contract, not a volume or container passthrough. Names, the mount path and the variable name are open to maintainer preference.

Closes #3190

@github-actions github-actions Bot added the enhancement New feature or request label Oct 13, 2026
@QuentinBisson
QuentinBisson force-pushed the feat/harness-tool-images branch from e86d376 to 7c8e5d9 Compare October 13, 2026 22:37
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Oct 13, 2026
Harness.spec.workload.toolImages lists digest-pinned OCI images. The
controller adds one Substrate image volume per entry to the ActorTemplate,
mounted read-only at /opt/kagent/tools/<name> for every runtime, and sets
KAGENT_TOOL_PATHS to the colon-joined bin directories. Each managed runtime
appends them to its own PATH after the image's binaries; the variable is
reserved in Harness.spec.env. The Harness edit form keeps the field it does
not author.

Closes kagent-dev#3190

Signed-off-by: QuentinBisson <quentin@giantswarm.io>
@QuentinBisson
QuentinBisson force-pushed the feat/harness-tool-images branch from 7c8e5d9 to 5c3df66 Compare October 13, 2026 22:48
@QuentinBisson
QuentinBisson marked this pull request as ready for review October 13, 2026 23:14
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.

[FEATURE] Mount tool images into a Harness's filesystem

1 participant