Skip to main content

Crate harness_locate

Crate harness_locate 

Source
Expand description

§harness-locate

Crates.io Documentation License: MIT

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

HarnessSkillsCommandsMCPRulesAgents
Claude CodeYesYesYesYesYes
OpenCodeYesYesYesYesYes
GooseYesNoYesYesNo
AMP CodeYesYesYesYesNo
Copilot CLIYesNoYesYesYes
CrushYesNoYesYesNo

§Directory Naming Conventions

Different harnesses use different directory names. Use HarnessKind::directory_names() to query programmatically:

ResourceOpenCodeClaude CodeGooseAMP CodeCopilot CLICrush
Skillsskill/skills/skills/skills/skills/skills/
Commandscommand/commands/-commands/--
Agentsagent/agents/--agents/-
Pluginsplugin/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 location
  • exists - Whether directory exists
  • structure - Flat or Nested layout
  • file_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 path
  • key_path - JSON pointer to relevant section
  • format - JSON, YAML, etc.

§License

MIT

§Modules

  • detection - Binary detection utilities
  • error - Error types
  • harness - Harness discovery and path resolution
  • mcp - MCP server type definitions
  • types - Core type definitions
  • skill - Skill file parsing utilities
  • validation - MCP server validation utilities

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.