Skip to content

Skill Development

Skills are how you teach the council new tricks. Each skill is a self-contained package — documentation, executable tools, configuration — that any agent can pick up and use. You build it once, push it to GitHub, and thirty minutes later a Jedi named after a Mon Calamari healer can invoke it on a VM that has never seen the internet. The future is strange and beautiful and running on cron.

The automation octopus — one skill repo, many arms

Every skill follows a standard directory layout:

skill-name/
├── SKILL.md # Skill documentation and usage instructions
├── tools/ # Executable scripts
│ ├── tool-one.sh
│ ├── tool-two.sh
│ └── tool-three.py
└── config/ # Optional configuration files

The SKILL.md file serves as both human documentation and agent instructions. It describes the skill’s purpose, available tools, required parameters, and usage examples. Agents read this file to understand how and when to invoke the skill’s tools. Write it well — your agents are only as smart as the instructions you give them, and they will follow bad instructions with absolute confidence.

The tools/ directory contains executable scripts that agents can invoke. Tools are typically shell scripts or Python scripts with clear input/output contracts. Each tool should:

  • Accept parameters via command-line arguments or environment variables
  • Write structured output to stdout
  • Return meaningful exit codes (0 for success, non-zero for failure)
  • Include error messages on stderr

The skills repository contains the following skills:

SkillDescription
apple-toolkitUnified Mac management: iMessage, WhatsApp, Signal, Slack messaging, LaunchAgents, boot checks, iCloud backup and filing
mac-mini-opsUTM VM control, LM Studio model operations, network topology
dench-opsGateway restart, auth token refresh, plugin and model management, troubleshooting
firewalla-toolkitFirewalla network management: rules, DNS, device monitoring
council-bridgeJocasta-Yoda cross-instance agent communication
council-routerAgent routing, escalation configuration, port and service tests
house-pulseHome monitoring and environmental status
reboot-checkPost-reboot verification of services and connectivity
service-doctorService health diagnosis and automated repair
yoda-voiceVoice agent management and TTS configuration
orbi-toolkitOrbi router and access point management
memory-vaultPersistent memory storage and retrieval

Twelve skills. One repository. Six agents and a dead cat. If any of them ever unionize, you’re in trouble.

The shared skills repository lives at ~/Projects/openclaw-skills on the Mac and is cloned from a private GitHub repository.

~/Projects/openclaw-skills/
├── apple-toolkit/
├── mac-mini-ops/
├── dench-ops/
├── firewalla-toolkit/
├── council-bridge/
├── council-router/
├── house-pulse/
├── reboot-check/
├── service-doctor/
├── yoda-voice/
├── orbi-toolkit/
└── memory-vault/

Both the Mac (DenchClaw) and VM (OpenClaw) gateways load skills from this directory via the extraDirs configuration in their respective openclaw.json files. Skills appear under the openclaw-extra source in the gateway’s skill listing.

The VM has no direct internet access (host-only networking), so skills are synced through the Mac using a two-stage pipeline. The VM is, essentially, an air-gapped system that receives care packages from the outside world.

GitHub Repository
▼ git pull (every 30 min)
Mac: ~/Projects/openclaw-skills/
▼ rsync (every 30 min)
VM: ~/Projects/openclaw-skills/

A Mac cron job runs every 30 minutes:

*/30 * * * * cd ~/Projects/openclaw-skills && git pull && rsync -az --delete ./ [email protected]:~/Projects/openclaw-skills/
  1. git pull fetches the latest changes from GitHub to the Mac
  2. rsync mirrors the Mac copy to the VM over SSH
  3. The --delete flag ensures removed skills are also removed on the VM
  1. Create the directory under ~/Projects/openclaw-skills/ with a descriptive name using kebab-case.

  2. Write SKILL.md documenting the skill’s purpose, tools, parameters, and examples. This file is critical as agents rely on it to understand tool usage.

  3. Add tools to the tools/ directory. Make them executable (chmod +x). Use shell scripts for system operations and Python for data processing.

  4. Test locally by invoking tools directly from the command line to verify inputs, outputs, and error handling.

  5. Commit and push to GitHub. The sync pipeline will distribute the skill to both Mac and VM within 30 minutes.

  6. Verify by asking an agent to list its available skills and confirm the new skill appears.

  • Use #!/bin/bash or #!/usr/bin/env python3 shebangs
  • Accept the most important parameter as the first positional argument
  • Use environment variables for configuration that rarely changes
  • Output JSON when returning structured data
  • Log diagnostic information to stderr, not stdout
  • Keep tools focused on a single action

Gateways discover skills at startup by scanning configured directories. The loading process:

  1. Enumerate all subdirectories in the skills path
  2. Check for a valid SKILL.md in each subdirectory
  3. Parse the skill metadata from SKILL.md
  4. Register available tools from the tools/ directory
  5. Make skills available to all agents on that gateway