add-command — скилл для Claude Code: что делает и как установить
Пошагово проводит через добавление поддержки новой CLI-команды в Dippy. Помогает выбрать между простым списком разрешений и отдельным обработчиком флагов.
npx skills add ldayton/Dippy --skill add-command -a claude-codeЧто делает add-command
Скилл автоматизирует расширение кодовой базы Dippy. Сначала он изучает поведение переданной команды через man, флаг --help или страницы tldr, разделяя операции чтения и мутации.
Далее сценарий предлагает развилку. Безопасные утилиты только для чтения вносятся в список SIMPLE_SAFE в src/dippy/core/allowlists.py с тестами в tests/test_simple.py. Если утилите требуется детальный разбор флагов и подкоманд, создаются тесты tests/cli/test_<command>.py и файл обработчика src/dippy/cli/<command>.py с функцией classify.
Скилл жёстко рассчитан на архитектуру репозитория Dippy и сборщик just. Проверка считается завершённой только после успешного выполнения команд just test и just check.
Какие задачи решает
- добавить безопасную CLI-утилиту в список SIMPLE_SAFE
- написать тесты валидации подкоманд на pytest
- создать обработчик классификации действий в src/dippy/cli/
- проверить корректность правил через just check
Примеры запросов агенту
- /add-command git
- /add-command docker
- Добавь поддержку команды ripgrep в Dippy через /add-command
Как установить add-command
1Через Skills CLI (Vercel)
npx skills add ldayton/Dippy --skill add-command -a claude-code2Вручную: положить файлы
~/.claude/skills/add-command/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/add-command/
1Через Skills CLI (Vercel)
npx skills add ldayton/Dippy --skill add-command -a codex2Вручную: положить файлы
.agents/skills/add-command/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add ldayton/Dippy --skill add-command -a cursor2Вручную: положить файлы
.cursor/skills/add-command/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install ldayton/Dippy add-command2Вручную: положить файлы
.github/skills/add-command/SKILL.md1Через Skills CLI (Vercel)
npx skills add ldayton/Dippy --skill add-command -a gemini-cli2Командой платформы
gemini skills install https://github.com/ldayton/Dippy --path .claude/skills/add-commandВручную: положить файлы
.devin/skills/add-command/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add ldayton/Dippy --skill add-command -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о add-command
Как установить add-command в Claude Code?
Выполните команду npx skills add ldayton/Dippy --skill add-command -a claude-code. Файл навыка запишется в ~/.claude/skills/add-command/SKILL.md.
Когда команда попадает в SIMPLE_SAFE, а когда нужен обработчик?
В SIMPLE_SAFE заносят утилиты, которые только читают данные и не содержат деструктивных опций при любых аргументах. Если поведение утилиты меняется в зависимости от подкоманд, для неё пишется файл классификации в src/dippy/cli/.
Как проверить добавленную команду?
Запустите команду just test для отладки тестов. Финальный шаг требует обязательного прохождения проверки just check.
Исходный текст
SKILL.md · MIT
---
name: add-command
description: Add support for a new CLI command. Use when implementing a handler or adding to SIMPLE_SAFE.
argument-hint: <command>
disable-model-invocation: true
---
Add support for `$ARGUMENTS` in Dippy.
## 1. Research
**tldr pages:**
```
ls ~/source/tldr/pages/*/$ARGUMENTS*.md
cat ~/source/tldr/pages/*/$ARGUMENTS.md
```
**CLI docs:**
```
$ARGUMENTS --help
man $ARGUMENTS
```
Note which operations are read-only vs mutations.
## 2. Decide: Handler or SIMPLE_SAFE?
- **SIMPLE_SAFE**: Always safe regardless of arguments (read-only, no destructive flags). Go to step 3A.
- **Handler**: Needs subcommand/flag analysis. Go to step 3B.
## 3A. SIMPLE_SAFE Path
Add to `SIMPLE_SAFE` in `src/dippy/core/allowlists.py` and add tests to `tests/test_simple.py` in the appropriate category. Skip to step 5.
## 3B. Handler Path
Create `tests/cli/test_$ARGUMENTS.py`:
```python
"""Test cases for $ARGUMENTS."""
import pytest
from conftest import is_approved, needs_confirmation
TESTS = [
# Safe operations
("$ARGUMENTS <safe-subcommand>", True),
("$ARGUMENTS --help", True),
# Unsafe operations
("$ARGUMENTS <unsafe-subcommand>", False),
]
@pytest.mark.parametrize("command,expected", TESTS)
def test_command(check, command: str, expected: bool):
result = check(command)
if expected:
assert is_approved(result), f"Expected approve: {command}"
else:
assert needs_confirmation(result), f"Expected confirm: {command}"
```
## 4. Implement Handler
Create `src/dippy/cli/$ARGUMENTS.py`:
```python
"""$ARGUMENTS handler for Dippy."""
from dippy.cli import Classification, HandlerContext
COMMANDS = ["$ARGUMENTS"]
SAFE_ACTIONS = frozenset({"list", "show", "status"})
def classify(ctx: HandlerContext) -> Classification:
tokens = ctx.tokens
action = tokens[1] if len(tokens) > 1 else None
if action in SAFE_ACTIONS:
return Classification("allow", description=f"$ARGUMENTS {action}")
return Classification("ask", description="$ARGUMENTS")
```
For handler patterns (nested subcommands, flag-checking, delegation), see [patterns.md](patterns.md).
## 5. Iterate
```
just test
```
Fix failures until tests pass.
## 6. Verify
`just check` MUST pass before you're done.
© ldayton · MIT · ldayton/Dippy