Crear Skills

Guía paso a paso para agregar nuevas capacidades a tu proyecto de Arc OS.


Qué es un Skill

Un skill es un conjunto de instrucciones portátil que enseña a tu bot de IA una capacidad específica. Los skills viven en el directorio skills/ y están compuestos por:

skills/
├── _registry.json              ← Central registry
├── my-new-skill/
│   ├── skill.md                ← What the AI should do
│   ├── my-new-skill.evals.json ← How to validate the output
│   └── references/             ← Context documents
└── library/
    └── domain-expert.md        ← Simple single-file skills

Paso 1: Escribe skill.md

Esta es la instrucción central. Claude la lee cuando el skill se activa.

Plantilla

# Skill Name

## Purpose
What this skill accomplishes in one sentence.

## When to Use
- Trigger condition 1
- Trigger condition 2

## Protocol
1. First action
2. Second action
3. Third action

## Output Format
What the response should look like.

## Constraints
- What NOT to do
- Safety boundaries

Pautas

Ejemplo: Odoo Expert

# Odoo Expert

## Purpose
Odoo ERP module development: models, views, security, QWeb templates.

## When to Use
- Building or modifying Odoo modules
- Writing QWeb templates
- Configuring access rules and record rules
- Working with the ORM (create, write, search, browse)

## Protocol
1. Check if modifying an existing module or creating new
2. Follow Odoo 17 conventions (manifest, models/, views/, security/)
3. Use self.env['model.name'] for ORM operations
4. Always use _t() or t-call for translatable strings
5. Test with --test-tags after changes

## Constraints
- Never use cr.execute() for direct SQL — use ORM
- Never use sudo() unless security context explicitly requires it
- No inline JavaScript in QWeb templates

Paso 2: Escribe los evals (Reglas de Calidad)

Los evals son reglas declarativas que validan automáticamente cada respuesta. Se ejecutan después de que Claude genera el output y agregan notas de advertencia si alguna regla falla.

Nomenclatura del archivo

skills/<name>/<name>.evals.json

Schema

{
  "version": 1,
  "skill": "my-new-skill",
  "rules": [
    {
      "id": "ms-001",
      "name": "Human-readable rule description",
      "type": "rule_type",
      "value": "for string/length types",
      "pattern": "for regex types",
      "severity": "warning"
    }
  ]
}

Tipos de Reglas Disponibles

Tipo Qué verifica Usa el campo
string_contains La respuesta incluye texto literal value (string)
string_not_contains La respuesta NO incluye texto value (string)
regex_match La respuesta coincide con la regex pattern (string)
regex_not_match La respuesta NO coincide con la regex pattern (string)
max_length Longitud de respuesta <= N caracteres value (number)
min_length Longitud de respuesta >= N caracteres value (number)

Niveles de Severidad

Ejemplo

{
  "version": 1,
  "skill": "odoo-expert",
  "rules": [
    {
      "id": "oe-001",
      "name": "Must use ORM, not raw SQL",
      "type": "string_not_contains",
      "value": "cr.execute",
      "severity": "warning"
    },
    {
      "id": "oe-002",
      "name": "Must use translation helpers",
      "type": "regex_match",
      "pattern": "_t\\(|t-call|t-esc",
      "severity": "warning"
    },
    {
      "id": "oe-003",
      "name": "Response under 5000 chars",
      "type": "max_length",
      "value": 5000,
      "severity": "info"
    }
  ]
}

Consejos


Paso 3: Registra en _registry.json

El registry le indica al Context Router sobre tu skill para que pueda recomendarlo en mensajes relevantes.

Agrega una entrada

{
  "name": "my-new-skill",
  "description": "One sentence (shown in SKILLS_HINT, max 80 chars).",
  "triggers": ["direct-command", "explicit-request", "пряма команда"],
  "keywords": ["broader", "semantic", "related-term"],
  "agents": ["rick"],
  "category": ["complex"],
  "phase": "21.5"
}

Triggers vs Keywords

Triggers (2 puntos cada uno): Señales de invocación directa. El usuario quiere explícitamente este skill.

Keywords (1 punto cada uno): Términos más amplios que sugieren relevancia sin ser comandos.

Pautas


Paso 4: Library Skills (Formato Simple)

Para conocimiento de dominio que no necesita evals ni un directorio dedicado, usa skills/library/:

skills/library/
├── docker-ops.md
├── postgres-pro.md
└── react-patterns.md

Son archivos .md individuales. Sin directorio, sin evals, sin references. Ideales para skills con mucho conocimiento pero poca validación.


Lista de Verificación


Qué Ocurre en Tiempo de Ejecución

1. Bot starts → loadRegistry() reads _registry.json
                 loadEvals() reads all .evals.json files
                 loadLearnings() reads learnings.md

2. Message arrives → routeContext() scores skills → SKILLS_HINT injected
                     formatForPrompt() adds LEARNINGS block

3. Claude responds → checkOutput() runs eval rules
                     formatEvalWarnings() appends footnotes

4. Fix It / thumbs-down → addLearning() writes to learnings.md
                          qualityTracker logs feedback

5. Nightly → findUnderperformingSkills() checks metrics
             Proposals sent to CEO for approval