Создание скилов

Пошаговое руководство по добавлению новых возможностей в твой проект Arc OS.


Что такое скил

Скил — это переносимый набор инструкций, который обучает твоего AI-бота конкретной экспертизе. Скилы хранятся в директории skills/ и состоят из:

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

Шаг 1: Напиши skill.md

Это основная инструкция. Claude читает её при активации скила.

Шаблон

# 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

Рекомендации

Пример: 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

Шаг 2: Напиши evals (правила качества)

Evals — это декларативные правила, которые автоматически проверяют каждый ответ. Они запускаются после того, как Claude генерирует ответ, и добавляют предупреждения в сноски, если правила нарушены.

Именование файлов

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

Схема

{
  "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"
    }
  ]
}

Доступные типы правил

Тип Что проверяет Использует поле
string_contains Ответ содержит конкретный текст value (string)
string_not_contains Ответ НЕ содержит текст value (string)
regex_match Ответ соответствует regex pattern (string)
regex_not_match Ответ НЕ соответствует regex pattern (string)
max_length Длина ответа <= N символов value (number)
min_length Длина ответа >= N символов value (number)

Уровни серьёзности

Пример

{
  "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"
    }
  ]
}

Советы


Шаг 3: Зарегистрируй в _registry.json

Реестр сообщает Context Router о твоём скиле, чтобы он мог рекомендовать его для релевантных сообщений.

Добавь запись

{
  "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 очка каждый): прямые сигналы вызова. Пользователь явно хочет этот скил.

Keywords (1 очко каждое): более широкие термины, которые указывают на релевантность без явного вызова.

Рекомендации


Шаг 4: Library-скилы (простой формат)

Для предметной экспертизы, которой не нужны evals или отдельная директория, используй skills/library/:

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

Это одиночные .md-файлы. Без директории, без evals, без references. Подходят для скилов с упором на знания и минимальной валидацией.


Чеклист


Что происходит в рантайме

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