# Harness Control Plane: дашборд для всех AI-инструментов

> HCP — open-source control plane для Claude Code, Codex, Gemini, Cursor, Windsurf, Copilot. Auto-discovery, симлинки, drift detection.
> Author: Roman Belov · Published: 2026-04-17 · Source: https://futurecraft.pro/ru/blog/harness-control-plane/

Типичная ситуация: [Claude Code](/ru/blog/claude-code-complete-guide/) использует `.claude/commands/`, Codex CLI — `.codex/skills/`, Gemini — `.gemini/skills/`. Форматы разные, директории разные, конфиги разные. Написал skill для Claude — вручную тащишь в Codex. Настроил [MCP сервер](/ru/blog/mcp-production-custom-servers/) в одном проекте — через месяц не помнишь, где ещё его подключал.

Чем больше инструментов, тем хуже. Конфигурация расползается по файловой системе и перестаёт помещаться в голове. Я столкнулся с этим, когда количество skills перевалило за сотню, а MCP серверов стало больше десятка. Harness Control Plane — инструмент, который я собрал, чтобы решить эту проблему.

## Что делает HCP

HCP сканирует конфигурации семи AI-инструментов и строит карту всех ассетов:

| Инструмент | Что сканирует |
|------------|---------------|
| Claude Code | `~/.claude/commands/`, `~/.claude/agents/`, `~/.claude/rules/`, `.mcp.json`, `CLAUDE.md` |
| Codex CLI | `.codex/skills/`, `.codex/agents/`, `.codex/mcp.json`, `AGENTS.md` |
| Gemini CLI | `.gemini/skills/`, `.gemini/mcp.json`, `GEMINI.md` |
| Cursor | `.cursor/rules/`, `.cursorrules` |
| Windsurf | `.windsurf/rules/`, `.windsurf/mcp.json`, `.windsurfrules` |
| GitHub Copilot | `.github/copilot-instructions.md` |
| Continue.dev | `.continue/config.json` |

HCP — control plane: обнаружение, визуализация, подключение, синхронизация, история, откат. Не мониторинг и не analytics.

## Симлинки вместо копий

Центральная идея HCP — подключение ассетов через файловые симлинки.

Допустим, в Claude Code есть skill `deploy-checklist`. Нужен тот же skill в Codex CLI. Скопировать файл — путь к рассинхронизации. Через неделю оригинал обновлён, копия — нет.

HCP создаёт симлинк: `.codex/skills/deploy-checklist.md` → `~/.claude/commands/deploy-checklist.md`. Один файл, одна точка правки. Claude, Codex, Gemini — все читают одно и то же. Отредактировал — все инструменты видят изменение мгновенно.

Почему это работает: все перечисленные инструменты конфигурируются через файлы. Проприетарного хранилища нет — markdown, JSON, YAML. Симлинки закрывают задачу синхронизации без единой строчки sync-логики.

Отключение атомарное: удаляется симлинк, оригинал на месте. HCP отслеживает направление — оригинал нельзя случайно удалить из UI подключённого инструмента.

Похожую задачу решает [AgentSync](/ru/blog/agentsync-mcp-config-sync/) — но там фокус на синхронизации MCP-конфигов между проектами. HCP работает на другом уровне: между инструментами.

## Ecosystem Map

При первом запуске HCP сканирует файловую систему и строит интерактивную карту. Каждый ассет — карточка с типом, провайдером, категорией и контентом.

Фильтры: по типу (skills, agents, MCP servers, rules), по провайдеру (Claude, Codex, Gemini...), по категории. HCP автоматически раскладывает ассеты по 9 категориям — от SEO & GEO и Security & QA до Development и Code Quality. Настройки фильтров сохраняются между сессиями.

Поиск по имени, описанию и тегам. Когда ассетов 200+, это уже необходимость, а не удобство.

## История и откат

Каждое действие — create, connect, disconnect, delete — записывается в аудитный лог. SQLite, локально, без внешних зависимостей.

В UI — таймлайн. Undo последнего действия — одной кнопкой. Откат к конкретной точке — тоже. HCP хранит снапшоты состояния при каждом изменении.

