{{ message }}
feat(harness): skill support for the Harness server + CLI#598
Merged
Conversation
- harness_app: a harness can declare skills; each is downloaded from the skill hub (GET /v1/skills/download/<name>), extracted to /tmp/<timestamp>/, renamed to the skill's declared name (ADK requires dir name == SKILL.md name), loaded via load_skill_from_dir and mounted as a SkillToolset. Skills that fail to download/load (e.g. malformed name, not a zip) are skipped with a warning so the rest still load. - harness Harness.tools/skills are comma-separated strings split server-side (_split_csv), so CLI/curl just pass strings. - CLI: 'harness add' gains --skills; 'harness invoke' gains --tools/--skills for one-time overrides; client timeout is tunable via HARNESS_TIMEOUT (default 600s) for long tool/skill-driven runs. - skill hub base URL configurable via SKILL_HUB_DOWNLOAD_URL.
zakahan
approved these changes
Jun 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

What
Lets a harness mount skills from the Volcengine skill hub, alongside the
existing model/tools customization.
Changes
veadk/cloud/harness_app.pyHarnessgains askillsfield. Bothtoolsandskillsare nowcomma-separated strings split server-side (
_split_csv), so CLI/curl justpass strings (e.g.
"web_search,link_reader")._download_and_extract_skill:GET <SKILL_HUB_DOWNLOAD_URL>/<name>→ extractthe zip into
/tmp/<timestamp>/→ rename the dir to the skill's declaredname (ADK's
load_skill_from_dirrequiresdir name == SKILL.md name) →return the dir. Includes a zip-slip guard. Hub base URL is configurable via
SKILL_HUB_DOWNLOAD_URL._create_skill_toolset: loads each skill and mounts them as oneSkillToolset. Skills that fail to download/load (malformed name, not a zip,404, …) are skipped with a warning so the rest still load; returns
Noneif none load.
veadk/cli/cli_agentkit.pyharness addgains--skills.harness invokegains--tools/--skillsfor one-time overrides.HARNESS_TIMEOUT(default 600s) — tool/skilldriven agent runs can take minutes.
Verified locally (against the real skill hub + Ark models)
load_skill_from_dir→SkillToolsetmount → agent build, via internal call and HTTP/harness/add(string and array forms).
data-visualization-cloud, byted-arkclaw-paper-research, academic-deep-research, web-scraper, the 2 valid skills load and the 2invalid ones (not a zip on the hub) are skipped — the run continues.
--tools web_search,link_reader+ skills on two models(deepseek-v4-flash, doubao-seed-2-0-code-preview): the model loads the
data-visualizationskill, callsrun_skill_script/web_search, andproduces an HTML dashboard.
Notes
run_codeis unrelated to this PR but worth flagging: passing large codepayloads as a tool-call argument can trip ADK/litellm's
json.loads(tool_call.arguments)(truncated →Unterminated string). Skillscripts (
run_skill_script) are unaffected.python-frontmatter,already a base dep;
google.adk.skillsexists in adk 1.32 and 2.x).🤖 Generated with Claude Code