SkillSource CRD
The SkillSource custom resource fetches AgentSkills.io-formatted skill content from an upstream source (Git, OCI, or ConfigMap) into the workspace content PVC, where PromptPack resources can reference it via spec.skills.
A skill is a directory containing a SKILL.md file with YAML frontmatter (name, description, optional allowed-tools, metadata) and a Markdown body that PromptKit loads on demand.
Example
Section titled “Example”apiVersion: omnia.altairalabs.ai/v1alpha1kind: SkillSourcemetadata: name: anthropic-skills namespace: dev-agentsspec: type: git git: url: https://github.com/anthropic/skills ref: tag: v1.4.0 interval: 1h timeout: 5m targetPath: skills/anthropic filter: include: - "ai-safety/*" - "pdf-processing/*" exclude: - "**/draft-*"| Field | Type | Description |
|---|---|---|
type | git | oci | configmap | Required. Selects the source variant; exactly one of git/oci/configMap must be set. |
git | object | Git source: url, optional ref (branch/tag/commit), path (subdirectory), secretRef. |
oci | object | OCI source: url (e.g. oci://ghcr.io/org/repo:tag), insecure, secretRef. |
configMap | object | ConfigMap source: name. The fetcher reads SKILL.md files keyed by path (__ ⇒ /). |
interval | duration | Required. Reconciliation poll interval (e.g. 1h). |
timeout | duration | Per-fetch timeout (default 60s). |
suspend | bool | Pause reconciliation when true. |
targetPath | string | Path under the workspace content PVC where synced content lands. Defaults to skills/{source-name}. |
filter | object | Post-fetch filter — only directories matching are kept. See below. |
createVersionOnSync | bool | Whether to create a content-addressable snapshot per sync (default true). |
Filter
Section titled “Filter”filter: include: # path globs (relative to targetPath); empty = include all - "safety-*" exclude: # path globs applied after include - "**/draft-*" names: # exact frontmatter `name:` matches; empty = no name filter - "ai-safety"Status
Section titled “Status”| Field | Description |
|---|---|
phase | Pending / Initializing / Ready / Fetching / Error. |
observedGeneration | Last spec generation the controller has processed. |
artifact | Synced revision, content path, version (SHA256-prefixed), checksum, size. |
skillCount | Number of skills retained after the filter. |
conditions[type=SourceAvailable] | True when the upstream is reachable and the latest fetch succeeded. |
conditions[type=ContentValid] | True when every retained SKILL.md parses cleanly and there are no duplicate names within the source. |
lastFetchTime / nextFetchTime | Timestamps of the most recent and next scheduled fetch. |
Resolution chain
Section titled “Resolution chain”SkillSourcesyncs content from the upstream into the workspace PVC at<workspace-pvc>/<workspace>/<namespace>/<targetPath>/.PromptPack.spec.skills[]references the source by name and optionally narrows the set withincludeand renames the group withmountAs.- PromptPack reconciler writes a JSON manifest at
<workspace-pvc>/<workspace>/<namespace>/manifests/<pack>.json. - AgentRuntime reconciler mounts the workspace content PVC into the runtime container (read-only) at
/workspace-contentand setsOMNIA_PROMPTPACK_MANIFEST_PATHon the container. - Runtime container reads the manifest at startup and calls
sdk.WithSkillsDir(...)per resolved entry, plussdk.WithMaxActiveSkillsOptionfromspec.skillsConfig.maxActive. - PromptKit drives skill activation per turn using the configured selector (model-driven by default).
Cross-namespace policy
Section titled “Cross-namespace policy”SkillSource is namespace-scoped. PromptPack.spec.skills[].source resolves only within the pack’s own namespace. To share the same upstream content with multiple workspaces, create a SkillSource per workspace.