feat(skills): ship sample Parsec-native skills + bake into image#27
feat(skills): ship sample Parsec-native skills + bake into image#27PalmPalm7 wants to merge 1 commit into
Conversation
… image Deployed Parsec (e.g. parsec-dev) showed an empty Skills panel because the loader + GET /api/skills (rhpds#23) and the Skills UI (rhpds#25) had nothing to discover: the repo's skills/ root held only .gitkeep, it was never COPYed into the image, skills.plugin_paths defaulted to [], and the deploy mounts no skills. This ships three real Parsec-native starter skills under skills/ — cost-spike-investigation (cost), abuse-account-detection (security), aap2-job-failure-triage (aap2) — and adds `COPY skills/ skills/` to the production image so the default `skills.project_root: "skills"` (-> /app/skills) discovers them. Because the change is in the image, it auto-deploys via the existing build webhook + ImageChange rollout — no manifest or playbook change required. Additive and read-only: the Skills tab is display-only; nothing executes these skills yet (that is the Phase 2 adapter wiring). Adds tests/test_shipped_skills.py to guard the shipped skills (load_strict, all parsec-native, zero validation warnings). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
In short, currently parsec-dev doesn't have the skills displayed because nothing puts any skill content on dev to display. The loader and UI (PRs #23/#25) work fine — /api/skills returns 200 — but it scans /app/skills, which is empty: the repo ships no SKILL.md (just a .gitkeep), the Dockerfile never copies skills/ into the image, plugin_paths is [], and the deploy mounts no skills. So it correctly finds zero skills.
|
Code Review — PR #27Scope: 5 files, +177 lines — 3 seed skills + Dockerfile COPY + test Findings (3)All three findings share the same root issue: 1. cost-spike-investigation: 2. aap2-job-failure-triage: 3. abuse-account-detection: No other issues found. Dockerfile COPY placement, test imports, and frontmatter validation all look correct. Clean PR. |


Follow-up to the Agent SDK migration phase 1 (#23 loader +
GET /api/skills, #25 Skills UI). Those PRs added the machinery to discover and display skills, but deployed Parsec still shows an empty Skills panel — because nothing equips any skill content.What's the problem
On
parsec-dev,GET /api/skillsreturns{"count":0,"skills":[]}(HTTP 200 — the endpoint works, it just finds nothing). Root cause:skills/root holds only.gitkeep,dockerfiles/DockerfileneverCOPYsskills/into the image,skills.plugin_pathsdefaults to[], and the deploy mounts no skills.So the default
skills.project_root: "skills"resolves to/app/skills, which doesn't exist in the image → zero skills discovered.What this changes
skills/, mapped to existing sub-agent domains:cost-spike-investigation(cost)abuse-account-detection(security)aap2-job-failure-triage(aap2)COPY skills/ skills/— to the production image, so the defaultproject_root: "skills"(→/app/skills) discovers them.tests/test_shipped_skills.pyguarding the shipped skills (load_strict(), all parsec-native, zero validation warnings).Because the content lives in the image, it auto-deploys via the existing build webhook +
ImageChangerollout — no manifest or playbook change required. (Mounting external skill repos at runtime via a ConfigMap +plugin_pathsremains available for environments that want it; that's a separate, manifest-level change.)Additive and read-only. The Skills tab is display-only; nothing executes these skills yet — that's the Phase 2 adapter wiring (#24).
How to verify
Result
src/) + pytest (89 passed, incl. the new guard).GET /api/skillsreturnscount: 3and the Skills sidebar lists the three cards (parsec-native badges) instead of the "No skills discovered" empty state.