Repository navigation
Description
📋 Prerequisites
- I have searched the existing issues to avoid creating a duplicate
- By submitting this issue, you agree to follow our Code of Conduct
- I am using the latest version of the software
- I have tried to clear cache/cookies or used incognito mode (if ui-related)
- I can consistently reproduce this issue
🎯 Affected Service(s)
App Service
🚦 Impact/Severity
No impact (Default)
🐛 Bug Description
Kagent advertises Git, OCI, and S3 sources for Agent Plugin resources, but an
AgentTemplate using a network-backed source cannot currently become ready on
the Substrate runtime. Both the Go ADK runtime and the Claude harness materialize
their selected resources during process startup, before their readiness endpoint
is available. Outbound networking is not usable at that point in the golden
Actor lifecycle, so the fetch fails with a closed connection and the process
exits.
This leaves the AgentTemplate pending, the golden Actor in RESUMING, and its
worker occupied. The failure is reproduced with both a public Git repository
and a public, digest-pinned OCI artifact. It does not depend on source
credentials.
🔄 Steps To Reproduce
- Configure a Kagent
AgentTemplateusing the Go ADK harness and select an
Agent Plugin whose source is a public Git repository pinned to a commit. - Apply the template and wait for its generated
ActorTemplateto build a
golden Actor. - Observe that the template never becomes ready and the golden Actor remains
inRESUMING. - Inspect the golden Actor's container logs.
Initialized empty Git repository in /plugins/plugin-0/.git/
fatal: unable to access 'https://github.com/agentplugins/agent-plugins-example.git/': Send failure: Broken pipe
Failed to materialize Agent Plugins: materialize plugin 0: exit status 128
Observed with a public OCI skill artifact pinned by digest:
materialize skill "myskill": pull ghcr.io/supreme-gg-gg/myskill@sha256:...:
Get "https://ghcr.io/v2/": EOF
Failed to materialize Agent Plugins
The same class of failure occurs in the Claude harness while materializing a
plugin-selected skill, although its Git/TLS implementation reports the closed
connection as a TLS handshake failure.
🤔 Expected Behavior
An AgentTemplate using a valid Git, OCI, or S3 Agent Plugin resource reaches
Ready, and the plugin's selected skills and MCP configuration are available
to the agent. Golden creation must support any network access that Kagent
requires to materialize declared plugin resources.
📱 Actual Behavior
The runtime process attempts the Git fetch before it serves readiness. The
connection is closed during startup, materialization fails, and the process
exits before it can ever become ready. Golden creation consequently cannot
complete.
💻 Environment
No response
🔧 CLI Bug Report
No response
🔍 Additional Context
Temporary Workarounds:
- Bake the required plugin or skill content into the harness image and avoid a
runtime network fetch. This sacrifices normal Agent Plugin source semantics
and requires a new image for every resource revision. - Pre-populate the exact materialization destination in a custom image only if
the runtime's validation and path expectations remain satisfied. This is
brittle and should be treated as a development-only workaround.
📋 Logs
📷 Screenshots
No response
🙋 Are you willing to contribute?
- I am willing to submit a PR to fix this issue
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsBacklog
Activity
[-][BUG] Git-backed Agent Plugins cannot be materialized while creating Substrate golden Actors[/-][+][BUG] Git, OCI, and S3 Agent Plugin resources cannot be materialized while creating Substrate golden Actors[/+]supreme-gg-gg commentedon Aug 27, 2026
Note that in the case of Claude I was able to ask the Agent to clone the plugin repo and setup the plugin using the bash tool so it's definitely not a wrong harness setup. The issue is the network egress limitation by Substrate during golden image build.
Codex looked into upstream code and wrote some analysis, I will paste the following core idea here for record-keeping:
erauner12 commentedon Sep 20, 2026
Confirmed this on:
v1.0.0-alpha1v0.2.0-beta4I tested the same minimal, digest-pinned OCI skill through two independent registries. The artifact could be pulled and inspected successfully outside the Actor, but both registries failed identically during golden Actor creation:
The AgentTemplate conditions reached:
Accepted=TrueResolvedRefs=TrueCompatible=TrueReady=False, reasonActorTemplatePendingThe latest successful pre-skill revision remained available, while the skill-enabled desired revision never produced a golden snapshot.
One potentially useful diagnostic: the Substrate egress gateway recorded no CONNECT or registry request during the failed materialization attempts. Normal Actor traffic after startup did appear in the gateway logs and was authenticated and routed correctly. This seems consistent with materialization occurring before outbound Actor networking becomes usable, rather than a registry, credential, certificate, or artifact-content problem.
The test artifact was intentionally minimal—a scratch image containing only
SKILL.md—so image size and extraction complexity were not contributing factors.feat(substrate): the compiled ActorTemplate carries the revision's eg…
feat(substrate): the compiled ActorTemplate carries the revision's eg…
feat(substrate): the compiled ActorTemplate carries the revision's eg…
feat(substrate): the compiled ActorTemplate carries the revision's eg…
feat(substrate): the compiled ActorTemplate carries the revision's eg…
ProbstenHias commentedon Oct 4, 2026
We hit the same thing on:
v1.0.0-alpha70.3.0-alpha3We tried a public Git skill source pinned to a full commit, and a minimal digest-pinned OCI skill (a
FROM scratchimage with onlySKILL.md) on two public registries. All attempts failed the same way during golden Actor creation:The Agent ends with
Ready=False, reasonActorTemplateFailed,GoldenActorCrashed: golden actor crashed before its snapshot was taken. As in the comment above, the egress gateway has no request for these fetches. Normal Actor traffic after startup is logged and routed correctly. The only workaround we found is to removespec.skillsfrom the AgentTemplate.A related gap that will probably show up once materialization has egress: the translator adds exactly one origin per OCI source (
appendArtifactSourceDestinationingo/core/internal/translator/skills.go). For Docker Hub refs it addshttps://registry-1.docker.io:443. A real pull with go-containerregistry, the library the harness uses, needs more hosts:index.docker.io(go-containerregistry's default registry name fordocker.io, so it does not even hitregistry-1.docker.io),auth.docker.iofor the anonymous pull token, andproduction.cloudfront.docker.comfor blob redirects.ghcr.io, pluspkg-containers.githubusercontent.comfor blob redirects.I checked this with
crane --verboseoutside the cluster. I could not test it inside the cluster, because the startup bug fails first. Because the egress policy is derived and immutable per revision, users cannot add these hosts themselves. So the fix probably needs to allowlist the token realm and blob redirect hosts for OCI sources, or materialize skills outside the Actor's egress policy (for example in the controller).feat(substrate): the compiled ActorTemplate carries the revision's eg…
fix(a2agateway): end a send whose runtime is lost, and delete a pause…
fix(session): end a working turn whose runtime stopped saving events
feat(session): suspend a runtime paused for input once the pause is o…
fix(session): leave an expired pause on a lost node alone, and delete…
feat(substrate): the compiled ActorTemplate carries the revision's eg…
fix(a2agateway): end a send whose runtime is lost, and delete a pause…
fix(session): end a working turn whose runtime stopped saving events
feat(session): suspend a runtime paused for input once the pause is o…
fix(session): leave an expired pause on a lost node alone, and delete…
marcellodesales commentedon Oct 16, 2026
Reporting on the same here:
kagent v1.0.0-alpha13
Substrate v0.5.0
Claude-code harness
Is there a direction to this?
supreme-gg-gg commentedon Oct 17, 2026
OCI skills should be available after #3203 which just merged, can you try v1 alpha14?