3.3 KiB
3.3 KiB
SkillPack
#sympozium #crd #skillpack
Definicja
SkillPack to CRD bundlujący Markdown instrukcje + opcjonalny sidecar kontener + RBAC. Skills montowane są jako pliki w podzie agenta.
Plik: api/v1alpha1/skillpack_types.go
Dwuwarstwowa architektura skilli
Warstwa 1: Instrukcje (Markdown)
Każdy skill to plik Markdown montowany w /skills/ - agent czyta go jako instrukcje do LLM.
Warstwa 2: Sidecar (opcjonalny)
Sidecar to kontener z narzędziami (kubectl, helm, git) + auto-provisioned RBAC.
Spec
apiVersion: sympozium.ai/v1alpha1
kind: SkillPack
metadata:
name: k8s-ops
spec:
category: kubernetes
version: "1.0.0"
skills:
- name: k8s-ops
description: "Kubernetes operations"
content: |
# Kubernetes Operations
You have access to kubectl via the execute_command tool...
requires:
bins: [kubectl]
tools: [execute_command]
sidecar:
image: ghcr.io/sympozium-ai/sympozium/skill-k8s-ops:v0.0.25
command: ["sleep", "infinity"]
mountWorkspace: true
env:
- name: KUBECONFIG
value: /var/run/secrets/kubernetes.io/serviceaccount/token
resources:
cpu: "100m"
memory: "128Mi"
rbac: # Namespace-scoped RBAC
- apiGroups: ["", "apps"]
resources: ["pods", "deployments"]
verbs: ["get", "list", "watch"]
clusterRBAC: # Cluster-scoped RBAC
- apiGroups: [""]
resources: ["nodes", "namespaces"]
verbs: ["get", "list", "watch"]
secretRef: github-token # Sekrety montowane w sidecarze
secretMountPath: /secrets/github
hostAccess: # Dostęp do hosta (np. node-probe)
enabled: false
hostNetwork: false
hostPID: false
privileged: false
mounts:
- hostPath: /var/log
mountPath: /host-logs
readOnly: true
requiresServer: false # Czy wymaga Deployment zamiast Job
ports:
- name: http
containerPort: 8080
Status
status:
phase: Ready
configMapName: skillpack-k8s-ops
skillCount: 1
Cykl życia
SkillPack CR utworzony
↓
SkillPackReconciler → Generuje ConfigMap z Markdown contentem
↓
SympoziumInstance referencjonuje skill
↓
AgentRun tworzony → AgentRunReconciler:
1. Czyta SkillPack → wyciąga sidecar spec
2. Tworzy Role + RoleBinding (namespace RBAC)
3. Tworzy ClusterRole + ClusterRoleBinding (cluster RBAC)
4. Dodaje sidecar kontener do pod spec
5. Montuje ConfigMap jako /skills/ volume
↓
Po zakończeniu AgentRun:
- Namespace RBAC: garbage-collected via ownerReference
- Cluster RBAC: cleaned up by controller via label selector
Parametryzacja
SkillPacks mogą być parametryzowane per-instancja:
# W SympoziumInstance
skills:
- skillPackRef: github-gitops
params:
REPO: my-org/my-repo
BRANCH: main
Parametry injektowane jako SKILL_REPO, SKILL_BRANCH env vars w sidecarze.
RequiresServer
Gdy sidecar.requiresServer: true, AgentRun tworzony jest w trybie server (Deployment + Service zamiast Job). Przykład: skill web-endpoint.
Powiązane: Skill Sidecars i auto-RBAC | Efemeryczny RBAC per-run | SympoziumInstance