Для команд это audit trail: кто подключил MCP сервер, когда, из какого клиента. Для соло-разработчика — страховка от случайного удаления.

## Два интерфейса

### macOS App

Нативное приложение на SwiftUI. Скачивается как DMG, ставится перетаскиванием в Applications. При запуске автоматически поднимает локальный agent.

Клавиатурные шорткаты: `Cmd+F` — поиск, `Cmd+N` — создание ассета, `Cmd+Z` — undo, `Cmd+R` — ресканирование.

### CLI + Web UI

```bash
npx harness-control-plane
```

Одна команда — открывается браузер на `localhost:3000`. React + TypeScript + Tailwind. Функционал тот же, что в macOS-приложении.

Для серверов и VPS:

```bash
hcp --headless -p 3000
# С локальной машины:
ssh -L 3000:localhost:3000 user@your-vps
```

One-shot режим для CI/CD:

```bash
hcp scan              # Саммари в stdout
hcp scan -o map.html  # Самодостаточный HTML-файл
```

## Архитектура

```
harness-control-plane/
├── bin/cli.js            # CLI entry point
├── agent/
│   ├── server.js         # HTTP + WebSocket сервер
│   ├── router.js         # REST API (40+ эндпоинтов)
│   ├── scanner/          # Auto-discovery по 7 инструментам
│   ├── connector/        # Connect/disconnect через симлинки
│   ├── sync.js           # Cross-provider sync
│   ├── drift.js          # Детекция дрифта между копиями
│   ├── health.js         # Health checks ассетов
│   ├── snapshots.js      # Снапшоты для отката
│   └── store/            # SQLite state
├── desktop/              # macOS SwiftUI
└── ui/                   # React + TypeScript + Tailwind
```

Две зависимости: `better-sqlite3` для хранилища, `ssh2` для удалённого доступа. Остальное — stdlib Node.js.

File watcher отслеживает изменения конфигов. При любом изменении — WebSocket-событие `assets:updated`, UI обновляется мгновенно. Состояние переживает рестарт через SQLite.

REST API покрывает CRUD: создание, чтение, обновление, удаление ассетов, подключение и отключение между инструментами, ресканирование, история, откат.

## Drift Detection

Допустим, ассет подключён через симлинк в три инструмента. Кто-то обошёл HCP и руками изменил файл в `.codex/skills/` — симлинк сломался, файл стал обычной копией.

HCP обнаруживает такие ситуации автоматически. Drift detection сравнивает оригинал с подключёнными точками и сигнализирует о расхождении. Восстановление — пересоздание симлинка или обновление до актуальной версии.

## Когда это нужно (и когда нет)

Два условия:

1. Больше одного AI-инструмента для разработки
2. Нетривиальный набор ассетов — skills, агенты, MCP серверы

Типичный сценарий: Claude Code как основной инструмент, Cursor для IDE-интеграции, Codex CLI для second opinion. 50+ skills, 10+ MCP серверов. Без единой карты — ручная синхронизация и путаница. HCP убирает эту ручную работу.

Если работаете с одним инструментом — HCP покажет карту ассетов, но подключение между провайдерами не пригодится. Чем больше инструментов и ассетов, тем больше пользы.

Ограничения beta-версии: разделы Projects, Servers, Bundles и Policies пока скрыты в UI и дорабатываются. Поддержка Windows не тестировалась. Симлинки на Windows работают, но могут потребовать Developer Mode.

## Установка

macOS app — [DMG на GitHub Releases](https://github.com/spyrae/harness-control-plane/releases/latest). Требует Node.js 18+.

CLI:

```bash
# Одноразовый запуск
npx harness-control-plane

# Глобальная установка
npm install -g harness-control-plane
hcp
```

Проект в beta (v0.1.0). Лицензия BSL 2.0 — свободное использование с автоматической конвертацией в MIT в 2030.

GitHub: [github.com/spyrae/harness-control-plane](https://github.com/spyrae/harness-control-plane)
npm: [npmjs.com/package/harness-control-plane](https://www.npmjs.com/package/harness-control-plane)

---

*Нужна помощь с настройкой AI-инструментов и MCP-инфраструктуры? Я помогаю стартапам внедрять AI-решения и строить продукты — [belov.works](https://belov.works).*
