agents: caller-provided skills hook — repos can ship their own opencode skills
A consuming repo can now add repo-specific skills under .gitea/agent-skills/<name>/ (SKILL.md + skill.json + optional setup.sh); the framework installs the ones allowed for the running agent. This keeps deploy-target / infra specifics in the repo they belong to instead of hardcoded in the shared workflow. - install-caller-skills.sh: scans the caller workspace, installs each skill whose skill.json `agents` list includes the running agent, runs its optional setup.sh with all inherited secrets available as $SECRETS_JSON (toJSON(secrets) — so a caller's setup can read repo-specific secret names the framework can't know), and merges the allowed skills into the permission.skill allow-list. - agent.yml: replace the hardcoded node1-ssh step with the generic caller-skills step (passes NAME, WORKSPACE, SECRETS_JSON). - Remove the built-in node1-ssh skill: delete skill-node1-ssh.sh, drop "node1-ssh" from agents.json (senior/lead). The homelab repo now owns that skill. - run-agent.sh: note caller-provided skills aren't in the roster (route them via the caller's AGENTS.md). toJSON(secrets) verified supported on this Gitea (1.27) via an isolated probe. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
63dbd2727f
commit
0f8893330f
@@ -12,9 +12,10 @@ set -u
|
||||
[ -z "$CMT" ] && CMT="(a new issue was just opened — assess it)"
|
||||
THREAD=$(cat /tmp/thread.md 2>/dev/null); [ -z "$THREAD" ] && THREAD="(no prior comments)"
|
||||
DESC=$(jq -r --arg a "$NAME" '.[$a].desc' /tmp/agents.json)
|
||||
# Include each teammate's skills so an agent (esp. @pm) can route by capability — e.g. only
|
||||
# @senior/@lead hold node1-ssh, so a node1 task must not go to @junior. Skill *names* only; the
|
||||
# scoped how-to detail stays hidden per the permission.skill allow-list.
|
||||
# Include each teammate's registry skills so an agent (esp. @pm) can route by capability — e.g. only
|
||||
# skill-holders should get a task that needs that skill. Skill *names* only; the scoped how-to detail
|
||||
# stays hidden per the permission.skill allow-list. (Caller-provided skills from a repo's
|
||||
# .gitea/agent-skills/ are not in this roster — document that routing in the caller's AGENTS.md.)
|
||||
ROSTER=$(jq -r 'to_entries | map("- @\(.key): \(.value.desc) (vision: \(.value.vision); skills: \(.value.skills | if length>0 then join(", ") else "none" end))") | join("\n")' /tmp/agents.json)
|
||||
if [ "$VISION" = "true" ]; then CAP="You CAN read images attached to the issue."; else CAP="You CANNOT read images — you are a text-only model."; fi
|
||||
NOTE=""
|
||||
|
||||
Reference in New Issue
Block a user