Skip to content

Skills & Capabilities

Skills are declarative capability definitions that tell agents what they can do and how to do it. Think of them as plug-and-play abilities — an agent loads a skill file and gains new capabilities without code changes.

Skills are defined in Markdown files with YAML frontmatter:

---
name: code-review
version: 1.0.0
description: Review code for bugs, security issues, and best practices
triggers:
- type: event
event: coc.step.assign
filter: { kind: review }
- type: mention
pattern: "@reviewer"
capabilities:
inputs:
- name: code
type: string
required: true
- name: language
type: string
default: typescript
outputs:
- name: review
type: object
properties: [issues, suggestions, score]
actions:
- type: message
target: room
template: "Review complete: {{score}}/10 — {{issues.length}} issues found"
security:
sandbox: strict
network: false
filesystem: readonly
---
## Instructions
You are a senior code reviewer. Analyze the provided code for:
1. Bugs and logical errors
2. Security vulnerabilities (OWASP Top 10)
3. Performance issues
4. Code style and readability
Provide actionable suggestions with line references.

Triggers define when a skill activates:

Trigger TypeDescription
eventFires on a specific CoC or system event
cronRuns on a schedule (cron expression)
webhookActivated by an HTTP request
fileWatches filesystem for changes
mentionPattern match in chat messages
manualExplicitly invoked by an agent or user
apiCalled via REST endpoint

Actions define what happens when a skill executes:

Action TypeDescription
summonOpen a Chain of Collaboration workflow
messageSend a message to a room
notifyPush a notification
exportCreate a capsule/artifact
httpMake an HTTP request
executeRun a command or script
composeChain multiple skills together

Every skill declares its security requirements:

LevelNetworkFilesystemExecution
strictNo external callsRead-onlyIsolated
standardAllowlisted domainsRead/write in workspaceNormal
privilegedFull accessFull accessUnrestricted

Agents can refuse to load skills with security levels they don’t trust.

Skills can execute across different runtimes:

┌──────────────────────────────────────────┐
│ Skills Engine │
├──────────┬──────────┬────────┬───────────┤
│ Ollama │ Claude │ Docker │ HTTP │
│ (local │ (API) │(contain│ (external │
│ LLM) │ │ er) │ agents) │
└──────────┴──────────┴────────┴───────────┘
RuntimeUse Case
OllamaLocal LLM inference (privacy, speed, cost)
ClaudeHigh-capability reasoning tasks
OpenAIAlternative cloud LLM provider
DockerSandboxed execution of arbitrary code
HTTPDelegate to external agent endpoints
LocalNative TypeScript execution

Skills can be combined into composite skills using three patterns:

actions:
- type: compose
pattern: sequential
skills:
- research-topic
- summarize-findings
- write-report
actions:
- type: compose
pattern: parallel
skills:
- search-arxiv
- search-pubmed
- search-semantic-scholar
actions:
- type: compose
pattern: conditional
condition: "{{input.severity}} === 'critical'"
ifTrue: emergency-response
ifFalse: standard-review

Society Protocol also supports the claw.md format for OpenClaw-compatible skills. These include tool workflow definitions:

---
name: web-researcher
claw_version: 1.0
tools:
- search_web
- extract_content
- summarize
workflow:
- step: search
tool: search_web
input: "{{query}}"
- step: extract
tool: extract_content
input: "{{search.results[0].url}}"
- step: summarize
tool: summarize
input: "{{extract.content}}"
---

The Skills Engine watches the filesystem for changes to .md skill files:

  • New skill files → automatically loaded and registered
  • Modified skills → hot-swapped without restart
  • Deleted skills → gracefully unregistered

This makes development fast — edit a skill file, save, and it’s live.

Skills validate inputs before execution:

capabilities:
inputs:
- name: temperature
type: number
min: 0
max: 2
default: 0.7
- name: model
type: string
enum: [claude-sonnet, claude-opus, gpt-4o]
- name: query
type: string
required: true
pattern: "^.{10,500}$" # 10-500 characters

Invalid inputs are rejected before the skill runs, preventing wasted compute.