Harnyard
A unified launcher for AI coding agent harnesses.
Start Claude Code, Copilot CLI, Kiro CLI, or Pi from a single command -- with shared config under .claude/.
Why
AI coding tools are converging on the same concepts: skills, plugins, MCP servers, hooks, and project context files. But each tool looks for config in different places and uses slightly different formats. Harnyard manages the translation layer so you can maintain one source of truth and launch any harness.
Supported Harnesses
| Harness | Command | Config Dir | Status |
|---|---|---|---|
| Claude Code | claude |
.claude/ |
Canonical |
| Copilot CLI | copilot-cli |
.claude/ |
Native support |
| Kiro CLI | kiro |
.kiro/ |
Symlink from .claude/ |
| Pi | pi |
.pi/ |
Symlink from .claude/ |
Quick Start
# Install
pip install harnyard # or: pipx install harnyard
# Run without installing
uvx harnyard list
# Start a harness in the current project
hy claude # Start Claude Code
hy copilot # Start Copilot CLI
hy kiro # Start Kiro CLI
hy pi # Start Pi Coding Agent
# Setup symlinks for a harness
hy setup kiro # Create .kiro/ symlinks pointing to .claude/
hy setup pi # Create .pi/ symlinks pointing to .claude/
hy setup --all # Setup all harnesses
# Show what each harness sees
hy status # Show config mapping for all harnesses
How It Works
- Canonical config: All your skills, plugins, agents, and context live under
.claude/ - Harness profiles: Harnyard knows where each tool looks for config
- Symlink bridge:
hy setup <harness>creates symlinks so each tool finds what it needs - Launch:
hy <harness>starts the tool with the right flags and environment
Config Mapping
.claude/ # Canonical (Claude Code + Copilot CLI read natively)
├── CLAUDE.md # Project context
├── settings.json # Hooks, permissions
├── skills/ # Skills (SKILL.md format)
├── agents/ # Agent definitions
└── plugins/ # Plugin manifests
.kiro/ → symlinks # Created by: hy setup kiro
├── steering.md → ../.claude/CLAUDE.md
├── skills/ → ../.claude/skills/
└── powers/ # Converted from .claude/plugins/
.pi/ → symlinks # Created by: hy setup pi
├── agent/extensions/ → ../.claude/plugins/
└── mcp.json → ../.claude/mcp.json
Harness Profiles
Each harness has a profile in profiles/ that defines:
- binary: Command to run (e.g.,
claude,kiro) - config_dir: Where it looks for config (e.g.,
.kiro/) - context_file: Project context filename (e.g.,
steering.md) - skills_dir: Where it looks for skills
- mcp_config: MCP server configuration file
- setup: Symlinks and conversions needed
Philosophy
.claude/is the source of truth -- other harness configs are derived- Non-destructive --
hy setuponly creates symlinks, never modifies.claude/ - Optional -- each harness still works standalone if you prefer manual config
- Open source -- contributions welcome for new harnesses
Mascot
Dolly the sheep. Because all the harnesses are clones of the same concepts.
License
MIT
Metadata
Release files for harnyard 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| harnyard-0.1.0.tar.gz | 20.3 kB | Without provenance | Details for harnyard-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| harnyard-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for harnyard-0.1.0-py3-none-any.whl |
Total release size: 32.7 kB
Release files / harnyard-0.1.0.tar.gz
| Download URL | harnyard-0.1.0.tar.gz |
|---|---|
| Size | 20.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f1fa87c891f360b8239ca5de74d41888f96b21ba194b22e38d18626da6bbfd51
|
|
BLAKE2b-256 checksum How to use checksums |
b80d6ec64246ea41a5de96862a4b00ff956926392647ccc8821ca9b91d98c3b7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / harnyard-0.1.0-py3-none-any.whl
| Download URL | harnyard-0.1.0-py3-none-any.whl |
|---|---|
| Size | 12.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c0e28b7fc0b7938497b80fef4983d9e58d25cdde83008a80805e763f0db32627
|
|
BLAKE2b-256 checksum How to use checksums |
3ed84f5e3eee8ae521cf02fcd0f4e9c6c0475c32ff19eb7054b1d53c842db7c2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for harnyard 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.