Skip to content

feat: publish the skills-only plugin root as its own image - #98

Open
danielle-mustillo wants to merge 3 commits into
mainfrom
danielle-mustillo/skills-image
Open

danielle-mustillo wants to merge 3 commits into
mainfrom
danielle-mustillo/skills-image

Conversation

@danielle-mustillo

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

Copy link
Copy Markdown

Why

The skills-only Agent Plugin root from #91 lives inside the tools image. An Agent that mounts only that root pulls 195 MiB compressed to read 24 KiB of skill files. Closes #97.

What changed

  • A new skills stage in the Dockerfile builds ghcr.io/kagent-dev/kagent/tools-skills from scratch. The image holds only /opt/kagent-tools-skills, in one 5 KiB layer.
  • tag.yaml pushes tools-skills on release. ci.yaml builds it for amd64 and arm64.
  • docs/kagent-skills.md and README.md point skills-only mode at tools-skills.

Scope

  • The tools image does not change. It still holds the skills root, so existing Agents keep working.
  • v0.4.0 is the first release that pushes tools-skills. If GitHub creates the package as private, a repo admin must make it public once in the package settings.

Blast Radius

The default build still produces the tools image, because the skills stage sits above the last stage. tag.yaml pushes tools-skills after the tools image and the chart, so a failed first push of the new package does not block them.

Verification

  • make plugin-verify and make test pass. TestSkillsImageMatchesToolsImage checks that tools-skills holds the same skills root as the tools image and nothing else.
  • With feat(helm): add example Agents with the kagent-tools skills kagent#3417 on Kind, TestExampleAgentToolsSkills passed all 12 subtests in 2 of 2 runs against tools-skills pinned by digest. On Azure OpenAI, each example Agent loaded a skill and called a tool from it.
  • A cold pull on a Kind node took 2.06 to 2.43 s for tools and 12 to 13 ms for tools-skills.

An Agent that mounts opt/kagent-tools-skills from the tools image pulls
the whole tools image (195 MiB compressed) to read the skills. Build the
same root as ghcr.io/kagent-dev/kagent/tools-skills, a one-layer image
from scratch of about 5 KiB compressed, and push it on release.

- Dockerfile: a skills stage above the final stage, so the tools image
  build is unchanged.
- Makefile: docker-build-skills; plugin-verify builds and checks both.
- verify-plugin-image.sh and TestSkillsImageMatchesToolsImage: the
  skills image holds exactly the tools image's skills root.
- tag.yaml pushes the skills image; docs point skills-only mode at it.

Closes #97

Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
@danielle-mustillo
danielle-mustillo marked this pull request as ready for review October 29, 2026 17:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Publish the skills-only plugin root as its own image

1 participant