What exists today
A harness's Skills are stored as literal file content: _skills_prepare (gateway) validates an uploaded {name, files:[{path, content}]} bundle and stores it verbatim (inline, or blob-offloaded past 48KB); _write_skills (runner) materializes exactly those bytes into the workspace each turn. There is no path anywhere in the gateway for a harness to instead point at an external source and have its content kept current automatically. Once uploaded, a skill is frozen until someone re-uploads it by hand.
The one place the gateway fetches content from a URL at all is _media_fetch (gateway/app.py:8585) — but that's per-turn, caller-supplied input (an image/video attached to a single message), not a standing, harness-owner-configured source the gateway would remember and re-pull on its own initiative. There's no precedent in this codebase for that second thing.
Why this is worth raising now
For a Skill — usually a handful of files, often edited directly in the console — re-uploading by hand is a reasonable default. It becomes a real limitation for anything larger and independently maintained: a real current" is a meaningful, ongoing need rather than a one-time paste. If harness-attached capabilities grow to include things shaped like that (a whole plugin directory, for instance, rather than a short Markdown skill), they'd inherit this same all-or-nothing-manual-upload limitation unless addressed at the Skills layer first, or explicitly designed around when that capability is added.
What this issue is asking for
A way for a harness's attached content to optionally carry a source reference instead of only literal content — e.g. a git URL + ref — with some sync point (on harness save, on a schedule, or an explicit "check for updates" action) that re-fetches and re-stores it. Not proposing a specific mechanism here; raising it to get direction on whether this is wanted at all before anyone builds it, since it's a materially different trust surface than upload — the gateway process would be making outbound fetches to an owner-supplied URL on its own, rather than only ever relaying content a request already contained.
What exists today
A harness's Skills are stored as literal file content:
_skills_prepare(gateway) validates an uploaded{name, files:[{path, content}]}bundle and stores it verbatim (inline, or blob-offloaded past 48KB);_write_skills(runner) materializes exactly those bytes into the workspace each turn. There is no path anywhere in the gateway for a harness to instead point at an external source and have its content kept current automatically. Once uploaded, a skill is frozen until someone re-uploads it by hand.The one place the gateway fetches content from a URL at all is
_media_fetch(gateway/app.py:8585) — but that's per-turn, caller-supplied input (an image/video attached to a single message), not a standing, harness-owner-configured source the gateway would remember and re-pull on its own initiative. There's no precedent in this codebase for that second thing.Why this is worth raising now
For a Skill — usually a handful of files, often edited directly in the console — re-uploading by hand is a reasonable default. It becomes a real limitation for anything larger and independently maintained: a real current" is a meaningful, ongoing need rather than a one-time paste. If harness-attached capabilities grow to include things shaped like that (a whole plugin directory, for instance, rather than a short Markdown skill), they'd inherit this same all-or-nothing-manual-upload limitation unless addressed at the Skills layer first, or explicitly designed around when that capability is added.
What this issue is asking for
A way for a harness's attached content to optionally carry a source reference instead of only literal content — e.g. a git URL + ref — with some sync point (on harness save, on a schedule, or an explicit "check for updates" action) that re-fetches and re-stores it. Not proposing a specific mechanism here; raising it to get direction on whether this is wanted at all before anyone builds it, since it's a materially different trust surface than upload — the gateway process would be making outbound fetches to an owner-supplied URL on its own, rather than only ever relaying content a request already contained.