/dr-plugin
Управление opt-in плагинами: list, enable, disable, sync, doctor
Обзор
/dr-plugin — CLI plugin-системы Datarim, представленная в v1.23.0 (TUNE-0101). Управляет opt-in набором skills, agents, commands и templates за пределами встроенного datarim-core. Плагины opt-in по дизайну: ничего не подгружается, пока оператор явно не включит — это держит AI-контекст лёгким и dependency graph детерминированным.
Плагины — локальные директории (или git URL в будущей фазе) формата {plugin-id}/{plugin.yaml, skills/, agents/, commands/, templates/}. CLI создаёт симлинки в ~/.claude/{category}/{plugin-id}/ с namespace-изоляцией, опциональная root-position установка через поле overrides:. Активный набор хранится в datarim/enabled-plugins.md — единственный source of truth.
Использование
# Активные + bootstrap на первом запуске
/dr-plugin list
# Включить локальный plugin (абсолютный путь)
/dr-plugin enable /path/to/my-plugin
# Отключить активный plugin (удалит symlinks + manifest entry)
/dr-plugin disable my-plugin
# Реконсиляция runtime ↔ manifest (идемпотентно)
/dr-plugin sync
# 9 проверок здоровья; --fix авто-чинит sync-fixable
/dr-plugin doctor
/dr-plugin doctor --fix
Контракт plugin source
Каталог plugin source должен содержать plugin.yaml минимум с полями:
schema_version: 1
id: my-plugin # kebab-case, [a-z][a-z0-9-]{0,31}
title: My Plugin
version: 0.1.0
author: ...
license: MIT
description: ...
categories:
- skills
- commands
overrides: # опционально — root-position install
- my-shadow-skill.md
depends_on: # опционально — другие plugin id
- some-other-plugin
Проверки doctor (9)
- manifest-syntax — обязательные scalar-поля, валидные ID (error)
- inventory-consistency — declared symlinks присутствуют (error, --fix → sync)
- broken-symlinks — target symlink-а отсутствует (error, --fix → sync)
- orphan-files — runtime-файлы не в inventory (warning, --fix → sync)
- override-integrity — overrides должны быть в file_inventory (error, --fix → sync)
- dependency-graph — DFS детекция cycle/dangling (error)
- git-state — uncommitted manifest в git-репо (warning)
- snapshot-cleanup — snapshots старше 30 дней (warning, --fix → purge)
- skill-registry — frontmatter
name:совпадает с basename (warning) — закрывает Skill-tool resolution gap при некорректном frontmatter
Exit-коды
0— clean1— только warnings2— найдены errors3— concurrent invocation (lock держит другой процесс)64— usage error
Безопасность
Каждый enable снимает tarball-snapshot runtime/ + manifest.md до применения изменений. При mid-apply сбое restore_from_snapshot атомарно откатывает. FIFO cap DR_PLUGIN_SNAPSHOT_MAX=50; age-based purge через DR_PLUGIN_SNAPSHOT_AGE_DAYS=30. Path traversal, embedded credentials в URL, CRLF в YAML — отклоняются на validation gate. Critical-core overrides (evolution, datarim-system, pre-archive-check) — warning на stderr, но allow: оператор решает.
Когда плагины vs local/ overlay
- Personal additions для одной рабочей станции →
~/.claude/local/{skills,agents,commands,templates}/(gitignored overlay; loader policy: local wins на name conflict). - Shareable extensions версионируемые как единое целое, распространяемые директорией или репо →
/dr-plugin enable.