harness-locate
Cross-platform harness path discovery for AI coding CLI tools.
Features
- Detect installed AI coding assistants (Claude Code, OpenCode, Goose, AMP Code, Copilot CLI, Crush)
- Resolve configuration paths (global and project-scoped)
- Unified MCP server configuration types
- Cross-platform support (macOS, Linux, Windows)
Quick Start
Detect Installed Harnesses
use ;
// Check all installed harnesses
for harness in installed?
# Ok::
Get Configuration Paths
use ;
let harness = locate?;
let config_dir = harness.config?;
println!;
# Ok::
MCP Server Configuration
use ;
use ;
let server = Stdio;
// Check compatibility
let harness = new;
if harness.supports_mcp_server
Supported Harnesses
| Harness | Skills | Commands | MCP | Rules | Agents |
|---|---|---|---|---|---|
| Claude Code | Yes | Yes | Yes | Yes | Yes |
| OpenCode | Yes | Yes | Yes | Yes | Yes |
| Goose | Yes | No | Yes | Yes | No |
| AMP Code | Yes | Yes | Yes | Yes | No |
| Copilot CLI | Yes | No | Yes | Yes | Yes |
| Crush | Yes | No | Yes | Yes | No |
Directory Naming Conventions
Different harnesses use different directory names. Use HarnessKind::directory_names() to query programmatically:
| Resource | OpenCode | Claude Code | Goose | AMP Code | Copilot CLI | Crush |
|---|---|---|---|---|---|---|
| Skills | skill/ |
skills/ |
skills/ |
skills/ |
skills/ |
skills/ |
| Commands | command/ |
commands/ |
- | commands/ |
- | - |
| Agents | agent/ |
agents/ |
- | - | agents/ |
- |
| Plugins | plugin/ |
plugins/ |
- | - | - | - |
Note: Rules are stored at the root level, not in a named subdirectory.
Note: OpenCode uses singular names; all others use plural.
Note: Copilot CLI uses .github/ for project-scoped agents and rules.
Resource Types
DirectoryResource
For directory-based resources (skills, commands):
path- Directory locationexists- Whether directory existsstructure- Flat or Nested layoutfile_format- Expected file format
Directory Structure Patterns
Skills use nested structure (one subdirectory per skill):
~/.config/opencode/skill/
my-skill/
SKILL.md
Commands use flat structure (files directly in directory):
~/.config/opencode/command/
my-command.md
another-command.md
This pattern applies across all harnesses that support the resource type.
ConfigResource
For file-based configuration (MCP):
file- Config file pathkey_path- JSON pointer to relevant sectionformat- JSON, YAML, etc.
License
MIT