Skip to content

Use Skills

Skills are demand-loaded knowledge bundles that PromptKit activates per turn based on the conversation. Omnia syncs skill content from Git, OCI, or ConfigMaps into the workspace PVC and exposes it to agents via the PromptPack CRD.

This guide walks through:

  1. Create a SkillSource to sync content.
  2. Attach the source to a PromptPack via spec.skills.
  3. Verify the manifest, mount, and runtime wiring.
  • A running Omnia operator with the --workspace-content-path flag set (defaults to /workspace-content).
  • A workspace with shared content storage configured (the workspace’s content PVC must exist).
  • A PromptPack already deployed.

Save as skills.yaml:

apiVersion: omnia.altairalabs.ai/v1alpha1
kind: SkillSource
metadata:
name: support-skills
namespace: dev-agents
spec:
type: git
git:
url: https://github.com/anthropic/skills
ref: { tag: v1.4.0 }
interval: 1h
targetPath: skills/anthropic
filter:
include: ["ai-safety", "pdf-processing"]

Apply and wait for the controller to fetch:

Terminal window
kubectl apply -f skills.yaml
kubectl get skillsource support-skills -n dev-agents -w

When phase=Ready and skillCount reflects the filtered set, the source is synced.

Terminal window
kubectl get skillsource support-skills -n dev-agents \
-o jsonpath='{.status.conditions[?(@.type=="ContentValid")]}'

status: "True" means every retained SKILL.md parsed cleanly.

Patch the existing pack:

Terminal window
kubectl patch promptpack support-pack -n dev-agents --type=merge --patch '
spec:
skills:
- source: support-skills
include: ["ai-safety"]
mountAs: compliance
skillsConfig:
maxActive: 5
selector: model-driven
'

The PromptPack reconciler resolves the references, writes a JSON manifest into the workspace PVC, and surfaces three conditions:

Terminal window
kubectl get promptpack support-pack -n dev-agents \
-o jsonpath='{range .status.conditions[?(@.type=="SkillsResolved")]}{.status} {.reason}{"\n"}{end}'
# Expected: "True AllSkillsResolved"

Other useful condition queries:

Terminal window
# All skills from this pack collide with no other source's skill names.
kubectl get promptpack support-pack -n dev-agents \
-o jsonpath='{.status.conditions[?(@.type=="SkillsValid")]}'
# Every skill's allowed-tools is declared in the pack.
kubectl get promptpack support-pack -n dev-agents \
-o jsonpath='{.status.conditions[?(@.type=="SkillToolsResolved")]}'

If SkillToolsResolved=False, a skill references a tool the pack doesn’t declare — PromptKit would reject the activation at runtime, so add the tool to the pack or remove it from the skill’s allowed-tools.

Step 3: Verify the runtime sees the manifest

Section titled “Step 3: Verify the runtime sees the manifest”

The next reconcile of any AgentRuntime referencing this pack will recreate its runtime pod with:

  • the workspace content PVC mounted at /workspace-content (read-only);
  • env var OMNIA_PROMPTPACK_MANIFEST_PATH=/workspace-content/manifests/support-pack.json.

Inspect the running pod:

Terminal window
kubectl exec -it <agent-pod> -c runtime -- env | grep OMNIA_PROMPTPACK
kubectl exec -it <agent-pod> -c runtime -- cat $OMNIA_PROMPTPACK_MANIFEST_PATH

Check the runtime logs for skill registration:

Terminal window
kubectl logs <agent-pod> -c runtime | grep -i skill

Open a session and ask the agent something the skill addresses (e.g. for ai-safety, ask about handling sensitive content). PromptKit’s model-driven selector hands the LLM a Phase-1 index of available skills; the LLM calls the skill__activate tool to load the relevant one before answering.

You can confirm activation in the session-api tool-calls table:

Terminal window
curl -s http://session-api/api/v1/sessions/{id}/tool-calls | jq '.[] | select(.tool=="skill__activate")'
SymptomLikely causeFix
SkillsResolved=False / LookupFailedReferenced SkillSource doesn’t exist in the same namespaceCheck kubectl get skillsource -n <pack-ns>; per-workspace, no cross-namespace lookup
SkillsResolved=False / LookupFailed: ... no synced artifact yetThe SkillSource hasn’t completed its first fetchWait for SkillSource.status.phase=Ready
SkillsValid=False / NameCollisionTwo referenced sources publish skills with the same nameUse include on one of the refs to disambiguate
SkillToolsResolved=False / UnknownToolA SKILL.md allowed-tools references a tool not in the packEither declare the tool in the pack or drop it from the skill
Runtime pod never picks up skills--workspace-content-path flag unset on the operatorSet the flag in the operator deployment; default /workspace-content
Runtime can’t read the manifestPVC isn’t mounted (volume workspace-content missing on the pod)Confirm WorkspaceContentPath on AgentRuntimeReconciler and that the per-namespace PVC workspace-{ns}-content exists