Skip to content

Comments

Add rich embedded skills with full test coverage#199

Merged
bussyjd merged 10 commits intooisin/skillsfrom
feat/rich-skills
Feb 20, 2026
Merged

Add rich embedded skills with full test coverage#199
bussyjd merged 10 commits intooisin/skillsfrom
feat/rich-skills

Conversation

@bussyjd
Copy link
Collaborator

@bussyjd bussyjd commented Feb 20, 2026

Summary

Builds on top of #197's host-path PVC injection architecture to add production-ready embedded skills.

  • Replaces the minimal ethereum skill with obol-blockchain — 194-line SKILL.md + rpc.py helper + ERC-20/contract references + network discovery
  • Adds obol-k8s — Kubernetes diagnostics via ServiceAccount API with kube.py helper (pods, logs, events, deployments, troubleshooting)
  • Adds obol-dvt — Obol DVT cluster monitoring with API examples (validator effectiveness, operator audit, exit coordination)
  • Keeps hello as-is for smoke testing

Zero changes to infrastructure code (embed.go, openclaw.go, resolve.go, CLI commands).

Test coverage

Every layer of the skills pipeline is tested:

Layer Tests Type
Embed discovery TestGetEmbeddedSkillNames, TestCopySkills, TestCopySkillsSkipsExisting Unit
Volume injection TestSkillsVolumePath, TestStageDefaultSkills, TestInjectSkillsToVolume + edge cases Unit
Staging on sync TestIntegration_SkillsStagedOnSync — verifies skills + scripts + references in deployment dir and PVC volume Integration
Pod visibility TestIntegration_SkillsVisibleInPodls and head inside running pod Integration
Runtime sync TestIntegration_SkillsSync — custom skill via obol openclaw skills sync --from Integration
Idempotency TestIntegration_SkillsIdempotentSync — re-sync preserves user customizations Integration
Skill inference TestIntegration_SkillInference — agent references loaded skills during chat completion Integration
Script validation TestIntegration_SkillsSmokeTest — 23-assertion Python smoke test piped into pod (rpc.py against eRPC, kube.py against K8s API, DVT API health) Integration

Supersedes

Closes #196 — the rich skills content from that PR is integrated here on top of the CTO's host-path injection architecture from #197.

Remove hardcoded provider map (anthropic/openai) and instead query the
running llmspy pod's providers.json for env var names and available
providers. This means any provider llmspy supports (zai, deepseek,
google, mistral, etc.) works with `obol model setup` without code
changes.
Extract pure functions (parseProviderEnvKey, parseAvailableProviders,
buildProviderStatus, patchLLMsJSON) from kubectl-calling wrappers so
they can be tested without a running cluster. 23 test cases covering
parsing, status cross-referencing, JSON patching, and edge cases.
Adds TestIntegration_ZaiInference that exercises a provider NOT in the
old hardcoded map, proving zero-code-change provider support. Uses
glm-4-flash via llmspy routing with ZHIPU_API_KEY from .env.
Replace the minimal ethereum skill with three production-ready skills:
- obol-blockchain: Ethereum JSON-RPC via eRPC with rpc.py helper,
  ERC-20 reference, contract addresses, ENS, gas estimation
- obol-k8s: Kubernetes cluster diagnostics via ServiceAccount API
  with kube.py helper for pod/service/event introspection
- obol-dvt: Obol DVT cluster monitoring with API examples for
  validator effectiveness, operator auditing, and exit coordination

Keeps the hello skill as-is for smoke testing.

Test coverage spans every layer of the skills pipeline:
- Unit: embed discovery, copy, skip-existing, volume path, staging,
  injection, no-op without skills
- Integration: staging on sync, pod visibility via kubectl exec,
  skills sync --from, idempotent re-sync, skill-through-inference
  (agent references loaded skills), Python smoke tests piped into pod
bussyjd and others added 6 commits February 20, 2026 13:36
Replace stale ethereum skill references with the four embedded skills
(hello, obol-blockchain, obol-k8s, obol-dvt). Add standalone Skills
section to README, update CLAUDE.md delivery flow and source file
listings, and expand obol-stack-dev skill with skills system coverage.
…tests

- Use glm-5 instead of glm-4-flash (not in providers.json)
- Pass explicit instance ID to skills sync when multiple instances exist
Change the name on skills and test
@bussyjd bussyjd merged commit 249361f into oisin/skills Feb 20, 2026
@OisinKyne OisinKyne deleted the feat/rich-skills branch February 20, 2026 12:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants