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 сравнивает оригинал с подключёнными точками и сигнализирует о расхождении. Восстановление - пересоздание симлинка или обновление до актуальной версии.

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

Два условия:

  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. Требует 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.