Tool Reviews

Harness Control Plane: One Dashboard for All Your AI Coding Tools

What is Harness Control Plane?

Harness Control Plane (HCP) is an open-source tool that auto-discovers and visualizes all AI developer assets - skills, agents, MCP servers, rules - across Claude Code, Codex CLI, Gemini CLI, Cursor, Windsurf, GitHub Copilot, and Continue.dev. It connects assets between tools in one click via symlinks, with no file duplication.

TL;DR

  • -7 AI tools, one interface: Claude Code, Codex CLI, Gemini CLI, Cursor, Windsurf, GitHub Copilot, Continue.dev
  • -Auto-discovery scans configs across all tools and builds an asset map - skills, agents, MCP servers, rules
  • -Connect an asset from one tool to another in one click via symlinks; edit in one place, every tool sees the update
  • -Full change history with rollback to any point; file watcher + WebSocket for real-time updates
  • -Available as a macOS app (SwiftUI) and CLI/Web UI (npx harness-control-plane); works on VPS via SSH tunnel

Here’s the situation: Claude Code uses .claude/commands/, Codex CLI uses .codex/skills/, Gemini uses .gemini/skills/. Different formats, different directories, different configs. You write a good skill for Claude - then manually copy it to Codex. You set up an MCP server in one project - a month later you can’t remember where else you configured it.

More tools, more mess. Config sprawls across the filesystem and stops fitting in your head. I hit this wall when my skills count passed a hundred and MCP servers crossed a dozen. Harness Control Plane is the tool I built to fix it.

What HCP does

HCP scans configs across seven AI tools and builds a map of every asset:

ToolWhat HCP scans
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

It’s a control plane — discovery, connection, sync, history, rollback. Not monitoring. Not analytics.

The core idea behind HCP is connecting assets through file symlinks.

Say you have a skill called deploy-checklist in Claude Code. You need it in Codex CLI too. Copying the file is a path to desync. A week later the original is updated, the copy isn’t.

HCP creates a symlink: .codex/skills/deploy-checklist.md~/.claude/commands/deploy-checklist.md. One file, one edit point. Claude, Codex, Gemini - they all read the same thing. Edit it once, every tool sees the change instantly.

Why this works: every tool on that list stores its config in files. No proprietary storage - markdown, JSON, YAML. Symlinks solve the sync problem without a single line of sync logic.

Disconnecting is atomic: the symlink gets removed, the original stays untouched. HCP tracks directionality - you can’t accidentally delete the source file from a connected tool’s UI.

AgentSync solves a related problem - syncing MCP configs between projects. HCP operates at a different level: between tools.

Ecosystem Map

On first launch, HCP scans the filesystem and builds an interactive map. Each asset is a card with type, provider, category, and content.

Filters: by type (skills, agents, MCP servers, rules), by provider (Claude, Codex, Gemini…), by category. HCP auto-sorts assets into 9 categories - from SEO & GEO and Security & QA to Development and Code Quality. Filter settings persist between sessions.

Search by name, description, and tags. Once you have 200+ assets, this stops being a convenience and becomes a necessity.

History and rollback

Every action - create, connect, disconnect, delete - goes into an audit log. SQLite, local, no external dependencies.

The UI shows a timeline. Undo the last action with one button. Roll back to a specific point - same thing. HCP stores state snapshots on every change.

For teams, it’s an audit trail: who connected that MCP server, when, from which client. For solo developers, it’s insurance against accidental deletion.

Two interfaces

macOS App

Native SwiftUI app. Download the DMG, drag to Applications. It auto-launches the local agent on startup.

Keyboard shortcuts: Cmd+F for search, Cmd+N to create an asset, Cmd+Z for undo, Cmd+R to rescan.

CLI + Web UI

npx harness-control-plane

One command - browser opens at localhost:3000. React + TypeScript + Tailwind. Same features as the macOS app.

For servers and VPS:

hcp --headless -p 3000
# From your local machine:
ssh -L 3000:localhost:3000 user@your-vps

One-shot mode for CI/CD:

hcp scan              # Summary to stdout
hcp scan -o map.html  # Self-contained HTML file

Architecture

harness-control-plane/
├── bin/cli.js            # CLI entry point
├── agent/
│   ├── server.js         # HTTP + WebSocket server
│   ├── router.js         # REST API (40+ endpoints)
│   ├── scanner/          # Auto-discovery across 7 tools
│   ├── connector/        # Connect/disconnect via symlinks
│   ├── sync.js           # Cross-provider sync
│   ├── drift.js          # Drift detection across copies
│   ├── health.js         # Asset health checks
│   ├── snapshots.js      # Rollback snapshots
│   └── store/            # SQLite state
├── desktop/              # macOS SwiftUI
└── ui/                   # React + TypeScript + Tailwind

Two dependencies: better-sqlite3 for storage, ssh2 for remote access. Everything else is Node.js stdlib.

A file watcher tracks config changes. On any change, a WebSocket event (assets:updated) fires and the UI updates instantly. State survives restarts via SQLite.

The REST API covers full CRUD: creating, reading, updating, deleting assets, connecting and disconnecting between tools, rescanning, history, rollback.

Drift Detection

Say an asset is connected via symlink to three tools. Someone bypasses HCP and edits the file directly in .codex/skills/ - the symlink breaks, the file becomes a regular copy.

HCP catches this automatically. Drift detection compares the original against connected endpoints and flags the divergence. Recovery is straightforward — recreate the symlink or pull the latest version. I’ve been bitten by silent desync before; this is the part that saves you from debugging phantom differences at 2 AM.

When you need this (and when you don’t)

Two conditions:

  1. You use more than one AI coding tool
  2. You’ve accumulated a non-trivial set of assets - skills, agents, MCP servers

Typical scenario: Claude Code as your main tool, Cursor for IDE integration, Codex CLI for a second opinion. 50+ skills, 10+ MCP servers. Without a single map, you’re doing manual sync and losing track. HCP removes that manual work.

If you only use one tool, HCP will show you a nice asset map, but you won’t need the cross-provider stuff. It scales with your chaos.

Beta limitations: the Projects, Servers, Bundles, and Policies sections are hidden in the UI while being finalized. Windows support hasn’t been tested. Symlinks on Windows work but may require Developer Mode.

Installation

macOS app - DMG on GitHub Releases. Requires Node.js 18+.

CLI:

# One-time run
npx harness-control-plane

# Global install
npm install -g harness-control-plane
hcp

The project is in beta (v0.1.0). BSL 2.0 license - free to use, auto-converts to MIT in 2030.

GitHub: github.com/spyrae/harness-control-plane npm: npmjs.com/package/harness-control-plane


Need help managing AI developer tooling? I help startups build AI products and automate processes — belov.works.

Frequently Asked Questions

What is Harness Control Plane?

Harness Control Plane is an open-source dashboard that auto-discovers all AI developer assets (skills, agents, MCP servers, rules) across 7 tools (Claude Code, Codex, Gemini, Cursor, Windsurf, Copilot, Continue.dev) and lets you manage them from a single interface.

How does HCP sync assets between tools?

Via file symlinks. When connecting an asset from Claude Code to Codex CLI, HCP creates a symlink - not a copy. Changes to the original are instantly visible in all connected tools.

Can I use HCP on a remote server?

Yes. HCP runs in headless mode (hcp --headless -p 3000), and you access the UI through an SSH tunnel.

Is HCP free?

Yes. BSL 2.0 license - free to use, modify, and self-host. The only restriction: you can't sell it as a competing product. The license automatically converts to MIT in 2030.