How Agent Reach Handles Skill Installation for OpenClaw, Claude Code, and Generic Agents
Agent Reach automatically deploys its skill definitions to platform-specific directories—including ~/.agents/skills, ~/.openclaw/skills, and ~/.claude/skills—by detecting the host environment and copying localized SKILL.md files via the _install_skill helper in agent_reach/cli.py.
The Panniantong/Agent-Reach repository provides a unified skill installation mechanism that eliminates manual configuration across disparate agent runtimes. By analyzing environment variables and standard directory conventions, the tool ensures that OpenClaw, Claude Code, and generic .agents-compatible platforms can discover and load the latest skill definitions without user intervention.
Platform-Specific Skill Directories and Detection Logic
Agent Reach maintains a hard-coded priority list of three installation targets, iterating through each to determine where the skill should reside:
- Generic
.agents:~/.agents/skills/agent-reach(highest priority) - OpenClaw:
~/.openclaw/skills/agent-reach - Claude Code:
~/.claude/skills/agent-reach
The core logic resides in agent_reach/cli.py, specifically within the private _install_skill function.
Dynamic Path Resolution for OpenClaw
When the OPENCLAW_HOME environment variable is present, Agent Reach resolves the additional path $OPENCLAW_HOME/.openclaw/skills and prepends it to the priority list. This guarantees that non-standard OpenClaw installations take precedence over default locations. If the variable is unset, the function falls back to the standard ~/.openclaw/skills entry.
Fallback Strategy for Clean Environments
If none of the three platform directories exist on the host system, Agent Reach creates the generic ~/.agents/skills path automatically and installs the skill there. This ensures the installation succeeds even when no agent runtime is currently detected.
The Installation Pipeline in agent_reach/cli.py
The _install_skill function orchestrates a four-stage pipeline that handles localization, resource loading, and atomic file operations.
Locale-Aware Skill Selection
Before copying files, the function determines which language variant to install. It invokes _is_english_locale to inspect environment variables in the following order:
AGENT_REACH_LANGLC_ALLLC_MESSAGESLANG
If any of these variables start with "en" or "english", the installer selects SKILL_en.md; otherwise, it defaults to the Chinese-language SKILL.md.
Resource Loading and File Copying
The _read_skill_markdown helper loads skill resources from the package using importlib.resources.files("agent_reach").joinpath("skill"). The _copy_skill_dir function then executes the following operations:
- Creates the target directory if missing
- Safely removes any existing installation (handling symlinks correctly to avoid breaking the filesystem)
- Writes the selected markdown file as
SKILL.mdin the target directory - Copies every
.mdfile from the package'sreferences/subdirectory
For each valid platform directory found, the function emits a status message indicating whether the skill was installed, preserved (already present), or failed.
Installing and Uninstalling Skills
Agent Reach exposes both command-line interfaces and programmatic APIs for managing skill installations.
CLI Installation Commands
# Standard installation flow (runs doctor, then installs skills)
agent-reach install
# Explicit skill installation only
agent-reach skill --install
# Force reinstall (overwrites existing files)
agent-reach skill --install --force
Programmatic API
You can invoke the installation logic directly from Python, though these functions are not part of the public API:
from agent_reach.cli import _install_skill, _uninstall_skill
# Install with automatic locale detection and platform discovery
_install_skill(force=True)
# Remove skill from all detected platform directories
_uninstall_skill()
Uninstallation Process
The _uninstall_skill function mirrors the installation logic, iterating over the same three priority paths (including the optional OPENCLAW_HOME variant). It recursively removes the entire agent-reach directory from each location, safely handling symlinks by unlinking rather than following them. This ensures complete removal without affecting other skill installations.
Summary
- Agent Reach supports three runtime environments: generic
.agents, OpenClaw, and Claude Code, installing skills to their respective~/.{platform}/skills/agent-reachdirectories. - The
_install_skillfunction inagent_reach/cli.pydetects English locales viaAGENT_REACH_LANG,LC_ALL,LC_MESSAGES, andLANGto select betweenSKILL_en.mdandSKILL.md. - OpenClaw installations respect the
OPENCLAW_HOMEenvironment variable, prepending the custom path to the installation priority list. - The
_copy_skill_dirhelper atomically replaces existing installations and copies all files from thereferences/directory. - Uninstallation uses
_uninstall_skillto clean all known locations simultaneously, handling symlinks safely.
Frequently Asked Questions
How does Agent Reach choose between English and Chinese skill definitions?
Agent Reach checks the environment variables AGENT_REACH_LANG, LC_ALL, LC_MESSAGES, and LANG in sequence. If any value starts with "en" or "english", the installer copies SKILL_en.md from the package resources; otherwise, it defaults to the Chinese SKILL.md. This logic is encapsulated in the _is_english_locale helper within agent_reach/cli.py.
Can I install the skill to a custom location outside the standard directories?
No, Agent Reach does not support arbitrary installation paths. The tool relies on a hard-coded priority list of platform-specific directories. However, you can influence OpenClaw's target by setting the OPENCLAW_HOME environment variable, which causes the installer to prepend $OPENCLAW_HOME/.openclaw/skills to the priority list.
What happens if I have multiple agent platforms installed simultaneously?
Agent Reach installs the skill to all detected platform directories concurrently. If your system contains ~/.agents/skills, ~/.openclaw/skills, and ~/.claude/skills, the _install_skill function updates each location with the latest skill files and references during a single invocation.
How do I completely remove the Agent Reach skill from my system?
Run agent-reach skill --uninstall or call _uninstall_skill() programmatically. This iterates over all known directories (including the OPENCLAW_HOME variant if set) and recursively deletes the agent-reach skill folder from each location, effectively removing the skill from OpenClaw, Claude Code, and generic agent runtimes simultaneously.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →