Harness Control Plane: дашборд для всех AI-инструментов
Что такое Harness Control Plane?
Harness Control Plane (HCP) - open-source инструмент, который автоматически обнаруживает и визуализирует все AI-ассеты разработчика: skills, агенты, MCP серверы, правила - через Claude Code, Codex CLI, Gemini CLI, Cursor, Windsurf, GitHub Copilot и Continue.dev. Позволяет подключать ассет из одного инструмента в другой одним кликом через симлинки, без дублирования файлов.
TL;DR
- -7 AI-инструментов - один интерфейс: Claude Code, Codex CLI, Gemini CLI, Cursor, Windsurf, GitHub Copilot, Continue.dev
- -Auto-discovery сканирует конфиги всех инструментов и строит карту ассетов - skills, агенты, MCP серверы, правила
- -Подключение ассета из одного инструмента в другой - одним кликом через симлинки; правка в одном месте, все инструменты видят обновление
- -История изменений с откатом на любую точку; file watcher + WebSocket для обновлений в реальном времени
- -Доступен как macOS-приложение (SwiftUI) и как CLI/Web UI (npx harness-control-plane); работает на VPS через SSH-туннель
Типичная ситуация: Claude Code использует .claude/commands/, Codex CLI - .codex/skills/, Gemini - .gemini/skills/. Форматы разные, директории разные, конфиги разные. Написал skill для Claude - вручную тащишь в Codex. Настроил MCP сервер в одном проекте - через месяц не помнишь, где ещё его подключал.
Чем больше инструментов, тем хуже. Конфигурация расползается по файловой системе и перестаёт помещаться в голове. Я столкнулся с этим, когда количество 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 - но там фокус на синхронизации 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
npx harness-control-plane
Одна команда - открывается браузер на localhost:3000. React + TypeScript + Tailwind. Функционал тот же, что в macOS-приложении.
Для серверов и VPS:
hcp --headless -p 3000
# С локальной машины:
ssh -L 3000:localhost:3000 user@your-vps
One-shot режим для CI/CD:
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 сравнивает оригинал с подключёнными точками и сигнализирует о расхождении. Восстановление - пересоздание симлинка или обновление до актуальной версии.
Когда это нужно (и когда нет)
Два условия:
- Больше одного AI-инструмента для разработки
- Нетривиальный набор ассетов - 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. Требует Node.js 18+.
CLI:
# Одноразовый запуск
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 npm: npmjs.com/package/harness-control-plane
Нужна помощь с настройкой AI-инструментов и MCP-инфраструктуры? Я помогаю стартапам внедрять AI-решения и строить продукты — belov.works.
Часто задаваемые вопросы
Что такое Harness Control Plane?
Harness Control Plane - open-source дашборд, который автоматически обнаруживает все AI-ассеты разработчика (skills, агенты, MCP серверы, правила) через 7 инструментов (Claude Code, Codex, Gemini, Cursor, Windsurf, Copilot, Continue.dev) и позволяет управлять ими из единого интерфейса.
Как HCP синхронизирует ассеты между инструментами?
Через файловые симлинки. При подключении ассета из Claude Code в Codex CLI HCP создаёт симлинк, а не копию файла. Изменения в оригинале мгновенно видны во всех подключённых инструментах.
Можно ли использовать HCP на удалённом сервере?
Да. HCP запускается в headless-режиме (hcp --headless -p 3000), доступ к UI - через SSH-туннель.
HCP бесплатный?
Да. Лицензия BSL 2.0 - бесплатное использование, модификация и self-hosting. Единственное ограничение: нельзя продавать как конкурирующий продукт. В 2030 лицензия автоматически конвертируется в MIT.