Expand description
§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 harness_locate::{Harness, HarnessKind};
// Check all installed harnesses
for harness in Harness::installed()? {
println!("{} is installed", harness.kind());
}§Get Configuration Paths
use harness_locate::{Harness, HarnessKind, Scope};
let harness = Harness::locate(HarnessKind::ClaudeCode)?;
let config_dir = harness.config(&Scope::Global)?;
println!("Config at: {}", config_dir.display());§MCP Server Configuration
use harness_locate::{Harness, HarnessKind};
use harness_locate::mcp::{McpServer, StdioMcpServer};
let server = McpServer::Stdio(StdioMcpServer {
command: "npx".to_string(),
args: vec!["-y".to_string(), "@modelcontextprotocol/server-filesystem".to_string()],
env: Default::default(),
cwd: None,
enabled: true,
timeout_ms: None,
});
// Check compatibility
let harness = Harness::new(HarnessKind::OpenCode);
if harness.supports_mcp_server(&server) {
println!("Server is supported");
}§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.mdCommands use flat structure (files directly in directory):
~/.config/opencode/command/
my-command.md
another-command.mdThis 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
§Modules
Re-exports§
pub use detection::find_binary;pub use error::Error;pub use error::Result;pub use harness::Harness;pub use mcp::HttpMcpServer;pub use mcp::McpCapabilities;pub use mcp::McpServer;pub use mcp::OAuthConfig;pub use mcp::SseMcpServer;pub use mcp::StdioMcpServer;pub use skill::Frontmatter;pub use skill::Skill;pub use skill::parse_frontmatter;pub use skill::parse_skill;pub use types::ConfigResource;pub use types::DirectoryResource;pub use types::DirectoryStructure;pub use types::EnvValue;pub use types::FileFormat;pub use types::HarnessKind;pub use types::InstallationStatus;pub use types::PathType;pub use types::ResourceKind;pub use types::Scope;pub use validation::AgentCapabilities;pub use validation::CODE_AGENT_COLOR_FORMAT;pub use validation::CODE_AGENT_MODE_UNSUPPORTED;pub use validation::CODE_AGENT_PARSE_ERROR;pub use validation::CODE_AGENT_TOOLS_FORMAT;pub use validation::CODE_AGENT_UNSUPPORTED;pub use validation::CODE_SKILL_DESCRIPTION_LENGTH;pub use validation::CODE_SKILL_DESCRIPTION_MISSING;pub use validation::CODE_SKILL_NAME_DIRECTORY_MISMATCH;pub use validation::CODE_SKILL_NAME_FORMAT;pub use validation::CODE_SKILL_NAME_LENGTH;pub use validation::CODE_SKILL_PARSE_ERROR;pub use validation::CODE_SKILL_UNSUPPORTED;pub use validation::ColorFormat;pub use validation::NameFormat;pub use validation::SKILL_DESCRIPTION_MAX_LEN;pub use validation::SKILL_NAME_MAX_LEN;pub use validation::SKILL_NAME_REGEX;pub use validation::Severity;pub use validation::SkillCapabilities;pub use validation::ToolsFormat;pub use validation::ValidationIssue;pub use validation::validate_agent_for_harness;pub use validation::validate_mcp_server;pub use validation::validate_skill_for_harness;
Modules§
- detection
- Binary detection utilities.
- error
- Error types for harness operations.
- harness
- Harness discovery and path resolution.
- mcp
- MCP (Model Context Protocol) server type definitions.
- platform
- Platform-specific path resolution.
- skill
- Skill file parsing utilities.
- types
- Core type definitions for harness path resolution.
- validation
- MCP server configuration validation.