Skip to content

Skills

Skills are the actions an agent can perform. They transform an agent from a text generator into an active participant that can interact with systems, fetch data, and accomplish real tasks.

What are Skills?

Skills are executable modules that agents can invoke to:

  • Execute shell commands
  • Run Python scripts
  • Fetch web content
  • Manage files
  • Send notifications
  • And much more...

Skill Architecture

┌─────────────────────────────────────────────────┐
│                  Skill Manager                   │
├─────────────────────────────────────────────────┤
│  ┌─────────────────────────────────────────┐   │
│  │           Skill Registry                 │   │
│  │  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐       │   │
│  │  │host │ │web  │ │git  │ │mcps │  ...  │   │
│  │  │shell│ │crawl│ │     │ │     │       │   │
│  │  └─────┘ └─────┘ └─────┘ └─────┘       │   │
│  └─────────────────────────────────────────┘   │
├─────────────────────────────────────────────────┤
│  ┌─────────────────────────────────────────┐   │
│  │          Skill Executors                 │   │
│  │  ┌────────┐ ┌────────┐ ┌────────┐      │   │
│  │  │ Shell  │ │ Python │ │  MCP   │      │   │
│  │  └────────┘ └────────┘ └────────┘      │   │
│  └─────────────────────────────────────────┘   │
└─────────────────────────────────────────────────┘

Skill Types

TypeDescriptionExample
ShellBash/shell scriptshost_shell, git
PythonPython scriptshost_python, web_crawler
MCPModel Context Protocol toolsExternal APIs
NativeRust-based (built-in)Core framework functions

How Agents Use Skills

Invocation Format

Agents invoke skills using XML tags:

xml
<invoke name="skill_name">["arg1", "arg2"]</invoke>

For MCP skills with named parameters:

xml
<invoke name="mcp_skill">{"param": "value"}</invoke>

Example Flow

User: "List all Python files in my project"

Agent thinks:
  I need to use the host_shell skill to find Python files.

Agent invokes:
  <invoke name="host_shell">["find . -name '*.py' -type f"]</invoke>

System executes:
  → Runs the find command
  → Captures stdout/stderr
  → Returns result

Agent responds:
  I found 23 Python files in your project:
  - src/main.py
  - src/utils.py
  ...

Built-in Skills

System Skills

SkillDescription
host_shellExecute shell commands
host_pythonRun Python scripts
computer_controlmacOS accessibility automation

Network Skills

SkillDescription
web_crawlerFetch and parse web pages
browse_networkNetwork operations

Git Skills

SkillDescription
gitGit operations (clone, commit, push, etc.)

Communication Skills

SkillDescription
telegram_notifySend Telegram notifications
delegate_taskDelegate work to other agents

Scheduling Skills

SkillDescription
schedulerCreate cron-based heartbeats
modify_scheduleModify scheduled jobs
remove_scheduleRemove scheduled jobs

Skill Management

SkillDescription
create_skillCreate a new skill
install_skillInstall a skill from source
modify_skillModify an existing skill
remove_skillRemove a skill
upgrade_skillUpgrade a skill
list_skillsList available skills
read_skillRead skill source code

Vault Skills

SkillDescription
manage_vaultManage encrypted secrets

MCP Skills

SkillDescription
mcpCall MCP server tools

Dev Skills

SkillDescriptionMode
evolve_coreSelf-modify framework codeDev only

See Built-in Skills Reference for detailed documentation.

Custom Skills

Create your own skills to extend agent capabilities.

Skill Structure

skills/
└── my_skill/
    ├── manifest.toml    # Skill metadata
    └── run.sh           # Entry point

manifest.toml

toml
name = "my_skill"
description = "What this skill does"
version = "1.0.0"
run_command = "sh"
entrypoint = "run.sh"
needs_network = false
needs_fs_read = true
needs_fs_write = false
needs_env = false

run.sh

bash
#!/bin/bash
# Arguments are passed as JSON array to stdin

# Read arguments
read -r args

# Process
result=$(echo "$args" | jq -r '.[0]')

# Output (returned to agent)
echo "Processed: $result"

Installing Custom Skills

Method 1: Direct Placement

bash
mkdir -p ~/.moxxy/agents/default/skills/my_skill
# Add manifest.toml and run.sh

Method 2: Via Agent

Create a skill called "my_skill" that does X

Method 3: From Repository

Install the skill from https://github.com/user/moxxy-skills/tree/main/my_skill

See Custom Skills for detailed guide.

MCP Integration

Connect external tools via Model Context Protocol:

bash
# Add MCP server via web dashboard
# Settings → MCP Servers → Add Server

MCP tools are automatically registered as agent skills with [MCP] prefix.

See MCP Integration for details.

Skill Permissions

Skills declare their requirements in the manifest:

toml
needs_network = true   # Internet access
needs_fs_read = true   # Filesystem read
needs_fs_write = true  # Filesystem write
needs_env = true       # Environment variables

In WASM mode, these are enforced through capability-based permissions.

Skill Execution

Native Mode

Skills run directly on the host:

┌──────────┐     ┌──────────┐     ┌──────────┐
│  Agent   │ ──▶ │  Skill   │ ──▶ │   Host   │
│ Request  │     │ Executor │     │   OS     │
└──────────┘     └──────────┘     └──────────┘

WASM Mode

Skills run in a sandboxed environment:

┌──────────┐     ┌──────────┐     ┌──────────┐     ┌──────────┐
│  Agent   │ ──▶ │  Skill   │ ──▶ │   WASM   │ ──▶ │   Host   │
│ Request  │     │ Executor │     │ Runtime  │     │   OS     │
└──────────┘     └──────────┘     └──────────┘     └──────────┘


                              ┌──────────────┐
                              │ Capabilities │
                              │   Check      │
                              └──────────────┘

Best Practices

Skill Design

  1. Single Purpose - Each skill does one thing well
  2. Clear Input/Output - Document expected arguments
  3. Error Handling - Return meaningful error messages
  4. Idempotent - Safe to run multiple times

Security

  1. Minimal Permissions - Only request needed capabilities
  2. Input Validation - Sanitize all inputs
  3. Output Sanitization - Don't leak sensitive data
  4. Use WASM - Sandbox untrusted operations

Performance

  1. Timeout - Set reasonable execution limits
  2. Streaming - Stream large outputs
  3. Caching - Cache repeated operations

Troubleshooting

Skill Not Found

  1. Check skill is registered: moxxy run --agent default --prompt "List your skills"
  2. Verify manifest.toml syntax
  3. Check file permissions

Permission Denied

  1. Check manifest capability flags
  2. Verify WASM configuration
  3. Check host permissions

Timeout

  1. Increase timeout in configuration
  2. Optimize skill implementation
  3. Consider async operations

Unexpected Output

  1. Check skill exit code
  2. Verify stdout/stderr capture
  3. Test skill in isolation

Open source · Self-hosted · Data sovereign